From 5ff67c40668322f918333ace400204810cb3bf8f Mon Sep 17 00:00:00 2001 From: lx Date: Sun, 2 Aug 2026 17:55:21 +0000 Subject: [PATCH] add website --- .gitignore | 12 + README.md | 145 + app/__init__.py | 470 ++ app/build_version.py | 1 + app/enums/AssetType.py | 70 + app/enums/BanType.py | 10 + app/enums/ChatStyle.py | 6 + app/enums/CryptomusPaymentStatus.py | 17 + app/enums/GiftcardType.py | 8 + app/enums/LimitedItemTransferMethod.py | 7 + app/enums/MembershipType.py | 7 + app/enums/PlaceRigChoice.py | 6 + app/enums/PlaceYear.py | 17 + app/enums/TradeStatus.py | 8 + app/enums/TransactionType.py | 9 + app/extensions.py | 712 +++ app/files/2012Studio.lua | 0 app/files/2014Gameserver.lua | 367 ++ app/files/2014Join.lua | 331 ++ app/files/2016Gameserver.lua | 213 + app/files/2020RCCService.json | 3289 +++++++++++++ app/files/AnimationThumbnail.png | Bin 0 -> 44652 bytes app/files/AudioThumbnail.png | Bin 0 -> 42139 bytes app/files/Baseplate.rbxlx | 415 ++ app/files/Client18Setting.json | 1769 +++++++ app/files/ClientAppSettings.json | 1 + app/files/CoreGui/107893730 | 1107 +++++ app/files/CoreGui/152908679 | 264 + app/files/CoreGui/153556783 | 564 +++ app/files/CoreGui/153556822 | 247 + app/files/CoreGui/157877000 | 1038 ++++ app/files/CoreGui/158948138 | 175 + app/files/CoreGui/35914081 | 290 ++ app/files/CoreGui/35914620 | 70 + app/files/CoreGui/36040464 | 35 + app/files/CoreGui/36040483 | 36 + app/files/CoreGui/36040495 | 36 + app/files/CoreGui/36051740 | 707 +++ app/files/CoreGui/36868950 | 109 + app/files/CoreGui/37801172 | 115 + app/files/CoreGui/37801173 | 74 + app/files/CoreGui/39250920 | 560 +++ app/files/CoreGui/45284430 | 3844 +++++++++++++++ app/files/CoreGui/45374389 | 23 + app/files/CoreGui/46295863 | 2153 +++++++++ app/files/CoreGui/46295864 | 2098 ++++++++ app/files/CoreGui/48488235 | 3074 ++++++++++++ app/files/CoreGui/48488236 | 2425 ++++++++++ app/files/CoreGui/48488398 | 306 ++ app/files/CoreGui/48488451 | 72 + app/files/CoreGui/53878047 | 874 ++++ app/files/CoreGui/53878048 | 790 +++ app/files/CoreGui/53878053 | 968 ++++ app/files/CoreGui/53878057 | 1098 +++++ app/files/CoreGui/53878058 | 883 ++++ app/files/CoreGui/59002209 | 1 + app/files/CoreGui/59431535 | 204 + app/files/CoreGui/60595411 | 1115 +++++ app/files/CoreGui/60595695 | 26 + app/files/CoreGui/60595696 | 26 + app/files/CoreGui/64164692 | 146 + app/files/CoreGui/73157242 | 2207 +++++++++ app/files/CoreGui/89449008 | 876 ++++ app/files/CoreGui/89449009 | 842 ++++ app/files/CoreGui/89449093 | 443 ++ app/files/CoreGui/89449094 | 360 ++ app/files/CoreGui/97188756 | 1376 ++++++ app/files/CoreGui/97188757 | 1211 +++++ app/files/LuaThumbnail.png | Bin 0 -> 56304 bytes app/files/NoRender.png | Bin 0 -> 4621 bytes app/files/Old2014Join.lua | 418 ++ app/files/PCDesktopClient.json | 4256 +++++++++++++++++ app/files/Pants.rbxmx | 13 + app/files/RCCServiceS2kvmA2lVpz4g9qlbDw1.json | 1 + app/files/RCCServicet0OzoN08twUekqhPt2N5.json | 1 + app/files/Shirt.rbxmx | 13 + app/files/ShutdownServer.lua | 37 + app/files/Studio.lua | 27 + app/files/TShirt.rbxmx | 13 + app/files/Visit.lua | 132 + app/models/admin_permissions.py | 16 + app/models/asset.py | 83 + app/models/asset_favorite.py | 13 + app/models/asset_moderation_link.py | 27 + app/models/asset_rap.py | 23 + app/models/asset_thumbnail.py | 36 + app/models/asset_version.py | 35 + app/models/asset_votes.py | 15 + app/models/cryptomus_invoice.py | 52 + app/models/exchange_offer.py | 54 + app/models/fflag_group.py | 35 + app/models/fflag_value.py | 29 + app/models/follow_relationship.py | 20 + app/models/friend_relationship.py | 16 + app/models/friend_request.py | 17 + app/models/game_session_log.py | 36 + app/models/gamepass_link.py | 24 + app/models/gameservers.py | 45 + app/models/giftcard_key.py | 31 + app/models/groups.py | 296 ++ app/models/invite_key.py | 25 + app/models/kofi_transaction.py | 41 + app/models/legacy_data_persistence.py | 31 + app/models/limited_item_transfers.py | 33 + app/models/linked_discord.py | 49 + app/models/login_records.py | 21 + app/models/messages.py | 33 + app/models/moderator_note.py | 36 + app/models/package_asset.py | 13 + app/models/past_usernames.py | 16 + app/models/place.py | 51 + app/models/place_badge.py | 48 + app/models/place_datastore.py | 34 + app/models/place_developer_product.py | 48 + app/models/place_icon.py | 22 + app/models/place_ordered_datastore.py | 33 + app/models/placeserver_players.py | 23 + app/models/placeservers.py | 52 + app/models/pointsservice.py | 15 + app/models/previously_played.py | 16 + app/models/product_receipt.py | 31 + app/models/universe.py | 56 + app/models/user.py | 25 + app/models/user_avatar.py | 43 + app/models/user_avatar_asset.py | 22 + app/models/user_ban.py | 40 + app/models/user_email.py | 19 + app/models/user_hwid_log.py | 18 + app/models/user_membership.py | 24 + app/models/user_thumbnail.py | 24 + app/models/user_trade_items.py | 17 + app/models/user_trades.py | 39 + app/models/user_transactions.py | 51 + app/models/userassets.py | 43 + app/models/usereconomy.py | 16 + app/pages/403.html | 31 + app/pages/404.html | 33 + app/pages/405.html | 31 + app/pages/500.html | 44 + app/pages/__embed__.html | 20 + app/pages/__layout__.html | 185 + app/pages/__layout__.html.1 | 156 + app/pages/about.html | 7 + app/pages/admin/admin.py | 3309 +++++++++++++ app/pages/admin/assetcopier.html | 39 + app/pages/admin/assetmoderation.html | 119 + app/pages/admin/bundlecopier.html | 39 + app/pages/admin/createasset.html | 59 + app/pages/admin/creategiftcard.html | 67 + app/pages/admin/createuser.html | 43 + app/pages/admin/fflagsettings/index.html | 38 + app/pages/admin/fflagsettings/view.html | 81 + app/pages/admin/gameservers/create.html | 61 + app/pages/admin/gameservers/delete.html | 21 + app/pages/admin/gameservers/index.html | 44 + .../admin/gameservers/refresh_accesskey.html | 21 + app/pages/admin/gameservers/view.html | 81 + app/pages/admin/generateinvitekeys.html | 49 + app/pages/admin/index.html | 48 + app/pages/admin/insertitemrelasepool.html | 101 + app/pages/admin/itemreleasepool.html | 56 + app/pages/admin/lottery/index.html | 64 + app/pages/admin/manageassets.html | 142 + app/pages/admin/managecurrency.html | 126 + app/pages/admin/moderateUGC.html | 109 + app/pages/admin/permissionsdefinition.py | 151 + app/pages/admin/updateassetfile.html | 42 + app/pages/admin/usermanage/ban.html | 86 + app/pages/admin/usermanage/banhistory.html | 69 + app/pages/admin/usermanage/gamesessions.html | 65 + app/pages/admin/usermanage/gdprdelete.html | 60 + app/pages/admin/usermanage/invitekeys.html | 74 + app/pages/admin/usermanage/loginhistory.html | 105 + .../admin/usermanage/manage-admin-perms.html | 208 + .../admin/usermanage/managecurrency.html | 118 + .../admin/usermanage/manageinventory.html | 78 + .../admin/usermanage/moderatornotes.html | 61 + app/pages/admin/usermanage/search.html | 82 + app/pages/admin/usermanage/transactions.html | 113 + app/pages/admin/usermanage/view.html | 214 + app/pages/admin/websitefeatures.html | 43 + app/pages/admin/websitefeaturesdefinition.py | 83 + app/pages/admin/websitewidemsg.html | 43 + app/pages/audiomigrator/audiomigrator.py | 104 + app/pages/audiomigrator/index.html | 51 + app/pages/avatar/avatar.html | 148 + app/pages/avatar/avatar.html1 | 124 + app/pages/avatar/avatar.py | 277 ++ app/pages/catalog/asset.html | 181 + app/pages/catalog/badges.html | 50 + app/pages/catalog/catalog.py | 875 ++++ app/pages/catalog/catalogtypes.py | 76 + app/pages/catalog/index.html | 182 + app/pages/catalog/library.html | 183 + app/pages/catalog/resell.html | 65 + app/pages/clientpages/clientpages.py | 11 + app/pages/clientpages/screenshot.html | 17 + app/pages/clothingmigrator/index.html | 38 + app/pages/clothingmigrator/migrator.py | 61 + app/pages/cryptomus/dashboard.html | 74 + app/pages/cryptomus/view_payment.html | 63 + app/pages/currencyexchange/controller.py | 379 ++ app/pages/currencyexchange/create.html | 165 + app/pages/currencyexchange/index.html | 111 + app/pages/currencyexchange/view.html | 75 + app/pages/develop/develop.py | 2107 ++++++++ app/pages/develop/edit.html | 79 + app/pages/develop/games/access.html | 12 + app/pages/develop/games/manage-template.html | 66 + app/pages/develop/games/manage.html | 52 + app/pages/develop/games/upload-icon.html | 25 + app/pages/develop/games/upload-thumbnail.html | 25 + app/pages/develop/games/upload-version.html | 12 + app/pages/develop/games/version-history.html | 25 + app/pages/develop/subpages/animation.html | 32 + app/pages/develop/subpages/games.html | 25 + app/pages/develop/subpages/image.html | 32 + app/pages/develop/subpages/pants.html | 32 + app/pages/develop/subpages/shirts.html | 32 + app/pages/develop/subpages/sound.html | 32 + app/pages/develop/subpages/tshirt.html | 31 + app/pages/develop/template.html | 55 + app/pages/develop/universes/access.html | 24 + app/pages/develop/universes/badges.html | 30 + app/pages/develop/universes/create-badge.html | 27 + .../develop/universes/create-gamepass.html | 27 + app/pages/develop/universes/create-place.html | 15 + .../develop/universes/create-product.html | 27 + .../develop/universes/developerproducts.html | 29 + app/pages/develop/universes/edit-badge.html | 35 + .../develop/universes/edit-gamepass.html | 53 + app/pages/develop/universes/edit-product.html | 53 + app/pages/develop/universes/gamepasses.html | 29 + .../develop/universes/manage-template.html | 64 + app/pages/develop/universes/manage.html | 21 + app/pages/develop/universes/places.html | 27 + app/pages/discourse/leaving-syntax.html | 21 + app/pages/discourse/sso-confirm.html | 32 + app/pages/downloads.html | 55 + app/pages/drivers.html | 14 + app/pages/fluttershy.html | 8 + app/pages/games/games.py | 306 ++ app/pages/games/genre.html | 44 + app/pages/games/index.html | 200 + app/pages/games/index.html1 | 161 + app/pages/games/view.html | 380 ++ app/pages/games/view.html1 | 363 ++ app/pages/giftcardredeem/index.html | 44 + app/pages/giftcardredeem/redeem.py | 136 + .../groups/admin_subpage/create_role.html | 29 + app/pages/groups/admin_subpage/groupinfo.html | 42 + .../groups/admin_subpage/join_requests.html | 52 + app/pages/groups/admin_subpage/members.html | 116 + app/pages/groups/admin_subpage/payout.html | 42 + app/pages/groups/admin_subpage/roles.html | 198 + app/pages/groups/admin_subpage/settings.html | 60 + app/pages/groups/admin_template.html | 122 + app/pages/groups/create.html | 59 + app/pages/groups/groupspage.py | 1278 +++++ app/pages/groups/search.html | 58 + app/pages/groups/view.html | 204 + app/pages/home/home.html | 112 + app/pages/home/home.html1 | 97 + app/pages/home/home.py | 95 + app/pages/invitekeys/handler.py | 68 + app/pages/invitekeys/index.html | 77 + app/pages/link_discord.html | 18 + app/pages/link_discord/link_discord.py | 106 + app/pages/login/login.html | 43 + app/pages/login/login.py | 477 ++ app/pages/login/reset_password.html | 71 + app/pages/login/send_reset.html | 71 + app/pages/login/totpvalidate.html | 38 + app/pages/maintenance/maintenance.html | 221 + app/pages/maintenance/maintenance.py | 32 + app/pages/membership/index.html | 77 + app/pages/membership/membership.py | 19 + app/pages/membership/payment_methods.html | 153 + app/pages/messages/index.html | 51 + app/pages/messages/index.html1 | 42 + app/pages/messages/messages.py | 148 + app/pages/messages/new.html | 43 + app/pages/messages/view.html | 39 + app/pages/notapproved/banpage.html | 33 + app/pages/notapproved/notapproved.py | 92 + app/pages/privacy.html | 95 + app/pages/profiles/followers.html | 61 + app/pages/profiles/following.html | 61 + app/pages/profiles/friends.html | 71 + app/pages/profiles/inventory.html | 180 + app/pages/profiles/profile.html | 254 + app/pages/profiles/profile.html1 | 248 + app/pages/profiles/profile.py | 536 +++ app/pages/profiles/requests.html | 79 + app/pages/settings/changeemail.html | 53 + app/pages/settings/changepassword.html | 52 + app/pages/settings/changeusername.html | 35 + app/pages/settings/emailverify_success.html | 18 + app/pages/settings/enableTOTP.html | 34 + app/pages/settings/settings.html | 60 + app/pages/settings/settings.py | 558 +++ app/pages/signup/signup.html | 45 + app/pages/signup/signup.py | 263 + app/pages/static.py | 39 + app/pages/studio/comingsoon.html | 1 + app/pages/studio/myPlaces.html | 94 + app/pages/studio/studiopages.py | 21 + app/pages/swaggerdocs.html | 19 + app/pages/terms.html | 94 + app/pages/trades/create.html | 134 + app/pages/trades/index.html | 62 + app/pages/trades/trades.py | 550 +++ app/pages/trades/view.html | 130 + app/pages/transactions/transactions.html | 99 + app/pages/transactions/transactions.py | 86 + app/pages/users/index.html | 67 + app/pages/users/users_page.py | 37 + app/routes/accountsettingsapi.py | 70 + app/routes/asset.py | 1360 ++++++ app/routes/authentication.py | 216 + app/routes/avatarapi.py | 317 ++ app/routes/badgesapi.py | 343 ++ app/routes/bootstrapper.py | 7 + app/routes/clientinfo.py | 771 +++ app/routes/cryptomus_handler.py | 383 ++ app/routes/datastoreservice.py | 277 ++ app/routes/discord_internal.py | 305 ++ app/routes/discourse_sso.py | 96 + app/routes/fflagssettings.py | 147 + app/routes/friendapi.py | 311 ++ app/routes/gamejoin.py | 767 +++ app/routes/gamesapi.py | 504 ++ app/routes/gametransactions.py | 89 + app/routes/image.py | 652 +++ app/routes/inventoryapi.py | 181 + app/routes/jobreporthandler.py | 812 ++++ app/routes/kofihandler.py | 124 + app/routes/legacydatapersistence.py | 125 + app/routes/luawebservice.py | 577 +++ app/routes/marketplace.py | 408 ++ app/routes/mobile.py | 28 + app/routes/pointsservice.py | 52 + app/routes/presence.py | 17 + app/routes/presenceapi.py | 105 + app/routes/prometheus.py | 100 + app/routes/publicapi.py | 525 ++ app/routes/rate.py | 131 + app/routes/rbxapi.py | 186 + app/routes/rolimons.py | 307 ++ app/routes/sets.py | 51 + app/routes/teleportservice.py | 139 + app/routes/thumbnailer.py | 670 +++ app/routes/usersapi.py | 219 + app/services/economy.py | 270 ++ app/services/gameserver_comm.py | 117 + app/services/groups.py | 690 +++ app/services/invitekeys.py | 70 + app/services/proxydetection.py | 82 + app/services/user_relationships/followings.py | 216 + app/services/user_relationships/friends.py | 200 + app/shell_commands.py | 522 ++ app/static/avatarrules.json | 553 +++ app/static/css/admin.css | 42 + app/static/css/avatar.css | 95 + app/static/css/avatar.css1 | 157 + app/static/css/bootstrapv3.min.css | 6 + app/static/css/bootstrapv3.min.css.bak | 6 + app/static/css/catalog.css | 5 + app/static/css/develop.css | 6 + app/static/css/gameview.css | 132 + app/static/css/gameview.css1 | 323 ++ app/static/css/global.css | 522 ++ app/static/css/global.css1 | 1126 +++++ app/static/css/home.css | 33 + app/static/css/home.css1 | 32 + app/static/css/icons.css | 1549 ++++++ app/static/css/icons.css1 | 1549 ++++++ app/static/css/login.css | 71 + app/static/css/message.cs | 5 + app/static/css/message.css1 | 77 + app/static/css/profile.css | 46 + app/static/css/profile.css1 | 91 + app/static/css/setting.css1 | 35 + app/static/css/settings.css | 12 + app/static/css/signup.css | 81 + app/static/css/terms.css | 15 + app/static/cssold/admin.css | 48 + app/static/cssold/avatar.css | 100 + app/static/cssold/bootstrapv3.min.css | 6 + app/static/cssold/catalog.css | 11 + app/static/cssold/develop.css | 15 + app/static/cssold/gameview.css | 135 + app/static/cssold/global.css | 423 ++ app/static/cssold/header.css | 360 ++ app/static/cssold/home.css | 37 + app/static/cssold/icons.css | 1549 ++++++ app/static/cssold/login.css | 77 + app/static/cssold/message.css | 11 + app/static/cssold/profile.css | 52 + app/static/cssold/settings.css | 18 + app/static/cssold/signup.css | 81 + app/static/cssold/terms.css | 15 + app/static/img/BC.png | Bin 0 -> 1166 bytes app/static/img/ChristmasHat.png | Bin 0 -> 3424 bytes app/static/img/ContentDeleted.png | Bin 0 -> 4475 bytes app/static/img/LoginImage.png | Bin 0 -> 409080 bytes app/static/img/LoginImage2.png | Bin 0 -> 435235 bytes app/static/img/LuaThumbnail.png | Bin 0 -> 56304 bytes app/static/img/NBC.png | Bin 0 -> 1023 bytes app/static/img/OBC.png | Bin 0 -> 1155 bytes app/static/img/SignupImage.png | Bin 0 -> 717070 bytes app/static/img/Style/bc.svg | 204 + app/static/img/Style/icon_labels.svg | 300 ++ app/static/img/SyntaxLogo.png | Bin 0 -> 43551 bytes app/static/img/TBC.png | Bin 0 -> 1207 bytes app/static/img/TemplatePants.png | Bin 0 -> 64099 bytes app/static/img/TemplateShirt.png | Bin 0 -> 66301 bytes app/static/img/VortexiLogo.png | Bin 0 -> 66874 bytes app/static/img/branded.svg | 297 ++ app/static/img/creator.png | Bin 0 -> 13658 bytes app/static/img/creator2.png | Bin 0 -> 27094 bytes app/static/img/games.svg | 482 ++ app/static/img/linux-penguin.svg | 7 + app/static/img/placeholder.png | Bin 0 -> 6289 bytes app/static/img/revsim.ico | Bin 0 -> 4158 bytes app/static/img/revsim.png | Bin 0 -> 224138 bytes app/static/img/syntax.ico | Bin 0 -> 117136 bytes app/static/img/thumbs.svg | 13 + app/static/img/thumbsup.png | Bin 0 -> 4447 bytes app/static/img/verify.png | Bin 0 -> 2791 bytes app/static/img/vortex.ico | Bin 0 -> 4286 bytes app/static/js/AvatarEditor.js | 1079 +++++ app/static/js/assetrate.js | 216 + app/static/js/bootstrapv3.min.js | 7 + app/static/js/catalog.js | 153 + app/static/js/global.js | 103 + app/static/js/groupMembers.js | 110 + app/static/js/newTrade.js | 369 ++ app/static/js/presence.js | 5 + app/static/js/theme.js | 20 + app/static/js/twemoji.js | 15 + app/static/svg/navigation.svg | 484 ++ app/static/swagger/favicon-16x16.png | Bin 0 -> 665 bytes app/static/swagger/favicon-32x32.png | Bin 0 -> 628 bytes app/static/swagger/index.css | 16 + app/static/swagger/oauth2-redirect.html | 79 + app/static/swagger/swagger-docs.json | 1608 +++++++ app/static/swagger/swagger-initializer.js | 20 + app/static/swagger/swagger-ui-bundle.js | 3 + app/static/swagger/swagger-ui-bundle.js.map | 1 + .../swagger/swagger-ui-es-bundle-core.js | 3 + .../swagger/swagger-ui-es-bundle-core.js.map | 1 + app/static/swagger/swagger-ui-es-bundle.js | 3 + .../swagger/swagger-ui-es-bundle.js.map | 1 + .../swagger/swagger-ui-standalone-preset.js | 3 + .../swagger-ui-standalone-preset.js.map | 1 + app/static/swagger/swagger-ui.css | 3 + app/static/swagger/swagger-ui.css.map | 1 + app/static/swagger/swagger-ui.js | 2 + app/static/swagger/swagger-ui.js.map | 1 + app/util/RBXMesh.py | 991 ++++ app/util/announcement.py | 113 + app/util/assetvalidation.py | 146 + app/util/assetversion.py | 62 + app/util/auth.py | 323 ++ app/util/badwords.py | 3536 ++++++++++++++ app/util/discord.py | 122 + app/util/embeds.py | 23 + app/util/filterconfig.py | 5 + app/util/friends.py | 80 + app/util/membership.py | 167 + app/util/placeinfo.py | 74 + app/util/redirect.py | 20 + app/util/redislock.py | 24 + app/util/s3helper.py | 178 + app/util/signscript.py | 57 + app/util/textfilter.py | 125 + app/util/transactions.py | 87 + app/util/turnstile.py | 25 + app/util/websiteFeatures.py | 18 + debug.sh | 2 + keys/public_key16.blob | 1 + keys/public_key18.blob | 1 + logs/KEEPME | 0 requirements.txt | 22 + start.sh | 17 + tools/execute_sql.py | 41 + tools/generate_new_keys.py | 47 + 488 files changed, 106390 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/build_version.py create mode 100644 app/enums/AssetType.py create mode 100644 app/enums/BanType.py create mode 100644 app/enums/ChatStyle.py create mode 100644 app/enums/CryptomusPaymentStatus.py create mode 100644 app/enums/GiftcardType.py create mode 100644 app/enums/LimitedItemTransferMethod.py create mode 100644 app/enums/MembershipType.py create mode 100644 app/enums/PlaceRigChoice.py create mode 100644 app/enums/PlaceYear.py create mode 100644 app/enums/TradeStatus.py create mode 100644 app/enums/TransactionType.py create mode 100644 app/extensions.py create mode 100644 app/files/2012Studio.lua create mode 100644 app/files/2014Gameserver.lua create mode 100644 app/files/2014Join.lua create mode 100644 app/files/2016Gameserver.lua create mode 100644 app/files/2020RCCService.json create mode 100644 app/files/AnimationThumbnail.png create mode 100644 app/files/AudioThumbnail.png create mode 100644 app/files/Baseplate.rbxlx create mode 100644 app/files/Client18Setting.json create mode 100644 app/files/ClientAppSettings.json create mode 100644 app/files/CoreGui/107893730 create mode 100644 app/files/CoreGui/152908679 create mode 100644 app/files/CoreGui/153556783 create mode 100644 app/files/CoreGui/153556822 create mode 100644 app/files/CoreGui/157877000 create mode 100644 app/files/CoreGui/158948138 create mode 100644 app/files/CoreGui/35914081 create mode 100644 app/files/CoreGui/35914620 create mode 100644 app/files/CoreGui/36040464 create mode 100644 app/files/CoreGui/36040483 create mode 100644 app/files/CoreGui/36040495 create mode 100644 app/files/CoreGui/36051740 create mode 100644 app/files/CoreGui/36868950 create mode 100644 app/files/CoreGui/37801172 create mode 100644 app/files/CoreGui/37801173 create mode 100644 app/files/CoreGui/39250920 create mode 100644 app/files/CoreGui/45284430 create mode 100644 app/files/CoreGui/45374389 create mode 100644 app/files/CoreGui/46295863 create mode 100644 app/files/CoreGui/46295864 create mode 100644 app/files/CoreGui/48488235 create mode 100644 app/files/CoreGui/48488236 create mode 100644 app/files/CoreGui/48488398 create mode 100644 app/files/CoreGui/48488451 create mode 100644 app/files/CoreGui/53878047 create mode 100644 app/files/CoreGui/53878048 create mode 100644 app/files/CoreGui/53878053 create mode 100644 app/files/CoreGui/53878057 create mode 100644 app/files/CoreGui/53878058 create mode 100644 app/files/CoreGui/59002209 create mode 100644 app/files/CoreGui/59431535 create mode 100644 app/files/CoreGui/60595411 create mode 100644 app/files/CoreGui/60595695 create mode 100644 app/files/CoreGui/60595696 create mode 100644 app/files/CoreGui/64164692 create mode 100644 app/files/CoreGui/73157242 create mode 100644 app/files/CoreGui/89449008 create mode 100644 app/files/CoreGui/89449009 create mode 100644 app/files/CoreGui/89449093 create mode 100644 app/files/CoreGui/89449094 create mode 100644 app/files/CoreGui/97188756 create mode 100644 app/files/CoreGui/97188757 create mode 100644 app/files/LuaThumbnail.png create mode 100644 app/files/NoRender.png create mode 100644 app/files/Old2014Join.lua create mode 100644 app/files/PCDesktopClient.json create mode 100644 app/files/Pants.rbxmx create mode 100644 app/files/RCCServiceS2kvmA2lVpz4g9qlbDw1.json create mode 100644 app/files/RCCServicet0OzoN08twUekqhPt2N5.json create mode 100644 app/files/Shirt.rbxmx create mode 100644 app/files/ShutdownServer.lua create mode 100644 app/files/Studio.lua create mode 100644 app/files/TShirt.rbxmx create mode 100644 app/files/Visit.lua create mode 100644 app/models/admin_permissions.py create mode 100644 app/models/asset.py create mode 100644 app/models/asset_favorite.py create mode 100644 app/models/asset_moderation_link.py create mode 100644 app/models/asset_rap.py create mode 100644 app/models/asset_thumbnail.py create mode 100644 app/models/asset_version.py create mode 100644 app/models/asset_votes.py create mode 100644 app/models/cryptomus_invoice.py create mode 100644 app/models/exchange_offer.py create mode 100644 app/models/fflag_group.py create mode 100644 app/models/fflag_value.py create mode 100644 app/models/follow_relationship.py create mode 100644 app/models/friend_relationship.py create mode 100644 app/models/friend_request.py create mode 100644 app/models/game_session_log.py create mode 100644 app/models/gamepass_link.py create mode 100644 app/models/gameservers.py create mode 100644 app/models/giftcard_key.py create mode 100644 app/models/groups.py create mode 100644 app/models/invite_key.py create mode 100644 app/models/kofi_transaction.py create mode 100644 app/models/legacy_data_persistence.py create mode 100644 app/models/limited_item_transfers.py create mode 100644 app/models/linked_discord.py create mode 100644 app/models/login_records.py create mode 100644 app/models/messages.py create mode 100644 app/models/moderator_note.py create mode 100644 app/models/package_asset.py create mode 100644 app/models/past_usernames.py create mode 100644 app/models/place.py create mode 100644 app/models/place_badge.py create mode 100644 app/models/place_datastore.py create mode 100644 app/models/place_developer_product.py create mode 100644 app/models/place_icon.py create mode 100644 app/models/place_ordered_datastore.py create mode 100644 app/models/placeserver_players.py create mode 100644 app/models/placeservers.py create mode 100644 app/models/pointsservice.py create mode 100644 app/models/previously_played.py create mode 100644 app/models/product_receipt.py create mode 100644 app/models/universe.py create mode 100644 app/models/user.py create mode 100644 app/models/user_avatar.py create mode 100644 app/models/user_avatar_asset.py create mode 100644 app/models/user_ban.py create mode 100644 app/models/user_email.py create mode 100644 app/models/user_hwid_log.py create mode 100644 app/models/user_membership.py create mode 100644 app/models/user_thumbnail.py create mode 100644 app/models/user_trade_items.py create mode 100644 app/models/user_trades.py create mode 100644 app/models/user_transactions.py create mode 100644 app/models/userassets.py create mode 100644 app/models/usereconomy.py create mode 100644 app/pages/403.html create mode 100644 app/pages/404.html create mode 100644 app/pages/405.html create mode 100644 app/pages/500.html create mode 100644 app/pages/__embed__.html create mode 100644 app/pages/__layout__.html create mode 100644 app/pages/__layout__.html.1 create mode 100644 app/pages/about.html create mode 100644 app/pages/admin/admin.py create mode 100644 app/pages/admin/assetcopier.html create mode 100644 app/pages/admin/assetmoderation.html create mode 100644 app/pages/admin/bundlecopier.html create mode 100644 app/pages/admin/createasset.html create mode 100644 app/pages/admin/creategiftcard.html create mode 100644 app/pages/admin/createuser.html create mode 100644 app/pages/admin/fflagsettings/index.html create mode 100644 app/pages/admin/fflagsettings/view.html create mode 100644 app/pages/admin/gameservers/create.html create mode 100644 app/pages/admin/gameservers/delete.html create mode 100644 app/pages/admin/gameservers/index.html create mode 100644 app/pages/admin/gameservers/refresh_accesskey.html create mode 100644 app/pages/admin/gameservers/view.html create mode 100644 app/pages/admin/generateinvitekeys.html create mode 100644 app/pages/admin/index.html create mode 100644 app/pages/admin/insertitemrelasepool.html create mode 100644 app/pages/admin/itemreleasepool.html create mode 100644 app/pages/admin/lottery/index.html create mode 100644 app/pages/admin/manageassets.html create mode 100644 app/pages/admin/managecurrency.html create mode 100644 app/pages/admin/moderateUGC.html create mode 100644 app/pages/admin/permissionsdefinition.py create mode 100644 app/pages/admin/updateassetfile.html create mode 100644 app/pages/admin/usermanage/ban.html create mode 100644 app/pages/admin/usermanage/banhistory.html create mode 100644 app/pages/admin/usermanage/gamesessions.html create mode 100644 app/pages/admin/usermanage/gdprdelete.html create mode 100644 app/pages/admin/usermanage/invitekeys.html create mode 100644 app/pages/admin/usermanage/loginhistory.html create mode 100644 app/pages/admin/usermanage/manage-admin-perms.html create mode 100644 app/pages/admin/usermanage/managecurrency.html create mode 100644 app/pages/admin/usermanage/manageinventory.html create mode 100644 app/pages/admin/usermanage/moderatornotes.html create mode 100644 app/pages/admin/usermanage/search.html create mode 100644 app/pages/admin/usermanage/transactions.html create mode 100644 app/pages/admin/usermanage/view.html create mode 100644 app/pages/admin/websitefeatures.html create mode 100644 app/pages/admin/websitefeaturesdefinition.py create mode 100644 app/pages/admin/websitewidemsg.html create mode 100644 app/pages/audiomigrator/audiomigrator.py create mode 100644 app/pages/audiomigrator/index.html create mode 100644 app/pages/avatar/avatar.html create mode 100644 app/pages/avatar/avatar.html1 create mode 100644 app/pages/avatar/avatar.py create mode 100644 app/pages/catalog/asset.html create mode 100644 app/pages/catalog/badges.html create mode 100644 app/pages/catalog/catalog.py create mode 100644 app/pages/catalog/catalogtypes.py create mode 100644 app/pages/catalog/index.html create mode 100644 app/pages/catalog/library.html create mode 100644 app/pages/catalog/resell.html create mode 100644 app/pages/clientpages/clientpages.py create mode 100644 app/pages/clientpages/screenshot.html create mode 100644 app/pages/clothingmigrator/index.html create mode 100644 app/pages/clothingmigrator/migrator.py create mode 100644 app/pages/cryptomus/dashboard.html create mode 100644 app/pages/cryptomus/view_payment.html create mode 100644 app/pages/currencyexchange/controller.py create mode 100644 app/pages/currencyexchange/create.html create mode 100644 app/pages/currencyexchange/index.html create mode 100644 app/pages/currencyexchange/view.html create mode 100644 app/pages/develop/develop.py create mode 100644 app/pages/develop/edit.html create mode 100644 app/pages/develop/games/access.html create mode 100644 app/pages/develop/games/manage-template.html create mode 100644 app/pages/develop/games/manage.html create mode 100644 app/pages/develop/games/upload-icon.html create mode 100644 app/pages/develop/games/upload-thumbnail.html create mode 100644 app/pages/develop/games/upload-version.html create mode 100644 app/pages/develop/games/version-history.html create mode 100644 app/pages/develop/subpages/animation.html create mode 100644 app/pages/develop/subpages/games.html create mode 100644 app/pages/develop/subpages/image.html create mode 100644 app/pages/develop/subpages/pants.html create mode 100644 app/pages/develop/subpages/shirts.html create mode 100644 app/pages/develop/subpages/sound.html create mode 100644 app/pages/develop/subpages/tshirt.html create mode 100644 app/pages/develop/template.html create mode 100644 app/pages/develop/universes/access.html create mode 100644 app/pages/develop/universes/badges.html create mode 100644 app/pages/develop/universes/create-badge.html create mode 100644 app/pages/develop/universes/create-gamepass.html create mode 100644 app/pages/develop/universes/create-place.html create mode 100644 app/pages/develop/universes/create-product.html create mode 100644 app/pages/develop/universes/developerproducts.html create mode 100644 app/pages/develop/universes/edit-badge.html create mode 100644 app/pages/develop/universes/edit-gamepass.html create mode 100644 app/pages/develop/universes/edit-product.html create mode 100644 app/pages/develop/universes/gamepasses.html create mode 100644 app/pages/develop/universes/manage-template.html create mode 100644 app/pages/develop/universes/manage.html create mode 100644 app/pages/develop/universes/places.html create mode 100644 app/pages/discourse/leaving-syntax.html create mode 100644 app/pages/discourse/sso-confirm.html create mode 100644 app/pages/downloads.html create mode 100644 app/pages/drivers.html create mode 100644 app/pages/fluttershy.html create mode 100644 app/pages/games/games.py create mode 100644 app/pages/games/genre.html create mode 100644 app/pages/games/index.html create mode 100644 app/pages/games/index.html1 create mode 100644 app/pages/games/view.html create mode 100644 app/pages/games/view.html1 create mode 100644 app/pages/giftcardredeem/index.html create mode 100644 app/pages/giftcardredeem/redeem.py create mode 100644 app/pages/groups/admin_subpage/create_role.html create mode 100644 app/pages/groups/admin_subpage/groupinfo.html create mode 100644 app/pages/groups/admin_subpage/join_requests.html create mode 100644 app/pages/groups/admin_subpage/members.html create mode 100644 app/pages/groups/admin_subpage/payout.html create mode 100644 app/pages/groups/admin_subpage/roles.html create mode 100644 app/pages/groups/admin_subpage/settings.html create mode 100644 app/pages/groups/admin_template.html create mode 100644 app/pages/groups/create.html create mode 100644 app/pages/groups/groupspage.py create mode 100644 app/pages/groups/search.html create mode 100644 app/pages/groups/view.html create mode 100644 app/pages/home/home.html create mode 100644 app/pages/home/home.html1 create mode 100644 app/pages/home/home.py create mode 100644 app/pages/invitekeys/handler.py create mode 100644 app/pages/invitekeys/index.html create mode 100644 app/pages/link_discord.html create mode 100644 app/pages/link_discord/link_discord.py create mode 100644 app/pages/login/login.html create mode 100644 app/pages/login/login.py create mode 100644 app/pages/login/reset_password.html create mode 100644 app/pages/login/send_reset.html create mode 100644 app/pages/login/totpvalidate.html create mode 100644 app/pages/maintenance/maintenance.html create mode 100644 app/pages/maintenance/maintenance.py create mode 100644 app/pages/membership/index.html create mode 100644 app/pages/membership/membership.py create mode 100644 app/pages/membership/payment_methods.html create mode 100644 app/pages/messages/index.html create mode 100644 app/pages/messages/index.html1 create mode 100644 app/pages/messages/messages.py create mode 100644 app/pages/messages/new.html create mode 100644 app/pages/messages/view.html create mode 100644 app/pages/notapproved/banpage.html create mode 100644 app/pages/notapproved/notapproved.py create mode 100644 app/pages/privacy.html create mode 100644 app/pages/profiles/followers.html create mode 100644 app/pages/profiles/following.html create mode 100644 app/pages/profiles/friends.html create mode 100644 app/pages/profiles/inventory.html create mode 100644 app/pages/profiles/profile.html create mode 100644 app/pages/profiles/profile.html1 create mode 100644 app/pages/profiles/profile.py create mode 100644 app/pages/profiles/requests.html create mode 100644 app/pages/settings/changeemail.html create mode 100644 app/pages/settings/changepassword.html create mode 100644 app/pages/settings/changeusername.html create mode 100644 app/pages/settings/emailverify_success.html create mode 100644 app/pages/settings/enableTOTP.html create mode 100644 app/pages/settings/settings.html create mode 100644 app/pages/settings/settings.py create mode 100644 app/pages/signup/signup.html create mode 100644 app/pages/signup/signup.py create mode 100644 app/pages/static.py create mode 100644 app/pages/studio/comingsoon.html create mode 100644 app/pages/studio/myPlaces.html create mode 100644 app/pages/studio/studiopages.py create mode 100644 app/pages/swaggerdocs.html create mode 100644 app/pages/terms.html create mode 100644 app/pages/trades/create.html create mode 100644 app/pages/trades/index.html create mode 100644 app/pages/trades/trades.py create mode 100644 app/pages/trades/view.html create mode 100644 app/pages/transactions/transactions.html create mode 100644 app/pages/transactions/transactions.py create mode 100644 app/pages/users/index.html create mode 100644 app/pages/users/users_page.py create mode 100644 app/routes/accountsettingsapi.py create mode 100644 app/routes/asset.py create mode 100644 app/routes/authentication.py create mode 100644 app/routes/avatarapi.py create mode 100644 app/routes/badgesapi.py create mode 100644 app/routes/bootstrapper.py create mode 100644 app/routes/clientinfo.py create mode 100644 app/routes/cryptomus_handler.py create mode 100644 app/routes/datastoreservice.py create mode 100644 app/routes/discord_internal.py create mode 100644 app/routes/discourse_sso.py create mode 100644 app/routes/fflagssettings.py create mode 100644 app/routes/friendapi.py create mode 100644 app/routes/gamejoin.py create mode 100644 app/routes/gamesapi.py create mode 100644 app/routes/gametransactions.py create mode 100644 app/routes/image.py create mode 100644 app/routes/inventoryapi.py create mode 100644 app/routes/jobreporthandler.py create mode 100644 app/routes/kofihandler.py create mode 100644 app/routes/legacydatapersistence.py create mode 100644 app/routes/luawebservice.py create mode 100644 app/routes/marketplace.py create mode 100644 app/routes/mobile.py create mode 100644 app/routes/pointsservice.py create mode 100644 app/routes/presence.py create mode 100644 app/routes/presenceapi.py create mode 100644 app/routes/prometheus.py create mode 100644 app/routes/publicapi.py create mode 100644 app/routes/rate.py create mode 100644 app/routes/rbxapi.py create mode 100644 app/routes/rolimons.py create mode 100644 app/routes/sets.py create mode 100644 app/routes/teleportservice.py create mode 100644 app/routes/thumbnailer.py create mode 100644 app/routes/usersapi.py create mode 100644 app/services/economy.py create mode 100644 app/services/gameserver_comm.py create mode 100644 app/services/groups.py create mode 100644 app/services/invitekeys.py create mode 100644 app/services/proxydetection.py create mode 100644 app/services/user_relationships/followings.py create mode 100644 app/services/user_relationships/friends.py create mode 100644 app/shell_commands.py create mode 100644 app/static/avatarrules.json create mode 100644 app/static/css/admin.css create mode 100644 app/static/css/avatar.css create mode 100644 app/static/css/avatar.css1 create mode 100644 app/static/css/bootstrapv3.min.css create mode 100644 app/static/css/bootstrapv3.min.css.bak create mode 100644 app/static/css/catalog.css create mode 100644 app/static/css/develop.css create mode 100644 app/static/css/gameview.css create mode 100644 app/static/css/gameview.css1 create mode 100644 app/static/css/global.css create mode 100644 app/static/css/global.css1 create mode 100644 app/static/css/home.css create mode 100644 app/static/css/home.css1 create mode 100644 app/static/css/icons.css create mode 100644 app/static/css/icons.css1 create mode 100644 app/static/css/login.css create mode 100644 app/static/css/message.cs create mode 100644 app/static/css/message.css1 create mode 100644 app/static/css/profile.css create mode 100644 app/static/css/profile.css1 create mode 100644 app/static/css/setting.css1 create mode 100644 app/static/css/settings.css create mode 100644 app/static/css/signup.css create mode 100644 app/static/css/terms.css create mode 100644 app/static/cssold/admin.css create mode 100644 app/static/cssold/avatar.css create mode 100644 app/static/cssold/bootstrapv3.min.css create mode 100644 app/static/cssold/catalog.css create mode 100644 app/static/cssold/develop.css create mode 100644 app/static/cssold/gameview.css create mode 100644 app/static/cssold/global.css create mode 100644 app/static/cssold/header.css create mode 100644 app/static/cssold/home.css create mode 100644 app/static/cssold/icons.css create mode 100644 app/static/cssold/login.css create mode 100644 app/static/cssold/message.css create mode 100644 app/static/cssold/profile.css create mode 100644 app/static/cssold/settings.css create mode 100644 app/static/cssold/signup.css create mode 100644 app/static/cssold/terms.css create mode 100644 app/static/img/BC.png create mode 100644 app/static/img/ChristmasHat.png create mode 100644 app/static/img/ContentDeleted.png create mode 100644 app/static/img/LoginImage.png create mode 100644 app/static/img/LoginImage2.png create mode 100644 app/static/img/LuaThumbnail.png create mode 100644 app/static/img/NBC.png create mode 100644 app/static/img/OBC.png create mode 100644 app/static/img/SignupImage.png create mode 100644 app/static/img/Style/bc.svg create mode 100644 app/static/img/Style/icon_labels.svg create mode 100644 app/static/img/SyntaxLogo.png create mode 100644 app/static/img/TBC.png create mode 100644 app/static/img/TemplatePants.png create mode 100644 app/static/img/TemplateShirt.png create mode 100644 app/static/img/VortexiLogo.png create mode 100644 app/static/img/branded.svg create mode 100644 app/static/img/creator.png create mode 100644 app/static/img/creator2.png create mode 100644 app/static/img/games.svg create mode 100644 app/static/img/linux-penguin.svg create mode 100644 app/static/img/placeholder.png create mode 100644 app/static/img/revsim.ico create mode 100644 app/static/img/revsim.png create mode 100644 app/static/img/syntax.ico create mode 100644 app/static/img/thumbs.svg create mode 100644 app/static/img/thumbsup.png create mode 100644 app/static/img/verify.png create mode 100644 app/static/img/vortex.ico create mode 100644 app/static/js/AvatarEditor.js create mode 100644 app/static/js/assetrate.js create mode 100644 app/static/js/bootstrapv3.min.js create mode 100644 app/static/js/catalog.js create mode 100644 app/static/js/global.js create mode 100644 app/static/js/groupMembers.js create mode 100644 app/static/js/newTrade.js create mode 100644 app/static/js/presence.js create mode 100644 app/static/js/theme.js create mode 100644 app/static/js/twemoji.js create mode 100644 app/static/svg/navigation.svg create mode 100644 app/static/swagger/favicon-16x16.png create mode 100644 app/static/swagger/favicon-32x32.png create mode 100644 app/static/swagger/index.css create mode 100644 app/static/swagger/oauth2-redirect.html create mode 100644 app/static/swagger/swagger-docs.json create mode 100644 app/static/swagger/swagger-initializer.js create mode 100644 app/static/swagger/swagger-ui-bundle.js create mode 100644 app/static/swagger/swagger-ui-bundle.js.map create mode 100644 app/static/swagger/swagger-ui-es-bundle-core.js create mode 100644 app/static/swagger/swagger-ui-es-bundle-core.js.map create mode 100644 app/static/swagger/swagger-ui-es-bundle.js create mode 100644 app/static/swagger/swagger-ui-es-bundle.js.map create mode 100644 app/static/swagger/swagger-ui-standalone-preset.js create mode 100644 app/static/swagger/swagger-ui-standalone-preset.js.map create mode 100644 app/static/swagger/swagger-ui.css create mode 100644 app/static/swagger/swagger-ui.css.map create mode 100644 app/static/swagger/swagger-ui.js create mode 100644 app/static/swagger/swagger-ui.js.map create mode 100644 app/util/RBXMesh.py create mode 100644 app/util/announcement.py create mode 100644 app/util/assetvalidation.py create mode 100644 app/util/assetversion.py create mode 100644 app/util/auth.py create mode 100644 app/util/badwords.py create mode 100644 app/util/discord.py create mode 100644 app/util/embeds.py create mode 100644 app/util/filterconfig.py create mode 100644 app/util/friends.py create mode 100644 app/util/membership.py create mode 100644 app/util/placeinfo.py create mode 100644 app/util/redirect.py create mode 100644 app/util/redislock.py create mode 100644 app/util/s3helper.py create mode 100644 app/util/signscript.py create mode 100644 app/util/textfilter.py create mode 100644 app/util/transactions.py create mode 100644 app/util/turnstile.py create mode 100644 app/util/websiteFeatures.py create mode 100644 debug.sh create mode 100644 keys/public_key16.blob create mode 100644 keys/public_key18.blob create mode 100644 logs/KEEPME create mode 100644 requirements.txt create mode 100755 start.sh create mode 100644 tools/execute_sql.py create mode 100644 tools/generate_new_keys.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e7f7e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +config.py +__pycache__/ +assets/ +proxies.txt +logs/*.log* +download_cache/* +*.key +*.crt +!download_cache/KEEPME +.venv/ +*.pub +*.pem diff --git a/README.md b/README.md new file mode 100644 index 0000000..efcb147 --- /dev/null +++ b/README.md @@ -0,0 +1,145 @@ +# NEXIUM Source. +### Requirements + - Linux Server ( For Production environment ) + - PostgreSQL Serverx + - Redis Server + - Python 3.12+ + - FFmpeg + - Gunicorn + - A webserver which supports reverse proxies + +> Note: These are the bare minimum needed for NEXIUM Backend to run, please do not attempt to host a publicly accessible version of NEXIUM if you do not know what you are doing + +### Optional Services + - NEXIUM Gameserver running on Windows Server ( Needed for rendering and games ) + - NEXIUM Discord Bot + - Ko-Fi ( Please modify code if you are not going to use this ) + - Cryptomus + - MailJet ( Email Vericiation, modification to the code is needed as email templates are not included ) + - HTTP Proxies for faster asset migration ( [webshare.io](https://webshare.io/) is recommended ) + - Amazon S3 Bucket ( **USE_LOCAL_STORAGE** must be enabled if you are not planning to use a S3 Bucket ) + +## Configuration +You can view the currently set values in config.py, most of the values would be set to something about being dead and being secure lmao, just edit those ones and you will be good. + +1. **FLASK_SESSION_KEY** - Used for salting passwords and 2FA Secret Generation, please change to a random long string and never change it ever again! +~~2. **AuthorizationKey** - Added for debugging and bypassing ratelimits, please also change to a random long string~~ Removed from codebase +3. **SQLALCHEMY_DATABASE_URI** - URI for connecting to the postgres database, refer to [Documentation](https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/) for creating a database URI +4. **FLASK_LIMITED_STORAGE_URI** - Redis Server URI, can leave as default if your redis server is hosted locally and does not require authorization +5. **BaseDomain** - Change to your domain *(eg. roblox.com)*, please do not host on a subdomain as it is not supported! +6. **CloudflareTurnstileSiteKey** - Please setup turnstile on the domain you are hosting and then grab the turnstile site key from there +7. **CloudflareTurnstileSecretKey** - Read above +8. **DISCORD_CLIENT_ID** - Go to the Discord Developer Portal and go to the Discord Application you are going to use, then place its ClientID here +9. **DiscordBotToken** - Use your Discord Bot Token +10. **DISCORD_CLIENT_SECRET** - Discord Application Client Secret +11. **DISCORD_BOT_AUTHTOKEN** - Authorization Token for NEXIUM Discord Bot, use random long string +12. **DISCORD_BOT_AUTHORISED_IPS** - List of IPs which are allowed to access Discord Bot internal APIs +13. **DISCORD_ADMIN_LOGS_WEBHOOK** - Discord Webhook for logging Moderation Actions +14. **MAILJET** - You will have to modify the code and the config for this as your email template will be different +15. **KOFI_VERIFICATION_TOKEN** - Used for verifying requests from Ko-Fi to automate donations processing, please change to a random long string if you do not plan on using this. If you do you can find the verification token in your Ko-Fi API Panel. +16. **VERIFIED_EMAIL_REWARD_ASSET** - The AssetId the user is rewarded with once they verify their email, you can change this after setting up everything +17. **ASSETMIGRATOR_ROBLOSECURITY** - Used for private audio migration +18. **ASSETMIGRATOR_USE_PROXIES** - If you want to use proxies for Asset Migration ( Which you should as it speeds up everything ) +19. **ASSETMIGRATOR_PROXY_LIST_LOCATION** - The path to the file which contains the proxies +20. **RSA_PRIVATE_KEY_PATH** - The path to the private key, expects a 1024 Bit RSA private key used for signing JoinScripts and everyting else **This is required!!** +21. **RSA_PRIVATE_KEY_PATH2** - Same thing for above but expects a 2048 Bit RSA private key +22. **USE_LOCAL_STORAGE** - Uses local storage for storing and reading files, bypasses S3 and uses **AWS_S3_DOWNLOAD_CACHE_DIR** as its storage directory ( SHOULD ONLY BE USED IN A DEVELOPMENT ENVIRONMENT ) +23. **AWS_ACCESS_KEY** - Your AWS Access Key, please create one in your AWS IAM Manager +24. **AWS_SECRET_KEY** - The Secret Key for the access key +25. **AWS_S3_BUCKET_NAME** - The bucket name assets and images will be uploaded to +26. **AWS_S3_DOWNLOAD_CACHE_DIR** - Where files downloaded from S3 will be cached +27. **AWS_REGION_NAME** - The region of the bucket +28. **CDN_URL** - Change to where the CDN is +29. **DISCOURSE_SSO_ENABLED** - Allows authentication with NEXIUM for [Discourse](https://www.discourse.org/) Forums +30. **DISCOURSE_FORUM_BASEURL** - The location of the forum +31. **DISCOURSE_SECRET_KEY** - The secret key for signing +32. **ADMIN_GROUP_ID** - The GroupId where admins are in, used for showing the admin badges ingame +33. **ITEMRELEASER_DISCORD_WEBHOOK** - The Discord Webhook to use for announcing an item release +34. **ITEMRELEASER_ITEM_PING_ROLE_ID** - The Discord Role ID to ping for announcing an item release +35. **PROMETHEUS_ENABLED** - If the Prometheus endpoint is enabled +36. **PROMETHEUS_ALLOWED_IPS** - IPs which are allowed to query the Prometheus endpoint +37. **CHEATER_REPORTS_DISCORD_WEBHOOK** - The Discord webhook to use for cheater reports from RCCService +38. **ROLIMONS_API_ENABLED** - Used for Synmons +39. **ROLIMONS_API_KEY** - Used for Synmons +40. **GAMESERVER_COMM_PRIVATE_KEY_LOCATION** - The Private key location used for signing requests sent to gameservers +41. **CRYPTOMUS_PAYMENT_ENABLED** - If the cryptomus payment system is enabled +42. **CRYPTOMUS_MERCHANT_ID** - Your Cryptomus merchant ID +43. **CRYPTOMUS_API_KEY** - Your Cryptoumus API Key +44. **IPAPI_AUTH_KEY** - API Key for [IPAPI](https://ipapi.co/) used for VPN and proxy detection on signup + +## KeyPair Generation +The NEXIUM Backend requires some keys for it to sign and communicate with gameservers, run the script below to generate those keys. +``` +python tools/generate_new_keys.py +``` + +In the `tools` directory 6 new files should have been created, 2 key pairs are for joinscript signing which is needed by the Client and RCCService to authenticate and verify properly. +Another keypair is for signing requests to communicate with all gameservers, take the public key and place it in your gameserver directory. + +## First Time Setup + +First install all required dependencies by running `pip install -r requirements.txt` in this directory + +Next run the command `flask shell` in the same directory as this README.md file, then in the shell run `db.create_all()`. +This will automatically create all the tables needed in your PostgreSQL database. + +Next use type in the following command in your flask shell +``` +from app.shell_commands import create_admin_user +create_admin_user() +``` +This will create an admin user with all existing admin privileges + +Now we can finally start the website, please make sure you have [gunicorn](https://gunicorn.org/) installed on your Linux Machine, gunicorn does not support Windows Machines. To start run the shell script `./start.sh` which will start a webserver on port `3003`. Please make sure you have NGINX configured as a reverse proxy to proxy the website and also have configured Cloudflare to serve your website on the main and all subdomains. + +## Setting up reverse proxies (Caddy) + +Setting up a Reverse Proxy with Caddy is quite easy. + +Please go into your Caddyfile and add this (replace the domains with your domain) + +``` +yourdomain.here { + reverse_proxy localhost:8000 +} +*.yourdomain.here { + reverse_proxy localhost:8000 +} +``` +^^ also note that u may need to change the port in the reverse proxy config. + +## Setting up reverse proxies (Apache2) + + Here is an example config for KittyBlox ([kittys.rip(https://kittys.rip)] + ``` + + ServerName kittys.rip + ServerAlias *.kittys.rip + ProxyPreserveHost On + ProxyRequests Off + + Require all granted + + ProxyErrorOverride off + Alias /500.html /var/www/500.html + + Require all granted + + ProxyPass /500.html ! + ProxyPass / http://127.0.0.1:3003/ + ProxyPassReverse / http://127.0.0.1:3003/ + RewriteEngine On + RewriteCond %{HTTP:Upgrade} =websocket [NC] + RewriteRule /(.*) ws://127.0.0.1:3003/$1 [P,L] + ErrorDocument 500 /500.html + ErrorDocument 502 /500.html + ErrorDocument 503 /500.html + ErrorDocument 504 /500.html + LimitRequestBody 209715200 + DocumentRoot /var/www + +``` + +This includes stuff for custom 500 pages if the site goes down, etc. feel free to modify all of this :3 + +If you are running a Windows Machine and want to run in debug mode run `flask run --port 3006 --debug`, this will open the website on port 3006 diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..4215d68 --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,470 @@ +import base64 +import redis +import sys +import os +import subprocess +import hashlib +import traceback +import string +import secrets +import re +import logging +from config import Config +from logging.handlers import TimedRotatingFileHandler +from flask import Flask, jsonify, render_template, session, redirect, url_for, request, make_response, Response +from datetime import datetime, timedelta +from urllib.parse import urlparse +from app.models.user import User +from app.models.messages import Message +from app.models.user_trades import UserTrade +from app.models.friend_request import FriendRequest +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.models.game_session_log import GameSessionLog +from app.enums.TradeStatus import TradeStatus +from app.enums.AssetType import AssetType +from app.enums.TransactionType import TransactionType +from app.util import auth, assetversion, s3helper, signscript, transactions +from app.services.economy import IncrementTargetBalance, GetUserBalance +from app.extensions import db, limiter, scheduler, CORS, redis_controller, csrf, get_remote_address +import app.shell_commands as cmd + +logging.basicConfig( + level = logging.INFO, + format = "%(asctime)s [%(levelname)s] %(message)s" +) +logger = logging.getLogger(__name__) +logname = "./logs/syntaxweb.log" +handler = TimedRotatingFileHandler(logname, when="midnight", backupCount=30) +handler.suffix = "%Y%m%d" + +logging.getLogger().addHandler(handler) + +try: + BUILD_HASH = subprocess.check_output(["git", "rev-parse", "--short", "HEAD"]).decode("utf-8").strip() +except Exception: + BUILD_HASH = "unknown" + +TwelveClientAssets = [37801173, 46295864, 48488236, 53870848, 53870858, 60595696, 89449009, 89449094, 97188757] +def create_app(config_class=Config): + app = Flask(__name__, template_folder="pages") + app.config.from_object(config_class) + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + app.config["SECRET_KEY"] = config_class.FLASK_SESSION_KEY + app.config['CORS_HEADERS'] = 'Content-Type' + app.config['SESSION_TYPE'] = 'redis' + app.config['SESSION_REDIS'] = redis.from_url(Config.FLASK_LIMITED_STORAGE_URI) + app.config['MAX_CONTENT_LENGTH'] = 32 * 1024 * 1024 + app.config["SQUEEZE_MIN_SIZE"] = 0 + #if app.debug is False: + #app.config["SERVER_NAME"] = config_class.BaseDomain + + db.init_app(app) + limiter.init_app(app) + csrf.init_app(app) + clean_domain = config_class.BaseDomain.replace('.', r'\.') + CORS.init_app(app, supports_credentials=True, resources={r"/*": {"origins": [f"https://{clean_domain}", f"http://{clean_domain}", f"https://.+{clean_domain}", f"http://.+{clean_domain}"]}}) + scheduler.init_app(app) + scheduler.start() + + from app.pages.login.login import login + from app.pages.signup.signup import signup + from app.pages.static import static + from app.pages.settings.settings import settings + from app.pages.link_discord.link_discord import link_discord + from app.pages.home.home import home + from app.pages.admin.admin import AdminRoute, GetAmountOfPendingAssets, IsUserAnAdministrator + from app.routes.asset import AssetRoute + from app.routes.authentication import AuthenticationRoute + from app.routes.jobreporthandler import JobReportHandler + from app.routes.clientinfo import ClientInfo + from app.routes.thumbnailer import Thumbnailer + from app.routes.image import ImageRoute + from app.routes.fflagssettings import FFlagRoute + from app.pages.profiles.profile import Profile + from app.routes.gamejoin import GameJoinRoute + from app.routes.marketplace import MarketPlaceRoute, EconomyV1Route + from app.routes.presence import PresenceRoute + from app.pages.messages.messages import MessageRoute + #from app.pages.clothingmigrator.migrator import ClothingMigratorRoute + from app.pages.catalog.catalog import CatalogRoute + from app.pages.avatar.avatar import AvatarRoute + from app.routes.pointsservice import PointsServiceRoute + from app.routes.datastoreservice import DataStoreRoute + from app.pages.clientpages.clientpages import ClientPages + from app.routes.luawebservice import LuaWebServiceRoute + from app.pages.develop.develop import DevelopPagesRoute + from app.routes.bootstrapper import BootstrapperRoute + from app.pages.studio.studiopages import StudioPagesRoute + from app.pages.games.games import GamePagesRoute + from app.pages.membership.membership import MembershipPages + from app.routes.rate import AssetRateRoute + from app.pages.trades.trades import TradesPageRoute + from app.routes.sets import SetsRoute + from app.pages.notapproved.notapproved import NotApprovedRoute + from app.pages.groups.groupspage import groups_page + from app.pages.giftcardredeem.redeem import GiftcardRedeemRoute + from app.pages.currencyexchange.controller import CurrencyExchangeRoute + from app.routes.kofihandler import KofiHandlerRoute + from app.pages.invitekeys.handler import inviteKeyRoute + from app.routes.discord_internal import DiscordInternal + from app.routes.publicapi import PublicAPIRoute + from app.pages.catalog.catalog import LibraryRoute + from app.routes.discourse_sso import discourse_sso + from app.pages.transactions.transactions import TransactionsRoute + from app.routes.gametransactions import GameTransactionsRoute + from app.pages.audiomigrator.audiomigrator import AudioMigratorRoute + from app.routes.rbxapi import RBXAPIRoute + from app.routes.legacydatapersistence import LegacyDataPersistenceRoute + from app.routes.friendapi import FriendsAPIRoute + from app.routes.inventoryapi import InventoryAPI + from app.routes.usersapi import UsersAPI + from app.routes.mobile import MobileAPIRoute + from app.routes.gamesapi import GamesAPIRoute + from app.routes.accountsettingsapi import AccountSettingsAPIRoute + from app.routes.presenceapi import PresenceAPIRoute + from app.routes.avatarapi import AvatarAPIRoute + from app.routes.badgesapi import BadgesAPIRoute + from app.pages.catalog.catalog import BadgesPageRoute + from app.pages.users.users_page import users_page + from app.routes.teleportservice import TeleportServiceRoute + from app.routes.prometheus import PrometheusRoute + from app.routes.rolimons import RolimonsAPI + from app.routes.cryptomus_handler import CryptomusHandler + from app.pages.maintenance.maintenance import maintenance + app.register_blueprint(login, url_prefix="/") + app.register_blueprint(signup, url_prefix="/") + app.register_blueprint(static, url_prefix="/") + app.register_blueprint(settings, url_prefix="/") + app.register_blueprint(link_discord, url_prefix="/") + app.register_blueprint(home, url_prefix="/") + app.register_blueprint(AssetRoute, url_prefix="/") + app.register_blueprint(AuthenticationRoute, url_prefix="/") + app.register_blueprint(AdminRoute, url_prefix="/admin") + app.register_blueprint(JobReportHandler, url_prefix="/") + app.register_blueprint(ClientInfo, url_prefix="/") + app.register_blueprint(Thumbnailer, url_prefix="/internal") + app.register_blueprint(ImageRoute, url_prefix="/") + app.register_blueprint(FFlagRoute, url_prefix="/") + app.register_blueprint(Profile, url_prefix="/") + app.register_blueprint(GameJoinRoute, url_prefix="/") + app.register_blueprint(MarketPlaceRoute, url_prefix="/marketplace") + app.register_blueprint(EconomyV1Route, url_prefix="/") + app.register_blueprint(PresenceRoute, url_prefix="/presence") + app.register_blueprint(MessageRoute, url_prefix="/messages") + #app.register_blueprint(ClothingMigratorRoute, url_prefix="/") + app.register_blueprint(CatalogRoute, url_prefix="/catalog") + app.register_blueprint(AvatarRoute, url_prefix="/") + app.register_blueprint(PointsServiceRoute, url_prefix="/") + app.register_blueprint(DataStoreRoute, url_prefix="/") + app.register_blueprint(ClientPages, url_prefix="/") + app.register_blueprint(LuaWebServiceRoute, url_prefix="/") + app.register_blueprint(DevelopPagesRoute, url_prefix="/") + app.register_blueprint(BootstrapperRoute, url_prefix="/") + app.register_blueprint(StudioPagesRoute, url_prefix="/") + app.register_blueprint(GamePagesRoute, url_prefix="/") + app.register_blueprint(MembershipPages, url_prefix="/") + app.register_blueprint(AssetRateRoute, url_prefix="/") + app.register_blueprint(TradesPageRoute, url_prefix="/") + app.register_blueprint(SetsRoute, url_prefix="/") + app.register_blueprint(NotApprovedRoute, url_prefix="/") + app.register_blueprint(groups_page, url_prefix="/") + app.register_blueprint(GiftcardRedeemRoute, url_prefix="/") + app.register_blueprint(CurrencyExchangeRoute, url_prefix="/currency-exchange") + app.register_blueprint(KofiHandlerRoute, url_prefix="/") + app.register_blueprint(inviteKeyRoute, url_prefix="/") + app.register_blueprint(DiscordInternal, url_prefix="/internal/discord_bot") + app.register_blueprint(PublicAPIRoute, url_prefix="/public-api") + app.register_blueprint(LibraryRoute, url_prefix="/library") + app.register_blueprint(discourse_sso, url_prefix="/discourse") + app.register_blueprint(TransactionsRoute, url_prefix="/transactions") + app.register_blueprint(GameTransactionsRoute, url_prefix="/") + app.register_blueprint(AudioMigratorRoute, url_prefix="/") + app.register_blueprint(RBXAPIRoute, url_prefix="/") + app.register_blueprint(LegacyDataPersistenceRoute, url_prefix="/persistence/legacy") + app.register_blueprint(FriendsAPIRoute, url_prefix="/") + app.register_blueprint(InventoryAPI, url_prefix="/") + app.register_blueprint(UsersAPI, url_prefix="/") + app.register_blueprint(MobileAPIRoute, url_prefix="/") + app.register_blueprint(GamesAPIRoute, url_prefix="/") + app.register_blueprint(AccountSettingsAPIRoute, url_prefix="/") + app.register_blueprint(PresenceAPIRoute, url_prefix="/") + app.register_blueprint(AvatarAPIRoute, url_prefix="/") + app.register_blueprint(BadgesAPIRoute, url_prefix="/") + app.register_blueprint(BadgesPageRoute, url_prefix="/badges") + app.register_blueprint(users_page, url_prefix="/") + app.register_blueprint(TeleportServiceRoute, url_prefix="/reservedservers") + app.register_blueprint(PrometheusRoute, url_prefix="/") + app.register_blueprint(RolimonsAPI, url_prefix="/api/internal_rolimons") + app.register_blueprint(CryptomusHandler, url_prefix="/cryptomus_service") + app.register_blueprint(maintenance, url_prefix="/") + + def ConvertDatetimeToDayMonthYear(date): + return date.strftime("%d/%m/%Y") + + app.jinja_env.globals.update(round=round, b64decode=base64.b64decode, len=len, ConvertDatetimeToDayMonthYear=ConvertDatetimeToDayMonthYear, datetime_utcnow = datetime.utcnow) + + @app.before_request + def before_request(): + if config_class.MAINTENANCE_MODE: + if request.endpoint == 'static' or request.path == '/maintenance' or request.blueprint == 'maintenance': + return + if session.get("maintenance_authorized") == True: + pass + else: + user_agent = request.headers.get("User-Agent", "") + is_roblox = "Roblox" in user_agent + is_gameserver = user_agent.startswith("SYNTAX-Gameserver-Communication") + if is_roblox or is_gameserver: + pass + else: + if request.path.startswith('/api/') or request.path.startswith('/public-api/') or request.headers.get('Accept') == 'application/json': + return jsonify({"error": "Website is under maintenance.", "success": False}), 503 + return redirect('/maintenance') + + if auth.isAuthenticated(): + try: + excluded_prefixes = {'/login', '/signup', '/settings', '/link-discord', '/static', '/admin', '/internal', '/public-api', '/api', '/v1'} + excluded_routes = {'static'} + + if request.endpoint not in excluded_routes: + should_check_discord = True + for prefix in excluded_prefixes: + if request.path.startswith(prefix): + should_check_discord = False + break + + if should_check_discord and request.headers.get('Accept') != 'application/json': + try: + CurrentUser = auth.GetCurrentUser() + if CurrentUser is not None: + from app.models.linked_discord import LinkedDiscord + LinkedDiscordObj = LinkedDiscord.query.filter_by(user_id=CurrentUser.id).first() + if LinkedDiscordObj is None: + return redirect("/link-discord") + except Exception as e: + logging.error(f"Error checking Discord link: {str(e)}") + except Exception as e: + logging.error(f"Error in Discord check before_request: {str(e)}") + + BrowserUserAgent = request.headers.get('User-Agent', default="Unknown") + if "Roblox" not in BrowserUserAgent: + if request.method == "GET": + CloudFlareScheme = request.headers.get('CF-Visitor') + if CloudFlareScheme is not None: + if "https" not in CloudFlareScheme: + return redirect(request.url.replace("http://", "https://", 1), code=301) + elif BrowserUserAgent == "Roblox/WinInet": + requestReferer = request.headers.get( key = "Referer", default = None ) + if requestReferer is not None: + try: + if urlparse( requestReferer ).hostname[ -len( config_class.BaseDomain ): ] != config_class.BaseDomain: + logging.warn(f"Bad Referer - ref : {requestReferer} - target : {request.url}") + return "Bad Referer", 403 + except: + pass + + @app.after_request + def after_request( response : Response ): + logging.info(f"{response.status_code} - {request.host} - {request.path} - {request.args}") + if hasattr(response, 'direct_passthrough') and not response.direct_passthrough: + UserObj : User = auth.GetCurrentUser() + if UserObj is not None: + if UserObj.accountstatus != 1: + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + session["not-approved-viewer"] = UserObj.id + resp = make_response(redirect("/not-approved")) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + return resp + if request.cookies.get(key="t", default=None, type=str) is None: + NewToken = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(128)) + response.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config_class.BaseDomain}") + if "not-approved-viewer" in session: + UserObj : User = auth.GetCurrentUser() + if UserObj is not None: + session.pop("not-approved-viewer") + return response + + @app.context_processor + def inject_user(): + if config_class.MAINTENANCE_MODE and not session.get('maintenance_authorized'): + return {} + if ".ROBLOSECURITY" in request.cookies: + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return {} + + def award_daily_login_bonus(): + if redis_controller.get(f"daily_login_bonus:{str(AuthenticatedUser.id)}") is not None: + return + if AuthenticatedUser.created > datetime.utcnow() - timedelta( days = 1 ): + return + if GameSessionLog.query.filter_by(user_id=AuthenticatedUser.id).filter( GameSessionLog.joined_at > datetime.utcnow() - timedelta( days = 3 ) ).first() is None: + return + + redis_controller.setex(f"daily_login_bonus:{str(AuthenticatedUser.id)}", 60 * 60 * 24 ,"1") + IncrementTargetBalance(AuthenticatedUser, 10, 1) + transactions.CreateTransaction( + Reciever = AuthenticatedUser, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 10, + CurrencyType = 1, + TransactionType = TransactionType.BuildersClubStipend, + CustomText = "Daily Login Bonus" + ) + + if redis_controller.exists(f"award_daily_login_bonus_attempt:{str(AuthenticatedUser.id)}") is None: + redis_controller.setex(f"award_daily_login_bonus_attempt:{str(AuthenticatedUser.id)}", 60, "1") + award_daily_login_bonus() + + unreadMessages = Message.query.filter_by(recipient_id=AuthenticatedUser.id, read=False).count() + inboundTrades = UserTrade.query.filter_by(recipient_userid=AuthenticatedUser.id, status=TradeStatus.Pending).count() + friendRequests = FriendRequest.query.filter_by(requestee_id=AuthenticatedUser.id).count() + AuthenticatedUser.lastonline = datetime.utcnow() + db.session.commit() + userRobux, userTix = GetUserBalance(AuthenticatedUser) + isAdministrator = IsUserAnAdministrator( AuthenticatedUser ) + PendingAssetsCount = 0 + if isAdministrator: + PendingAssetsCount = GetAmountOfPendingAssets() + + return { + "currentuser": { + "id": AuthenticatedUser.id, + "username": AuthenticatedUser.username, + "robux": userRobux, + "tix": userTix, + "unread_messages": unreadMessages, + "inbound_trades": inboundTrades, + "friend_requests": friendRequests, + "is_admin": isAdministrator, + "pending_asset_count": PendingAssetsCount + }, + } + return {} + @app.context_processor + def inject_version(): + return { + "BuildVersionDontGetThisMixedUpCuh": BUILD_HASH + } + @app.context_processor + def inject_website_wide_message(): + if redis_controller.exists("website_wide_message"): + url_pattern = re.compile(r'(https?://\S+)') + website_message = website_wide_message=redis_controller.get("website_wide_message") + website_message = url_pattern.sub(r'\1', website_message) + return dict(website_wide_message=website_message) + return {} + + @app.context_processor + def injecthcaptcha_sitekey(): + return dict(turnstilekey=Config.CloudflareTurnstileSiteKey) + + @app.route('/') + def main(): + if "user" in session: + return redirect("/home") + else: + return redirect("/login") + + @app.errorhandler(404) + def page_not_found(e): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is not None: + if "RobloxStudio" in BrowserUserAgent: + return "

404 - Page not found


Return to homepage" + #logging.error(f"404 - {request.path}") + return render_template("404.html"), 404 + + @app.errorhandler(403) + def page_forbidden(e): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is not None: + if "RobloxStudio" in BrowserUserAgent: + return "

403 - Forbidden


Return to homepage" + return render_template("403.html"), 403 + + @app.errorhandler(405) + def page_forbidden(e): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is not None: + if "RobloxStudio" in BrowserUserAgent: + return "

405 - Method Not Allowed


Return to homepage" + return render_template("405.html"), 405 + + @app.errorhandler(500) + def page_internal_server_error(e): + exc_type, exc_value, exc_traceback = sys.exc_info() + PageRoute = request.path + return render_template("500.html", error={ + "type": exc_type, + "value": exc_value, + "traceback": str(traceback.format_exc()) + }, page=PageRoute), 500 + + + @app.errorhandler(429) + def ratelimit_handler(e): + return jsonify({"error": "You are being rate limited.", "message": "You are being rate limited.", "success": False}), 429 + + if config_class.ASSETMIGRATOR_USE_PROXIES: + redis_controller.delete("assetmigrator_proxies") + with open(config_class.ASSETMIGRATOR_PROXY_LIST_LOCATION, "r") as f: + LoadedProxies = 0 + for line in f: + if line.strip() != "": + LoadedProxies += 1 + redis_controller.sadd("assetmigrator_proxies", line.strip()) + logging.info(f"Loaded {LoadedProxies} proxies") + + try: + if not redis_controller.exists("coregui_ids_cooldown"): + with app.app_context(): + redis_controller.setex("coregui_ids_cooldown", 60 * 60, "1") + AllCoreGui = os.listdir("./app/files/CoreGui") + redis_controller.delete("coregui_ids") + for CoreGui in AllCoreGui: + try: + redis_controller.sadd("coregui_ids", int(CoreGui)) + except: + logging.error(f"Failed to load CoreGui file {CoreGui}") + + AssetObj : Asset = Asset.query.filter_by(id=int(CoreGui)).first() + if AssetObj is None: + AssetObj = Asset( + name = "CoreGui", + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + asset_type = AssetType.Lua, + creator_id = 1, + creator_type = 0, + moderation_status = 0 + ) + AssetObj.id = int(CoreGui) + db.session.add(AssetObj) + db.session.commit() + logging.info(f"Created CoreGui asset {CoreGui}") + CoreGuiContent = open(f"./app/files/CoreGui/{CoreGui}", "r").read() + if int(CoreGui) in TwelveClientAssets: + CoreGuiContent = signscript.signUTF8(f"%{CoreGui}%\r\n{CoreGuiContent}", addNewLine=False, twelveclient=True) + else: + CoreGuiContent = signscript.signUTF8(f"--rbxassetid%{CoreGui}%\r\n{CoreGuiContent}", addNewLine=False) + + CoreGuiHash = hashlib.sha512(CoreGuiContent.encode("utf-8")).hexdigest() + AssetVersionObj : AssetVersion = assetversion.GetLatestAssetVersion( AssetObj ) + if AssetVersionObj is None or AssetVersionObj.content_hash != CoreGuiHash: + s3helper.UploadBytesToS3( + CoreGuiContent.encode("utf-8"), + CoreGuiHash + ) + assetversion.CreateNewAssetVersion( + AssetObj, + CoreGuiHash, + CoreGuiContent, + ) + logging.info(f"Loaded {len(AllCoreGui)} CoreGui files") + except Exception as e: + logging.error(f"Failed to load CoreGui files: {e}") + + logging.info("App created") + return app diff --git a/app/build_version.py b/app/build_version.py new file mode 100644 index 0000000..49e942f --- /dev/null +++ b/app/build_version.py @@ -0,0 +1 @@ +BUILD_HASH = "1a4ab28f" diff --git a/app/enums/AssetType.py b/app/enums/AssetType.py new file mode 100644 index 0000000..9f2c8fc --- /dev/null +++ b/app/enums/AssetType.py @@ -0,0 +1,70 @@ +from enum import Enum + +class AssetType( Enum ): + Image = 1 + TShirt = 2 + Audio = 3 + Mesh = 4 + Lua = 5 + HTML = 6 + Text = 7 + Hat = 8 + Place = 9 + Model = 10 + Shirt = 11 + Pants = 12 + Decal = 13 + Avatar = 16 + Head = 17 + Face = 18 + Gear = 19 + Badge = 21 + GroupEmblem = 22 + Animation = 24 + Torso = 27 + RightArm = 28 + LeftArm = 29 + LeftLeg = 30 + RightLeg = 31 + Package = 32 + YoutubeVideo = 33 + GamePass = 34 + App = 35 + Code = 37 + Plugin = 38 + SolidModel = 39 + MeshPart = 40 + HairAccessory = 41 + FaceAccessory = 42 + NeckAccessory = 43 + ShoulderAccessory = 44 + FrontAccessory = 45 + BackAccessory = 46 + WaistAccessory = 47 + ClimbAnimation = 48 + DeathAnimation = 49 + FallAnimation = 50 + IdleAnimation = 51 + JumpAnimation = 52 + RunAnimation = 53 + SwimAnimation = 54 + WalkAnimation = 55 + PoseAnimation = 56 + EarAccessory = 57 + EyeAccessory = 58 + EmoteAnimation = 61 + Video = 62 + TShirtAccessory = 64 + ShirtAccessory = 65 + PantsAccessory = 66 + JacketAccessory = 67 + SweaterAccessory = 68 + ShortsAccessory = 69 + LeftShoeAccessory = 70 + RightShoeAccessory = 71 + DressSkirtAccessory = 72 + FontFamily = 73 + EyebrowAccessory = 76 + EyelashAccessory = 77 + MoodAnimation = 78 + DynamicHead = 79 \ No newline at end of file diff --git a/app/enums/BanType.py b/app/enums/BanType.py new file mode 100644 index 0000000..ea9f94c --- /dev/null +++ b/app/enums/BanType.py @@ -0,0 +1,10 @@ +from enum import Enum + +class BanType(Enum): + Warning = 0 + Day1Ban = 1 + Day3Ban = 2 + Day7Ban = 3 + Day14Ban = 4 + Day30Ban = 5 + Deleted = 6 \ No newline at end of file diff --git a/app/enums/ChatStyle.py b/app/enums/ChatStyle.py new file mode 100644 index 0000000..28f774d --- /dev/null +++ b/app/enums/ChatStyle.py @@ -0,0 +1,6 @@ +from enum import Enum + +class ChatStyle(Enum): + Classic = 0 + Bubble = 1 + ClassicAndBubble = 2 \ No newline at end of file diff --git a/app/enums/CryptomusPaymentStatus.py b/app/enums/CryptomusPaymentStatus.py new file mode 100644 index 0000000..b048a3a --- /dev/null +++ b/app/enums/CryptomusPaymentStatus.py @@ -0,0 +1,17 @@ +from enum import Enum + +class CryptomusPaymentStatus(Enum): + Paid = 0 + PaidOver = 1 + WrongAmount = 2 + Process = 3 + ConfirmCheck = 4 + WrongAmountWaiting = 5 + Check = 6 + Fail = 7 + Cancel = 8 + SystemFail = 9 + RefundProcess = 10 + RefundFail = 11 + RefundPaid = 12 + Locked = 13 \ No newline at end of file diff --git a/app/enums/GiftcardType.py b/app/enums/GiftcardType.py new file mode 100644 index 0000000..0b902ee --- /dev/null +++ b/app/enums/GiftcardType.py @@ -0,0 +1,8 @@ +from enum import Enum + +class GiftcardType(Enum): + Outrageous_BuildersClub = 0 + Turbo_BuildersClub = 1 + RobuxCurrency = 2 + TixCurrency = 3 + Item = 4 \ No newline at end of file diff --git a/app/enums/LimitedItemTransferMethod.py b/app/enums/LimitedItemTransferMethod.py new file mode 100644 index 0000000..5ef5f5e --- /dev/null +++ b/app/enums/LimitedItemTransferMethod.py @@ -0,0 +1,7 @@ +from enum import Enum + +class LimitedItemTransferMethod( Enum ): + Purchase = 0 + Trade = 1 + WonByLottery = 2 + ForcedTransfer = 3 \ No newline at end of file diff --git a/app/enums/MembershipType.py b/app/enums/MembershipType.py new file mode 100644 index 0000000..32ad6a5 --- /dev/null +++ b/app/enums/MembershipType.py @@ -0,0 +1,7 @@ +from enum import Enum + +class MembershipType( Enum ): + NonBuildersClub = 0 + BuildersClub = 1 + TurboBuildersClub = 2 + OutrageousBuildersClub = 3 \ No newline at end of file diff --git a/app/enums/PlaceRigChoice.py b/app/enums/PlaceRigChoice.py new file mode 100644 index 0000000..eb085b3 --- /dev/null +++ b/app/enums/PlaceRigChoice.py @@ -0,0 +1,6 @@ +from enum import Enum + +class PlaceRigChoice( Enum ): + UserChoice = 0 + ForceR6 = 1 + ForceR15 = 2 \ No newline at end of file diff --git a/app/enums/PlaceYear.py b/app/enums/PlaceYear.py new file mode 100644 index 0000000..2374767 --- /dev/null +++ b/app/enums/PlaceYear.py @@ -0,0 +1,17 @@ +from enum import Enum + +class PlaceYear( Enum ): + Nine = 2009 + Ten = 2010 + Eleven = 2011 + Twelve = 2012 + Thirteen = 2013 + Fourteen = 2014 + Fifteen = 2015 + Sixteen = 2016 + Seventeen = 2017 + Eighteen = 2018 + Nineteen = 2019 + Twenty = 2020 + TwentyOne = 2021 + TwentyTwo = 2022 diff --git a/app/enums/TradeStatus.py b/app/enums/TradeStatus.py new file mode 100644 index 0000000..f6be642 --- /dev/null +++ b/app/enums/TradeStatus.py @@ -0,0 +1,8 @@ +from enum import Enum + +class TradeStatus( Enum ): + Pending = 0 + Accepted = 1 + Declined = 2 + Expired = 3 + Cancelled = 4 \ No newline at end of file diff --git a/app/enums/TransactionType.py b/app/enums/TransactionType.py new file mode 100644 index 0000000..9aaa6f9 --- /dev/null +++ b/app/enums/TransactionType.py @@ -0,0 +1,9 @@ +from enum import Enum + +class TransactionType( Enum ): + Purchase = 0 + Sale = 1 + GroupPayout = 2 + BuildersClubStipend = 3 + Commisions = 4 + Trade = 5 \ No newline at end of file diff --git a/app/extensions.py b/app/extensions.py new file mode 100644 index 0000000..bc8ab04 --- /dev/null +++ b/app/extensions.py @@ -0,0 +1,712 @@ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import or_, and_, text +from flask_limiter import Limiter, HEADERS +from flask_apscheduler import APScheduler +from flask import request +from flask_cors import CORS +import redis +import datetime +from config import Config +import logging +import time +from flask_wtf.csrf import CSRFProtect +from app.enums.AssetType import AssetType +csrf = CSRFProtect() +db = SQLAlchemy() +Config = Config() +CORS = CORS() + +def get_remote_address() -> str: + cloudflare = request.headers.get("CF-Connecting-IP") + if cloudflare is not None: + return cloudflare + + remote_addr = request.remote_addr + + if remote_addr in ["127.0.0.1", "localhost", "::1"]: + nginx_real_ip = request.headers.get("X-Real-Ip") + if nginx_real_ip is not None: + # print('lets try this') + return nginx_real_ip + #print('no we give up') + return remote_addr or "127.0.0.1" + +def get_user_id() -> str: + """ + Gets the UserId for the current request + + :return: UserId or -1 if not logged in + """ + if ".ROBLOSECURITY" in request.cookies: + return "user_id:-1" + + from app.util.auth import GetTokenInfo + UserTokenInfo = GetTokenInfo( request.cookies.get(".ROBLOSECURITY", default = "None", type = str) ) + if UserTokenInfo is None: + return "user_id:-1" + + return f"user_id:{ UserTokenInfo[0] }" + +limiter = Limiter( + key_func=get_remote_address, + storage_uri=Config.FLASK_LIMITED_STORAGE_URI, + strategy="fixed-window", + headers_enabled=True, + key_prefix = "address_limiter" +) + +user_limiter = Limiter( + key_func = get_user_id, + storage_uri=Config.FLASK_LIMITED_STORAGE_URI, + strategy="fixed-window", + headers_enabled=True, + key_prefix = "user_limiter" +) + +redis_controller = Config.REDIS_CLIENT + +scheduler = APScheduler() +logging.getLogger('apscheduler').setLevel(logging.ERROR) + +@scheduler.task('interval', id='item_release_pool_releaser', seconds=60, misfire_grace_time=60) +def item_release_pool_releaser(): + with scheduler.app.app_context(): + import time + import json + import random + import uuid + import requests + from app.models.asset import Asset + from app.pages.admin.admin import GetNextItemDropDateTime, SetAssetOffsaleJob + + if redis_controller.get("item_release_pool_releaser") is not None: + return + redis_controller.set("item_release_pool_releaser", "busy", ex=120) + if redis_controller.llen("ItemReleasePool:Items") <= 0: + redis_controller.set("ItemReleasePool:LastDropTimestamp", value = str(round(time.time()))) + return + + if datetime.datetime.utcnow() < GetNextItemDropDateTime(): + return + random.seed( time.time() ) + RandomIndex = random.randint( 0, redis_controller.llen("ItemReleasePool:Items") - 1 ) + SelectedAssetId = redis_controller.lindex( "ItemReleasePool:Items", RandomIndex ) + if SelectedAssetId is None: + logging.warning("item_release_pool_releaser failed to selected random asset, lindex returned None") + return + redis_controller.lrem("ItemReleasePool:Items", count = 0, value = SelectedAssetId) + try: + SelectedAssetId = int(SelectedAssetId) + except Exception as e: + logging.warn(f"item_release_pool_releaser failed to cast string to integer, value: {SelectedAssetId}") + return + + AssetMetadata = redis_controller.get(f"ItemReleasePool:Item_Metadata:{SelectedAssetId}") + if AssetMetadata is None: + logging.warn(f"item_release_pool_releaser failed to get asset metadata for {SelectedAssetId}") + return + try: + AssetMetadata = json.loads(AssetMetadata) + except Exception as e: + logging.warn(f"item_release_pool_releaser failed to parse json from item metadata {SelectedAssetId}, {str(e)}") + return + + AssetObj : Asset = Asset.query.filter_by( id = SelectedAssetId ).first() + if AssetObj is None: + logging.warn(f"item_release_pool_releaser asset id {SelectedAssetId} does not exist") + return + + AssetObj.name = AssetMetadata["Name"] + AssetObj.description = AssetMetadata["Description"] + AssetObj.price_robux = AssetMetadata["RobuxPrice"] + AssetObj.price_tix = AssetMetadata["TicketsPrice"] + AssetObj.is_limited = AssetMetadata["IsLimited"] + AssetObj.is_limited_unique = AssetMetadata["IsLimitedUnique"] + AssetObj.serial_count = AssetMetadata["SerialCount"] + AssetObj.moderation_status = 0 + AssetObj.updated_at = datetime.datetime.utcnow() + AssetObj.is_for_sale = True + + if AssetMetadata["OffsaleAfter"] is not None: + OffsaleAfter = datetime.timedelta( seconds = AssetMetadata["OffsaleAfter"] ) + AssetOffsaleAt = datetime.datetime.utcnow() + OffsaleAfter + + if redis_controller.exists(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}"): + try: + scheduler.remove_job(redis_controller.get(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}")) + except: + logging.warning(f"Failed to remove job {redis_controller.get(f'APSchedulerTaskJobUUID:{str(AssetObj.id)}')}") + + APSchedulerTaskJobUUID = str(uuid.uuid4()) + scheduler.add_job(id=APSchedulerTaskJobUUID, func=SetAssetOffsaleJob, trigger='date', run_date=AssetOffsaleAt, args=[AssetObj.id]) + redis_controller.set(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}", APSchedulerTaskJobUUID) + logging.info(f"Asset {str(AssetObj.id)} has been set to go offsale at {str(AssetOffsaleAt)}, job UUID: {APSchedulerTaskJobUUID}") + + AssetObj.offsale_at = AssetOffsaleAt + + db.session.commit() + logging.info(f"Released Item {AssetObj.id}") + redis_controller.set("ItemReleasePool:LastDropTimestamp", value = str(round(time.time()))) + + try: + requests.post( + Config.ITEMRELEASER_DISCORD_WEBHOOK, + json = { + "content": f"<@&{Config.ITEMRELEASER_ITEM_PING_ROLE_ID}> New Item Drop!", + "allowed_mentions": { + "replied_user": False, + "parse": [], + "roles": [ + Config.ITEMRELEASER_ITEM_PING_ROLE_ID + ] + }, + "username": "Automatic Item Release Bot", + "avatar_url": f"{Config.BaseURL}/Thumbs/Head.ashx?x=48&y=48&userId=1", + "embeds": [{ + "type": "rich", + "title": AssetObj.name, + "description": AssetObj.description, + "color": 0x00ff62, + "fields": [ + { + "name": "Robux Price", + "value": f"R${AssetObj.price_robux}", + "inline": True + }, + { + "name": "Tickets Price", + "value": f"T${AssetObj.price_tix}", + "inline": True + }, + { + "name": "Limited Unique", + "value": str(AssetObj.is_limited_unique), + "inline": True + }, + { + "name": "Serial Count", + "value": "None" if AssetObj.serial_count == 0 else str(AssetObj.serial_count), + "inline": True + }, + { + "name": "Offsale in", + "value": "Never" if AssetObj.offsale_at is None else f"", + "inline": True + } + ], + "thumbnail": { + "url": f"{Config.BaseURL}/Thumbs/Asset.ashx?x=180&y=180&assetId={AssetObj.id}", + "height": 120, + "width": 120 + }, + "url": f"{Config.BaseURL}/catalog/{AssetObj.id}/--", + "footer": { + "text": f"NEXIUM" + }, + "timestamp": datetime.datetime.utcnow().isoformat() + }] + } + ) + except Exception as e: + logging.warn(f"item_release_pool_releaser failed to send Discord Webhook message, {e}") + +@scheduler.task('interval', id='builders_club_stipend', seconds=120, misfire_grace_time=60) +def builders_club_stipend(): + with scheduler.app.app_context(): + if redis_controller.get("builders_club_stipend") is not None: + return + redis_controller.set("builders_club_stipend", "busy", ex=120) + from app.models.user_membership import UserMembership + from app.models.user import User + from app.models.game_session_log import GameSessionLog + from app.enums.MembershipType import MembershipType + from app.enums.TransactionType import TransactionType + from app.services.economy import IncrementTargetBalance + from app.util.transactions import CreateTransaction + from app.util.membership import GetUserMembership, RemoveUserMembership, GiveUserMembership + from app.pages.messages.messages import CreateSystemMessage + from app.models.linked_discord import LinkedDiscord + + # Get all users who membership has expired + ExpiredMemberships : list[UserMembership] = UserMembership.query.filter( + UserMembership.expiration < datetime.datetime.utcnow() + ) + for MembershipObj in ExpiredMemberships: + try: + if MembershipObj.membership_type == MembershipType.BuildersClub: + # Check if their discord is still linked + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=MembershipObj.user_id).first() + if LinkedDiscordObj is not None: + # Give them a free month of BC + MembershipObj.membership_type = MembershipType.BuildersClub + MembershipObj.expiration = datetime.datetime.utcnow() + datetime.timedelta(days=31) + db.session.commit() + continue + elif MembershipObj.membership_type == MembershipType.TurboBuildersClub or MembershipObj.membership_type == MembershipType.OutrageousBuildersClub: + UserObj : User = User.query.filter_by(id=MembershipObj.user_id).first() + CreateSystemMessage( + subject = "Builders Club membership expired", + message = f"""Hello {UserObj.username}, +This is an automated message to inform you that your Builders Club membership has expired, if you wish to renew your membership you can do so by following the instructions below + - For Turbo Builders Club members: + - You can renew your membership in the Discord Server by running the '/claim-turbo' command in the #bot-commands channel, this does require you to still be boosting our Discord Server + +If you have any questions or concerns, please contact our support in our Discord Server + +Sincerely, +The NEXIUM Team""", + userid = MembershipObj.user_id + ) + # Remove the membership + RemoveUserMembership(MembershipObj.user_id) + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=MembershipObj.user_id).first() + if LinkedDiscordObj is not None: + GiveUserMembership(MembershipObj.user_id, MembershipType.BuildersClub, expiration=datetime.timedelta(days=31)) + except Exception as e: + logging.info(f"Error while removing expired membership, Exception: {str(e)}") + continue + + WaitingMemberships : list[UserMembership] = UserMembership.query.filter( + or_( + UserMembership.membership_type == MembershipType.TurboBuildersClub, + UserMembership.membership_type == MembershipType.OutrageousBuildersClub + ) + ).filter( + UserMembership.next_stipend < datetime.datetime.utcnow() + ).all() + if len(WaitingMemberships) > 0: + logging.info(f"Found {len(WaitingMemberships)} users waiting for stipend") + for MembershipObj in WaitingMemberships: + UserObj : User = User.query.filter_by(id=MembershipObj.user_id).first() + if UserObj is None: + continue + if MembershipObj.membership_type == MembershipType.TurboBuildersClub: + IncrementTargetBalance(UserObj, 45, 0) + MembershipObj.next_stipend = MembershipObj.next_stipend + datetime.timedelta(hours=24) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 45, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = "Builders Club Stipend" + ) + logging.info(f"Sent stipend to {UserObj.username} ({UserObj.id})") + elif MembershipObj.membership_type == MembershipType.OutrageousBuildersClub: + IncrementTargetBalance(UserObj, 80, 0) + MembershipObj.next_stipend = MembershipObj.next_stipend + datetime.timedelta(hours=24) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 80, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = "Builders Club Stipend" + ) + logging.info(f"Sent stipend to {UserObj.username} ({UserObj.id})") + db.session.commit() + WaitingMemberships : list[UserMembership] = UserMembership.query.filter( + UserMembership.membership_type == MembershipType.BuildersClub + ).filter( + UserMembership.next_stipend < datetime.datetime.utcnow() + ).join(User).filter( + User.lastonline > datetime.datetime.utcnow() - datetime.timedelta(hours=24) + ).all() + for MembershipObj in WaitingMemberships: + UserObj : User = User.query.filter_by(id=MembershipObj.user_id).first() + if UserObj is None: + continue + #if GameSessionLog.query.filter_by(user_id=UserObj.id).filter( GameSessionLog.joined_at > datetime.datetime.utcnow() - datetime.timedelta( days = 2 ) ).first() is None: + # MembershipObj.next_stipend = datetime.datetime.utcnow() + datetime.timedelta(hours=6) + # db.session.commit() + # return + IncrementTargetBalance(UserObj, 10, 0) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 10, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = "Builders Club Stipend" + ) + MembershipObj.next_stipend = datetime.datetime.utcnow() + datetime.timedelta(hours=24) + logging.info(f"Sent stipend to {UserObj.username} ({UserObj.id})") + db.session.commit() + + redis_controller.delete("builders_club_stipend") + +@scheduler.task('interval', id='refresh_discord_token', seconds=300, misfire_grace_time=900) +def refresh_discord_token(): + with scheduler.app.app_context(): + if redis_controller.get("refresh_discord_token") is not None: + return + redis_controller.set("refresh_discord_token", "busy", ex=120) + from app.models.linked_discord import LinkedDiscord + from app.models.user import User + from app.models.user_membership import UserMembership + from app.enums.MembershipType import MembershipType + from app.util.membership import GetUserMembership, RemoveUserMembership + from app.pages.messages.messages import CreateSystemMessage + from app.util.discord import RefreshAccessToken, GetUserInfoFromToken, DiscordUserInfo, UnexpectedStatusCode, MissingScope + + def SendUnlinkedNotification( UserId : int , Reason : str ): + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + return + CreateSystemMessage( + subject = "Discord Account unlinked", + message = f"""Hello {UserObj.username}, +Your discord account was unlinked from your account because \"{Reason}\", if you currently have a Builders Club membership it will be automatically removed from your account until you link your discord account again. + +If you have any questions or concerns, please contact our support in our Discord Server + +Sincerely, +The NEXIUM Team""", + userid = UserObj.id + ) + CurrentUserMembership : MembershipType = GetUserMembership(UserObj) + if CurrentUserMembership == MembershipType.BuildersClub: + # Remove the membership + RemoveUserMembership(UserObj) + + # Get all users who has a linked discord account and has a discord_expiry that is less than the current time + WaitingDiscordLinks : list[LinkedDiscord] = LinkedDiscord.query.filter( + LinkedDiscord.discord_expiry < datetime.datetime.utcnow() + ) + for LinkedDiscordObj in WaitingDiscordLinks: + try: + try: + DiscordOAuth2TokenExchangeResponseJSON = RefreshAccessToken(LinkedDiscordObj.discord_refresh_token) + except UnexpectedStatusCode as e: + db.session.delete(LinkedDiscordObj) + SendUnlinkedNotification(LinkedDiscordObj.user_id, f"UnexpectedStatusCodeException_RefreshAccessToken: {str(e)}") + continue + except MissingScope as e: + db.session.delete(LinkedDiscordObj) + SendUnlinkedNotification(LinkedDiscordObj.user_id, f"MissingScopeException_RefreshAccessToken: {str(e)}") + continue + # Get user info + try: + DiscordUserInfoObj : DiscordUserInfo = GetUserInfoFromToken(DiscordOAuth2TokenExchangeResponseJSON["access_token"]) + except UnexpectedStatusCode as e: + db.session.delete(LinkedDiscordObj) + SendUnlinkedNotification(LinkedDiscordObj.user_id, f"UnexpectedStatusCodeException_RefreshUserInfo: {str(e)}") + continue + if DiscordUserInfoObj is None: + continue + LinkedDiscordObj.discord_access_token = DiscordOAuth2TokenExchangeResponseJSON["access_token"] + LinkedDiscordObj.discord_refresh_token = DiscordOAuth2TokenExchangeResponseJSON["refresh_token"] + LinkedDiscordObj.discord_expiry = datetime.datetime.utcnow() + datetime.timedelta(seconds=DiscordOAuth2TokenExchangeResponseJSON["expires_in"]) + LinkedDiscordObj.discord_username = DiscordUserInfoObj.Username + LinkedDiscordObj.discord_discriminator = DiscordUserInfoObj.Discriminator + LinkedDiscordObj.discord_avatar = DiscordUserInfoObj.AvatarHash + LinkedDiscordObj.last_updated = datetime.datetime.utcnow() + db.session.commit() + except Exception as e: + logging.info(f"Error while refreshing discord token, Exception: {str(e)}") + continue + + +@scheduler.task('interval', id='migrate_assets', seconds=120, misfire_grace_time=60) +def migrate_assets(): + with scheduler.app.app_context(): + if redis_controller.get("migrate_assets_lock") is not None: + return + redis_controller.set("migrate_assets_lock", "busy", ex=120) + from app.routes.asset import migrateAsset, AddAssetToMigrationQueue, AddAudioAssetToAudioMigrationQueue + from app.routes.asset import NoPermissionException, AssetDeliveryAPIFailedException, AssetOnCooldownException, EconomyAPIFailedException, RatelimittedReachedException, AssetNotFoundException, AssetNotAllowedException + from app.models.asset import Asset + + EconomyFailedCount : int = 0 + + while True: + if redis_controller.llen("migrate_assets_queue") == 0: + break + # Get an asset from the queue + AssetId : int = int(redis_controller.lpop("migrate_assets_queue")) + if AssetId <= 1: + continue + try: + logging.info(f"AutoAssetMigrator: Auto migrating asset {AssetId}, {redis_controller.llen('migrate_assets_queue')} assets left in queue") + migrateAsset(AssetId, throwException=True) + except RatelimittedReachedException: + logging.info("AutoAssetMigrator: Ratelimit reached while auto migrating assets, stopping") + AddAssetToMigrationQueue(AssetId, bypassQueueLimit=False) + break + except EconomyAPIFailedException: + EconomyFailedCount += 1 + if EconomyFailedCount >= 4: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, stopping") + #AddAssetToMigrationQueue(AssetId, bypassQueueLimit=False) + break + else: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, retrying") + continue + except NoPermissionException: + logging.info(f"AutoAssetMigrator: No permission to migrate asset from Roblox, assetId: {AssetId}") + continue + except AssetDeliveryAPIFailedException: + logging.info(f"AutoAssetMigrator: AssetDelivery API failed while migrating asset, assetId: {AssetId}") + continue + except AssetOnCooldownException: + logging.info(f"AutoAssetMigrator: Asset is on cooldown, assetId: {AssetId}") + continue + except AssetNotAllowedException: + logging.info(f"AutoAssetMigrator: Asset is not allowed, assetId: {AssetId}") + continue + except AssetNotFoundException: + logging.info(f"AutoAssetMigrator: Asset not found, assetId: {AssetId}") + continue + except Exception as e: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, Exception: {str(e)} ,assetId: {AssetId}") + continue + except: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, assetId: {AssetId}") + continue + + while True: + # Migrating audios have a different queue + if redis_controller.llen("migrate_audio_assets_queue") == 0: + break + AssetId : int = int(redis_controller.lpop("migrate_audio_assets_queue")) + if AssetId <= 1: + continue + try: + AssociatedPlaceId : int = int(redis_controller.get(f"audio_asset:{AssetId}:placeid")) + if AssociatedPlaceId <= 1: + continue + except: + continue + + logging.info(f"AutoAssetMigrator: Auto migrating audio asset {AssetId}, {redis_controller.llen('migrate_audio_assets_queue')} assets left in queue") + try: + migrateAsset(AssetId, allowedTypes = [3], throwException=True, bypassCooldown = True, attemptSoundWithPlaceId = AssociatedPlaceId) + except RatelimittedReachedException: + logging.info("AutoAssetMigrator: Ratelimit reached while auto migrating assets, stopping") + AddAudioAssetToAudioMigrationQueue(AssetId, bypassQueueLimit=False, placeId = AssociatedPlaceId) + break + except EconomyAPIFailedException: + EconomyFailedCount += 1 + if EconomyFailedCount >= 4: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, stopping") + #AddAssetToMigrationQueue(AssetId, bypassQueueLimit=False) + break + else: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, retrying") + continue + except NoPermissionException: + logging.info(f"AutoAssetMigrator: No permission to migrate asset from Roblox, assetId: {AssetId}") + continue + except AssetDeliveryAPIFailedException: + logging.info(f"AutoAssetMigrator: AssetDelivery API failed while migrating asset, assetId: {AssetId}") + continue + except AssetOnCooldownException: + logging.info(f"AutoAssetMigrator: Asset is on cooldown, assetId: {AssetId}") + continue + except AssetNotAllowedException: + logging.info(f"AutoAssetMigrator: Asset is not allowed, assetId: {AssetId}") + continue + except AssetNotFoundException: + logging.info(f"AutoAssetMigrator: Asset not found, assetId: {AssetId}") + continue + except Exception as e: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, Exception: {str(e)} ,assetId: {AssetId}") + continue + except: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, assetId: {AssetId}") + continue + + redis_controller.delete("migrate_assets_lock") + + + +@scheduler.task('interval', id='fix_thumbnails', seconds = 600, misfire_grace_time=60) +def fix_thumbnails(): + with scheduler.app.app_context(): + if redis_controller.get("fix_thumbnails") is not None: + return + redis_controller.set("fix_thumbnails", "busy", ex=60) + from app.models.gameservers import GameServer + from app.models.asset_thumbnail import AssetThumbnail + from app.models.asset_version import AssetVersion + from app.models.asset import Asset + from app.models.user import User + from app.models.user_thumbnail import UserThumbnail + from app.models.place_icon import PlaceIcon + from app.util.assetversion import GetLatestAssetVersion + + from app.routes.thumbnailer import TakeThumbnail, TakeUserThumbnail + assetVersions = AssetVersion.query.filter( + ~db.session.query(AssetThumbnail.asset_id).filter( + AssetThumbnail.asset_id == AssetVersion.asset_id, + ).filter( + AssetThumbnail.asset_version_id == AssetVersion.version + ).exists() + ).join(Asset, Asset.id == AssetVersion.asset_id).filter( + and_( + Asset.moderation_status == 0, + Asset.asset_type != AssetType.Place + ) + ).distinct(AssetVersion.asset_id).order_by(AssetVersion.asset_id, AssetVersion.version.desc()).all() + + if len(assetVersions) > 0: + AssetTypeBrokenCounter = {} + logging.info(f"Found {len(assetVersions)} broken thumbnails") + SuccessCount = 0 + for assetVersion in assetVersions: + AssetObj : Asset = Asset.query.filter_by(id=assetVersion.asset_id).first() + if AssetObj is None: + continue + if AssetObj.asset_type == AssetType.Place: + continue + if AssetObj.moderation_status == 0: + LatestVersion : AssetVersion = GetLatestAssetVersion(AssetObj) + if LatestVersion is not assetVersion: + continue + Result = TakeThumbnail(assetVersion.asset_id) + if Result == "Thumbnail request sent": + SuccessCount += 1 + else: + if AssetObj.asset_type.name in AssetTypeBrokenCounter: + AssetTypeBrokenCounter[AssetObj.asset_type.name] += 1 + else: + AssetTypeBrokenCounter[AssetObj.asset_type.name] = 1 + if SuccessCount >= 30: + logging.info(f"Stopping thumbnail fixer, reached 30 thumbnails fixed") + break + + for key, value in AssetTypeBrokenCounter.items(): + logging.info(f"Thumbnail fixer: {value} {key} assets failed to fix") + users = User.query.filter(User.id.notin_(db.session.query(UserThumbnail.userid))).all() + for user in users: + TakeUserThumbnail(user.id) + users = UserThumbnail.query.filter(or_(UserThumbnail.full_contenthash == None, UserThumbnail.headshot_contenthash == None)).all() + for user in users: + TakeUserThumbnail(user.userid) + + Places : list[Asset] = Asset.query.filter(Asset.asset_type == AssetType.Place).filter(Asset.id.notin_(db.session.query(PlaceIcon.placeid))).all() + for PlaceObj in Places: + TakeThumbnail(PlaceObj.id, isIcon=True) + +@scheduler.task('interval', id='heartbeat', seconds=15, misfire_grace_time=10) +def heartbeat(): + with scheduler.app.app_context(): + if redis_controller.get("heartbeat") is not None: + return # Another instance is already running + redis_controller.set("heartbeat", "busy", ex=14) + from app.models.gameservers import GameServer + from app.models.placeserver_players import PlaceServerPlayer + from app.models.placeservers import PlaceServer + from app.models.user import User + from app.services.gameserver_comm import perform_get, perform_post + from app.routes.jobreporthandler import HandleUserTimePlayed + import requests + import time + import threading + + def HandlePlayerDeletion( playerObj : PlaceServerPlayer, placeId : int = None): + if placeId is not None: + try: + TotalTimePlayed = (datetime.datetime.utcnow() - playerObj.joinTime).total_seconds() + userObj : User = User.query.filter_by(id=playerObj.userid).first() + HandleUserTimePlayed(userObj, TotalTimePlayed, serverUUID = str(playerObj.serveruuid), placeId = placeId) + except Exception as e: + logging.warn(f"Failed to handle player deletion, Exception: {str(e)}") + db.session.delete(playerObj) + db.session.commit() + + def RefreshServerInfo( server : GameServer ): + with scheduler.app.app_context(): + server : GameServer = server + startTime = time.time() + statsRequest = None + try: + statsRequest = perform_get( + TargetGameserver = server, + Endpoint = "stats", + RequestTimeout = 6 + ) + except Exception as e: + # Mark the server as offline + server.isRCCOnline = False + server.thumbnailQueueSize = 0 + server.RCCmemoryUsage = 0 + server.heartbeatResponseTime = 0 + if server.lastHeartbeat < datetime.datetime.utcnow() - datetime.timedelta(seconds=90): + # Delete all placeservers + GhostServers = PlaceServer.query.filter_by(originServerId=server.serverId).all() + for GhostServer in GhostServers: + GhostPlayers = PlaceServerPlayer.query.filter_by(serveruuid=GhostServer.serveruuid).all() + for GhostPlayer in GhostPlayers: + HandlePlayerDeletion(GhostPlayer, placeId = GhostServer.serverPlaceId) + db.session.delete(GhostServer) + db.session.commit() + return + if statsRequest is not None and statsRequest.status_code != 200: + # Mark the server as offline + server.isRCCOnline = False + server.thumbnailQueueSize = 0 + server.RCCmemoryUsage = 0 + server.heartbeatResponseTime = 0 + if server.lastHeartbeat < datetime.datetime.utcnow() - datetime.timedelta(seconds=90): + # Delete all placeservers + GhostServers = PlaceServer.query.filter_by(originServerId=server.serverId).all() + for GhostServer in GhostServers: + GhostPlayers = PlaceServerPlayer.query.filter_by(serveruuid=GhostServer.serveruuid).all() + for GhostPlayer in GhostPlayers: + HandlePlayerDeletion(GhostPlayer, placeId = GhostServer.serverPlaceId) + db.session.delete(GhostServer) + db.session.commit() + return + if statsRequest is not None and statsRequest.status_code == 200: + endTime = time.time() + server.lastHeartbeat = datetime.datetime.utcnow() + server.heartbeatResponseTime = endTime - startTime + stats = statsRequest.json() + server.isRCCOnline = stats["RCCOnline"] + server.thumbnailQueueSize = stats["ThumbnailQueueSize"] + server.RCCmemoryUsage = stats["RCCMemoryUsage"] + db.session.commit() + + if "RunningJobs" in stats: + for RunningJob in stats["RunningJobs"]: + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid = RunningJob).first() + if PlaceServerObj is None: + logging.debug(f"CloseJob : Closing {RunningJob} because PlaceServer does not exist in database, Owner: {server.serverId} / {server.serverName}") + try: + CloseJobRequest = perform_post( + TargetGameserver = server, + Endpoint = "CloseJob", + JSONData = { + "jobid": RunningJob + } + ) + except Exception as e: + continue + + refresh_server_thread_list : list[threading.Thread] = [] + servers : list[GameServer] = GameServer.query.all() + for server in servers: + refresh_server_thread_list.append(threading.Thread(target=RefreshServerInfo, args=(server,))) + for thread in refresh_server_thread_list: + thread.start() + for thread in refresh_server_thread_list: + thread.join() + + GhostServers : list[PlaceServer] = PlaceServer.query.filter(PlaceServer.lastping < datetime.datetime.utcnow() - datetime.timedelta(seconds=60)).all() + for GhostServer in GhostServers: + GhostPlayers = PlaceServerPlayer.query.filter_by(serveruuid=GhostServer.serveruuid).all() + for GhostPlayer in GhostPlayers: + HandlePlayerDeletion(GhostPlayer, placeId = GhostServer.serverPlaceId) + db.session.delete(GhostServer) + + GhostPlayers : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter(PlaceServerPlayer.lastHeartbeat < datetime.datetime.utcnow() - datetime.timedelta(seconds=120)).all() + for GhostPlayer in GhostPlayers: + db.session.delete(GhostPlayer) + + db.session.commit() + + redis_controller.delete("heartbeat") diff --git a/app/files/2012Studio.lua b/app/files/2012Studio.lua new file mode 100644 index 0000000..e69de29 diff --git a/app/files/2014Gameserver.lua b/app/files/2014Gameserver.lua new file mode 100644 index 0000000..a766c8f --- /dev/null +++ b/app/files/2014Gameserver.lua @@ -0,0 +1,367 @@ + +print("Config Load") + +local placeId = {PlaceId} +local port = {NetworkPort} +local gameId = {PlaceId} +local CreatorId = {CreatorId} +local CreatorType = {CreatorType} +local TempPlaceAccessKey = "{TempPlaceAccessKey}" +local sleeptime = 1 +local access = "{AuthToken}" +local JobId = "{JobId}" +local BaseURL = "http://www.nexium.fit" +local BaseDomain = "nexium.fit" +local timeout = 15 + +local HttpService = game:GetService("HttpService") +local Players = game:GetService("Players") +local ScriptContext = game:GetService("ScriptContext") + +print("Starting server for place "..tostring(placeId).." on port "..tostring(port).." and job id "..JobId) + +------------------- UTILITY FUNCTIONS -------------------------- + +function waitForChild(parent, childName) + while true do + local child = parent:findFirstChild(childName) + if child then + return child + end + parent.ChildAdded:wait() + end +end + +function onDied(victim, humanoid) + return +end + +-----------------------------------END UTILITY FUNCTIONS ------------------------- + +-----------------------------------"CUSTOM" SHARED CODE---------------------------------- + +pcall(function() settings().Network.UseInstancePacketCache = true end) +pcall(function() settings().Network.UsePhysicsPacketCache = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + + +settings().Network.PhysicsSend = Enum.PhysicsSendMethod.TopNErrors +settings().Network.ExperimentalPhysicsEnabled = true +settings().Network.WaitingForCharacterLogRate = 100 +pcall(function() settings().Diagnostics:LegacyScriptMode() end) + +-----------------------------------START GAME SHARED SCRIPT------------------------------ + +local RobloxPlacesList = {{ + 4378 +}} + +function isPlaceOwnedByRoblox( place_id ) + for _, id in pairs( RobloxPlacesList ) do + if id == place_id then + return true + end + end + return false +end + +local assetId = placeId -- might be able to remove this now + +local scriptContext = game:GetService('ScriptContext') +scriptContext.ScriptsDisabled = true + +game:SetPlaceID(assetId, isPlaceOwnedByRoblox(assetId)) +pcall(function () if universeId ~= nil then game:SetUniverseId(universeId) end end) +pcall(function() game.JobId = JobId end) +game:GetService("ChangeHistoryService"):SetEnabled(false) + +if CreatorType == 1 then + CreatorType = Enum.CreatorType.User +elseif CreatorType == 2 then + CreatorType = Enum.CreatorType.Group +else + CreatorType = Enum.CreatorType.User +end + +pcall(function() game:SetCreatorID(CreatorId, CreatorType) end) + +-- establish this peer as the Server +local ns = game:GetService("NetworkServer") + +local badgeUrlFlagExists, badgeUrlFlagValue = pcall(function () return settings():GetFFlag("NewBadgeServiceUrlEnabled") end) +local newBadgeUrlEnabled = badgeUrlFlagExists and badgeUrlFlagValue +if BaseURL~=nil then + local apiProxyUrl = string.gsub(BaseURL, "http://www", "https://api") -- hack - passing domain (ie "sitetest1.robloxlabs.com") and appending "https://api." to it would be better + + pcall(function() game:GetService("Players"):SetAbuseReportUrl(BaseURL .. "/AbuseReport/InGameChatHandler.ashx") end) + pcall(function() game:GetService("ScriptInformationProvider"):SetAssetUrl(BaseURL .. "/Asset/") end) + pcall(function() game:GetService("ContentProvider"):SetBaseUrl(BaseURL .. "/") end) + pcall(function() game:GetService("Players"):SetChatFilterUrl(BaseURL .. "/Game/ChatFilter.ashx") end) + + if gameCode then + game:SetVIPServerId(tostring(gameCode)) + end + + game:GetService("BadgeService"):SetPlaceId(placeId) + + if access~=nil then + game:GetService("BadgeService"):SetAwardBadgeUrl(BaseURL .. "/Game/Badge/AwardBadge.ashx?UserID=%d&BadgeID=%d&PlaceID=%d") + game:GetService("BadgeService"):SetHasBadgeUrl(BaseURL .. "/Game/Badge/HasBadge.ashx?UserID=%d&BadgeID=%d") + game:GetService("BadgeService"):SetIsBadgeDisabledUrl(BaseURL .. "/Game/Badge/IsBadgeDisabled.ashx?BadgeID=%d&PlaceID=%d") + + game:GetService("FriendService"):SetMakeFriendUrl(BaseURL .. "/Friend/CreateFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetBreakFriendUrl(BaseURL .. "/Friend/BreakFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetGetFriendsUrl(BaseURL .. "/Friend/AreFriends?userId=%d") + game:GetService("FriendService"):SetCreateFriendRequestUrl(BaseURL .. "/Friend/CreateFriendRequest?requesterUserId=%d&requestedUserId=%d") + game:GetService("FriendService"):SetDeleteFriendRequestUrl(BaseURL .. "/Friend/DeleteFriendRequest?requesterUserId=%d&requestedUserId=%d") + end + game:GetService("BadgeService"):SetIsBadgeLegalUrl("") + game:GetService("InsertService"):SetBaseSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=10&type=base") + game:GetService("InsertService"):SetUserSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") + game:GetService("InsertService"):SetCollectionUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?sid=%d") + game:GetService("InsertService"):SetAssetUrl(BaseURL .. "/Asset/?id=%d") + game:GetService("InsertService"):SetAssetVersionUrl(BaseURL .. "/Asset/?assetversionid=%d") + + game:GetService("Players"):SetSaveDataUrl(BaseURL .. "/persistence/legacy/save?placeId=" .. tostring(placeId) .. "&userId=%d") + game:GetService("Players"):SetLoadDataUrl(BaseURL .. "/persistence/legacy/load?placeId=" .. tostring(placeId) .. "&userId=%d") + + --pcall(function() loadfile(BaseURL .. "/Game/LoadPlaceInfo.ashx?PlaceId=" .. placeId)() end) + + --pcall(function() + -- if access then + -- loadfile(BaseURL .. "/Game/PlaceSpecificScript.ashx?PlaceId=" .. placeId .. "&" .. access)() + -- end + -- end) +end + +--pcall(function() game:GetService("NetworkServer"):SetIsPlayerAuthenticationRequired(true) end) +settings().Diagnostics.LuaRamLimit = 0 +print("Configured Server") +local StartTime = tick() +local StoppingServer = false + +local function GetPlayerByUserId( userId ) + for _, player in pairs( Players:GetPlayers() ) do + if player.userId == userId then + return player + end + end + return nil +end + +local function ReportServerPlayers(IgnoreThisPlayer) + --if StoppingServer then return end + local success, message = pcall(function() + local PlayerList = {{}} + for _, player in pairs(Players:GetChildren()) do + if player:IsA("Player") and player ~= IgnoreThisPlayer then + table.insert(PlayerList, {{ + ["UserId"] = player.userId, + ["Name"] = player.Name + }}) + end + end + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["Players"] = PlayerList + }}) + local ResponseData = game:HttpPost(BaseURL.."/internal/gameserver/reportplayers", MessagePayload, true, "application/json") + local ResponseJSON = HttpService:JSONDecode(ResponseData) + for _, player in pairs(ResponseJSON["bad"]) do -- This is a list of players that need to be kicked from the server + local TargetPlayer = GetPlayerByUserId(player) + if TargetPlayer ~= nil then + print("Kicking Player", tostring(player), "because was requested by backend") + TargetPlayer:Kick("There was an issue authenticating you, please contact support.") + TargetPlayer:Destroy() + end + end + end) + if not success then + print("ReportServerPlayers failed:", message) + end +end + +local function ReportServerStats() + if StoppingServer then return end + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["PlaceId"] = placeId, + ["ServerAliveTime"] = (tick() - StartTime) + 1 + }}) + game:HttpPost(BaseURL.."/internal/gameserver/reportstats", MessagePayload, false, "application/json") + end) + if not success then + print("ReportServerStats failed:", message) + end +end + +local function ReportServerShutdown() + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["PlaceId"] = placeId, + ["ServerAliveTime"] = tick() - StartTime + }}) + game:HttpPost(BaseURL.."/internal/gameserver/reportshutdown", MessagePayload, false, "application/json") + end) + if not success then + print("ReportServerShutdown failed:", message) + end +end + +local function AuthenticatePlayer( player ) + local success, message = pcall(function() + local VerificationTicket = string.match( player.CharacterAppearance, BaseDomain.."/Asset/CharacterFetch.ashx%?userId=%d+%&t=(%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x)%&legacy=1$") + if VerificationTicket == nil then + print("Failed to get VerificationTicket for player", player.Name) + return false + end + + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["PlaceId"] = placeId, + ["ServerAliveTime"] = tick() - StartTime, + ["UserId"] = player.userId, + ["VerificationTicket"] = VerificationTicket, + ["CharacterAppearance"] = player.CharacterAppearance, + ["Username"] = player.Name + }}) + local ResponseData = game:HttpPost(BaseURL.."/internal/gameserver/verifyplayer", MessagePayload, true, "application/json") + local ResponseJSON = HttpService:JSONDecode(ResponseData) + return ResponseJSON["authenticated"] + end) + if not success then + print("AuthenticatePlayer failed:", message) + return false + end + return message +end + +local function ShutdownServer() + StoppingServer = true + ReportServerShutdown() + ScriptContext.ScriptsDisabled = true + ns:Stop(1000) + game:Shutdown() +end + +local TotalPlayersJoined = 0 +game:GetService("Players").PlayerAdded:connect(function(player) + local StartTime = tick() + local CharacterURL + repeat + if string.find(player.CharacterAppearance, BaseDomain.."/Asset/CharacterFetch.ashx%?userId=%d+") then + CharacterURL = player.CharacterAppearance + end + wait(0.1) + until CharacterURL ~= nil or tick() - StartTime > 1 + if CharacterURL == nil then + player:Kick("There was an issue authenticating you, please contact support.") + print("Failed to get UserId for player", player.Name, "because CharacterURL was nil") + return + end + + local UserId = tonumber(string.match(CharacterURL, BaseDomain.."/Asset/CharacterFetch.ashx%?userId=(%d+)%&t=%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x%&legacy=1$")) + + if UserId ~= nil then + player.userId = UserId + else + player:Kick("There was an issue authenticating you, please contact support.") + print("Failed to get UserId for player", player.Name, CharacterURL) + return + end + + local IsPlayerAuthenticated = AuthenticatePlayer(player) + if IsPlayerAuthenticated then + player.DataComplexityLimit = 1024 * 1024 * 1 + player.CharacterAppearance = BaseURL.."/Asset/CharacterFetch.ashx?userId="..tostring(player.userId).."&legacy=1" + ReportServerPlayers() + player:LoadData() + TotalPlayersJoined = TotalPlayersJoined + 1 + + local PlayerChangedConnection + PlayerChangedConnection = player.Changed:connect(function(property) + if property == "Name" then + ReportServerPlayers() + end + end) + + coroutine.wrap(function() + while true do + wait(120) + if StoppingServer then break end + if player.Parent == nil then break end + pcall(function() player:SaveData() end) + end + end)() + else + player:Kick("There was an issue authenticating you, please contact support.") + print("Failed to authenticate player", player.Name) + return + end +end) + + +game:GetService("Players").PlayerRemoving:connect(function(player) + ReportServerPlayers(player) + pcall(function() player:SaveData() end) + local PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + wait(10) -- Wait 10 seconds to see if anyone rejoins + PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + ShutdownServer() + end + end +end) + +local onlyCallGameLoadWhenInRccWithAccessKey = newBadgeUrlEnabled +wait() +-- load the game +print("Loading game") + +local success, result = pcall(function() + game:Load(BaseURL .. "/asset/?id=" .. placeId.."&access=".. TempPlaceAccessKey) +end) +if not success then + print("Failed to Load Place File, unsupported file format") + local ErrorMessage = Instance.new("Message", workspace) + ErrorMessage.Text = "Failed to Load Place File, unsupported file format" +end + +--Players:SetChatStyle(Enum.ChatStyle.ClassicAndBubble) +-- Now start the connection +ns:Start(port, sleeptime) + +if timeout then + scriptContext:SetTimeout(timeout) +end +scriptContext.ScriptsDisabled = false + +-- StartGame -- +Game:GetService("RunService"):Run() +ReportServerStats() + +coroutine.wrap(function() + while true do + wait(10) + if StoppingServer then break end + ReportServerStats() + ReportServerPlayers() + end +end)() + +coroutine.wrap(function() + wait(120) -- Wait 2 minutes to check if anyone has joined + if TotalPlayersJoined == 0 then + print("Stopping server, no players joined past 2 minutes.") + ShutdownServer() + end +end)() + +pcall(function() Game:GetService("ScriptContext"):AddStarterScript(37801172) end) diff --git a/app/files/2014Join.lua b/app/files/2014Join.lua new file mode 100644 index 0000000..ac1a8aa --- /dev/null +++ b/app/files/2014Join.lua @@ -0,0 +1,331 @@ + +pcall(function() game:SetPlaceID(-1, false) end) + +local startTime = tick() +local connectResolved = false +local loadResolved = false +local joinResolved = false +local playResolved = true +local playStartTime = 0 +local player = nil +local BaseURL = "http://www.nexium.fit" +local PlaceId = {PlaceId} + +settings()["Game Options"].CollisionSoundEnabled = true +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings().Physics.Is30FpsThrottleEnabled = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) +pcall(function() settings().Physics.PhysicsEnvironmentalThrottle = Enum.EnviromentalPhysicsThrottle.DefaultAuto end) + + +-- arguments --------------------------------------- +local threadSleepTime = 15 +local test = false + +local closeConnection = game.Close:connect(function() + if 0 then + if not connectResolved then + local duration = tick() - startTime; + elseif (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + end + if not joinResolved then + joinResolved = true + end + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + end + end +end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +game:GetService("ContentProvider"):SetThreadPool(16) +game:GetService("InsertService"):SetBaseSetsUrl(BaseURL.."/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl(BaseURL.."/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl(BaseURL.."/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl(BaseURL.."/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl(BaseURL.."/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl(BaseURL.."/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl(BaseURL.."/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl(BaseURL.."/ownership/hasasset?userId=%d&assetId=%d") end) +pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end) + +-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting +pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.Classic) end) +pcall( function() if settings().Network.MtuOverride == 0 then settings().Network.MtuOverride = 1400 end end) + +local waitingForCharacter = false; +local waitingForCharacterGuid = "26c3de03-3381-4ab6-8e60-e415fa757eba"; + + +-- globals ----------------------------------------- + +client = game:GetService("NetworkClient") +visit = game:GetService("Visit") + +-- functions --------------------------------------- +function ifSeleniumThenSetCookie(key, value) + game:GetService("CookiesService"):SetCookieValue(key, value) +end + +function setMessage(message) + game:SetMessage(message) +end +setMessage("Connecting to NEXIUM...") +function showErrorWindow(message, errorType, errorCategory) + if (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + end + if not joinResolved then + joinResolved = true + end + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + end + + game:SetMessage(message) +end + +function reportError(err, message) + print("***ERROR*** " .. err) + client:Disconnect() + wait(1) + showErrorWindow("Error: " .. err, message, "Other") +end + +-- called when the client connection closes +function onDisconnection(peer, lostConnection) + if lostConnection then + showErrorWindow("You have lost the connection to the game", "LostConnection", "LostConnection") + else + showErrorWindow("This game has shut down", "Kick", "Kick") + end +end + +function requestCharacter(replicator) + + -- prepare code for when the Character appears + local connection + connection = player.Changed:connect(function (property) + if property=="Character" then + game:ClearMessage() + waitingForCharacter = false + + connection:disconnect() + + if 0 then + if not joinResolved then + local duration = tick() - startTime; + joinResolved = true + + playStartTime = tick() + playResolved = false + end + end + end + end) + + setMessage("Requesting character") + + if 0 and not loadResolved then + local duration = tick() - startTime; + loadResolved = true + end + + local success, err = pcall(function() + replicator:RequestCharacter() + setMessage("Waiting for character") + waitingForCharacter = true + end) +end + +-- called when the client connection is established +function onConnectionAccepted(url, replicator) + connectResolved = true + --reportDuration("GameConnect", "Success", tick() - startTime, false) + + local waitingForMarker = true + + local success, err = pcall(function() + if not test then + visit:SetPing("", 300) + end + game:SetMessageBrickCount() + replicator.Disconnection:connect(onDisconnection) + + -- Wait for a marker to return before creating the Player + local marker = replicator:SendMarker() + + marker.Received:connect(function() + waitingForMarker = false + requestCharacter(replicator) + end) + end) + + if not success then + reportError(err,"ConnectionAccepted") + return + end + + -- TODO: report marker progress + + while waitingForMarker do + workspace:ZoomToExtents() + wait(0.5) + end +end + +-- called when the client connection fails +function onConnectionFailed(_, error) + showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error, "Other") +end + +-- called when the client connection is rejected +function onConnectionRejected() + connectionFailed:disconnect() + showErrorWindow("This game is not available. Please try another", "WrongVersion", "WrongVersion") +end + +idled = false +function onPlayerIdled(time) + if time > 20*60 then + showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle", "Idle") + client:Disconnect() + if not idled then + idled = true + end + end +end + +pcall(function() settings().Diagnostics:LegacyScriptMode() end) +coroutine.wrap(function() + game:SetRemoteBuildMode(true) + + setMessage("Fetching Place Info from NEXIUM") + --print("Fetching Place Info from Server") + local joinScriptUrl = nil + local AttemptCount = 0 + local success, result = nil, nil + while true do + success, result = pcall(function() + return game:HttpPost( BaseURL.."/Game/placelauncher.ashx?placeId="..tostring(PlaceId).."&rand="..tostring(math.random(1,9999999)), "{{}}", true, "application/json") + end) + --print("Placelauncher ["..tostring(AttemptCount).."]: "..tostring(result)) + + if success then + local JSONResponse = game:GetService("HttpService"):JSONDecode(result) + --print("Fetch Place Info Success, ["..tostring(AttemptCount).."]") + if JSONResponse["status"] == 1 then + setMessage("Waiting for Server to start... ( This may take a while ) [ "..tostring(AttemptCount).." ]") + --print("Placelauncher returned status 1") + elseif JSONResponse["status"] == 2 then -- Server Started + --print("Placelauncher returned status 2") + setMessage("Server Found! Connecting...") + joinScriptUrl = JSONResponse["joinScriptUrl"] + + break + else + setMessage("RequestFailed, message: "..JSONResponse["message"]) + error("RequestFailed, message: "..JSONResponse["message"]) + end + if AttemptCount > 15 then + setMessage("Placelauncher request timed out, please try again later") + error("Placelauncher request timed out, please try again later") + end + --print("Waiting 3 seconds before next fetch [ "..tostring(AttemptCount).." ]") + wait(3) + AttemptCount = AttemptCount + 1 + else + setMessage("Failed to get place launcher info: "..result) + error("Failed to get place launcher info: "..result) + end + end + + if not joinScriptUrl then + setMessage("Failed to get join script, please try again later") + error("Failed to get join script") + end + --print("Fetch JoinScriptUrl Success") + + local success, result = pcall(function() + return game:HttpGet(joinScriptUrl, true) + end) + if not success then + setMessage("Failed to get join script: "..result) + error("Failed to get join script: "..result) + end + + local JSONResponse = game:GetService("HttpService"):JSONDecode(result:sub(result:find("\n", 1, true)+1)) + + local MachineAddress = JSONResponse["MachineAddress"] + local ServerPort = JSONResponse["ServerPort"] + local PlayerUsername = JSONResponse["UserName"] + local PlayerId = JSONResponse["UserId"] + local AccountAge = JSONResponse["AccountAge"] + local GameSessionId = JSONResponse["SessionId"] + local CharacterAppearance = JSONResponse["CharacterAppearance"] + + setMessage("Welcome, "..PlayerUsername.."! Connecting to NEXIUM...") + --print("Connecting to "..MachineAddress..":"..tostring(ServerPort).." as "..PlayerUsername.." ("..tostring(PlayerId)..")") + wait(1.5) + + client.ConnectionAccepted:connect(onConnectionAccepted) + client.ConnectionRejected:connect(onConnectionRejected) + connectionFailed = client.ConnectionFailed:connect(onConnectionFailed) + client.Ticket = "" + + local ConnectionAttempt = 0 + while true do + setMessage("Connecting to Gameserver... [ "..tostring(ConnectionAttempt).." ]") + + local isConnectionSuccessful, player = pcall(function() + playerConnectSucces, player = pcall(function() return client:PlayerConnect(PlayerId, MachineAddress, ServerPort, 0, threadSleepTime) end) + if not playerConnectSucces then + --print("PlayerConnect function failed, fallback to legacy connect") + player = game:GetService("Players"):CreateLocalPlayer(0) + client:Connect(MachineAddress, ServerPort, 0, threadSleepTime) + end + + return player + end) + if isConnectionSuccessful then + break + else + if ConnectionAttempt > 5 then + error("Failed to connect to server: "..player) + end + ConnectionAttempt = ConnectionAttempt + 1 + wait(2) + end + end + + player:SetSuperSafeChat(false) + + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(Enum.MembershipType[JSONResponse["MembershipType"]]) end) + pcall(function() player:SetAccountAge(AccountAge) end) + pcall(function() player.Name = PlayerUsername end) + pcall(function() player.UserId = PlayerId end) + pcall(function() client:SetGameSessionID(GameSessionId) end) + pcall(function() game:SetPlaceID(PlaceId, false) end) + pcall(function() player.ChatMode = Enum.ChatMode.TextAndMenu end) + + player.Idled:connect(onPlayerIdled) + player.CharacterAppearance = CharacterAppearance + game:GetService("Players"):SetChatStyle(Enum.ChatStyle[JSONResponse["ChatStyle"]]) + + pcall(function() game:SetScreenshotInfo("") end) + pcall(function() game:SetVideoInfo('GamesROBLOX, video, free game, online virtual world') end) +end)() \ No newline at end of file diff --git a/app/files/2016Gameserver.lua b/app/files/2016Gameserver.lua new file mode 100644 index 0000000..112fc37 --- /dev/null +++ b/app/files/2016Gameserver.lua @@ -0,0 +1,213 @@ +local PlaceId, Port, BaseURL, AuthToken, CreatorId, CreatorType, DownloadAuthorizationToken = ... + +local RunService = game:GetService("RunService") +local ContentProvider = game:GetService("ContentProvider") +local Players = game:GetService("Players") +local HttpService = game:GetService("HttpService") +local ScriptContext = game:GetService('ScriptContext') +local RobloxReplicatedStorage = game:GetService('RobloxReplicatedStorage') + +HttpService.HttpEnabled = false -- Disable HttpService for security reasons + +if CreatorType == 1 then + CreatorType = Enum.CreatorType.User +elseif CreatorType == 2 then + CreatorType = Enum.CreatorType.Group +else + CreatorType = Enum.CreatorType.User +end +pcall(function() game:SetCreatorID(CreatorId, CreatorType) end) + +pcall(function() settings().Network.UseInstancePacketCache = true end) +pcall(function() settings().Network.UsePhysicsPacketCache = true end) +--pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.FIFO end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +--settings().Network.PhysicsSend = 1 -- 1==RoundRobin +--settings().Network.PhysicsSend = Enum.PhysicsSendMethod.ErrorComputation2 +settings().Network.PhysicsSend = Enum.PhysicsSendMethod.TopNErrors +settings().Network.ExperimentalPhysicsEnabled = true +settings().Network.WaitingForCharacterLogRate = 100 +pcall(function() settings().Diagnostics:LegacyScriptMode() end) + +pcall(function() ScriptContext:AddStarterScript(37801172) end) +ScriptContext.ScriptsDisabled = true + +game:SetPlaceID(PlaceId, false) +game:GetService("ChangeHistoryService"):SetEnabled(false) +local NetworkServer = game:GetService("NetworkServer") + +if BaseURL~=nil then + pcall(function() game:GetService("Players"):SetAbuseReportUrl(BaseURL .. "/AbuseReport/InGameChatHandler.ashx") end) + pcall(function() game:GetService("ScriptInformationProvider"):SetAssetUrl(BaseURL .. "/Asset/") end) + pcall(function() game:GetService("ContentProvider"):SetBaseUrl(BaseURL .. "/") end) + pcall(function() game:GetService("Players"):SetChatFilterUrl(BaseURL .. "/Game/ChatFilter.ashx") end) + + game:GetService("BadgeService"):SetPlaceId(PlaceId) + game:GetService("BadgeService"):SetIsBadgeLegalUrl("") + game:GetService("BadgeService"):SetAwardBadgeUrl(BaseURL .. "/Game/Badge/AwardBadge.ashx?UserID=%d&BadgeID=%d&PlaceID=%d") + game:GetService("BadgeService"):SetHasBadgeUrl(BaseURL .. "/Game/Badge/HasBadge.ashx?UserID=%d&BadgeID=%d") + game:GetService("BadgeService"):SetIsBadgeDisabledUrl(BaseURL .. "/Game/Badge/IsBadgeDisabled.ashx?BadgeID=%d&PlaceID=%d") + + game:GetService("InsertService"):SetBaseSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=10&type=base") + game:GetService("InsertService"):SetUserSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") + game:GetService("InsertService"):SetCollectionUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?sid=%d") + game:GetService("InsertService"):SetAssetUrl(BaseURL .. "/Asset/?id=%d") + game:GetService("InsertService"):SetAssetVersionUrl(BaseURL .. "/Asset/?assetversionid=%d") + + game:GetService("Players"):SetSaveDataUrl(BaseURL .. "/persistence/legacy/save?userId=%d") + game:GetService("Players"):SetLoadDataUrl(BaseURL .. "/persistence/legacy/load?userId=%d") + + game:GetService("FriendService"):SetMakeFriendUrl(BaseURL .. "/Friend/CreateFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetBreakFriendUrl(BaseURL .. "/Friend/BreakFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetGetFriendsUrl(BaseURL .. "/Friend/AreFriends?userId=%d") + game:GetService("FriendService"):SetCreateFriendRequestUrl(BaseURL .. "/Friend/CreateFriendRequest?requesterUserId=%d&requestedUserId=%d") + game:GetService("FriendService"):SetDeleteFriendRequestUrl(BaseURL .. "/Friend/DeleteFriendRequest?requesterUserId=%d&requestedUserId=%d") + + --pcall(function() loadfile(BaseURL .. "/Game/LoadPlaceInfo.ashx?PlaceId=" .. PlaceId)() end) idk what this is suppose to return +end + +pcall(function() + game:GetService("NetworkServer"):SetIsPlayerAuthenticationRequired(false) +end) +settings().Diagnostics.LuaRamLimit = 0 + +local StartTime = tick() +local StoppingServer = false +local function ReportServerPlayers(IgnoreThisPlayer) + --if StoppingServer then return end + local success, message = pcall(function() + local PlayerList = {} + for _, player in pairs(Players:GetChildren()) do + if player:IsA("Player") and player ~= IgnoreThisPlayer then + table.insert(PlayerList, { + ["UserId"] = player.UserId, + ["Name"] = player.Name + }) + end + end + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["Players"] = PlayerList + }) + local ResponseData = game:HttpPost(BaseURL.."/internal/gameserver/reportplayers", MessagePayload, true, "application/json") + local ResponseJSON = HttpService:JSONDecode(ResponseData) + for _, player in pairs(ResponseJSON["bad"]) do -- This is a list of players that need to be kicked from the server + local TargetPlayer = Players:GetPlayerByUserId(player) + if TargetPlayer ~= nil then + TargetPlayer:Kick("There was an issue authenticating you, please contact support.") + TargetPlayer:Destroy() + end + end + + end) +end + +local function ReportServerStats() + if StoppingServer then return end + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["ServerAliveTime"] = (tick() - StartTime) + 1 + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportstats", MessagePayload, false, "application/json") + end) +end + +local function ReportServerShutdown() + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["ServerAliveTime"] = tick() - StartTime + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportshutdown", MessagePayload, false, "application/json") + end) +end + +local function ShutdownServer() + StoppingServer = true + ReportServerShutdown() + ScriptContext.ScriptsDisabled = true + game:HttpPost("http://127.0.0.1:3000/CloseJob?RCCReturnAuth="..AuthToken, HttpService:JSONEncode({ + ["jobid"] = game.JobId + }), false, "application/json") +end + +if PlaceId ~= nil and BaseURL ~= nil then + wait() + local success, message = pcall(function() + game:Load(BaseURL.."/asset/?id="..tostring(PlaceId).."&access="..DownloadAuthorizationToken) + end) + if not success then + -- Report error + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["Error"] = message + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportfailure", MessagePayload, false, "application/json") + -- Lets start the server but with an empty place and a error message + local NewMessage = Instance.new("Message", workspace) + NewMessage.Text = "There was an error loading this place file, Error Message: "..message..", PlaceId: "..tostring(PlaceId)..", JobId: "..tostring(game.JobId) + end +end + +NetworkServer:Start(Port) +ScriptContext:SetTimeout(10) +ScriptContext.ScriptsDisabled = false + +local TotalPlayersJoined = 0 + +Players.PlayerAdded:Connect(function(player) + ReportServerPlayers() + TotalPlayersJoined = TotalPlayersJoined + 1 + player.DataComplexityLimit = 1024 * 1024 * 1 + player:LoadData() + + coroutine.wrap(function() + while true do + wait(120) + if StoppingServer then break end + if player.Parent == nil then break end + player:SaveData() + end + end)() +end) +Players.PlayerRemoving:Connect(function(player) + ReportServerPlayers(player) + player:SaveData() + local PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + wait(10) -- Wait 10 seconds to see if anyone rejoins + PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + ShutdownServer() + end + end +end) + +game:GetService("RunService"):Run() +ReportServerStats() + +coroutine.wrap(function() + while true do + wait(20) + if StoppingServer then break end + ReportServerStats() + ReportServerPlayers() + end +end)() + +coroutine.wrap(function() + wait(120) -- Wait 2 minutes to check if anyone has joined + if TotalPlayersJoined == 0 then + warn("Stopping server, no players joined past 2 minutes.") + ShutdownServer() + end +end)() diff --git a/app/files/2020RCCService.json b/app/files/2020RCCService.json new file mode 100644 index 0000000..7c9b2be --- /dev/null +++ b/app/files/2020RCCService.json @@ -0,0 +1,3289 @@ +{ + "applicationSettings": + { + "AllowVideoPreRoll": true, + "AndroidSwipeGestureUseStartingPosition": true, + "AxisAdornmentGrabSize": 12, + "DFFlagTheseAreSomeOfMyBestAttributes": true, + "FFlagTheseAreSomeOfMyBestAttributes": true, + "BFTableOutputViewRolloutPercent": 20, + "CaptureCountersIntervalInMinutes": 5, + "CaptureQTStudioCountersEnabled": true, + + "DEPRECATED_GoogleAnalyticsLoadStudio": 1, + "DFFlagAbuseReportScreenshot": true, + "FFlagOldInGameMenuDisplayNameForAll3": true, + "FFlagPlayerListUseDisplayName": true, + "DFFlagAccoutrementWeldingFilteringEnabled": false, + "DFFlagAddDisplayNameToGetFriendsOnline": true, + "DFFlagAddDisplayNameToGetFriendsResult": true, + "DFFlagAdditionalNetworkLogInfo": true, + "DFFlagAddMetricsToTextScraperHttpRequest": true, + "DFFlagAdminServerLogs": true, + "DFFlagAllowAnimateScripts": true, + "DFFlagAllowDataSendBandwidthFullScale": true, + "DFFlagAllowHumanoidApplyDescriptionForLocalHumanoids": true, + "DFFlagAllowHumanoidApplyDescriptionForLocalHumanoids_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;5352380039", + "DFFlagAllowPackageLinkAncestoryClone": true, + "DFFlagAlwaysLongStep": true, + "DFFlagAlwaysSynchronizeFmodChannelModeOn3dParameterChanges": true, + "DFFlagAnalyticsNS1BeaconSupportLimitedRobloxUrls": true, + "DFFlagAnalyticsReportHttpStatsAtExit": true, + "DFFlagAnalyticsServiceEventsRateMetrics": true, + "DFFlagAnalyticsServiceMonitoring2": true, + "DFFlagAnalyticsServiceNotEnrolledLogErrorAndReturn": true, + "DFFlagAnalyticsServicePlayingDuration": false, + "DFFlagAnalyticsServiceReportStats": true, + "DFFlagAnalyticsServiceStandardEventsSupportEmptyDictionary": true, + "DFFlagAnalyticsServiceVerifyFireCustomEventsNamePrefix": true, + "DFFlagAnalyticsServiceVerifyFireEventName": true, + "DFFlagAngularVelocityReactionTorqueEnabled": true, + "DFFlagAnimateScriptDeprecatedApiAndBugFixesNov20": false, + "DFFlagAnimatorAnimationPlayed": true, + "DFFlagAnimatorApplyJointVelocities": true, + "DFFlagAnimatorEnableBone": true, + "DFFlagAnimatorEnableBone_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "DFFlagAnimatorNewModelSearchAnalytics": false, + "DFFlagAnimatorNewModelSearchEnabled2": false, + "DFFlagAnimatorOnSteppedKeepAlive": true, + "DFFlagAsyncHttpQueueTrackRequestAnalytics": true, + "DFFlagAttributeShortCircuit": true, + "DFFlagAttributeTelemetry": false, + "DFFlagAvatarEditorServiceAnalytics": false, + "DFFlagAvatarEditorServiceAnalytics_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;5352380039;2431195974", + "DFFlagAvatarEditorServiceAppendStandardArgs": true, + "DFFlagAvatarEditorServiceEnabled2": false, + "DFFlagAvatarEditorServiceEnabled2_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;5352380039;2431195974", + "DFFlagAvoidDivisionByZeroForZeroComponentSize": true, + "DFFlagBackPressureThrottlingEnabled": true, + "DFFlagBackupStreamingFocusLastPlayerPosition": true, + "DFFlagBandwidthBasedClusterSenderByteBudget": true, + "DFFlagBandwidthBasedTouchSenderByteBudget": true, + "DFFlagBatchAssetApiNoFallbackOnFail": true, + "DFFlagBetterAddInstance": true, + "DFFlagBoxMappedMeshLODFix_v2": true, + "DFFlagBroadphaseReportOnlyUnthrottled": true, + "DFFlagCacheAverageClientPing": true, + "DFFlagCatchBuildRigFromAttachmentsExceptions": true, + "DFFlagCatchMotorAngleErrors": true, + "DFFlagCheckAssemblyWhenWakeFromContactRemove": true, + "DFFlagCheckCoreLocalizationLoading": true, + "DFFlagCheckCSGSharedStringProp": false, + "DFFlagCheckDecryptionResults": true, + "DFFlagCheckFMODInitThreading2": true, + "DFFlagCheckFMODInitThreadingUnlockOnlyWhenLocked": true, + "DFFlagCheckParentInJoinCacheInsteadOfWalkingDMTree2": true, + "DFFlagCheckTeamCreateReplicatorQueue": true, + "DFFlagClampOVLengthAtFirstParsingError": true, + "DFFlagCleanCacheMoveMutex": true, + "DFFlagCLI120342": true, + "DFFlagCLI36802_Add": false, + "DFFlagCLI36802_Enable": true, + "DFFlagClientCanSimulateUsesNOUs": true, + "DFFlagClientHappyNewYear1": true, + "DFFlagClientJoinProcessToEventIngest": true, + "DFFlagClientNetworkSendGameInstanceId": true, + "DFFlagClientRobloxGoogleAnalyticsFix": true, + "DFFlagClientStreamingRadiusRoundConsistency": true, + "DFFlagCloseRedirectedLocalAssetIds": true, + "DFFlagCloudTablesPhase2_TrackAndTimeoutHangingThreads": true, + "DFFlagClusterSenderByteBudget": true, + "DFFlagComputeSolverDisplacementForWake": true, + "DFFlagComputeSolverDisplacementForWake_PlaceFilter": "True;679715583", + "DFFlagConnectIPv6ServerInLAN": true, + "DFFlagConserveRegionRadiusOnGC": true, + "DFFlagConsiderDSPHeadAsOutput": true, + "DFFlagConsumePlatformNameOverAlternateName": false, + "DFFlagCreateHumanoidModelFromDescriptionEnabled": true, + "DFFlagCreateHumanoidModelFromDescriptionEnabled_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;5352380039", + "DFFlagCreateServerPlayerSetsIdAndName": true, + "DFFlagCSGOperationsGetCommonParentOrWorkspaceCrashFix": true, + "DFFlagCSGOperationsRespectsCollisionFidelityAtCreation": true, + "DFFlagCSGOperationStatisticsGA": true, + "DFFlagCSGv2NormalSmoothing": true, + "DFFlagCSGv2StatisticsFix": true, + "DFFlagCSGv2UseMegaAssetFetcher": true, + "DFFlagCurlReportResolvedIp": true, + "DFFlagCyclicExecutiveThrottlingCancelWorldStepAccum": false, + "DFFlagDataModelFasterTaskProcessing": true, + "DFFlagDataSenderByteBudget": true, + "DFFlagDataStoreAutoHttpRetry": false, + "DFFlagDataStoreEnableKeyLogging": true, + "DFFlagDataStoreEnableKeyLoggingEventStreams": true, + "DFFlagDataStoreInitialThrottlingBudgetFix": true, + "DFFlagDataStoreLargeValueError": true, + "DFFlagDataStoreLargeValueError_PlaceFilter": "True;2910792538;69184822", + "DFFlagDataStoreLostDataFixEnable": true, + "DFFlagDataStoreReportJSONParsingError": true, + "DFFlagDataStoreStopUsingSerializedVersion": false, + "DFFlagDataStoreTrackNewAPIRequest": true, + "DFFlagDataStoreUpdateGetAPI": true, + "DFFlagDataStoreUpdateGetAPI_PlaceFilter": "True;2432005634;70501379;2910792538", + "DFFlagDataStoreUpdateGetSortedAPI": true, + "DFFlagDataStoreUpdateGetSortedAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateIncrementAPI": true, + "DFFlagDataStoreUpdateIncrementAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateOnUpdateAPI": true, + "DFFlagDataStoreUpdateOnUpdateAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateRemoveAPI": true, + "DFFlagDataStoreUpdateRemoveAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateSetAPI": true, + "DFFlagDataStoreUpdateSetAPI_PlaceFilter": "True;2432005634;70501379;2910792538", + "DFFlagDataStoreUpdateSetIfAPI": true, + "DFFlagDataStoreUpdateSetIfAPI_PlaceFilter": "True;2910792538", + "DFFlagDebugAnalyticsForXBoxCrash": true, + "DFFlagDebugAnalyticsForXBoxCrashOnSuccessAlso": true, + "DFFlagDebugCurlOption12": true, + "DFFlagDebugCurlOption22": true, + "DFFlagDebugCurlOption32": true, + "DFFlagDebugCurlOption42": true, + "DFFlagDebugEnableRemoteProfiling2": true, + "DFFlagDebugGAReportThrottledSessions": true, + "DFFlagDebugLaunchTimeByCountryPlaceSpecific_PlaceFilter": "true;189707", + "DFFlagDebugLogAvatarLoadTimeStatsByPlace": false, + "DFFlagDebugLogAvatarLoadTimeStatsByPlace_PlaceFilter": "True;189707", + "DFFlagDebugRakPeerReceive": true, + "DFFlagDebugRakPeerReceiveCountDistributedPackets": true, + "DFFlagDebugRealityCheck3": true, + "DFFlagDebugReportSoundAssetsFromList": true, + "DFFlagDebugVisualizerTrackRotationPredictions": true, + "DFFlagDeferDangerousDeletion": true, + "DFFlagDeferTickleAssemblyWakes2": true, + "DFFlagDeferTickleAssemblyWakes2_PlaceFilter": "False;441585237", + "DFFlagDeserializeBinaryMoreDiag2": true, + "DFFlagDetailedBandwidthStatsInflux_PlaceFilter": "true;4599786547", + "DFFlagDeveloperEventIngestSendBatchAtFixedRate": false, + "DFFlagDeveloperEventIngestSendBatchV2_PlaceFilter": "True;3182856628", + "DFFlagDisableAllJoinToolJoining": true, + "DFFlagDisableClientApiDump": true, + "DFFlagDisableEmoteFetchForNonPositiveUserId": true, + "DFFlagDisableLegacyTriangleMeshDataPipeline": true, + "DFFlagDisableRotateJointFromJoinToOutsiders2": true, + "DFFlagDisallowMP3ChangeCopyright": true, + "DFFlagDisallowMP3ChangeEmphasis": true, + "DFFlagDisallowMP3ChangeErrorProtection": true, + "DFFlagDisallowMP3ChangeExtension": true, + "DFFlagDisallowMP3ChangeIISbLimit": true, + "DFFlagDisallowMP3ChangeJBSound": true, + "DFFlagDisallowMP3ChangeLayer": true, + "DFFlagDisallowMP3ChangeLSF": true, + "DFFlagDisallowMP3ChangeMPEG25": true, + "DFFlagDisallowMP3ChangeSamplingFrequency": true, + "DFFlagDisallowMP3ChangeStereo": true, + "DFFlagDistributeSoundLoadingAcrossAsyncThreads": true, + "DFFlagDoNotRenderMeshLODByDefault": true, + "DFFlagDoNotRunAnimationEditorInPlayMode": true, + "DFFlagDontCallOnMovingAssemblyRoot": false, + "DFFlagDontClearForwardRefDuringPendingRemovals": true, + "DFFlagDontClearForwardRefMapOnGC": true, + "DFFlagDontEnforceChildOrderAtJoin": false, + "DFFlagDontWalkOnReparent": false, + "DFFlagDontWhitelistUserInputConnectionCounts": true, + "DFFlagDoParallelInterpolationSetPV2": true, + "DFFlagDynamicReloaderDoWork": true, + "DFFlagEconomyCreatorStatsApiWhitelist": true, + "DFFlagEnable17sNotifications": true, + "DFFlagEnableAnalyticsSeriveEventIngest_PlaceFilter": "False;5184420076", + "DFFlagEnableAnalyticsServiceNewStandardEventsAPIs": true, + "DFFlagEnableAnalyticsServiceSetApiKeyEventSteam": true, + "DFFlagEnableApiProxyToGroupsApi": true, + "DFFlagEnableBetterStringEscaping": true, + "DFFlagEnableDateTimeInReplicator": true, + "DFFlagEnableExtendedHardwareTelemetry": true, + "DFFlagEnableFillCylinder": true, + "DFFlagEnableFillWedge": true, + "DFFlagEnableGCapsHardwareTelemetry": true, + "DFFlagEnableHardwareTelemetry": true, + "DFFlagEnableHttpProxy": false, + "DFFlagEnableHumanoidControllerSubstepping": false, + "DFFlagEnableHumanoidControllerSubstepping_PlaceFilter": "True;4306999063", + "DFFlagEnableHumanoidDescriptionApplicationCounter": true, + "DFFlagEnableInferredOOMTelemetry": true, + "DFFlagEnableInfluxTestInProductionTag": true, + "DFFlagEnableInfluxTestInProductionTag_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnableIOSGPUFriendlyName": true, + "DFFlagEnableLowerFrequencyWorldSteps": false, + "DFFlagEnableLowerFrequencyWorldSteps_PlaceFilter": "True;4306999063", + "DFFlagEnableLuaApiToRegisterEncryptedAssets": false, + "DFFlagEnableLuaApiToRegisterEncryptedAssets_PlaceFilter": "True;5646917919;5535247402;5650743011;5732185084;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5180703112;5036207802;5947859215;5968314783;5976554489;5967514178;5762783081;4927429832;5271804927", + "DFFlagEnableMacWindowCloseButton": true, + "DFFlagEnableMeshPartHeadsProperty_PlaceFilter": "True;189707;2573981315", + "DFFlagEnableMessagingService": true, + "DFFlagEnableMessagingServiceAnalysis": true, + "DFFlagEnablePerfAudioCollection": false, + "DFFlagEnablePerfAudioCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataCollection": true, + "DFFlagEnablePerfDataCoreCategoryTimersCollection": false, + "DFFlagEnablePerfDataCoreCategoryTimersCollection2": false, + "DFFlagEnablePerfDataCoreCategoryTimersCollection2_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataCoreTimersCollection": false, + "DFFlagEnablePerfDataCoreTimersCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataExtendedMemoryCollection": false, + "DFFlagEnablePerfDataExtendedMemoryCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataGatherTelemetry": false, + "DFFlagEnablePerfDataGatherTelemetry_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataLocalStorageCollection": true, + "DFFlagEnablePerfDataMemoryCategoriesCollection": false, + "DFFlagEnablePerfDataMemoryCategoriesCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataMemoryCollection": true, + "DFFlagEnablePerfDataSubsystemTimersCollection": false, + "DFFlagEnablePerfDataSubsystemTimersCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataTimerCollection": false, + "DFFlagEnablePerfDataTimerCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfStatsCollection2": false, + "DFFlagEnablePerfStatsCollection2_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePIICulling": true, + "DFFlagEnablePlaceFiltersForLuaDefinedFlags": false, + "DFFlagEnablePlaceFiltersForLuaDefinedFlags_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215", + "DFFlagEnablePlayFabBatchEventCompression": false, + "DFFlagEnableRemoteProfiling": true, + "DFFlagEnableRemoteProfilingForDevConsole": true, + "DFFlagEnableReverseCSGDataMigration": false, + "DFFlagEnableSessionCount": true, + "DFFlagEnableSoapMicroprofiles": true, + "DFFlagEnableStrictRiffParsing": true, + "DFFlagEnableTelegrafPriorityTag": true, + "DFFlagEnableThirdPartyTeleportProtection": true, + "DFFlagEnableUsersEndpoint": true, + "DFFlagEphemeralCounterInfluxReportingEnabled": true, + "DFFlagEphemeralStatsInfluxReportingEnabled": true, + "DFFlagESGamePerfMonitorEnabled": true, + "DFFlagExperimentalServCommsSendOptimization": false, + "DFFlagExperimentalServCommsSendOptimization_PlaceFilter": "True;5646917919;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5947859215;5968314783;5976554489;5967514178;5762783081;4927429832;5271804927", + "DFFlagExposeAttributesEarly": true, + "DFFlagExternalWakesWholeMechanism": true, + "DFFlagFasterDataModelPatcherRollbacks": true, + "DFFlagFastVisuallyMovingCounters2": false, + "DFFlagFavorIPV4Connections": false, + "DFFlagFileSystemCheckReadSize": true, + "DFFlagFindClosestHandleHitTestFixEnabled": true, + "DFFlagFixBadges": true, + "DFFlagFixCutAndUndoAfterSavingCSGUnionToNewFile": true, + "DFFlagFixEmotesInventoryOverwrite": true, + "DFFlagFixEquipToolAssertWhenHumanoidNotInDataModel": true, + "DFFlagFixFreefallFrictionResetAfterBodyPartChange": true, + "DFFlagFixMeshNormalsForNonUniformScaling": true, + "DFFlagFixMotorAngleUpdatesOnReceive": true, + "DFFlagFixPlayFabDuplicateEvents": true, + "DFFlagFixPreloadAsyncCallbackBlocking": true, + "DFFlagFixRootPartCollisionForR6": true, + "DFFlagFixSpm": true, + "DFFlagFixStandardCursorPagesUnexpectedDataType": false, + "DFFlagFixStandardCursorPagesUnexpectedDataType_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;2431195974", + "DFFlagFixUncaughtModuleContentSetParentException": true, + "DFFlagForcePubKeyExchange33": true, + "DFFlagForceScActive": true, + "DFFlagFriendsV2BadAccessFix": true, + "DFFlagFRMAdjustVoxelizerBudgetWhileLoading": true, + "DFFlagFRMPauseThrottlingWhileLoading": true, + "DFFlagGCNotAlwaysMemory": true, + "DFFlagGCReducesQuota2": true, + "DFFlagGenerateMeshLOD_Fix1": true, + "DFFlagGetBundleDetailsAPI": true, + "DFFlagGetFriendsOnlineCachingEnabled": true, + "DFFlagGetRobloxSecurityCookieFix": true, + "DFFlagGetTeamLazyEvaluation": true, + "DFFlagGlobalToggle17sApis": true, + "DFFlagGoodbyeChoiceActiveProperty": true, + "DFFlagGroupTeleportAddTeleportIdParameter": true, + "DFFlagGroupTeleportJoinDataOverWrite": true, + "DFFlagGuidDebugStringIgnoreScopeLength": true, + "DFFlagGuidsGetGood2": false, + "DFFlagGuiItemRetainReference": true, + "DFFlagGuiTrackInsertionOrder": true, + "DFFlagGuiTrackInsertionOrder2": true, + "DFFlagHACDFixCrashCoplanarFaceCrash": true, + "DFFlagHACDUseDistancePlaneChecks": true, + "DFFlagHardHangTimeoutEnabled": true, + "DFFlagHidePartSurfaceProperties": true, + "DFFlagHideProxySettings": true, + "DFFlagHideStreamingPropsWhenNotStreaming": true, + "DFFlagHideThirdPartyTeleportErrorDialog": true, + "DFFlagHttpAdditionalBandwidthMetrics": true, + "DFFlagHttpBatchCompress": true, + "DFFlagHttpCacheAsync": true, + "DFFlagHttpCacheAsyncWriterOne": true, + "DFFlagHttpCacheMissingRedirects": true, + "DFFlagHttpCleanupRbxCurl": true, + "DFFlagHttpClientFixReqUrlRaceInLog": true, + "DFFlagHttpDynamicSuccessStatusCode": true, + "DFFlagHttpFixCookieParsing": true, + "DFFlagHttpMarkExternalRequests": true, + "DFFlagHttpMoveCacheStatistics": true, + "DFFlagHttpNetworkType": false, + "DFFlagHttpRbxApiEnable17sApis": true, + "DFFlagHttpRbxApiServiceDontRetryOn429": true, + "DFFlagHttpServiceBetterUserAgent": false, + "DFFlagHttpServiceErrorEventLog": false, + "DFFlagHttpTcpKeepalive": true, + "DFFlagHttpTlsVerificationErrorCode": true, + "DFFlagHumanoidBetterFindLadder2": true, + "DFFlagHumanoidDescriptionAssetTypeIdVerification2": true, + "DFFlagHumanoidDescriptionAssetTypeIdVerification2_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;5352380039", + "DFFlagHumanoidDescriptionAssetTypeVerificationApi": false, + "DFFlagHumanoidDescriptionAssetTypeVerificationApi_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215;5352380039;2431195974", + "DFFlagHumanoidDisplayNameEnabled": true, + "DFFlagHumanoidOnlyStepInWorkspace": false, + "DFFlagHumanoidRequiresNeckEnabled": true, + "DFFlagHumanoidWithPGSConstraintsUsePhysicsState": true, + "DFFlagHumanReadableTimestampInLogs": true, + "DFFlagIgnorePortForIPv6Address": false, + "DFFlagImportColorMapImprovements": true, + "DFFlagInfluxAddLocationField": true, + "DFFlagInfluxBlankFieldFix": true, + "DFFlagInfluxEnableTypeEventTag": true, + "DFFlagInfluxReportLastVisitedUrl": false, + "DFFlagInfluxTagRefactor": true, + "DFFlagInitiateMultipleParallelConnection": true, + "DFFlagInWithTheNew_PlaceFilter": "true;1034242130;2528277338", + "DFFlagIPV6RobloxStudioCleanUp1": true, + "DFFlagJDIv2PacketBoundsCheck": true, + "DFFlagJumpScaresP2": true, + "DFFlagLimitDPIScale": false, + "DFFlagLmsClientReportRtt": true, + "DFFlagLocalThrottlingPerDomainMetrics": true, + "DFFlagLocalThrottlingReportStatistics": true, + "DFFlagLockRegistryMutexWhenCopying": true, + "DFFlagLockTheftInstanceCrash": true, + "DFFlagLockViolationInstanceCrash": false, + "DFFlagLockViolationScriptCrash": false, + "DFFlagLogsChunked": true, + "DFFlagLSRemoveFilePathUsingRegEx": true, + "DFFlagLSRemoveFilePathUsingRegEx2": true, + "DFFlagMapLocalhostTo127Address": true, + "DFFlagMapPlaceLauncherErrorToTeleportError": true, + "DFFlagMarginallyFasterVisuallyMovingCounters": true, + "DFFlagMegaChildRemovedNewParentCompletionCountFix": true, + "DFFlagMegaReplicatorDisconnectSwapAndPop": false, + "DFFlagMegaReplicatorFixAndLogConnDataInfo": true, + "DFFlagMegaReplicatorFixAndLogConnDataInfo_DataCenterFilter": "True;214;295", + "DFFlagMegaReplicatorLazyExpandConnDataPrep": true, + "DFFlagMegaRepOnlyClearWhenNewlyAlive": true, + "DFFlagMeshLoDV22": true, + "DFFlagMeshLoDV22_PlaceFilter": "True;5505305045;5438291517;5423642405;4656923017;4657384818;4599786547", + "DFFlagMeshLODVertexNormalFix": true, + "DFFlagMeshOptimizerV015": false, + "DFFlagMessagingServiceFixErrorMessage": true, + "DFFlagMessagingServiceFixUnsubscribeTwiceOnClose": true, + "DFFlagMessagingServiceSentUtcTime2": true, + "DFFlagMicroprofileGroupAtLastStack": true, + "DFFlagModelMeshComputer": false, + "DFFlagModelMeshComputer_PlaceFilter": "True;4188482811;3049501746", + "DFFlagModelMeshComputer2": true, + "DFFlagModelMeshComputer2_PlaceFilter": "True;3049501746", + "DFFlagModelMeshPlaceholder": true, + "DFFlagMoreDataModelPatcherTelemetry": true, + "DFFlagMoreRaData": true, + "DFFlagMotor6DCframeDeltaAbs": true, + "DFFlagMotor6DDesiredAngleAbsoluteTolerance": true, + "DFFlagMoveSendDataJobCheck": true, + "DFFlagNamesOccludedAsDefault": true, + "DFFlagNavigationServiceAnalytics": true, + "DFFlagNetworkCompletenessWeakPointer": true, + "DFFlagNetworkFilterPropertySimHumanoid": true, + "DFFlagNetworkOwnershipUnitAPI": true, + "DFFlagNetworkPacketCacheScopedMutex": true, + "DFFlagNewEconomyDeveloperProductUrl": true, + "DFFlagNewEconomyDeveloperProductUrlMock": false, + "DFFlagNewInstanceItemClientDoNotEchoPlayer": true, + "DFFlagNewJoinStorage": true, + "DFFlagNewMemoryLevelCheck": true, + "DFFlagNewRejoinMessage_PlaceFilter": "True;1034242130;2528277338", + "DFFlagNewSortAndFilter": true, + "DFFlagNoInfiniteLoopOnChatInfoLoadFailure": true, + "DFFlagNonBlockingAnalyticsExit": true, + "DFFlagOnlyReadPlayerOsOnServer": true, + "DFFlagOnlyUpdateSoundChannelsThatHaveValidPlayingChannel": false, + "DFFlagOnlyUpdateSoundChannelsThatHaveValidPlayingChannel2": true, + "DFFlagOptimizedBlockFill": true, + "DFFlagOptimizedMeshFill": true, + "DFFlagOrder66": false, + "DFFlagPackageBlockPublishAnalytics": true, + "DFFlagPackageBlockPublishRCCandAnalyticsRefactor": true, + "DFFlagPackageFixOpenPlaceAutoUpdate": true, + "DFFlagPackageFixSourceAssetIdHash": true, + "DFFlagPackageFixSurfaceAppearanceHash": true, + "DFFlagParallelBroadPhaseWithoutTerrain": true, + "DFFlagParallelJointStepBroadphase2": true, + "DFFlagParallelPhysicsReceive": false, + "DFFlagParallelPhysicsReceive2": false, + "DFFlagParameterizeHandlerNamedParameterEnabled": true, + "DFFlagPerformAssetDecryptionOnAnAsyncTask": true, + "DFFlagPGSWakeOtherAssemblyForJoints": true, + "DFFlagPGSWakeOtherIfOneAssemblyIsAwake": false, + "DFFlagPhysicsPacketCountUnderLimit": false, + "DFFlagPhysicsSenderByteBudget2": true, + "DFFlagPhysicsSenderByteBudgetMcLabel": true, + "DFFlagPhysicsSenderBytesScalesWithFrameTime": true, + "DFFlagPhysicsSenderNoEmptyPackets": true, + "DFFlagPlayerConfigurerDoCDNProbe2": true, + "DFFlagPlayerConfigurerNewMetrics": true, + "DFFlagPlayerPolicyReportHttpFailureOnEveryAttempt": true, + "DFFlagPlayerPolicyReportHttpFailureToInfluxOnEveryAttempt": true, + "DFFlagPlayFabEmitMarketplaceEvents2": true, + "DFFlagPlayFabEmitTeleportEvents": true, + "DFFlagPolicyServiceHttpRequestBackoffEnabled": true, + "DFFlagPostPremiumUpsells": true, + "DFFlagPreferIPv6OverIpv4": true, + "DFFlagPremiumGameIdFix": true, + "DFFlagPremiumUpsellEnabledV2": true, + "DFFlagPremiumUpsellRecheckPremium": true, + "DFFlagPremiumUpsellUserId": true, + "DFFlagPreventLoadingMassivelyMultichannelAudio": true, + "DFFlagPreventMeshLODV2WhenFlagOff": true, + "DFFlagPreventPrematureMp3EofExploit": true, + "DFFlagPreventReturnOfElevatedPhysicsFPS": true, + "DFFlagPromptBundlePurchaseEnabled": false, + "DFFlagPromptBundlePurchaseEnabled_PlaceFilter": "True;5790039516;5889411563;5947859215;2431195974", + "DFFlagProtectionSurvivesDestruction": true, + "DFFlagPugiCrashOnUnhandledXml": true, + "DFFlagQueueDisconnectBeforeSomeCleanup": true, + "DFFlagRakNetAvoidZeroInSnapshot": true, + "DFFlagRaknetBandwidthAddDataCenterId": false, + "DFFlagRaknetBandwidthAddPhyPacketsLossPercent": true, + "DFFlagRaknetBandwidthMetrics": false, + "DFFlagRaknetBandwidthMetricsAddServerIp": false, + "DFFlagRaknetBandwidthMetricsReportValidPing": false, + "DFFlagRaknetBandwidthMetricsV2": true, + "DFFlagRakNetDetectNetUnreachable": true, + "DFFlagRakNetNoPopInaccurate": true, + "DFFlagRbxFormatMultiByteSizeFix": true, + "DFFlagRccAbandonOnSecondDm": true, + "DFFlagRccFixBatchJobShutdownRace": true, + "DFFlagRccFixDataModelCyclicLink": true, + "DFFlagRCCMonitoringCustomTimeouts": true, + "DFFlagRCCMonitoringInitializeCpuVariables": true, + "DFFlagRccSetDataCenterFiltersEarly": true, + "DFFlagRccSoapCloseLogFilesBeforeReinit": true, + "DFFlagRCCTCConfigEventParameter": true, + "DFFlagRCCTeamCreateSaveOnZeroPlayers": true, + "DFFlagRccUse64BitAppearanceId": true, + "DFFlagRecursionGuard": true, + "DFFlagRedirectHasBadgeToAsyncMethod": true, + "DFFlagReduceTrussSearchDistance2": false, + "DFFlagReflectionLoggingEnabledClientWin32_3": false, + "DFFlagReflectionLoggingEnabledGlobal": false, + "DFFlagReflectionLoggingpPlacelauncherInitialization": false, + "DFFlagReleaseOriginalSizeOnAccessoryRemoved": true, + "DFFlagRemoveBytecodeMac": true, + "DFFlagRemoveFlakyTelegrafAssert": true, + "DFFlagRemoveFMODProfilingOption": true, + "DFFlagRemovePackageRequestWebCopyCounter": true, + "DFFlagRemovePGSSolverActivatedAnalytics": true, + "DFFlagRemoveReplicatorRedundancy2": true, + "DFFlagRemoveSharedStringMD5": true, + "DFFlagRenderCompositorExperimentEnabled": false, + "DFFlagRenderGatherMsFrame2": true, + "DFFlagReplicatorKickReadEventStringDataAndVariantLimit": false, + "DFFlagReplicatorKickWriteEventStringDataAndVariantLimit": true, + "DFFlagReplicatorLabelItemTypesProcessed": true, + "DFFlagReplicatorStreamingReportAncestorsSentWithoutAllDescendants": false, + "DFFlagReplicatorStreamingReportGCStepPercentage": true, + "DFFlagReplicatorTrackLastPacketError": true, + "DFFlagReportBouncingScript": true, + "DFFlagReportClientMemoryCat": true, + "DFFlagReportCoalescingStats": true, + "DFFlagReportCollisionDetectionTime": true, + "DFFlagReportCSGMeshVersionOnce": true, + "DFFlagReportDataStoreErrorCases": true, + "DFFlagReportDeveloperEventIngestHttpError": true, + "DFFlagReportGALightingTechnology": true, + "DFFlagReportGPUMetrics": true, + "DFFlagReportHungScript2": true, + "DFFlagReportInfluxLightingTechnology": true, + "DFFlagReportLightingTechnology": true, + "DFFlagReportLuaKicks": true, + "DFFlagReportPhysicsFPSStatsPlaceSpecific_PlaceFilter": "True;606849621;171391948;189707", + "DFFlagReportPhysicsReplicationRatio": true, + "DFFlagReportPhysicsSolverStatsPlaceSpecific_PlaceFilter": "True;606849621;171391948;189707", + "DFFlagReportPhysicsStatsToHUD": true, + "DFFlagReportReplicationVariantLimitHit": true, + "DFFlagReportReplicatorJoinDataItemStatsToInflux": true, + "DFFlagReportReplicatorStatsToInflux": true, + "DFFlagReportSimulationToFBLatency": true, + "DFFlagReportSolverUsageStats": true, + "DFFlagReportTouchSerializerMetricsToInflux": true, + "DFFlagReportTriangleMeshPartMigrationData": true, + "DFFlagRobloxEventStreamConnected": true, + "DFFlagRomarkAdjustCharacterReportThrottle": true, + "DFFlagRoundToScreenScaleUseFloor": true, + "DFFlagScActive": true, + "DFFlagScAnalytics": false, + "DFFlagScCleanup": true, + "DFFlagScReport": false, + "DFFlagSecretAgentMan": true, + "DFFlagSendMoreTerrainForLODTransition2_DataCenterFilter": "True;214", + "DFFlagServerConfigurerDoCDNProbe": true, + "DFFlagServerCopiesPlayerGui3": true, + "DFFlagServerCopiesPlayerGui3_PlaceFilter": "false;142823291", + "DFFlagServerRakNetStartupFailureAnalytics": true, + "DFFlagServerRejectsJoinPackets": true, + "DFFlagSetupSignalRFix": true, + "DFFlagSetupSignalRFix2": true, + "DFFlagSetupSignalRMacFix": true, + "DFFlagShowGamePassItemTypeWhenPurchasebyAssetId": true, + "DFFlagShowLevelOfDetailMesh": true, + "DFFlagShowLevelOfDetailMesh_PlaceFilter": "True;5505305045;5438291517;5423642405;4656923017;4657384818;4599786547", + "DFFlagSignalRControlExcStringFix": true, + "DFFlagSignalRStartFix": true, + "DFFlagSimBatchSolverMemoryOptimization": true, + "DFFlagSimCoreFixACPParallelJointStepAnchoredAnim": true, + "DFFlagSimDontPushMeCauseImInStage": false, + "DFFlagSimDontPushMeCauseImInStage2": true, + "DFFlagSimDontResetImpulseAccumulator": true, + "DFFlagSimDrawNoCollisionConstraintToolTip": true, + "DFFlagSimEnableInterpolationThrottling": false, + "DFFlagSimEnableInterpolationThrottling2": false, + "DFFlagSimFixAssemblyCofmGetter": true, + "DFFlagSimFixConstraintSelectionBoxCrash": true, + "DFFlagSimFixWeldConstraintBlockEnable": true, + "DFFlagSimFixWeldConstraintEnable": false, + "DFFlagSimFixWeldConstraintEnable1": true, + "DFFlagSimFixWeldConstraintPartScripting": true, + "DFFlagSimFixWeldConstraintResetCFrames": true, + "DFFlagSimFixWeldConstraintTeamCreateBug": true, + "DFFlagSIMForceCSGv2Once": true, + "DFFlagSimLDLPGSStatsBufferBreakdownReporting": true, + "DFFlagSimOptimizeInterpolationReturnPreviousIfSmallMovement": false, + "DFFlagSimOptimizeParallelInterpolationPost": true, + "DFFlagSimSolverBufferPurgeEnabled": true, + "DFFlagSimSolverConstraintServoMotorLimitFix": true, + "DFFlagSimSolverConstraintServoMotorLimitFix_PlaceFilter": "True;4636955314", + "DFFlagSimSolverConstraintServoMotorLimitFix2": true, + "DFFlagSimSolverConstraintServoMotorLimitFix2_PlaceFilter": "True;4636955314;461287719;3933153756;4797048909;5644451718;2546612479;3087031540", + "DFFlagSimSolverLargeWorkloadReporting": true, + "DFFlagSimSolverOptimizedIslandizerIKBugFix": true, + "DFFlagSIMTrackCSGSettingChange": true, + "DFFlagSimUseNewGetLDLComponents": true, + "DFFlagSimUseNewInitializeBatchSolver": true, + "DFFlagSpecialCaseSupportRbxCdnInAppDataModel2": true, + "DFFlagSpecificGravityDummyFunctionGA": true, + "DFFlagStopPlayersTraverseForPhysics": true, + "DFFlagStopRestreamInstancesWithoutParent": true, + "DFFlagStopStudioSingletons": true, + "DFFlagStreamingAddAncestors3": true, + "DFFlagStreamingAddAncestorsWithNonParts": true, + "DFFlagStreamingDebuggerMiniMap": true, + "DFFlagStreamingDescendUntilPart": true, + "DFFlagStreamingDontGCLocal": true, + "DFFlagStreamingGCJobFixCharacterCheck": true, + "DFFlagStreamingGCSkipSubtractDistance": true, + "DFFlagStreamingMaxGCSkipsMemoryCheck": true, + "DFFlagStreamingNoResendImmediately": true, + "DFFlagStreamingPrefetch": true, + "DFFlagStreamingPrefetchCheckTimeoutClientIdle": true, + "DFFlagStreamingPrefetchInterface": true, + "DFFlagStreamMissingParentOnReParent": false, + "DFFlagStreamMissingParentOnReParent2": false, + "DFFlagStreamMissingParentOnReParent3": true, + "DFFlagStricterAttributes": true, + "DFFlagStudioAddIsPackageAtTheEndOfRequestURL": true, + "DFFlagStudioCameraFocusPartCheckForChange": true, + "DFFlagStudioGetMorePackageAssetData": true, + "DFFlagStudioHttpServiceProtectLegacyPathsForPlugins": false, + "DFFlagStudioLSP_V2": true, + "DFFlagStudioLSPSpacesReplacing": true, + "DFFlagStudioPackageCleanUp": true, + "DFFlagStudioPackageHashAnalytics": false, + "DFFlagStudioPackageHashAnalyticsComputeCache": true, + "DFFlagStudioPackageHashAnalyticsComputeSizes": false, + "DFFlagStudioPackageHashAnalyticsComputeV1": true, + "DFFlagStudioPackageHashAnalyticsComputeV2": false, + "DFFlagStudioPackageHashAnalyticsComputeV3": false, + "DFFlagStudioPackageHashEnabled": true, + "DFFlagStudioRemoveDebuggerLegacyLock4": true, + "DFFlagStudioSendsMorePackageAnalytics": true, + "DFFlagStudioSendsPackageDownloadTime": true, + "DFFlagStudioShowScriptInExplorerOpensExplorer": true, + "DFFlagStudioSwitchQNetworkToHttp": true, + "DFFlagSupportEncryptedAssets": false, + "DFFlagSupportEncryptedAssets_PlaceFilter": "True;4587054145;4521759066;4589144917;1921623329;4710199611;4739075775;4786133739;4749336296;4819751684;4898701067;4898177642;4911320968;4927429832;1856333096;5301306769;5312976759;5312984096;5312987616;5312990840;5509581543;5505132318;5271804927;5535247402;5180703112;5036207802", + "DFFlagSupportIPv6MappedIPv4ForFloodCheck": true, + "DFFlagSupportJoinDataItemV2iv": false, + "DFFlagSupportMeshLOD": true, + "DFFlagSupportMeshLOD_PlaceFilter": "True;2900823006", + "DFFlagSupportMeshV4Read": true, + "DFFlagSupportMeshV4Read_PlaceFilter": "True;4599786547;5326950832", + "DFFlagSupportSkinnedMesh3": true, + "DFFlagSupportSkinnedMesh3_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5751328107;5947859215", + "DFFlagSupportSwitchingDefaultAudioDevice": true, + "DFFlagSupportYouTubeInAppDataModelIfRbxCdnAllowed": true, + "DFFlagSuppressAssetFailureErrors": true, + "DFFlagTaskQueueAlwaysEpilogue": true, + "DFFlagTaskQueueLinger": true, + "DFFlagTaskSchedulerEraseDone": true, + "DFFlagTattletaleUseNewWordListFeatures": false, + "DFFlagTeamChildOrderProperty": true, + "DFFlagTeamCreatePlayerConnectionsToEventIngest": true, + "DFFlagTeamCreatePublishToEventIngest": true, + "DFFlagTeleportAsyncEnabled": false, + "DFFlagTeleportAsyncEnabled_PlaceFilter": "True;6028885309;3388553819;6069934719;4559218023;4111023553;6032399813;5735553160;3260590327;4140094110;4797063885;4797191109;3817;99308;234674;6174493;32221233;34273585;43774374;47564676;117392863;127243303;133815151;175145684;239266443;245651287;260201770;286090429;286194356;309777642;312969221;325107118;329942288;333370625;380305410;390718079;393688252;406914719;419517999;430367172;455487186;475943327;479638380;508693446;558916496;568789627;606849621;617834035;632574862;642895013;649197432;663027247;712717349;765214978;841531820;851426785;869351572;901421457;915545262;958958866;966399489;1014313584;1090923299;1097288251;1112795253;1119468289;1198369988;1201618699;1234777974;1245556788;1297741873;1324061305;1326515829;1336862186;1383356634;1405701328;1412794081;1512278103;1613747331;1715716216;1766202603;1800545204;1820994456;1849056378;1852165199;1908452994;1911397946;1988050801;2051682813;2102794810;2120256007;2129144719;2142669871;2161068932;2179817103;2213827867;2228471329;2230731085;2244869356;2247498435;2260759709;2262371873;2268297861;2269041966;2271418810;2271421573;2277629691;2277630015;2378440937;2433583525;2483064823;2483181858;2506647097;2537274968;2644446230;2699891546;2714311804;2784773364;2872154782;2875915901;2916899287;2934790530;2942660767;2943226593;2960777560;2982639429;2986568959;2988554876;3018748854;3044477754;3094821548;3100326397;3138672714;3146541075;3153021141;3162363365;3190767416;3194820651;3194823512;3201617292;3204374376;3214306383;3240897476;3241297377;3244983644;3244985257;3246870877;3247100483;3253821504;3266947691;3285368977;3294102893;3300980249;3300988881;3307963712;3326691959;3350006801;3360156532;3374871698;3405625253;3406421830;3409678003;3416484751;3422254926;3434602709;3449573444;3487742603;3506726216;3519513262;3540454961;3576579844;3576597031;3576618096;3576622248;3578698200;3579244394;3598232959;3613269714;3613283561;3636985192;3667961326;3763545623;3774643032;3826587512;3900961465;3906714435;3908399349;3916360736;3922886438;3925170006;3926959598;3940833927;3971269762;4142858848;4150099138;4238458434;4341043264;4348614749;4389306054;4392803558;4426252252;4434324454;4453150092;4464235702;4482712909;4484251962;4490601563;4508183796;4508881497;4521134571;4523423698;4524359706;4526203623;4527539482;4536931350;4538006970;4538240213;4545021574;4545054277;4559769750;4565220667;4571735159;4575225189;4584761088;4586116053;4588179349;4590337879;4595920096;4599687840;4600709596;4606870383;4606896152;4610955859;4620778305;4623386862;4637930673;4641123764;4645256533;4651456521;4656807268;4658102754;4668496970;4673694625;4675467679;4681780390;4682474618;4688884268;4691258953;4691748414;4693954129;4693972729;4696283640;4697912943;4703267841;4712432173;4717700836;4724929820;4727464597;4730603402;4732129420;4732214172;4732238938;4742675529;4746792788;4752097793;4754159533;4759656418;4767483737;4779685308;4792214673;4795886823;4796526870;4807288588;4811583863;4811767098;4815493441;4822129686;4829075671;4837882841;4842364293;4851907937;4857914453;4860192633;4861325888;4863692603;4863693700;4875568798;4888516489;4894089872;4903144517;4907800042;4943952898;4953508391;4956263338;4956265216;4956265740;4962281041;4986234201;4987942895;4992059055;4992294140;4997468978;5002210114;5010754428;5013859105;5019196198;5026862895;5041144419;5050900608;5054064751;5075362833;5075766023;5087012007;5087306053;5099644031;5107716758;5116905475;5128693334;5142882341;5152631020;5155805783;5159768322;5182834709;5194213785;5202348042;5213326914;5213327564;5228147779;5230561570;5233022809;5234478489;5235529519;5237237547;5238031707;5238033252;5238034925;5242189327;5245293311;5245828140;5263056615;5272841703;5282546317;5289429734;5293075435;5293548032;5294033437;5321709389;5323308177;5325439096;5325519885;5331693920;5340290966;5341614848;5345266689;5349115784;535934465;6127503683;5863560677", + "DFFlagTeleportPrivateServerCreateUserDataCrash": true, + "DFFlagTerrainReplicationSendMasks": true, + "DFFlagTerrainReplicationUseLargerChunks": true, + "DFFlagTextScraperEnableCaptureDateTime": true, + "DFFlagThrottleDebuggerMetrics": true, + "DFFlagThrottleGetUserThumbnailAsync": true, + "DFFlagThrottlingBadgesRollOut": true, + "DFFlagThrottlingEnableRandomOffset": true, + "DFFlagThrottlingGamePersistenceRollOut": true, + "DFFlagThrottlingGlobalRollOut": true, + "DFFlagThrottlingPointsRollOut": true, + "DFFlagThrowErrorWhenRequestedURLFailed": true, + "DFFlagThumbnailSupportFocusOnPart": true, + "DFFlagTopGamesPhysicsReportingEnabled2": true, + "DFFlagTouchQueueMetrics": true, + "DFFlagTrackRemoteBackpackAccesses": true, + "DFFlagTrackRemoteBackpackAccessesNoThrottling": true, + "DFFlagTrackRespectFilteringEnabledAndPlayOnRemoveUsage": false, + "DFFlagTrackRunUpdateCycleTime": false, + "DFFlagTrackStencilBufferSupport": false, + "DFFlagTrustVersionedEncryptionFormat": true, + "DFFlagTryGCifNeedGC": true, + "DFFlagTweecall": true, + "DFFlagTweenServiceOnStepped": false, + "DFFlagUniverseHistoryApiAdjustments": true, + "DFFlagUniverseIdFix": true, + "DFFlagUpdateListenerSidechainsOnSignalFlowUpdated": true, + "DFFlagUseBandwidthManagerForClusterSend": true, + "DFFlagUseBandwidthManagerForDataSend2": true, + "DFFlagUseBandwidthManagerForPhysicsSend2": true, + "DFFlagUseBandwidthManagerForTouchSend": true, + "DFFlagUseBaseUrlNotHardcodedUrl": true, + "DFFlagUseCharArrayForKeyMaterial": true, + "DFFlagUseClientTimestampsInflux": true, + "DFFlagUseCommonQueueForInstanceUpdates": false, + "DFFlagUseDistanceThinning": true, + "DFFlagUseHttpReportCallbacks": true, + "DFFlagUseLockFreeVoronoiSimplexContainer": true, + "DFFlagUseMomentumThinning": true, + "DFFlagUseMomentumThinning_PlaceFilter": "False;1694497805;1225846869", + "DFFlagUseNewPostAuthenticationRequest": true, + "DFFlagUseNewTelegrafMethod": true, + "DFFlagUseNewTelegrafPriorityTag": true, + "DFFlagUsePugiXmlForPlaces": true, + "DFFlagUsePugiXmlForSettings": false, + "DFFlagUserAccessUserSettings": true, + "DFFlagUserAdjustHumanoidRootPartToHipPosition": true, + "DFFlagUserAllowDisableCustomAnims2": true, + "DFFlagUserChatPrivacySetting": true, + "DFFlagUserFixCharacterSoundIssues": true, + "DFFlagUserHttpAPIEnabled": true, + "DFFlagUserIdPlayerNameBatchingEnabled": true, + "DFFlagUserIdPlayerNameCacheEnabled": true, + "DFFlagUserInputServiceProcessOnRender": true, + "DFFlagUseRoundRobin": false, + "DFFlagUserPlayCharacterLoopSoundWhenFE": true, + "DFFlagUserPlayCharacterSoundWhenFE": true, + "DFFlagUserPreloadAnimations": true, + "DFFlagUserServerFollowers": true, + "DFFlagUserUseLuaVehicleController": true, + "DFFlagUserUseSoundDispatcher": true, + "DFFlagUseSelectBeforeRecvFrom": true, + "DFFlagUseServerAndSessionIdInflux": true, + "DFFlagUseSessionDurationInflux": true, + "DFFlagUseSessionDurationInflux2": true, + "DFFlagUseSharedStringForScriptReplication4": true, + "DFFlagUseSort": false, + "DFFlagUseTaskSchedulerThreadLimit": true, + "DFFlagUseTelegrafHTTPTransport": true, + "DFFlagUseThresholdForMotor6DWakes2": true, + "DFFlagUseThresholdForMotor6DWakes2_PlaceFilter": "False;679715583", + "DFFlagUseTouchSenderByteBudget2": true, + "DFFlagUseUniverseConfigurationPermissionsFlags": true, + "DFFlagVersionControlServiceBatchCommit": true, + "DFFlagVersionControlServiceBroadcastOnEditorsChangeExplicit": true, + "DFFlagVersionControlServiceCommitTransaction": true, + "DFFlagVersionHistoryAssetMappingsNewFormat": true, + "DFFlagVersionHistoryCommitTiming": true, + "DFFlagVersionHistoryInstanceChangesSourceHash": true, + "DFFlagVideoEnableDeviceTuning": true, + "DFFlagVideoEnableGetInfo_PlaceFilter": "True;4587054145;4521759066;4589144917;1921623329;4710199611;4786133739", + "DFFlagVisualEngineTrackHeadless": true, + "DFFlagVisuallyMovingSleepOnRemove": true, + "DFFlagVoiceChat_PlaceFilter": "True;5306826776;2807301554;5465723678;5914914682;5857870096;5968314783;5972134083;5064251723", + "DFFlagVoiceChatCadmThreadFix": true, + "DFFlagVoiceChatClosePeerFix": true, + "DFFlagVoiceChatCombinedDeviceCode": true, + "DFFlagVoiceChatEnableEventLogging": true, + "DFFlagVoiceChatForceWindowsDefaultSpeaker": true, + "DFFlagVoiceChatGuardChannelId": true, + "DFFlagVoiceChatHandleMuteUnmuteSignal": true, + "DFFlagVoiceChatHandleSubscriptionsCompletedSignal": true, + "DFFlagVoiceChatMatchDefaultGuidOnWin32": true, + "DFFlagVoiceChatNewPublisher": true, + "DFFlagVoiceChatNewSubscription": true, + "DFFlagVoiceChatOnUsersFix": true, + "DFFlagVoiceChatRefIdUpdate": true, + "DFFlagVoiceChatRetrySub": true, + "DFFlagVoiceChatThreadFactory": true, + "DFFlagVoiceChatUseMicSelection": true, + "DFFlagVoiceChatUseMicSelection2": true, + "DFFlagVoiceChatUsePcf": true, + "DFFlagVoiceChatUseSpeakerSelection": true, + "DFFlagWakePartsOnGravityChange": true, + "DFFlagWebSocket": false, + "DFFlagWebSocketHandleRecvError": true, + "DFFlagWebSocketHandleUpgradeError": true, + "DFFlagWebSocketSetCookie": true, + "DFFlagWebViewCloseControlFix": true, + "DFFlagWeldConstraintRelativeCFrame3": true, + "DFFlagWhitelistUserInputEvents": true, + "DFFlagWorldModelCatchInsertRawErrors2": true, + "DFFlagWorldModelCrashFaster": true, + "DFFlagWorldModelCrashOutsideOfDataModel": true, + "DFFlagXboxDisableTextChat": true, + "DFIntAbuseReportScreenshotPercentage": 25, + "DFIntAddUniverseIdToFilterHeadersRollout": 100, + "DFIntAltTelegrafHundredthsPercent": 0, + "DFIntAnalyticsCDNProbeInfluxPermyriad": 100, + "DFIntAnalyticsForXBoxCrash_JoinInfluxHundredthsPercentage": 1, + "DFIntAnalyticsMaxSendWaitTimeMs": 1500, + "DFIntAnalyticsNS1CDNProbeChancePercent": 5, + "DFIntAnalyticsServiceEventIngestSwitchPercentage": 100, + "DFIntAnalyticsServiceEventIngestSwitchPercentage_PlaceFilter": "100;5064251723;3182856628", + "DFIntAnalyticsServiceFiredEventsBudgetRefreshInSeconds": 1, + "DFIntAndroidInfluxHundredthsPercentage": 0, + "DFIntApiProxyToGroupsApi": 100, + "DFIntApiRateLimit": 200, + "DFIntBatchThumbnailMaxRetries": 5, + "DFIntBgUpdateRedirectsHttpErrInfluxHundredthsPercentage": 100, + "DFIntBouncingScriptPermyriad": 10000, + "DFIntBroadPhaseIslandBufferZoneMinPartLimit": 0, + "DFIntBroadPhaseIslandBufferZoneMinPartLimit_PlaceFilter": "5;1105449649", + "DFIntBulletContactBreakOrthogonalThresholdPercent": 200, + "DFIntBulletContactBreakThresholdPercent": 200, + "DFIntCanHideGuiGroupId": 4358041, + "DFIntChatCap": 100, + "DFIntChatTime": 10, + "DFIntClientJoinProcessPositiveSamplesThousandths": 10, + "DFIntClientJoinProcessPositiveSamplesThousandths_PlaceFilter": "1000;3027055174;3917136599;2291717546", + "DFIntClientNetworkInfluxHundredthsPercentage": 500, + "DFIntClientReportLuaConnectionSignalsInfluxHundrethsPercentage": 10000, + "DFIntClientSendEventStringDataLimitBytes": 100000000, + "DFIntClientSendEventVariantCountLimit": 5000000, + "DFIntCrashpadUploadToBacktracePercentage_PlaceFilter": "100;6036870533", + "DFIntCrashUploadHttpResponseDefaultTimeoutMillis": 80000, + "DFIntCrashUploadToBacktracePercentage": 10, + "DFIntCrashUploadToBacktracePercentage_PlaceFilter": "100;6036870533", + "DFIntCSGLevelOfDetailSwitchingDistance": 250, + "DFIntCSGLevelOfDetailSwitchingDistance_PlaceFilter": "250;2434889832;2568147212", + "DFIntCSGLevelOfDetailSwitchingDistanceL12": 500, + "DFIntCSGLevelOfDetailSwitchingDistanceL12_PlaceFilter": "500;2434889832;2568147212", + "DFIntCSGv2LodMinTriangleCount": 100, + "DFIntCSGv2LodsToGenerate": 3, + "DFIntCSGv2OperationInfluxHundredthsPercentage": 100, + "DFIntDataModelPatcherErrorInfluxHundredthsPercentage": 10000, + "DFIntDataModelPatcherErrorInfluxPriorityHundredthsPercentage": 10000, + "DFIntDataModelPatcherFunnelInfluxHundredthsPercentage": 5000, + "DFIntDataModelPatcherFunnelInfluxPriorityHundredthsPercentage": 10000, + "DFIntDataStoreApiRefreshRolloutPercentage": 0, + "DFIntDataStoreApiRefreshRolloutPercentage_PlaceFilter": "0;2432005634;70501379;2910792538", + "DFIntDataStoreCachedKeysMemSize": 16777216, + "DFIntDataStoreCachedKeysMemSize_PlaceFilter": "16777216;2910792538;69184822", + "DFIntDataStoreInfluxReportNonParsableDataPerMyriad": 10000, + "DFIntDataStoreInfluxReportNonParsableDataPerMyriadWithKey": 10000, + "DFIntDataStoreInfluxValueSubstringSize": 4194304, + "DFIntDataStoreMaxValueSize": 4194304, + "DFIntDataStoreMaxValueSize_PlaceFilter": "4194304;2910792538;69184822", + "DFIntDataStorePerPlayerRequestLimit": 40, + "DFIntDataStorePerPlayerRequestLimit_PlaceFilter": "10;920587237", + "DFIntDebugDefaultTargetWorldStepsPerFrame": 0, + "DFIntDebugDefaultTargetWorldStepsPerFrame_PlaceFilter": "1;4306999063", + "DFIntDebugRakPeerReceiveAfterSeconds": 10, + "DFIntDebugSimForceWorldStepCount": 0, + "DFIntDefaultBalanceD": 100, + "DFIntDefaultBalanceP": 7000, + "DFIntDesiredStreamJobTimeMSPerThread": 6, + "DFIntDetailedBandwidthStatsInfluxHundrethsPercentage": 10000, + "DFIntDetailedBandwidthStatsPlayerLotteryHundrethsPercentage_PlaceFilter": "10000;4599786547", + "DFIntDeveloperEventIngestEnd2EndLogPercetage_PlaceFilter": "100;3182856628", + "DFIntDeveloperEventIngestMaxEventsPerBatch": 5000, + "DFIntDeveloperEventIngestSendBatchV2Percetage_PlaceFilter": "100;3182856628", + "DFIntDraggerMaxMovePercent": 60, + "DFIntDynamicReloaderFailureInfluxHundrethsPercentage": 10000, + "DFIntDynamicReloaderFileFailureInfluxHundrethsPercentage": 10000, + "DFIntElevatedPhysicsFPSReportThresholdTenths": 585, + "DFIntEphemeralCounterInfluxReportingPriorityHundredthsPercent": 10000, + "DFIntEphemeralCounterInfluxReportingThrottleHundredthsPercent": 10000, + "DFIntEphemeralStatsInfluxReportingPriorityHundredthsPercent": 10000, + "DFIntEphemeralStatsInfluxReportingThrottleHundredthsPercent": 5, + "DFIntESGamePerfMonitorDelayBeforeFirstReportInSeconds": 60, + "DFIntESGamePerfMonitorHundredthsPercentage": 200, + "DFIntESGamePerfMonitorReportTimerInSeconds": 30, + "DFIntExpireMarketPlaceServiceCacheSeconds": 60, + "DFIntExternalHttpRequestSizeLimitKB_PlaceFilter": "2048;735030788;1067560271;1067660288;1081740066;1085557867;1187101243;1765700510;2033617470;2033617613;4686746335;4702658078;4709927839;4728133914;4728134592;4728135073;4728136238;4728136475;4728136681;4728136927;4728137133;4728137352;4728137581;5589762041;5589764122;5589764519;5589764717;5589765300;5589765897;5589771631;5589771737;5589772268;5589772900;5589774728;5589774806;5589776496;5589776598;5589777303;5589778444;5589778760;5589780318;5589780399;5589781740;5589781924;5589789107;5589789252;5589799152;5589799218;5589803701;5589803777;5589804697;5589805621;5589808044;5589808122;5589810227;5589810303;5589818394;5589818512;5589819950;5589831112;5589831193", + "DFIntFriendshipEndpointMigrationRolloutPercentageV2": 100, + "DFIntFriendsListCacheOptimizationRolloutPercentage": 0, + "DFIntGamePassOwnershipCacheSeconds": 30, + "DFIntGetFriendsOnlineEndpointMigrationRolloutPercentage": 100, + "DFIntGetUserThumbnailAsyncThrottleTime": 3, + "DFIntGoogleAnalyticsLoadPlayerHundredth": 100, + "DFIntGroupServiceRolesApiV2": 0, + "DFIntHardwareTelemetryHundredthsPercent": 50, + "DFIntHttpCacheCleanMaxFilesToKeep": 7500, + "DFIntHttpCacheCleanMinFilesRequired": 10000, + "DFIntHttpCacheStatsReportingIntervalSeconds": 180, + "DFIntHttpClientExternalTlsPeerVerificationFailHundrethsPercentage": 10000, + "DFIntHttpConnectDefaultTimeoutMillis": 60000, + "DFIntHttpConnMaxAge": 600000, + "DFIntHttpCurlConnectionCacheSize": -1, + "DFIntHttpInfluxHundredthsPercentage": 2, + "DFIntHttpParallelLimit_RequestContentProvider": 0, + "DFIntHttpRbxApiMaxRetryBudgetPerMinute": 10, + "DFIntHttpRbxApiMaxRetryCount": 3, + "DFIntHttpSendStatsEveryXSeconds": 300, + "DFIntHttpServiceTlsProbeInfluxHundrethsPercentage": 1000, + "DFIntHttpServiceTransportFailureInfluxHundrethsPercentage": 10000, + "DFIntHungScriptPermyriad": 10000, + "DFIntICMPPingHundrethsPercentage": 0, + "DFIntInfluxOverUDPThreshold": 1, + "DFIntInfluxReportLocalFilterStringPermyriad": 500, + "DFIntInfluxReportRCCStatsHundredthsPercentage": 5000, + "DFIntJoinBlobInvalidateThresholdPercent": 80, + "DFIntJoinDataItemEstimatedCompressionRatioHundreths": 500, + "DFIntJoinInfluxHundredthsPercentage": 100, + "DFIntJoinInfluxHundredthsPercentage_PlaceFilter": "10000;5064251723", + "DFIntJSONOverflowDepth": 200, + "DFIntLDLBuildProgramTimeReportRate": 100000, + "DFIntLDLPGSStatsRatePercentPlaceSpecific": 25, + "DFIntLmsInfluxDbHundredthsPercentage": 100, + "DFIntLoadPackageFirstTimeDelayMs": 0, + "DFIntLocalizationServiceContentLoadErrorHundredthsPercentage": 10, + "DFIntLocServicePerformanceAnalyticsHundredthsPercentage": 1000, + "DFIntLogGroupTeleportInfluxPerTenThousand": 1000, + "DFIntMacInfluxHundredthsPercentage": 0, + "DFIntMaxClusterKBPerSecond": 400, + "DFIntMaxDataOutJobScaling_PlaceFilter": "2;920587237", + "DFIntMaxDataPayloadSize": 96000000, + "DFIntMaxFramesToSend": 2, + "DFIntMaxJoinDataSendPerBurstKB": 200, + "DFIntMaxMissedWorldStepsRemembered": 16, + "DFIntMaxReceiptSize": 100, + "DFIntMeshNLoDs": 5, + "DFIntMeshNLoDs_PlaceFilter": "5;4656923017", + "DFIntMpsRateLimitCapacity": 10, + "DFIntMpsRateLimitDuration": 10, + "DFIntNetworkStreamingGCUrgentMaxMicroSecondLimit": 8000, + "DFIntNewSettingsEndpointExceptionInfluxPermyriad": 10000, + "DFIntNumberFramesSubmergedBeforeVSquaredViscocity_PlaceFilter": "0;1221071288;1107780422;1223560318", + "DFIntOnDisconnectHTTPTimeout": 500, + "DFIntPackageAutoUpdateDelayMs": 0, + "DFIntPackagePermissionPullingIntervalInSeconds": 10, + "DFIntParallelNarrowPhaseSerialCutoff": 50, + "DFIntPercentageThresholdUsingFriendsV2A3": 100, + "DFIntPercentApiRequestsRecordGoogleAnalytics": 5, + "DFIntPerfDataGlobalThrottleHundredthsPercent": 10, + "DFIntPerfDataGlobalThrottleHundredthsPercent_PlaceFilter": "10000;5064251723;4599786547", + "DFIntPhysicsSenderMaxBandwidthBps": 38760, + "DFIntPlayerConfigurerCDNProbeDelayMs": 10000, + "DFIntPrimStatsGANumDelimited": 3000, + "DFIntRaknetBandwidthInfluxHundredthsPercentage": 0, + "DFIntRaknetBandwidthInfluxHundredthsPercentageV2": 1000, + "DFIntRaknetBandwidthPingSendEveryXSeconds": 300, + "DFIntRakNetConnectionStartWindow_HundredthsPercentage": 1000, + "DFIntRakNetResendMaxThresholdTimeInUs": 2000000, + "DFIntRakNetResendScaleBackFactorHundredthsPercent": 6500, + "DFIntRakNetUseSlidingWindow2_rangeCount": 30, + "DFIntRakNetUseSlidingWindow2_startFactor": 300, + "DFIntRCCFailedToEvictPlayerInfluxHundrethsPercentage": 100, + "DFIntRccLinuxMemoryMegaByteLimit": 7000, + "DFIntRccLinuxMemoryMegaByteLimit_PlaceFilter": "16000;4599786547;4677926228", + "DFIntRCCLoadPackageRetryTimeDelay": 0, + "DFIntRCCLoadPackageRetryTimes": 4, + "DFIntRccMultipleDmsErrorInfluxHundrethsPercentage": 10000, + "DFIntRCCReceiveEventStringDataLimitBytes": 100000000, + "DFIntRCCReceiveEventVariantCountLimit": 5000000, + "DFIntReflectionLoggingRolloutPerMil": 2000, + "DFIntRenderCompositorExperimentPercent": 10, + "DFIntReplicationVariantLimitHundredthPercent": 10000, + "DFIntReplicatorAnimationTrackLimitPerAnimator": 50, + "DFIntReplicatorAnimationTrackLimitPerAnimator_PlaceFilter": "120;2116452049", + "DFIntReplicatorCountLimitInfluxHundrethsPercentage": 10000, + "DFIntReplicatorJoinDataItemStatsInfluxHundrethsPercentage": 1000, + "DFIntReplicatorJoinDataItemV2StatsInfluxHundrethsPercentage": 1000, + "DFIntReplicatorJoinSnapInfluxHundrethsPercentage": 50, + "DFIntReplicatorMaxPacketBytesSentToInfluxOnError": 256, + "DFIntReportAnimationTrackSpamInfluxHundrethsPercent": 500, + "DFIntReportClientJoinRxStatsHundrethsPercentage": 1000, + "DFIntReportDeviceInfoRate": 100, + "DFIntReportFMODInitThreadingRate": 0, + "DFIntReportJoinDataItemCacheEfficiencyHundrethsPercentage2": 1, + "DFIntReportJoinDataItemV2CacheEfficiencyHundrethsPercentage2": 1, + "DFIntReportParameterContentHundredthsPercent": 8000, + "DFIntReportParsingAnomalyRate": 1, + "DFIntReportReplicatorStatsToInfluxHundredthsPercent": 5000, + "DFIntReportReplicatorStatsToInfluxHundredthsPercent_PlaceFilter": "10000;3027055174;3917136599;2291717546", + "DFIntReportSimulationToFBLatencyInfluxHundredthsPercentage": 100, + "DFIntReportSoundAssetsRate": 1, + "DFIntReportTeamOrderExposedHundredthsPercent": 100, + "DFIntS2NumPhysicsPacketsPerStep": 2, + "DFIntS2NumPhysicsPacketsPerStep_PlaceFilter": "8;3260091322", + "DFIntS2PhysicsSenderRate": 15, + "DFIntScStatsPermyriad": 1000, + "DFIntSendAvatarLoadTimeStats_HundredthsPercentage": 0, + "DFIntSendAvatarLoadTimeStats_HundredthsPercentage_PlaceFilter": "500;189707", + "DFIntSendConnectionAttemptCount": 12, + "DFIntSendJoinTimeDeltasToDiag_HundredthsPercentage": 100, + "DFIntSendJoinTimesToDiag_HundredthsPercentage_PlaceFilter": "4000;370731277", + "DFIntSendRakNetStatsInterval": 300, + "DFIntSendRakNetStatsThrottle": 2, + "DFIntServerBandwidthPlayerSampleRate": 20, + "DFIntSmoothTerrainPhysicsRayAabbSlop": 1, + "DFIntStartupTracingInfluxHundredthsPercentage": 0, + "DFIntStepsToJoin": 2, + "DFIntStreamedRegionGCUrgentFactor": 20, + "DFIntStreamingMaxTargetPercentage": 0, + "DFIntStreamingMaxTargetPercentage_PlaceFilter": "200;4599786547;5597122238", + "DFIntStreamingPauseVelBufMaxDurationMS": 4000, + "DFIntStreamJobMaxBufferHealthThresholdHundredths": 75, + "DFIntStreamJobMaxBufferHealthThresholdHundredths_PlaceFilter": "50;1526666203", + "DFIntStreamJobMinBufferHealthThresholdHundredths": 40, + "DFIntStreamJobMinBufferHealthThresholdHundredths_PlaceFilter": "30;1526666203", + "DFIntStreamPauseVelBufFactorHundredths": 100, + "DFIntStudioLuauIceInfluxHundredthsPercentage": 10000, + "DFIntStudioLuauWarningInfluxHundredthsPercentage": 10000, + "DFIntStudioPackageHashAlgorithm": 0, + "DFIntStudioPluginLoadTimingsHundredthsPercentage": 100, + "DFIntTargetTimeDelayFacctorTenths": 20, + "DFIntTattletaleCheckWordCount": 0, + "DFIntTelegrafPriorityThrottleHundredthsPercent": 10000, + "DFIntTeleportExceptionInfluxHundredthsPercentage": 9000, + "DFIntTeleportRetryTimes": 10, + "DFIntTextScraperReportUserIdSize": 5, + "DFIntThrottledVelocityThresholdTenths": 15, + "DFIntTimePermyriad": 10000, + "DFIntTopGamesPhysicsAveExpFactorPercent": 10, + "DFIntTopGamesPhysicsReportingDelay": 300, + "DFIntTopGamesPhysicsReportingRatePercent": 1, + "DFIntTouchQueueMetricsInfluxHundredthsPercentage": 10000, + "DFIntTouchQueueMetricsInfluxHundredthsPercentage2": 100, + "DFIntTouchQueueMetricsSendEveryXSeconds": 300, + "DFIntTouchQueueMetricsSendEveryXSeconds2": 300, + "DFIntTrackCountryRegionAPIHundredthsPercent": 100, + "DFIntTrackRunUpdateCycleReportInfluxPermyriad": 1000, + "DFIntUserHttpRequestsPerMinuteLimitZ_PlaceFilter": "500;4686746335;4702658078;1067560271;1067660288;735030788;2033617470;4709927839;2033617613;1765700510;1187101243;4728133914;4728134592;4728135073;4728136238;4728136475;4728136681;4728136927;4728137133;4728137352;4728137581", + "DFIntUsersEndpointHundredthsPercentage": 500, + "DFIntUsersEndpointHundredthsPercentageV2": 10000, + "DFIntUsersEndpointMaxBatchSize": 3, + "DFIntVelocityAwareStreamingThreshold": 0, + "DFIntVelocityAwareStreamingThreshold2": 1, + "DFIntVideoImageReductionFactor": 1, + "DFIntVideoMaxNumberOfVideosPlaying": 2, + "DFIntVideoMaxNumberOfVideosPlaying_PlaceFilter": "6;5646917919;5535247402;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5947859215", + "DFIntVideoStreamMaxBufferMs": 200, + "DFIntVideoStreamMinBufferMs": 100, + "DFIntWaterViscosityDragFudgeFactor_PlaceFilter": "500;1221071288;1107780422;1223560318", + "DFIntWebParserInfluxWriteNanInfPerMyriad": 1000, + "DFIntWorldStepDtAveExpFactorHundredth": 1, + "DFLogAnalyticsDeferredEphemeralReportingDiagnostic": 0, + "DFLogErrorDescription": 6, + "DFLogHttpTrace_PlaceFilter": "6;1341906631", + "DFLogMaxJoinDataSizeKB": 20, + "DFLogMegaReplicatorConnData_DataCenterFilter": "10;214;295", + "DFLogMessagingService": 6, + "DFLogPartStreamingRequests": 0, + "DFLogPartStreamingRequests_PlaceFilter": "6;2291717546;2623652930;3027055174", + "DFLogPlaceLauncherTeleportLog": 6, + "DFLogPlayerCharacterLoadingLog": 0, + "DFLogPlayerCharacterLoadingLog_PlaceFilter": "6;5646917919;5947859215;5064251723", + "DFLogSessionCrypto": 333, + "DFLogSignalRConnection": 6, + "DFLogSoundCheckResult": 4, + "DFLogSoundTrace": 4, + "DFLogTrackTeamCreateSaveMD5HashOutput": 6, + "DFStringAdditionalBlacklistHeaders": "SOAPAction", + "DFStringAltTelegrafAddress": "35.155.141.13", + "DFStringAnalyticsNS1BeaconConfig": "https://c0ll.rbxcdn.com/test-50kb.png|g2kd2s|https://c0hw.rbxcdn.com/test-50kb.png|g2iyic|https://c0cfly.rbxcdn.com/test-50kb.png|g2hjxw|https://c0ak.rbxcdn.com/test-50kb.png|g2g5dg", + "DFStringCrashUploadToBacktraceBlackholeToken": "7705528468a303e4e34a13fbcf9e42e219633ed6868e143e5ab16cd33bd2a069", + "DFStringCrashUploadToBacktraceMacPlayerToken": "24cb37449e120c3a0618b1bf0585e339571828cae4dc73c7b8c99f67fcd751e9", + "DFStringCrashUploadToBacktraceWindowsPlayerToken": "417ecb0fbc032ce087e6af3b780c298e3356089f050c8130d2318109e80417a4", + "DFStringCrashUploadToBacktraceWindowsPlayerToken_PlaceFilter": "30a794c06f5d61e51cf4b0b8103ef2cd7039c6b46bafce0cfba33518d5409010;6036870533", + "DFStringDataStoreThrottleMsg": "DataStore request was added to queue. If request queue fills, further requests will be dropped. Try sending fewer requests.", + "DFStringDeveloperEventIngestEnd2EndLogUniveseIds": 1149251775, + "DFStringGamePerfMonitorPercentageCountryOverride": "CN,50,AU,50,NZ,50", + "DFStringGlobalUniverse17sIds": "14743789;1482020489", + "DFStringHttpInfluxDatabase": "prod", + "DFStringHttpRbxApi17sAllowedHosts": "chat.synt2x.xyz;presence.synt2x.xyz;avatar.synt2x.xyz;catalog.synt2x.xyz;inventory.synt2x.xyz", + "DFStringOverrideSendRakNetStatsThrottleCountries": "CN,50,JP,20,NO,20,FI,20,SE,20,NZ,20", + "DFStringPerfFilterPlaceId": "4599786547;5064251723", + "DFStringPerfTelegrafAddress": "100.20.191.133", + "DFStringUS30605p2": "_", + "DFStringR15CollisionTypeField": "universeAvatarCollisionType", + "DFStringReportSoundAssetsAssetList": "rbxassetid://1837038213,rbxassetid://1846492029,rbxassetid://1841601627,rbxassetid://1845571507,rbxassetid://1836362602,rbxassetid://1846368341,rbxassetid://1847611722,rbxassetid://1845891180,rbxassetid://1845891141,rbxassetid://1842957560,rbxassetid://1836553363", + "DFStringRobloxAnalyticsURL": "http://ecsv2.synt2x.xyz/", + "DFStringSendJoinTimeDeltasHundPrecCountryOverride": "CN,5000,US,100,AU,3000,KR,2000,NZ,3000,JP,4000,NO,2000,FI,2000,SE,1000,FR,1000,DK,1000", + "DFStringSendJoinTimeStatsHundPrecCountryOverride": "CN,5000,US,100,AU,3000,KR,2000,NZ,3000", + "DFStringSendJoinTimeStatsHundPrecCountryOverride_PlaceFilter": "CN,10000,US,10000,AU,10000,KR,10000,NZ,10000;189707", + "DFStringSendPingForCnConnectingToDcList": "111,174,191,133", + "DFStringTelegrafAddress": "100.20.191.133", + "DFStringTelegrafHTTPTransportUrl": "https://client-telemetry.synt2x.xyz", + "DFStringWorkspaceMessageLink": "https://devforum.synt2x.xyz/t/physics-deprecating-the-legacy-spring-physics-solver/163521", + "DFStringWorkspaceMessageText": "We are in the process of disabling and removing the legacy solver. Click here for more info...", + "EnableAndroidSetTagOnContactAcceptFriendRequest": true, + "EnableAppsFlyerDeferredLinks": true, + "EnableBackupCookie": true, + "EnableContactFriendFinder": false, + "EnableLuaAppOnChrome": true, + "EnableManualFocusReleaseSupport": true, + "EnableOpenSocialMediaExternal": true, + "EnablePostPurchaseTextV2": true, + "EnableRemoteThemeCheckOnAndroidV3": true, + "EnableTencentLinkingFeature": false, + "EnableTencentYZFSDKHelpCenter": true, + "FFlagAbruptExitOnMac": true, + "FFlagABTestAllowDuplicateRename": true, + "FFlagABTestFirstInstall": false, + "FFlagABTestLogInitResultWithSession2": true, + "FFlagABTestReportLuaAccessToUndefinedTest": true, + "FFlagABTestServiceSkipRedundantInit": true, + "FFlagABTestSystemShutoff": false, + "FFlagABTestVariationAnyInt": true, + "FFlagAccelerateDuplicateCollisionFidelityReprocess": true, + "FFlagAccountReplicatorQueueItemTypes": true, + "FFlagAddCopyIDToResultPage": true, + "FFlagAddCountryCodeToBacktrace": true, + "FFlagAddCountryCodeToUserModel": true, + "FFlagAddedFriendUserIdFix": true, + "FFlagAddImportFailureToast": true, + "FFlagAddNewlineAboveOrBelow": true, + "FFlagAddOutOfRangeAssemblyPhase": true, + "FFlagAddQuickOpenToQuickAccess": true, + "FFlagAddStatCounters": true, + "FFlagAdornCullingMode": true, + "FFlagAdornUseRawTexture": true, + "FFlagAdornUseRawTexture_PlaceFilter": "True;189707", + "FFlagAdultConfirmationEnabledNew": false, + "FFlagAdultConfirmationEnabledV4": false, + "FFlagAdvSkyRefreshEnvMapOnSkyBoxUpdate": true, + "FFlagAE_ImporterIgnoreScale": true, + "FFlagAECharacterManagerFixes": true, + "FFlagAEImageSetLabelMigration3": true, + "FFlagAENewCategoryApisEnabledForAll": true, + "FFlagAENewCategoryApisMergeInfoFix": true, + "FFlagAENewCategoryApisRolloutEnabled2": true, + "FFlagAENewRecommendedCategory3": true, + "FFlagAERemoveItemDetailsSalesData": true, + "FFlagAERigImporterAttachRotFix": true, + "FFlagAESetSearchParamsOnFirstFetch": true, + "FFlagAESPromptsSupportGamepad": false, + "FFlagAESPromptsSupportGamepad_PlaceFilter": "True;5889411563;5888619971;4568576845;33564694;2098526952;5064251723;4767397694;629119226;447452406;2098516465;5790039516;2891172314;92898409;5947859215", + "FFlagAEUseLargeExpandButtonImage": true, + "FFlagAEUseNewCategoryApis": false, + "FFlagAlignToolAnalytics": true, + "FFlagAllowAudioBulkImport": true, + "FFlagAllowCatalogItemCreatorAssetConfig": true, + "FFlagAllowCreateLinkedSourceInternally": true, + "FFlagAllowDuplicateNamesOnNonAnimatedParts": true, + "FFlagAllowFallbackToLanguageCodeWithVariant": true, + "FFlagAllowGamepadConnectionEventsWhenNotFocused": true, + "FFlagAllowMeToParseMyOwnJoinBlob": true, + "FFlagAllowMobileGamepadCursor": true, + "FFlagAllowPasteKeysBetweenAnimations": true, + "FFlagAllowTextEntryToTakeSizeAndPositionProp": true, + "FFlagAllowTGAImageAssetExtension": true, + "FFlagAllowWorldModelCreationV2": true, + "FFlagAnalyticsAddTimeZone": false, + "FFlagAndroidFixDPadMapping": true, + "FFlagAndroidReportDeviceInfo": true, + "FFlagAnimationDeferredSyncFunction_PlaceFilter": "True;4599786547;5064251723", + "FFlagAnimationEditorMicroboneSupport": true, + "FFlagAnimationEditorMicroboneSupport_PlaceFilter": "True;4599786547;5326950832", + "FFlagAnimationParallelOnStep_PlaceFilter": "True;4599786547;5064251723", + "FFlagAnimationParallelUseManager_PlaceFilter": "True;4599786547;5064251723", + "FFlagAnimationSampleCorrection": true, + "FFlagAnimationSampleCorrectionRemoveChange": true, + "FFlagAnimEditorRenameKeyOptionFix": true, + "FFlagAnimEditorUseCustomFPS": true, + "FFlagAnOrderOfLeaderstats": true, + "FFlagAnthroArtistIntentFBXImporterIntermediateState": false, + "FFlagAppBridgeApplyPlaceFilterEarly": true, + "FFlagAppBridgeExplicitDefaultPlayerParams": false, + "FFlagApplyGuiEffectsOnSelectionObjects": true, + "FFlagAppPagePropertiesDisableBackButtonV2": true, + "FFlagAppUsesAutomaticQualityLevel": true, + "FFlagAssetCardLoadableImage": false, + "FFlagAssetConfigBlockUntilReadyToEdit": true, + "FFlagAssetConfigEnforceNonEmptyDescription": true, + "FFlagAssetConfigFixAssetIdTypo": true, + "FFlagAssetConfigOverrideAssetTooltip": true, + "FFlagAssetConfigUseItemConfig": true, + "FFlagAssetConfigVersionShowLocalTime": true, + "FFlagAssetConifgOverrideAssetScrollingFrame": true, + "FFlagAssetManagerAddAnalytics": true, + "FFlagAssetManagerAddNewPlaceBehavior": true, + "FFlagAssetManagerAddPlaceVerisonHistoryToContextMenu": true, + "FFlagAssetManagerFixNavBarSetState": true, + "FFlagAssetManagerFixRenameTextBox": true, + "FFlagAssetManagerFixRightClickForAudio": true, + "FFlagAssetManagerLuaCleanup1": true, + "FFlagAssetManagerLuaPlugin": false, + "FFlagAssetManagerOpenContextMenu": true, + "FFlagAssetManagerRemoveAssetFixes": true, + "FFlagAssetPreviewDescriptionFallback": true, + "FFlagASyncColorPreview": true, + "FFlagAsyncGoToLineDialog": true, + "FFlagAsyncTasksEnabledForTextures": false, + "FFlagAtomicRequestingTeleport": true, + "FFlagAutomaticSizeFixGridLayoutWithAspectConstraint": true, + "FFlagAutomaticSizeFixUnresolvedConstraintsInListLayout": true, + "FFlagAutomaticSizePerfFix": true, + "FFlagAutomaticSizeRetainMinBounds": true, + "FFlagAutomaticSizeUiListLayoutScaledPaddingSizeSupport": true, + "FFlagAutomaticSizeUiPaddingFix": true, + "FFlagAutomaticSizeUiTableLayoutRespectLayoutShouldProcess": true, + "FFlagAutomaticSizing2": false, + "FFlagAutomaticSizing2_PlaceFilter": "False;735030788;2512643572;3823781113", + "FFlagAutoUpgradeEnableVersionCheckWithChannels": true, + "FFlagAvatarEditorAddUnmountCheck": true, + "FFlagAvatarEditorClearTryOnFix": true, + "FFlagAvatarEditorInitializeModelEarly": true, + "FFlagAvatarEditorLightThemeFix2": true, + "FFlagAvatarEditorMoreAccuratePageLoadedSignal": true, + "FFlagAvatarEditorRecommendedUIBloxButton": true, + "FFlagAvatarEditorRTranslations": false, + "FFlagAvatarEditorSelectivelyUseDefaultAsset": true, + "FFlagAvatarEvolutionImporter": true, + "FFlagAvatarEvolutionImporter_PlaceFilter": "True;4599786547;5326950832", + "FFlagAvatarExperienceAnimationLookAroundFix": true, + "FFlagAvatarExperienceBackgroundThemeFix": true, + "FFlagAvatarExperienceBodySizeIndicator": true, + "FFlagAvatarExperienceCameraControls": true, + "FFlagAvatarExperienceCatalogAnimationIdleFix": true, + "FFlagAvatarExperienceCatalogEmoteFix": true, + "FFlagAvatarExperienceCharacterManagerOnSlowNetwork": false, + "FFlagAvatarExperienceControllerSupport2": false, + "FFlagAvatarExperienceControllerSupport5": true, + "FFlagAvatarExperienceFirstTryOnFix": true, + "FFlagAvatarExperienceImproveBackgroundTransition": true, + "FFlagAvatarExperienceLandingHeaderFix": true, + "FFlagAvatarExperienceNavMouseSupport": true, + "FFlagAvatarExperienceNewCategoryApisRolloutEnabled": false, + "FFlagAvatarExperienceNewDarkSkybox": true, + "FFlagAvatarExperienceNoFaceToast2": true, + "FFlagAvatarExperienceOutfitRecommendations2": true, + "FFlagAvatarExperiencePeekHeaderUpdate": true, + "FFlagAvatarExperiencePlayOutfitIdleAnim": true, + "FFlagAvatarExperiencePremiumIconFix": true, + "FFlagAvatarExperienceRunSceneFix": true, + "FFlagAvatarExperienceShowAnimationR6Toast": false, + "FFlagAvatarExperienceShowAnimationR6Toast2": true, + "FFlagAvatarExperienceShowBodyscaleR6Toast": true, + "FFlagAvatarExperienceShowEmotesR6Toast": true, + "FFlagAvatarExperienceUseContextualMenu": true, + "FFlagAvatarExperienceUseInternalBackgroundAsset": true, + "FFlagAvatarExperienceUseNewCharacterManager2": true, + "FFlagAvatarExperienceWaitForLoading": true, + "FFlagAvatarImporterBonesUnderRigidPartsFix": true, + "FFlagAvatarImporterCustomAttSupport": true, + "FFlagAvatarImporterCustomRigConnectFix": true, + "FFlagAvatarImporterIncreased21kTriLimit": true, + "FFlagAvatarLandingPageButtonDesignChange": true, + "FFlagAvatarLandingPageStartupFix": true, + "FFlagAvatarPageUtilsRefactor": false, + "FFlagAvatarPageUtilsRefactor2": true, + "FFlagAvatarSizeFixForReorganizeHeaders": true, + "FFlagAvoidCrashOnThreadResourceError": false, + "FFlagAXArrowNavFix": true, + "FFlagAXFixBodySliderPerformance": true, + "FFlagAXFixBodySliderStartOnMouseDown": true, + "FFlagAXImprovedControllerDesign2": true, + "FFlagAXRemoveAlertViewComponents3": true, + "FFlagAXRemoveCostumeButtonXbox": true, + "FFlagAXTopBarSearchSignalProvider": true, + "FFlagBackButtonWhileLoadingGoesBackToApp": true, + "FFlagBatchAssetApi": false, + "FFlagBatchThumbnailAddNewThumbnailTypes": true, + "FFlagBetaFeatureImpressionAnalytics": true, + "FFlagBetaFeatureOptOut": true, + "FFlagBetterEmoji2": true, + "FFlagBillboardGuiDistanceStepping2": false, + "FFlagBindToAllInterfaces": true, + "FFlagBirthdayPickerFocusRefactor": true, + "FFlagBootstrapperTryAsset": true, + "FFlagBorderColorMode": true, + "FFlagBoundingBoxRefactor": true, + "FFlagBrowserServiceForAllPlatforms": true, + "FFlagBubbleChatSettingsApi": true, + "FFlagBuildPluginWithRobloxCLI": true, + "FFlagBulletInitialContactDivideByAxisLength": true, + "FFlagBypassDoubleInitialization": true, + "FFlagCageMeshImporter": false, + "FFlagCageMeshImporter_PlaceFilter": "True;2431195974", + "FFlagCalcBoxMappingForSkinnedMesh": true, + "FFlagCalcBoxMappingForSkinnedMesh_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagCameraSensitivityAllowGranularKeyboardInput": true, + "FFlagCancelButtonTouchEventOnMouseDragOff": true, + "FFlagCanvasPosChangedOnStepElasticBounds": true, + "FFlagCatalogFilteredSearch": true, + "FFlagCatalogFullAvatarWifiIcon": true, + "FFlagCatalogSnFResetButtonFix": true, + "FFlagCatalogSnFResetCategoryFilter": true, + "FFlagCFrameLookAt": true, + "FFlagCFrameOrthonormalize": true, + "FFlagChangeHistoryIgnoreArchivable": true, + "FFlagChangesToFileMenu": true, + "FFlagCheckBeforeCreate": true, + "FFlagClarifiedDraggerBehaviorReleaseCallout": true, + "FFlagCleanupFetchLocaleAssetFallback": true, + "FFlagCLI18241": true, + "FFlagCLI18241A": true, + "FFlagCLI18241B": true, + "FFlagCLI26858": false, + "FFlagCLI30497B": false, + "FFlagCLI30497S": true, + "FFlagCLI35629": true, + "FFlagCLI35812Hello": true, + "FFlagCLI36412": true, + "FFlagCLI36803": true, + "FFlagCLI37073": true, + "FFlagCli38416": false, + "FFlagCLI38529": true, + "FFlagCLIAPPBRIDGE372": true, + "FFlagCLIAPPBRIDGE414": true, + "FFlagClickDetectorCursorIconEnabled": true, + "FFlagClickDetectorUsesHRPForDistanceCalculation": true, + "FFlagClientFireEventPlaceLauncherFail3": true, + "FFlagCmdLineExpressions": true, + "FFlagCMSFixAssetPreviewForThumbnailConfig": true, + "FFlagCMSPremiumBenefitsLink2": true, + "FFlagCMSUploadFees": true, + "FFlagCollabEditVersionHistoryEnabled": true, + "FFlagCollectAnalyticsForSystemMenu": true, + "FFlagColor3Picker": true, + "FFlagComboboxSupportEventHandler": true, + "FFlagComboboxSupportTextAttribute": true, + "FFlagCommonPackageStringUtilities": true, + "FFlagConnectErrorHandlerInLoadingScript": true, + "FFlagConnectErrorHandlerInLoadingScript_PlaceFilter": "False;731863175;731680819", + "FFlagConnectionScriptEnabled": true, + "FFlagConnectionScriptEnabled_PlaceFilter": "False;1608755154", + "FFlagConsistentCofmForAnimatedAssemblies": true, + "FFlagConstraintWidgetRenderOutsideOfStudio": true, + "FFlagContentProviderTempDirWithPid2": true, + "FFlagConvertSoundPlaybackChannelToValueType": true, + "FFlagCorePackagesForAll": true, + "FFlagCoreScriptFasterCreate": true, + "FFlagCoreScriptNoPosthumousHurtOverlay": true, + "FFlagCoreScriptsNoHotKeysWhenMenuOpen": true, + "FFlagCoreScriptsUseRoactRoduxNewConnectionOrder": true, + "FFlagCorrectTeamCreatePublishWorkflow": true, + "FFlagCorrectTextBoundsForRichText": true, + "FFlagCrashReporterNew": false, + "FFlagCreateAndUpdateDataReplicationCache5": true, + "FFlagCreateSoundsInLowMemoryMode": true, + "FFlagCSGv2BalanceExponents": false, + "FFlagCSGv2ControlSignificands": false, + "FFlagCSGv2EnableEmptyMeshError": true, + "FFlagCSGv2EnablePerPrimitiveBoxMaps": true, + "FFlagCSGv2FixOrientationWhenSeparatingNegates": true, + "FFlagCSGv2UnionOrientationFromFirstPart": true, + "FFlagCSGv2UnparentPartsBeforeModifyingCFrames": true, + "FFlagCSGv2UseImprovedSphereAndCylinder": true, + "FFlagCtrlPinchRejection": true, + "FFlagCurlOption53": true, + "FFlagCurlProbe4": true, + "FFlagCylinderHandleAdornmentInnerRadiusAngleEnable2": true, + "FFlagDataModelPatcherImages": true, + "FFlagDataModelPatcherOTAEnabled": true, + "FFlagDataStoreAdditionalMetricsEnabled": true, + "FFlagDebugClientNetworkPerPlaceMetrics": false, + "FFlagDebugClientNetworkPerPlaceMetrics_PlaceFilter": "True;1818;3498890;189707", + "FFlagDebugCrashEnabled": false, + "FFlagDebugCrashEnabled_PlaceFilter": "True;6036870533", + "FFlagDebugCSGExportFailure": false, + "FFlagDebugDeleteDiscrimination": true, + "FFlagDebugDontForceCollisionsOnHumanoidParts": false, + "FFlagDebugDontForceCollisionsOnHumanoidParts_PlaceFilter": "True;3360073263", + "FFlagDebugEnableEventEmulator": true, + "FFlagDebugGraphicsIntelCrash": false, + "FFlagDebugStudioSandboxDraftsHardeningVerifyTmpFile": true, + "FFlagDebugUseDefaultGlobalSettings": true, + "FFlagDebugVersionHistoryDialogLocalTestMode": false, + "FFlagDebugVersionHistoryHttpCompressData": true, + "FFlagDecodeETC2RGB8": true, + "FFlagDecoupleUserInputServiceFromPlugins": true, + "FFlagDeeplinkHttpWebPatterns": true, + "FFlagDeferLSPServerInitialization": true, + "FFlagDelayPurchasePromptActivation": true, + "FFlagDeliverLowMemoryWarningsViaPolling": false, + "FFlagDeprecateBreakOnAllScriptErrors": true, + "FFlagDepthOfField": true, + "FFlagDepthOfFieldUseNewClipDistance": true, + "FFlagDevConsoleBetterResize": true, + "FFlagDevConsoleFixCommandBarForNonOwners": true, + "FFlagDevConsoleFixMicroprofilerSyncIssues": true, + "FFlagDevConsoleFixTopBarDragging": true, + "FFlagDevConsoleFixTopBarIcons": true, + "FFlagDevConsoleIsVeryStickyWhyWillItNotLetGo": false, + "FFlagDevConsoleLogMemoryButton": true, + "FFlagDevConsoleLogNewLineFix": false, + "FFlagDevConsoleNoDisableAllFilters": true, + "FFlagDevConsoleTabMetrics": true, + "FFlagDeveloperEventIngestVerifyFeature_PlaceFilter": "True;3182856628", + "FFlagDevFrameworkEnumUtility": true, + "FFlagDevFrameworkFixCreatePluginWidget": true, + "FFlagDevFrameworkLocalizationLibraries": true, + "FFlagDevFrameworkPluginWidgetEnabledEvent": false, + "FFlagDevFrameworkPluginWidgetEnabledEvent2": true, + "FFlagDevFrameworkPluginWidgetUseSiblingZIndex": true, + "FFlagDevFrameworkStrictAPITables": true, + "FFlagDevFrameworkTextInputContainer": true, + "FFlagDisableAppStorageResetOnUALogout2": true, + "FFlagDisableAutoTranslateForKeyTranslatedContent": true, + "FFlagDisabledLayerCollectorsShouldNotSinkInput": true, + "FFlagDisableFollowInGameMenu": true, + "FFlagDisableGuiInVFRenderInMainScene": true, + "FFlagDisableHangDetectionWhenDebugging": true, + "FFlagDisablePlayerOsPropertyReplication": true, + "FFlagDisableReconnectAfterPotentialTimeout": true, + "FFlagDisableSpinnerLayoutUpdate": true, + "FFlagDisplayErrorDetailsSecurityLevel": true, + "FFlagDisplayNameFriendshipCreatedFix": true, + "FFlagDisplayNameSignalR": true, + "FFlagDisplayPlaceHolderTextWhenRichTextEnabled": true, + "FFlagDOFLoadStoreFix": true, + "FFlagDoNotLoadUnverifiedBuiltInPlugins": true, + "FFlagDontActivateIfNoDocsOpen": true, + "FFlagDontDisconnectJointUpdateUnlessNecessary": false, + "FFlagDontLoadCloudLocalizationSettingsOnCloudEditMode": true, + "FFlagDontOverwriteSettingsWithPartialSerialization": true, + "FFlagDoTeleportCloseCurrentDMBlocking": false, + "FFlagDoubleSidedLightingFix": true, + "FFlagDraftWidgetResponsiveCommitButton": true, + "FFlagDragFaceInstances": true, + "FFlagDraggerMiscFixes": true, + "FFlagDraggerResizeLimit": true, + "FFlagDraggerSplit": true, + "FFlagDraggerSupportBones": true, + "FFlagDUACatalogSearchBugfix": true, + "FFlagDynamicTToolReplacement": true, + "FFlagEducationalPopupOnNativeClose": true, + "FFlagEmailUpsellAtLogout": true, + "FFlagEmotesMenuFixSelectedObject": true, + "FFlagEmulateDeviceMemory": true, + "FFlagEnableAccountSettingsMigration": true, + "FFlagEnableAdditionalAssetFormatFunctions_PlaceFilter": "True;189707;2573981315", + "FFlagEnableAddUniverseIdToFilterHeaders": true, + "FFlagEnableAlignmentToolPlugin": true, + "FFlagEnableAlignToolImprovementsBeta": true, + "FFlagEnableAllCapsSupport": true, + "FFlagEnableAndroidSetPendingTagOnContactFriendRequest": true, + "FFlagEnableAndroidVsync": true, + "FFlagEnableAppPolicyDefaultsFile": true, + "FFlagEnableAppsFlyerLinks": true, + "FFlagEnableAppsFlyerShortLinks": true, + "FFlagEnableAppTracing": true, + "FFlagEnableAsyncHttpResponseOnFailure": true, + "FFlagEnableAudioPreviewWhiteList": true, + "FFlagEnableAudioResources": true, + "FFlagEnableAuthV2Login": true, + "FFlagEnableAutoUpgradeWin32": true, + "FFlagEnableAvatarEditoriOSTablet": true, + "FFlagEnableBackgroundModeWhenInactive": false, + "FFlagEnableBillboardRenderSwitch": true, + "FFlagEnableBoneTransformAPI": true, + "FFlagEnableBoneTransformAPI_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagEnableBreakpointPropagationBetaFeature": true, + "FFlagEnableBubbleChatFromChatService": true, + "FFlagEnableBulkAudioAnalytics": true, + "FFlagEnableCatelogForAPIService": true, + "FFlagEnableClarifiedIKDraggersBeta": true, + "FFlagEnableCloudsPhase1Beta": true, + "FFlagEnableConsoleMessageOnMeshRetry": true, + "FFlagEnableContactsApiServiceV2": true, + "FFlagEnableContactsFriendFinder": false, + "FFlagEnableContentProviderCheckModerationFailure": true, + "FFlagEnableConvertToTerrainBeta": true, + "FFlagEnableCoreScriptBacktraceReporting": true, + "FFlagEnableCredentialManagerIntegration": true, + "FFlagEnableCredentialsValidationMigration": true, + "FFlagEnableD3D11Scissor": true, + "FFlagEnableD3D9Scissor": true, + "FFlagEnableDataModelNotificationOpenUrl": true, + "FFlagEnableDateTimeInNetworkValueFormat": true, + "FFlagEnableDefaultSortFix2": true, + "FFlagEnableDevProductsInGameSettings": true, + "FFlagEnableFastFlagEditorWithInternalPermission": true, + "FFlagEnableFontFaceParsing": true, + "FFlagEnableGameSignalRWithAllPlatforms1": false, + "FFlagEnableGameSignalRWithAllPlatforms1_PlaceFilter": "True;5306826776;5465723678;5914914682;5857870096;5968314783;5972134083;5064251723", + "FFlagEnableGameSignalRWithOSX1": true, + "FFlagEnableGameSignalRWithWindows1": false, + "FFlagEnableGameStartUniversalLink": true, + "FFlagEnableGLScissor": true, + "FFlagEnableGranularMemoryTabStats": true, + "FFlagEnableHumanoidBillboardRenderSwitch": true, + "FFlagEnableInternalPermissionBlockList2": true, + "FFlagEnableIsPremiumSettings": true, + "FFlagEnableJavascriptHybrid2": true, + "FFlagEnableLineBreakParsing": true, + "FFlagEnableLinkCodeLaunching": true, + "FFlagEnableLuaDraggers": true, + "FFlagEnableLuaDraggersBetaFeature": false, + "FFlagEnableLuaEventStreamRelease": true, + "FFlagEnableLuaReputationSetting": true, + "FFlagEnableMarketplaceFavorite": true, + "FFlagEnableMeshPartJointOffset": true, + "FFlagEnableMeshPartJointOffset_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagEnableMessagesForCJVMore": false, + "FFlagEnableMetalScissor": true, + "FFlagEnableMoreSettingsPagePolicy": true, + "FFlagEnableMouseUpEventFireForCurrentDragGuiObj": true, + "FFlagEnableNewChatApi": true, + "FFlagEnableNonWhitelistedToggle": true, + "FFlagEnableOpenExternalBrowserWin32": true, + "FFlagEnableOverrideAssetCursorFix": true, + "FFlagEnablePluginPermissionsPage2": true, + "FFlagEnablePreviewTabSelection": true, + "FFlagEnableProximityPromptBetaFeature": true, + "FFlagEnablePurchaseV2": true, + "FFlagEnableR3ButtonIOS": true, + "FFlagEnableReadingNewConvexDecompositionPath": true, + "FFlagEnableRemoteThemeCheckOniOSV2": true, + "FFlagEnableResetPlaceFilters": true, + "FFlagEnableResetPlaceFilters_PlaceFilter": "False;5790039516;5646917919", + "FFlagEnableReturnKeyPressedEvent": true, + "FFlagEnableRichTextBetaFeature": false, + "FFlagEnableRobuxHexIconV2": true, + "FFlagEnableRobuxNewGraphicsXbox": true, + "FFlagEnableSetStageNoneInDestroy": true, + "FFlagEnableSmallCapsSupport": true, + "FFlagEnableStudioProfiler": true, + "FFlagEnableStudioServiceGetUserId": true, + "FFlagEnableTextBoxPasswordDev": true, + "FFlagEnableTexturePacksBetaFeature": true, + "FFlagEnableToolboxGetAssetsFailedCaseFix": true, + "FFlagEnableToolboxVideos": true, + "FFlagEnableToolboxVoteFix": true, + "FFlagEnableUIBloxIcons": true, + "FFlagEnableVersionHistoryForLockedScripts": false, + "FFlagEnableVersionHistoryForLockedScripts_PlaceFilter": "True;2622490766;3155470637;812059980;5279580942;2267315246;4944167941;5454769054;6053482297;6087391542;6036781607;6036775491;629119226;4526445216;5410995626;5907738609;2825626;6233044695;2021713175;5998756830;663027247;1975719456;5951470484;6004108409;5372338037;5917970706;5018214687;6033318438;2260759709;6033367137;6012481859;4549679686;4431799863;4656807268;4857815074;5228468082;5363921548;2493438430;4858882918;5673340193;5352395552;2127688273;6099117169;6242582774", + "FFlagEnableVulkanScissor": true, + "FFlagExecuteInNewThread2": true, + "FFlagExitProcessOnExit": true, + "FFlagExtendPlayerScrollListWindowingForGamepadSelection": true, + "FFlagExtTrackpadsMasterSwitch": true, + "FFlagFallbackLeaderstatOrdering": true, + "FFlagFastClusterPerformUpdateCoordinateFrame": true, + "FFlagFCIncreaseVertexLimit": true, + "FFlagFFlagFixMenuIcons": true, + "FFlagFilterInvalidVoxelDescriptors": true, + "FFlagFindNestedParts": true, + "FFlagFixAcceptingCanceledPurchased": true, + "FFlagFixActivatedEventDoubleFire": true, + "FFlagFixAlignToolAnalyticsEventCount": true, + "FFlagFixAlignToolMissingTargetObject": true, + "FFlagFixAnimationLoadErrors": true, + "FFlagFixAnimEditorManipulators": true, + "FFlagFixAppsFlyerLongLinksOnStartup": true, + "FFlagFixArcHandlesMouseEvents": true, + "FFlagFixAssetConfigPermissionsRace": true, + "FFlagFixAssetManagerInsertWithLocation": true, + "FFlagFixAssetUploadName": true, + "FFlagFixAudioAssetsForLuoBu": true, + "FFlagFixAudioDeviceReportingForNoDrivers": true, + "FFlagFixAvatarExperienceViewRerendering": true, + "FFlagFixBlockedListInitLogic": true, + "FFlagFixBroadphaseMovementCallbacks": true, + "FFlagFixCaseSensitiveAssetNames": true, + "FFlagFixCaseSensitiveAssetNames2": true, + "FFlagFixCGECursor": true, + "FFlagFixColorPickerAppearingInWrongLocation": true, + "FFlagFixConfigFileImport": true, + "FFlagFixContentNotFullyShownAfterResize": true, + "FFlagFixConvertToPackageHang": true, + "FFlagFixCreatorTypeParameterForAssetRequest": true, + "FFlagFixDeadlockWhenDebugging": true, + "FFlagFixDevFrameworkDockWidgetMinSize": true, + "FFlagFixDevFrameworkDockWidgetRestore": true, + "FFlagFixDevFrameworkTooltip": true, + "FFlagFixDialogScriptNilChecks": true, + "FFlagFixDialogServerWait": true, + "FFlagFixDuplicateChildNames": true, + "FFlagFixDuplicateNamedRoot": true, + "FFlagFixDuplicateWatches": true, + "FFlagFixEdgeOnRotateError": true, + "FFlagFixEmotesHotKeysEquipTools": true, + "FFlagFixExportSpeed": true, + "FFlagFixFastClusterEntityLocalBounds_PlaceFilter": "True;4599786547;5326950832", + "FFlagFixFilterScriptFunctionsFromMenu": true, + "FFlagFixFirstPersonMouseCursorSnapping_CenterPos": true, + "FFlagFixFirstPersonMouseCursorSnapping_ForceCursor": true, + "FFlagFixFirstPersonMouseCursorSnapping_UWP": true, + "FFlagFixFitToContentOnCloseError": true, + "FFlagFixFolderDescendantSelection": true, + "FFlagFixForNativeShareOnIPad135": true, + "FFlagFixG3DFpChecks": true, + "FFlagFixGamepadCursorIdlePosition": true, + "FFlagFixGamepadMenuButtonIOS": true, + "FFlagFixGamepadOldMenuOpening": true, + "FFlagFixGamepadR3LastInputType": true, + "FFlagFixGameViewControllerViewRecreation": true, + "FFlagFixGetAssetTypeErrorHandling": true, + "FFlagFixGettingAssetOwnerNameInAssetPreview": true, + "FFlagFixGlobalRotateAgain": true, + "FFlagFixGroupPackagesCategoryInToolbox": true, + "FFlagFixHACDHullPointLoss": true, + "FFlagFixIAdornableCollectorCrash3": false, + "FFlagFixIECompatiblityBug": true, + "FFlagFixIKRotateCFrameError": true, + "FFlagFixImportImageEdgeCliffing": false, + "FFlagFixInGameMenuMissingAssets": true, + "FFlagFixInGameMenuSliderClamping": true, + "FFlagFixInGameNavTreeCrash": true, + "FFlagFixInterpolationMovementCallbacks": true, + "FFlagFixIOSTextFieldResignationOnReturn": true, + "FFlagFixKeyframeDetectionV2": true, + "FFlagFixKeysStuckOnTest": true, + "FFlagFixLeaderboardWaitingOnScreenSize": true, + "FFlagFixLinkedScript2": true, + "FFlagFixLoadableImageDoesNotLoadCachedImage": true, + "FFlagFixLoadingServerScript": true, + "FFlagFixLoadTimeReporting": true, + "FFlagFixLocalShutdownRequest": false, + "FFlagFixLSPEncodingMismatch": true, + "FFlagFixLuaAppAvatarDraggable": true, + "FFlagFixLuaAppBreakpoints": true, + "FFlagFixLuobuVideoCategory": true, + "FFlagFixMakeChainPose": true, + "FFlagFixMakeFriendsNavCrash": true, + "FFlagFixMeshExtraAllocation": true, + "FFlagFixMissingTangents": true, + "FFlagFixMockStudioTheme": true, + "FFlagFixModelPreviewSelection": true, + "FFlagFixNavigationToChatFromPN": true, + "FFlagFixNonDuarShutdown": true, + "FFlagFixNotificationScriptError": true, + "FFlagFixOutBoundAccessInBoxMappedMesh": false, + "FFlagFixOutOfBoundsMouseLocation": true, + "FFlagFixPartMoverGhostCollisions": true, + "FFlagFixPIIFilterInErrorReporter": true, + "FFlagFixPlaybackWithEndFrameAtZero": true, + "FFlagFixPluginFileSyncBreakpoints": true, + "FFlagFixPreserveCoverageMipGen": true, + "FFlagFixRenderFidelityTeamCreateReplication": true, + "FFlagFixReplaceTerrainAir": true, + "FFlagFixRespawnDialogOpeningWhenDisabled": true, + "FFlagFixRichTextSizingUnderAutomaticSize": false, + "FFlagFixRichTextXAlignment": true, + "FFlagFixRigUtils": true, + "FFlagFixRobloxInputBadArrayLengthChecksTheSagaContinues": true, + "FFlagFixRolloutHashing": true, + "FFlagFixScalingValueRename": true, + "FFlagFixScalingValueRename_PlaceFilter": "False;370731277", + "FFlagFixShadowBiasYetAgain": true, + "FFlagFixSmallSurfaceGuiMouseInput": true, + "FFlagFixStarterGuiErrors": true, + "FFlagFixStartupGameLaunchFromLink": true, + "FFlagFixStrokeForFastRichTextLayout": true, + "FFlagFixStudioFlagEditorCrash": true, + "FFlagFixTableLayoutMinorAxisSortOrder": true, + "FFlagFixTableMenuItemHighlight": true, + "FFlagFixTextboxSinkingInputOfOverlappingButtons": false, + "FFlagFixTextChangedFromEmptyForTextEntry": true, + "FFlagFixTextSelectionForHighDpi": true, + "FFlagFixTexturePackETCMips": true, + "FFlagFixToggleOffDarkName": true, + "FFlagFixTopBarButtonHover": true, + "FFlagFixTrailTimeCalculation": true, + "FFlagFixTreeViewFlatListDefault": true, + "FFlagFixUploadingImagesInGameSettings": true, + "FFlagFixUseDevelopFetchPluginVersionId2": true, + "FFlagFixWarningsInGameSettings": true, + "FFlagFixXSwipe": true, + "FFlagFlagEditorEnableAddButton": true, + "FFlagFlagEditorUseFlagConversionUtilities": true, + "FFlagFlyweightServiceDataRecievedCallbackCrashFixEnabled": true, + "FFlagFocusTeamChatShortcut": true, + "FFlagForceCursorVisibleOnPurchasePrompt": true, + "FFlagForceDoubleSided": false, + "FFlagForceSetLayoutDirtyOnParentChanged": true, + "FFlagFovModes2": true, + "FFlagFrameStepJointsParallel5": false, + "FFlagFrameStepJointsParallel6": true, + "FFlagFreeCameraForAdmins": true, + "FFlagFreecamInTestServers": true, + "FFlagFRMIndependentFog": true, + "FFlagFRMPersistentAutoQualityLevel": true, + "FFlagFRMTruncateAutoQualityArray": true, + "FFlagFullscreenAnalytics": true, + "FFlagFunCaptchaBedev2ForUWPLoginEnabled": true, + "FFlagFunCaptchaBedev2ForUWPSignupEnabled": true, + "FFlagFunCaptchaDxForUWPLoginEnabled": true, + "FFlagFunCaptchaDxForUWPSignupEnabled": true, + "FFlagFutureIsBrightPhase2GL3": false, + "FFlagFutureIsBrightPhase2GLES3": false, + "FFlagFutureIsBrightPhase3": true, + "FFlagGameDetailsPeekViewAnalyticsEvents2": true, + "FFlagGameDetailsTopBarNavFix": true, + "FFlagGameinternationalizationApiWhitelist": true, + "FFlagGameJoinAnswerMe": true, + "FFlagGameLocaleIdInternalOverridesForceGameLocaleId": true, + "FFlagGamepadSupportNilRefsFix": true, + "FFlagGameSettingsFixNameWhitespace": true, + "FFlagGameSettingsPlaceSettings": true, + "FFlagGameSettingsShutdownAllServersButton": true, + "FFlagGamesHubCreationCenterPolicy": true, + "FFlagGenerateMeshLOD_MeshOptForSkin": true, + "FFlagGenerateMeshLOD_MeshOptForSkin_PlaceFilter": "True;4599786547;5326950832", + "FFlagGetBtidCookieFromEngineIOS": true, + "FFlagGetGameLocaleOnlyFromJoinBlob": true, + "FFlagGetScreenPositionOffsetCamPtrGuard": true, + "FFlagGetUpvaluesOnErrorThread": true, + "FFlagGlsles3Mediump1": false, + "FFlagGlslesMediump1": false, + "FFlagGraphicsD3D9TextureDL": true, + "FFlagGraphicsDisableMemorylessMetal": false, + "FFlagGraphicsDisableMemorylessMetal_PlaceFilter": "True;5326950832", + "FFlagGraphicsDisableMetalIntel": false, + "FFlagGraphicsGL3UseUBO3": true, + "FFlagGraphicsGLDisableTimerQueryAdreno": false, + "FFlagGraphicsGLESTextureDL": true, + "FFlagGraphicsGLHD3000DisableGL3": false, + "FFlagGraphicsGLHD3000DisableUBO": true, + "FFlagGraphicsGLPerFrameQuery2": false, + "FFlagGraphicsHasUnifiedMemoryMetal": true, + "FFlagGraphicsMetalTextureReduction": true, + "FFlagGraphicsShadowMapFixXbox": true, + "FFlagGraphicsUseUnifiedBufferMemoryMetal": true, + "FFlagGraphicsUseUnifiedTextureMemoryMetal": true, + "FFlagGraphicsVulkanAndroidTextureDL": true, + "FFlagGraphicsVulkanInitComputeTexture": true, + "FFlagGraphicsVulkanPixelbookDisable": true, + "FFlagGraphicsVulkanPreRotate2": true, + "FFlagGraphicsVulkanTextureReduction": true, + "FFlagGreyOutPublishForAssetConfigIfServiceIsSelected": false, + "FFlagGroupEditDevConsoleButton": true, + "FFlagGuardAgainstNilRadioTech": true, + "FFlagGuestFriendCheckFailImmediate": true, + "FFlagGuiApplyInsertionOrderSort2": false, + "FFlagGuiApplyInsertionOrderSort3": true, + "FFlagGuidCrashFix": true, + "FFlagHandleAltEnterFullscreenManually": true, + "FFlagHandleIKError": true, + "FFlagHideInvalidEventTiles": true, + "FFlagHideMoveDraggerWarning": true, + "FFlagHideOneChildTreeviewButton": false, + "FFlagHideSeeAllWhenEmpty": true, + "FFlagHideThirdPartyPurchaseFailure": true, + "FFlagHonorAltEnterFullscreen": true, + "FFlagHoverBoxActiveColor": true, + "FFlagHttpClientDisconnectResultSignals": true, + "FFlagHttpRemoveInMemoryCache": true, + "FFlagHttpServiceLogPluginDomains": true, + "FFlagHttpServiceNeverCache": true, + "FFlagHttpStoreBwStats": true, + "FFlagHttpUseContentCacheFlag3": true, + "FFlagHttpUseMinGzip": false, + "FFlagHugeMessagesFix": true, + "FFlagHumanoidDeferredSyncFunction_PlaceFilter": "True;4599786547", + "FFlagHumanoidNameplateRespectsLocale": true, + "FFlagHumanoidParallelOnStep_PlaceFilter": "True;4599786547", + "FFlagHumanoidParallelUseManager_PlaceFilter": "True;4599786547", + "FFlagHumanoidPreventDuplicateAnimatorChildren": true, + "FFlagIAPProductReducerV2": true, + "FFlagIESuppressErrors": true, + "FFlagIgnoreLocaleInJoinScriptData": true, + "FFlagIGPPPremiumPriceV2": true, + "FFlagImmHandlerFixJapaneseAndKorean2": false, + "FFlagImplementIMEInStudio": true, + "FFlagImproveAssetCreationsPageFetching": false, + "FFlagImprovedInstanceErrorMessage": true, + "FFlagImproveDragOrientation": true, + "FFlagIncreaseCircularAdornSideCount": true, + "FFlagIndentActionInContextMenu": true, + "FFlagIndexedVertexStreamer2": false, + "FFlagIndexedVertexStreamer4": true, + "FFlagInfiniteTriangleMeshRecalcFixEnabled": true, + "FFlagInformScriptEditorWhenResumingFromPluginBreakpoint": true, + "FFlagInGameHomeIcon": true, + "FFlagInGameMenuFullscreenTitleBar": true, + "FFlagInGameMenuIconTooltip": true, + "FFlagInGameMenuInviteFriendsDisplayNameSearch": true, + "FFlagInGameMenuOpenOnHover": true, + "FFlagInGameMenuUseContextualMenu": true, + "FFlagInGameOpenSystemMenuFix": true, + "FFlagInGameUIForceDefaultLocaleOnOSX": true, + "FFlagInGameUIForceDefaultLocaleOnWin10": true, + "FFlagInGameUIForceDefaultLocaleOnWin32": true, + "FFlagInitialClusterCacheUseArray": true, + "FFlagInitializeSubChunkAsLowLOD_DataCenterFilter": "True;214", + "FFlagInitializeTouchSenderByteBudget": true, + "FFlagInsertServiceCreateMeshPartAsync": true, + "FFlagInstancedCluster2SpatialGridNoSize": true, + "FFlagInstrumentMenuOpenMethods": true, + "FFlagInterpolateCullDistance": false, + "FFlagInterpolationAwareTargetTime": true, + "FFlagInvalidateNanTimeStamp": true, + "FFlagIOSNowSupportsAussieMode": true, + "FFlagIOSUseGamepadSupport": true, + "FFlagIsBEDEV2CaptchaEnabledForMobileLoginForAll": true, + "FFlagIsBEDEV2CaptchaEnabledForMobileSignupForAll": true, + "FFlagIsPasswordValidationV2Enabled": true, + "FFlagIsTwoStepResendV2Enabled": true, + "FFlagIsTwoStepValidationV2Enabled": true, + "FFlagItemDetailsDeepLinkFix": true, + "FFlagItemDetailsNilSelectedObjectFix": true, + "FFlagItemDetailsSmoothTransition3": true, + "FFlagItemInfoGamepadFix": true, + "FFlagJIRA_RIDE_192": true, + "FFlagJIRA_RIDE_2520": true, + "FFlagJIRA_RIDE_630": true, + "FFlagJIRA_RIDE_785": true, + "FFlagJoinDataCacheCompressionImprovement": true, + "FFlagJoinDataCacheInitialOrder": true, + "FFlagJoinDataCacheOptimizeBlobCount": true, + "FFlagJoinTime_AvatarFastClusterSignal": true, + "FFlagJoinTime_AvatarTextureCompositorSignal": true, + "FFlagJoinTime_HttpQueuePrio": true, + "FFlagJoinTime_LocalUserAnimationPriority": true, + "FFlagJoinTime_LocalUserClusterPriority": true, + "FFlagJoinTime_LocalUserMeshPriority": true, + "FFlagJoinTime_LocalUserTexturePriority": true, + "FFlagJoinTime_PassTexturePriority": true, + "FFlagJoinTimeCounters": true, + "FFlagLandingPageRoundedCorners": true, + "FFlagLastInputTypeInStore": true, + "FFlagLaunchAppClearLocalStorageForWebLaunch": true, + "FFlagLaunchAppWaitForABTestsInitialized": true, + "FFlagLayerCollectorLocale": true, + "FFlagLeaderboardDontWaitOnChinaPolicy": true, + "FFlagLeaderstatsWithASideOfClient": true, + "FFlagLeaveStartingCoreScriptsToPlaceLauncher": true, + "FFlagLegacyStudioBridge2": true, + "FFlagLmsClientEnabled": true, + "FFlagLoadGameLinkCardInChatAnalyticsEnabled": true, + "FFlagLoadingScreenDontBlockOnPolicyService": true, + "FFlagLoadPluginsInSubmitTask3": true, + "FFlagLoadTheLoadingScreenEvenFaster": true, + "FFlagLoadTheLoadingScreenFaster": false, + "FFlagLoadTimesFromAppShellReporter": true, + "FFlagLocalizationFormatTypeListEnabled": true, + "FFlagLocalizationPageInGameSettingsV2": true, + "FFlagLocalizationPageNullSourceLanguageFixEnabled": true, + "FFlagLocalizationToolsFixHttpFailureBacktrace": true, + "FFlagLocalizeErrorCodeString": true, + "FFlagLocalizeVideoRecordAndScreenshotText": true, + "FFlagLocalSpaceWidget": true, + "FFlagLocServicePerformanceAnalyticsEnabled": true, + "FFlagLocServiceSeparateTextScraperStartPath": true, + "FFlagLogBadConstructorArguments": false, + "FFlagLSPOnTypeFormatingNewOptions": true, + "FFlagLSPSyntaxHighlightingClientRefactoring": true, + "FFlagLuaAppABTestFeaturedGameTileInSearch": false, + "FFlagLuaAppABTestGameDetailsPeekView": true, + "FFlagLuaAppABTestMorePageListGridLayout": true, + "FFlagLuaAppABTestSearchResultsQ2DGameEmphasis": false, + "FFlagLuaAppABTestUseSearchResultsQ2DHideBadGames": false, + "FFlagLuaAppAEUseAppPolicyForCustomCostumeNames": true, + "FFlagLuaAppAutocompleteABTest": false, + "FFlagLuaAppAutocompleteAdjustmentsBugfixes": true, + "FFlagLuaAppAutocompleteEnabled": true, + "FFlagLuaAppAutocompleteFixLatencyLogging": true, + "FFlagLuaAppAutocompleteHideSuggestionList": false, + "FFlagLuaAppAutocompleteNoListFlash2": true, + "FFlagLuaAppAutocompleteNotEncodePrefixJSON": true, + "FFlagLuaAppAutocompleteSession": true, + "FFlagLuaAppAutocompleteTablet": false, + "FFlagLuaAppAutocompleteTablet2": true, + "FFlagLuaAppAutocompleteV2ABTest": true, + "FFlagLuaAppAutocompleteV2Events2": true, + "FFlagLuaAppAutocompleteV2Events3": true, + "FFlagLuaAppBulletSizeFix": true, + "FFlagLuaAppChatPageWaitUntilUserABTestsInitialized": true, + "FFlagLuaAppCJVMorePageShowGroups": false, + "FFlagLuaAppCJVMorePageTermsPrivacy": true, + "FFlagLuaAppConvertUniverseIdToStringV364": false, + "FFlagLuaAppDeepCopyNewMorePageItems": true, + "FFlagLuaAppDeepLinkAfterAppDataFetch": true, + "FFlagLuaAppDismissPeekViewWhenSearchBarFocused": true, + "FFlagLuaAppEnableErrorReporterRateLimit": true, + "FFlagLuaAppEnableStopWatchReporter": false, + "FFlagLuaAppEnableUseExternalBrowserForExternalLinks": true, + "FFlagLuaAppEventsAddPageIdV2": true, + "FFlagLuaAppEventsMappedContext": true, + "FFlagLuaAppExitFullscreenToastV2": true, + "FFlagLuaAppFeaturedGameCardGuardUIEvent": true, + "FFlagLuaAppFeaturedGamePlayButton": true, + "FFlagLuaAppFeaturedGamePlayButtonABTest": true, + "FFlagLuaAppFeaturedGameTileRoundedCorner": true, + "FFlagLuaAppFillScrollingFrameWithLoadMore2": false, + "FFlagLuaAppFillScrollingFrameWithLoadMore3": false, + "FFlagLuaAppFillScrollingFrameWithLoadMore4": true, + "FFlagLuaAppFitChildrenNilCheck": true, + "FFlagLuaAppFix2FAFocus": true, + "FFlagLuaAppFixCancelButton": true, + "FFlagLuaAppFixGameCarouselNilEntries": true, + "FFlagLuaAppFixGameListDupLoadMoreRequests": true, + "FFlagLuaAppFixLightTheme": true, + "FFlagLuaAppFixSpotlightRefresh": true, + "FFlagLuaAppFixToastNotchOverlap": true, + "FFlagLuaAppFollowUserHybridEvent": true, + "FFlagLuaAppFriendsAnalyticsOnStartup": true, + "FFlagLuaAppFullscreenAnalytics": true, + "FFlagLuaAppFullscreenTitleBarV2": true, + "FFlagLuaAppGameDetailsAbbreviatedDescriptionABTestV2": true, + "FFlagLuaAppGameDetailsEventsWithSession": true, + "FFlagLuaAppGameDetailsGroupLinkPolicy": true, + "FFlagLuaAppGameDetailsHideEmptySections": true, + "FFlagLuaAppGameDetailsLocalizedGenre": true, + "FFlagLuaAppGameDetailsMorePWF": true, + "FFlagLuaAppGameDetailsPlayWithFriends": true, + "FFlagLuaAppGameDetailsPlayWithFriendsABTest": false, + "FFlagLuaAppGameEventsTargetIdAndSearchContextV2": true, + "FFlagLuaAppGameImpressionsAnalyticsV2": true, + "FFlagLuaAppGameImpressionsUseTileProps": true, + "FFlagLuaAppGameListNewGridStyle": false, + "FFlagLuaAppGameplayIntentReferralSource": true, + "FFlagLuaAppGamesAPISetFeaturedGame": true, + "FFlagLuaAppGameSearchImpressionsEvent": true, + "FFlagLuaAppGameSearchPlayerSuggestion376": true, + "FFlagLuaAppGameSearchQ2DEvents": true, + "FFlagLuaAppGameSetTargetIdAnalytics": true, + "FFlagLuaAppGameSortGridABTestEnabledV2_3": false, + "FFlagLuaAppGamesPagePreloadingDisabled": false, + "FFlagLuaAppGameTileHideStatsABTest": true, + "FFlagLuaAppGameTileHideStatsFeatureEnabled": true, + "FFlagLuaAppGameTileUseUIBloxItemTile": true, + "FFlagLuaAppGDPeekViewNewSwitchNavigation": true, + "FFlagLuaAppHideBackButtonOnNativeView": true, + "FFlagLuaAppHttpsWebViews": true, + "FFlagLuaAppImproveGameDetailsPeekViewUI": true, + "FFlagLuaAppInitializeABTests2": true, + "FFlagLuaAppLaunchGameWithAccessCode": true, + "FFlagLuaAppLoginLog": true, + "FFlagLuaAppMediumTileInGameSearchPage": true, + "FFlagLuaAppMorePagePolicyFix": true, + "FFlagLuaAppMoreTileRemoveFocusOnClick": true, + "FFlagLuaAppNativePurchase": true, + "FFlagLuaAppNativeWrapperHideTabBar": true, + "FFlagLuaAppNavigateToFeatureHybridEvent": true, + "FFlagLuaAppNewPeekViewShadowAndDragger": true, + "FFlagLuaAppNewThumbnailFinalState": true, + "FFlagLuaAppNilUserPresenceFix": true, + "FFlagLuaAppNoWindowNoLoad": true, + "FFlagLuaAppOpenUserProfileHybridEvent": true, + "FFlagLuaAppPackageUrlBuilder": false, + "FFlagLuaAppPackageUrlBuilderV2": true, + "FFlagLuaAppPeekViewEventsWithSession": true, + "FFlagLuaAppPeekViewHeightChangeFix": true, + "FFlagLuaAppPolicyMockRefactor": true, + "FFlagLuaAppPolicyUseGuac": true, + "FFlagLuaAppPremiumUpsellCancelFix": true, + "FFlagLuaAppQ2DUXAdjustmentsBugfixes": true, + "FFlagLuaAppRecommendedImpressionsAnalytics": true, + "FFlagLuaAppRecommendedOpenGameDetailsEvent": true, + "FFlagLuaAppRefactorInAppLinks2": true, + "FFlagLuaAppRefreshScrollingFrameRefactor3": false, + "FFlagLuaAppRemoveGetFriendshipCountApiCalls": true, + "FFlagLuaAppRemoveNavigateBackUp": true, + "FFlagLuaAppReportConnectFailSeparately": true, + "FFlagLuaAppRestartOnLanguageChange": true, + "FFlagLuaAppSearchAutocompletePolicy": true, + "FFlagLuaAppSearchBarGuardUIEvent": true, + "FFlagLuaAppSearchBarNewUI5": true, + "FFlagLuaAppSearchBarNoWrap": true, + "FFlagLuaAppShouldShowAliasPolicy": true, + "FFlagLuaAppSiteBannerLinks": true, + "FFlagLuaAppSiteMessageBannerEnabled": true, + "FFlagLuaAppSizesWithValidDefaults": true, + "FFlagLuaAppSpotlightAutoRefresh": true, + "FFlagLuaAppSpotlightAvatarsEnabled": true, + "FFlagLuaAppSpotlightGameTileABTestEnabled7": true, + "FFlagLuaAppSystemBar": true, + "FFlagLuaAppTabletSearchTextStay": true, + "FFlagLuaAppTabNameGamesToDiscoverOnIOS": true, + "FFlagLuaAppTopBarCustomBackButton": true, + "FFlagLuaAppUIBloxGameDetailContextMenu": true, + "FFlagLuaAppUpdateGameSortIds": true, + "FFlagLuaAppUpdateRequired": true, + "FFlagLuaAppUseGameSetTargetId": true, + "FFlagLuaAppUseNewCarousel": true, + "FFlagLuaAppUseNewUIBloxRoundedCorners": true, + "FFlagLuaAppUsePolicyProviderPackage": true, + "FFlagLuaAppUserCarouselUnmountFix": true, + "FFlagLuaAppUseRoactRoduxNewConnectionOrder": true, + "FFlagLuaAppUseSearchResultsQ2DGameEmphasis2": true, + "FFlagLuaAppUseSearchResultsQ2DHideBadGames": false, + "FFlagLuaAppUseUIBloxEmptyState": true, + "FFlagLuaAppUseUIBloxLoadingContainer": false, + "FFlagLuaAppUseUIBloxToasts2": true, + "FFlagLuaAppUseWithLocalization": false, + "FFlagLuaAppWebviewInChatFix": true, + "FFlagLuaCatalogContextMenuShareEnabled": true, + "FFlagLuaCatalogEnableFullViewToggleAnalytics": true, + "FFlagLuaCatalogFixRemoveSellToastIcon": true, + "FFlagLuaCatalogFixSearchParameterAnalytics": true, + "FFlagLuaCatalogKeepSellAlertPositionWithKeyboard": true, + "FFlagLuaCatalogLimitSellPriceDigitsTo10": true, + "FFlagLuaCatalogPremiumUpsellModal": true, + "FFlagLuaCatalogRefactorSpawns": true, + "FFlagLuaCatalogShowFloodcheckErrorToast": true, + "FFlagLuaChatAliasConfig_GlobalErrorWillDisable": true, + "FFlagLuaChatAliasConfig_UserIdErrorWillDisable": true, + "FFlagLuaChatAliasesSizingFixV2": true, + "FFlagLuaChatAlwaysJoinUserById": true, + "FFlagLuaChatAnalyticsEnabled": true, + "FFlagLuaChatAssetCardLoadingShimmerV2": false, + "FFlagLuaChatAssetCardLoadingShimmerV3": true, + "FFlagLuaChatBoldUnreadMessageText": true, + "FFlagLuaChatCancelButtonBugFix": true, + "FFlagLuaChatCenterAndroidHeader": true, + "FFlagLuaChatDateContentOverlapFix": true, + "FFlagLuaChatEnableFrequentUsersDiag": true, + "FFlagLuaChatFixConversationHubHeaders369": true, + "FFlagLuaChatOnlyMarkUnreadWhenChatIsFocused": true, + "FFlagLuaChatPlayTogetherABTestEnabled": true, + "FFlagLuaChatRecoverSignalRConnection": true, + "FFlagLuaChatResizeUserChatBubbleModerationError": true, + "FFlagLuaChatRespectCreatorNamePolicy": true, + "FFlagLuaChatScreenManagerAlwaysUpdatesWithDefaultsV390": true, + "FFlagLuaChatScreenManagerResumeAndPauseAfterNavigation": true, + "FFlagLuaChatShareGameToChatFromChatABTestEnabled": true, + "FFlagLuaChatSwipeToGoBackFromConversation369": true, + "FFlagLuaChatToastRefactor369": true, + "FFlagLuaDebugBreakpointOp": true, + "FFlagLuaDebuggerBreakOnError": true, + "FFlagLuaDebugGetInfoNoCall": true, + "FFlagLuaFixEconomyCreatorStatsUrl": true, + "FFlagLuaHomeMoveMyFeedToMore": true, + "FFlagLuaHttpUrlBuilder": true, + "FFlagLuaInviteFailOnZeroPlaceIdV384": true, + "FFlagLuaInviteGameHandleUnknownResponse": true, + "FFlagLuaInviteModalEnabledV384": true, + "FFlagLuaInviteSelectionGroupEnabledV2": true, + "FFlagLuaLogInDisableAutoFocus": true, + "FFlagLuaLoginUnverifiedEmailPrompt": true, + "FFlagLuaPremiumCatalogIGIAB": true, + "FFlagLuaPremiumCatalogIGPP": true, + "FFlagLuaPremiumCatalogTileFix": true, + "FFlagLuaPublishFlowFixCreateButtonInChinese": true, + "FFlagLuaSignupValidationRefactor": true, + "FFlagLuaTableClear": true, + "FFlagLuauAllowGlobalAssignAtModuleLevel": true, + "FFlagLuauAllowGlobalAssignEverywhere": true, + "FFlagLuauAllowGlobalFunctionRedeclarationInNonstrict": true, + "FFlagLuauAssertFalseAsError": true, + "FFlagLuauBetterBinaryOpInference": true, + "FFlagLuauBetterErrorMessages": true, + "FFlagLuauBetterFunctionCallChecking3": true, + "FFlagLuauBetterFunctionTypeListWarning": true, + "FFlagLuauBetterLoopChecking": false, + "FFlagLuauBetterMismatchedReturnCountMessages": true, + "FFlagLuauBetterNonstrictDotVsColon": true, + "FFlagLuauBetterOverloadReporting": true, + "FFlagLuauBetterPropertyAccessOnUnion": true, + "FFlagLuauBetterScopingRule": true, + "FFlagLuauBetterUnionComparisons": true, + "FFlagLuauCastTableToIndexerCorrectly": true, + "FFlagLuauCheckForCyclicDependencies": true, + "FFlagLuauCheckStringFormatAsMethod": true, + "FFlagLuauCopyRequiredTypeSurfaces2": true, + "FFlagLuauCovariant": true, + "FFlagLuauDenyBinaryOperatorsOnUnknownTypes": true, + "FFlagLuauDisableUnknownGlobalLintWhenTypeChecking": true, + "FFlagLuauDoNotUnifyInAndBinExps": true, + "FFlagLuauErrorIfNoReturnInFunctionBody": true, + "FFlagLuauErrorMissingOrMistypedField": true, + "FFlagLuauFasterSub": true, + "FFlagLuauFixArgCheckFreeTypeLeak": true, + "FFlagLuauFixCyclicPacks": true, + "FFlagLuauFixCyclicQuantification": true, + "FFlagLuauFixHeapUAF1": true, + "FFlagLuauFixMissingGapsInUnions": true, + "FFlagLuauFixNotTypecheckingScopeWhenDupTypeDeclared": true, + "FFlagLuauFixReturnContextWhenCheckingArgTypes": true, + "FFlagLuauFixSelectCrash": true, + "FFlagLuauForbidRequiringNonModuleScripts": true, + "FFlagLuaUIBloxGamepadSupport2": true, + "FFlagLuaUIBloxModalWindowAnchorPoint": true, + "FFlagLuauIgnoreStateInArrayStringification": true, + "FFlagLuauImportsUsedIfInTypeAnnotation": true, + "FFlagLuauImproveClassAndTableUnificationError": true, + "FFlagLuauImprovedBinaryOperatorInference": true, + "FFlagLuauIncludeStudioSpecificEnums": true, + "FFlagLuauInstantiateFuncTypesWhenNeeded": true, + "FFlagLuauInvariant": true, + "FFlagLuauLexerLookahead": true, + "FFlagLuauLinearFlattenIntersection": true, + "FFlagLuauLocalPlayerIsPlayer": true, + "FFlagLuaUniversalAppRobloxHybridEvent": true, + "FFlagLuauNoCopyLexer": true, + "FFlagLuauNonstrictArgumentCounts2": true, + "FFlagLuauNoThrowLexer": true, + "FFlagLuauOccursCheckVisitsUnion": true, + "FFlagLuauOnlyAscribeSyntheticNameAtModuleScope": true, + "FFlagLuauOnlyAssignIndexerOnUnsealed": true, + "FFlagLuauOnlyGuardIfGlobalType": true, + "FFlagLuauParseErrorRecovery": true, + "FFlagLuauPersistGlobalExportedTypes": true, + "FFlagLuauRefactorTableInference": true, + "FFlagLuauReportOnMismatchFunctionTypes": true, + "FFlagLuauReportPreviousLocationOfDefinition": true, + "FFlagLuauReworkDotVsColonWarnings": true, + "FFlagLuauSanitizeFreesInPublicExports": true, + "FFlagLuauScriptFoldRefine": true, + "FFlagLuaUseNewBirthdayValidation": true, + "FFlagLuaUseThirdPartyPermissions": true, + "FFlagLuauSetMetatableDoesNotTimeTravel": true, + "FFlagLuauShorterArrayTypes": true, + "FFlagLuauSignalWaitReturnTypes": true, + "FFlagLuauSlightlyBetterRefinements": true, + "FFlagLuauSortModuleErrorsBeforeReverseSorting": true, + "FFlagLuauStricterOperators": true, + "FFlagLuauStricterOperators2": true, + "FFlagLuauStringifyGenericTypenamesAndTypeParams": true, + "FFlagLuauTableUnificationImprovement": true, + "FFlagLuauTieTablesTogether2": true, + "FFlagLuauTraceRequiresThroughStringIndex": true, + "FFlagLuauTraceTypesInNonstrictMode2": true, + "FFlagLuauTrimFreeTails": true, + "FFlagLuauUseArraySyntaxInStringification": true, + "FFlagLuauUseInstanceGuids": true, + "FFlagLuauWalksCallbackDescriptors": true, + "FFlagLuauWarnOnLowercaseParent": true, + "FFlagLuobuAppBillingHidden": true, + "FFlagMacGamepadUseGCController": true, + "FFlagMainBufferGuiLayoutTextAt1x2": false, + "FFlagMakeLuobuDisabledMarketplaceCategoriesIndependent": true, + "FFlagMakeStructMemberSoundServiceObserversWeak": true, + "FFlagMarketplaceAssetCounterFixSoloUserId": true, + "FFlagMarketplaceSourceAssetIds": true, + "FFlagMaterialLoadOneVariant2": true, + "FFlagMeasureJoinToOutsidersUse": true, + "FFlagMeasureRigidJointsNotInWorld": true, + "FFlagMeasureSleepAssemblies2": true, + "FFlagMegaReplicatorSetIsAliveForAllReplicators3": false, + "FFlagMegaReplicatorStartMegaSenderJob": true, + "FFlagMemoryFromAppShellReporterAndroid": false, + "FFlagMemoryFromAppShellReporterIOS": false, + "FFlagMemoryPrioritizationEnabled": true, + "FFlagMemoryPrioritizationEnabledForResetOnLeaveGame": true, + "FFlagMemoryPrioritizationEnabledForTextures": true, + "FFlagMemoryPrioritizationPressureOnlyIncreasesMethod": false, + "FFlagMeshLODUseAsyncHttpPost": true, + "FFlagMeshPartApplyMesh": true, + "FFlagMeshPartDoubleSided": true, + "FFlagMeshPartHeadOption_PlaceFilter": "True;189707;2573981315", + "FFlagMeshPartHeadsDefaultIsEnabled_PlaceFilter": "True;189707", + "FFlagMetalWorkaroundRenderTargetCorruption": true, + "FFlagMicroprofileJoinCounts": true, + "FFlagMicroProfilerSessionAnalytics": true, + "FFlagMigrateIkSolve": true, + "FFlagMigrateRoactAppPolicyToCorePackages": true, + "FFlagMOBLUAPP2614": true, + "FFlagMOBLUAPP2615": true, + "FFlagMOBLUAPP2739": true, + "FFlagMOBLUAPP2799": true, + "FFlagMOBLUAPP2802": false, + "FFlagMOBLUAPP2802V2": true, + "FFlagMOBLUAPP2862": true, + "FFlagMOBLUAPP2998": true, + "FFlagModelLodFixSanitizing": true, + "FFlagModelMeshFixPackPosition": true, + "FFlagModelMeshPackageFix": true, + "FFlagMonitorBatteryLevel": true, + "FFlagMouseWheelEventSinkingPropagatesToGUI": true, + "FFlagMoveAnchoredWhileRunning": true, + "FFlagNavigationDebugDrawIterateSpiral": true, + "FFlagNavigationFixPathUpdateEventCall": true, + "FFlagNavigationFixPathUpdateImplCall": true, + "FFlagNavigationInferTileExtents": false, + "FFlagNavigationInferTileExtents2": true, + "FFlagNavigationRemoveVertexCheckBounds": true, + "FFlagNavigationUseContactManagerWorldBounds": true, + "FFlagNetworkClientSideCompleteness": true, + "FFlagNetworkDeserializePacketsInAJob": true, + "FFlagNetworkDeserializePacketsInAJob_PlaceFilter": "False;2291717546", + "FFlagNetworkOwnershipUnitWorldSignals": true, + "FFlagNetworkSchemaEventsNeverUseDictionary": true, + "FFlagNetworkSchemaFixedDictionaryFormat": true, + "FFlagNewAppBridgeInitMoreVerbs": true, + "FFlagNewAppBridgeInitVerbs": true, + "FFlagNewAwardBadgeEndpoint2": true, + "FFlagNewEconomyDeveloperProductUrlLua": false, + "FFlagNewFastClusterImplementation3": true, + "FFlagNewFastClusterImplementation3_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagNewFontsVisibleInStudio": true, + "FFlagNewGeometryGeneratorImplementation": true, + "FFlagNewGeometryGeneratorImplementation_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5751328107;5947859215", + "FFlagNewHeadshotLighting": true, + "FFlagNewRelayDefinition": false, + "FFlagNewRelayDefinition2": true, + "FFlagNewScriptPerfAnalytics": true, + "FFlagNewTextureAssetFormatLogic": true, + "FFlagNoCostumeSaveButtonFix": true, + "FFlagNoInsertDependencyInCloneTool": true, + "FFlagNoPluginInChangeHistory": true, + "FFlagNoPluginInUIGridLayout": true, + "FFlagNoPluginsInWindowId": true, + "FFlagNoProtectedStringCache": true, + "FFlagNoRedrawWindow": true, + "FFlagNoScriptCache": true, + "FFlagNoSnapLimit": true, + "FFlagNoStudioInGuiCluster": true, + "FFlagNoSurfaceRotate": true, + "FFlagOldInGameMenuDisplayNamePolicy3": true, + "FFlagOnDemandFontLoading": true, + "FFlagOneSocketServerForStudio": true, + "FFlagOneToOneChatNavigationFix": true, + "FFlagOnlyAllowInsertPackageInEdit": true, + "FFlagOnlyCheckHeadAccessoryInHeadShot": true, + "FFlagOnlyDownloadContentWhenHavePermission": true, + "FFlagOutputWidgetFindEnabled": false, + "FFlagOverrideAssetFolder": true, + "FFlagPackageAnalyticsWhenUserPublishGame": true, + "FFlagPackageProductUXImprovementsGroupGamesDefaultToOwnerGroup": true, + "FFlagPackageProductUXImprovementsMatchTextSizeWithGS": true, + "FFlagPackageRemoveCanManageCheckForMassUpdate": true, + "FFlagPackageRetrieveUpToVersionAfterPublish": true, + "FFlagParallelIkBroadphase": true, + "FFlagParallelReceiveJob": true, + "FFlagParallelTerrainBroadphase2": true, + "FFlagPartCastShadow": true, + "FFlagParticleEmitterClearBeforeEmit": true, + "FFlagPassDataModelDPIScale": true, + "FFlagPasswordFieldIntegrationEnabled": true, + "FFlagPerformanceProfilerAnalytics": true, + "FFlagPerformRendererTextShearing": true, + "FFlagPermissiveGroupCommand": true, + "FFlagPGSConstraintAlign2AxesCompliantCacheFix": true, + "FFlagPhysicsNewConvexDecompositionEnabled": false, + "FFlagPlaceLauncherCollectOnMainThread": true, + "FFlagPlayAudioVideoInPlugins": true, + "FFlagPlayerEmulatorOverridePlayerLocale": true, + "FFlagPlayerEmulatorSerializeIntoDM2": true, + "FFlagPlayerEmulatorServiceEnabled": true, + "FFlagPlayerListFixTeamUpdates": true, + "FFlagPlayerListFormattingUpdates": true, + "FFlagPlayerListUseDisplayNameChina": true, + "FFlagPlayerListUseDisplayNameChina2": true, + "FFlagPlayerShowDropDownNoEntries": true, + "FFlagPlayerSpecificPopupCounter": true, + "FFlagPlayTogetherFromGameCard": true, + "FFlagPluginErrorReporterCheckExpectedPrefix": true, + "FFlagPluginIdentityFix": true, + "FFlagPluginManagementDirectlyOpenToolbox": true, + "FFlagPluginManagementFixHorizontalScrollbar": true, + "FFlagPluginManagementFixRemovePlugins": true, + "FFlagPluginManagementPrettifyDesign2": true, + "FFlagPluginManagementQ3ContentSecurity": true, + "FFlagPluginManagementRemoveUILibrary2": false, + "FFlagPluginManagementSkipInvalidAssetIds": true, + "FFlagPluginPlaySoundAtPosition": true, + "FFlagPremiumSettingsLabel": true, + "FFlagProductPercentLocFix": true, + "FFlagPromptRobloxPurchaseEnabled": false, + "FFlagPromptsAllowButtonEventsOnServer": true, + "FFlagPromptsFixDestroyedEvents": true, + "FFlagPromptsOnlyInWorkspace": true, + "FFlagPropertiesFilterUpdateFix": true, + "FFlagPropertiesWidgetMeshIdIconFix": true, + "FFlagProximityPromptFixSpam": true, + "FFlagProximityPromptLiveChanges": true, + "FFlagProximityPromptLocalization": true, + "FFlagProximityPromptMoreKeyCodes": true, + "FFlagProximityPromptNoButtonDrag": true, + "FFlagProximityPromptPauseMenuFix": true, + "FFlagProximityPromptsAllowedInInsertMenu": true, + "FFlagProximityPromptsAllowedInInsertMenu_PlaceFilter": "True;4599786547", + "FFlagProximityPromptsEnabled": true, + "FFlagProximityPromptsEnabled_PlaceFilter": "True;4599786547", + "FFlagProximityPromptsFadeIn": true, + "FFlagProximityPromptsFixPreferredParent": true, + "FFlagPublishPlaceSupportUnicodeTextLength": true, + "FFlagPurchasePromptCorescripts": true, + "FFlagPurchasePromptScaryModalV2": true, + "FFlagPutGameSettingsInitBackTheWayItWas": true, + "FFlagQ220PermissionsSettings": true, + "FFlagQtReadSystemProxy": true, + "FFlagQueryFrustumAndUpdateRange": false, + "FFlagQuickOpenAutoFocusModel2": true, + "FFlagQuickOpenAutoFocusWidget2": true, + "FFlagQuickOpenFixSpinner": true, + "FFlagQuickOpenGotoLine2": true, + "FFlagQuickOpenSearchScriptContent": true, + "FFlagRadarInteractionStates": true, + "FFlagRakNetSupportIpV6": true, + "FFlagRaycastSourceCollisionGroup2": true, + "FFlagRbxThumbSupportCircularThumbnails": true, + "FFlagRCCSupportTeamTest": true, + "FFlagRecordHopperServiceStats": true, + "FFlagRecordInGameDeaths": false, + "FFlagRecordRecording": true, + "FFlagReduceTouchEventsOnSlowdown": true, + "FFlagRefactorDevFrameworkContextItems": false, + "FFlagRefactorPluginLoadingForDeadlock": true, + "FFlagRefactorPolicyServiceStatReporting": true, + "FFlagRejectBrowserTrackerId0": true, + "FFlagReleaseLegacyShadowMap": true, + "FFlagReleaseNewPropertiesWidget": false, + "FFlagReleaseNewPropertiesWidget2": true, + "FFlagRemoveEndOfScrollMessage": true, + "FFlagRemoveIneffectiveWindowAdjustment": true, + "FFlagRemoveInGameFollowingEvents": true, + "FFlagRemoveInGameFollowingServer": true, + "FFlagRemoveKeyboardOnShutdownIOS": true, + "FFlagRemoveLinkFromKinematicJoints2": true, + "FFlagRemoveNewLinesFromConversationTitles": true, + "FFlagRemoveOffscreenAutoDeselect": true, + "FFlagRemoveStudioSettingsForCLI": true, + "FFlagRemoveThreadUnsafeUseOfPluginListInReliabilityLayer": true, + "FFlagRemoveToolTipsFromStatusBar": true, + "FFlagRemoveUILibraryTimeline": true, + "FFlagRemoveUILitFS": true, + "FFlagRemoveUnlocalizedButtonText": true, + "FFlagRemoveVehicleSeatCameraCFrameSet": true, + "FFlagRemoveVideoJobAsync": true, + "FFlagRemoveZeroUserVIPId": true, + "FFlagRenderAlphaToCoverage": true, + "FFlagRenderBiasGlassTint": true, + "FFlagRenderCreeper": true, + "FFlagRenderDisplayTechnologyStats": true, + "FFlagRenderDXT_KTX": true, + "FFlagRenderDynamicLocalShadowmapSize": true, + "FFlagRenderEnableDepthClamp": true, + "FFlagRenderEnableHbao": false, + "FFlagRenderEnableSurfaceShadows": true, + "FFlagRenderFastTerrainLodUpdate": false, + "FFlagRenderFastTerrainLodUpdate2": true, + "FFlagRenderFIB3Grass": true, + "FFlagRenderFixAtlasClearing": true, + "FFlagRenderFixDofResolve": true, + "FFlagRenderFixForcefieldFlags": true, + "FFlagRenderFixIndoorSpecIBL": false, + "FFlagRenderFixMissingEnvmap": true, + "FFlagRenderFixShadowFrustumIndex": true, + "FFlagRenderFixSpotThrottling": true, + "FFlagRenderFixSurfaceLight": true, + "FFlagRenderFixThrottleLocalLights": true, + "FFlagRenderImproveStreaming3": true, + "FFlagRenderingEnableHbao": false, + "FFlagRenderLocalizedRichText": true, + "FFlagRenderLodShadows": true, + "FFlagRenderMarkDirtyOnlyRenderableChunks": true, + "FFlagRenderMessagesAsGui": true, + "FFlagRenderMetalMaxTextureSize": true, + "FFlagRenderMoveInstancedClusterUpdate6BBoxToPerform": false, + "FFlagRenderMovePerformUpdateCF": true, + "FFlagRenderNicerStitches": true, + "FFlagRenderOpaqueWithAlpha": true, + "FFlagRenderOpaqueWithAlphaViewportFrameFix": true, + "FFlagRenderPrepassOpaqueWithAlpha": false, + "FFlagRenderPrepassOpaqueWithAlpha2": true, + "FFlagRenderPrepassOpaqueWithAlphaMobile": true, + "FFlagRenderSceneUpdaterParallel": true, + "FFlagRenderSceneUpdaterRefactor1": false, + "FFlagRenderSceneUpdaterRefactor2": true, + "FFlagRenderScreenshotFB": true, + "FFlagRenderShadowmapBatchUpdates": true, + "FFlagRenderSpecialMeshLoadPrepare": true, + "FFlagRenderSpeedupSunShadows": true, + "FFlagRenderSurfaceAppearance_v2": true, + "FFlagRenderSurfaceAppearance_v2_PlaceFilter": "True;5004798193;4599786547;1718213840;4990012135;5229799451;5100919959;5064251723;5326950832;5402291484;5594788124;5792084285;1952335895;5716845078;5751328107;5588662702;5550062757;5646917919;5790039516;5796518985;5796546949;5796554295;5792232897;5762960116;5947859215", + "FFlagRenderTerrainFrontToBackOrder": true, + "FFlagRenderTerrainGrassNoSpecular4": true, + "FFlagRenderTerrainNoIndexBuffer": true, + "FFlagRenderTerrainSmallerStitches": true, + "FFlagRenderTerrainUseHeightBlend": true, + "FFlagRenderThrottleLocalLights": true, + "FFlagRenderUnderWaterTimeOfDayCorrection": true, + "FFlagRenderUseFastShaderPack": true, + "FFlagRenderUseTexturePackColor": true, + "FFlagRenderVulkanSyncCompute": true, + "FFlagRenderXboxDofFix": true, + "FFlagReplaceAllAdvArrowToolUsage": true, + "FFlagReplaceGetCurrentUserashx": false, + "FFlagReplicateStarterPackServiceProperties": true, + "FFlagReplicateTeamServiceProperties": true, + "FFlagReportAppLoadedInLSM": false, + "FFlagReportDevConsoleOpenClose": true, + "FFlagReportExplicitAutoJointsJoinAll": true, + "FFlagReportGpuName": true, + "FFlagReportInGameAssetSales": true, + "FFlagReportInputMethodAnalytics": false, + "FFlagReportJoinAllCount": true, + "FFlagReportLoadConversationAnalyticsAccurately": true, + "FFlagReportLuaErrorsByPlatform2": true, + "FFlagReportMechanismChangeDuringGameplayCount": true, + "FFlagReportRuntimeJoinCount": true, + "FFlagRequestAssetGenerationAfterSuccess": true, + "FFlagReRenderOnSelectionObjectsDirty": true, + "FFlagRerequestFailedMesh": true, + "FFlagResellersListClickThrough": true, + "FFlagResetMobileGamepadsOnDataModelLoad": true, + "FFlagResetMouseDeltaFix": true, + "FFlagRestoreAnimationHipHeightScaling": true, + "FFlagRestoreControllerDeadZone": true, + "FFlagRestrictEnumUILength": true, + "FFlagRevertCtrlScale": true, + "FFlagRichText3": true, + "FFlagRoactBubbleChat": false, + "FFlagRoactBubbleChat_PlaceFilter": "True;5465723678;5100919959;5064251723;4794228797;2146460778;1987001769", + "FFlagRoactChatConversationIdTypeFix": true, + "FFlagRoactChatRolloutV456": true, + "FFlagRoactChatUseInfiniteScroller073": true, + "FFlagRoactChatUseUIBloxResponseIndicator": true, + "FFlagRoactNavigationMigration": true, + "FFlagRobloxScriptRequireErrorMessage": true, + "FFlagRotateCameraForRightPart": true, + "FFlagRoundRotation": true, + "FFlagRoundUpTextSizeInEngine": false, + "FFlagSafeGameInvite": true, + "FFlagSaveBuildAndReloadPlugin": true, + "FFlagScaleDraggerPartBias": true, + "FFlagScreenshotAsyncDownload2": false, + "FFlagScreenshotAsyncDownload3": true, + "FFlagScreenshotUseTaskScheduler": false, + "FFlagScreenshotUseTaskScheduler2": true, + "FFlagScriptAssetCacheLookupByGuidAndPlaceId": true, + "FFlagScriptDebuggerEvaluateProtectedString": true, + "FFlagScriptDebuggerFixRecursiveUpvalues": true, + "FFlagScriptDebuggerSimplerWithThread": true, + "FFlagScriptDebuggerSupportStopOnEntry": true, + "FFlagScriptDocModeSwitchCrashFix": true, + "FFlagScriptEditorAddSelectWordAction": true, + "FFlagScriptEditorChangePaintCallOrder": true, + "FFlagScriptEditorColorsRecoveryHack": true, + "FFlagScriptEditorEnableScrollPastLastLine": true, + "FFlagScriptEditorFixCopyPasteSHEdgeCase": true, + "FFlagScriptEditorFixRightClickClosing": false, + "FFlagScriptEditorFixVisibleBlocksAssert": true, + "FFlagScriptEditorHightlightWrappedLine": true, + "FFlagScriptEditorPermitItalics": true, + "FFlagScriptEditorV2": true, + "FFlagScriptSideWidgetSelect": true, + "FFlagScriptTextEditorMatchingWords": true, + "FFlagScrollingFrameAutomaticCanvasSizeFix": true, + "FFlagScrollInOnlyDirectionAvailable2": true, + "FFlagSearchTopBarBetterPadding2": true, + "FFlagSelectionServiceAddRemove": true, + "FFlagSelectLODWithFOV": true, + "FFlagSemanticHighlightNonStandardCalls": true, + "FFlagSendJoinTimesToDiag_PlaceFilter": "true;370731277", + "FFlagSessionizedEventIngest": true, + "FFlagSetInsertPointOnSelect": true, + "FFlagSetPlaceFlagsInAdvanceMac": true, + "FFlagSetPlaceIdInAdvance3": true, + "FFlagSetValuesOnErrorThread": true, + "FFlagShaderManagerHotloadsShadersInStudio": true, + "FFlagShareGameEventConsolidationEnabled": true, + "FFlagShareTargetGameNavBarFix": true, + "FFlagSHComputeExtentsTimeReportingEnabled": true, + "FFlagShouldUseEmailUpsellAtLogOutABTest2": true, + "FFlagShowAssetConfigReasons2": false, + "FFlagShowBonesAsConstraints": true, + "FFlagShowBonesAsConstraints_PlaceFilter": "True;4599786547;5326950832", + "FFlagShowInternalBetaInSettings": true, + "FFlagShowModeratedPluginInfo": true, + "FFlagShowProcessingPopup": false, + "FFlagShowReportOptionInToolbox": true, + "FFlagShowWarningsForUnregisteredOptions": true, + "FFlagSHStatReportingEnabled": true, + "FFlagSignalRHeartbeatFix": true, + "FFlagSignalRHubConnectionDoNotSetCookiesInHttp": false, + "FFlagSignalStopForZeroWeight": true, + "FFlagSimAccCollisionPipelineEnabled": false, + "FFlagSimAccCollisionPipelineEnabled_PlaceFilter": "True;5798463191;6027747008", + "FFlagSimAssembleInWorld": true, + "FFlagSimBulletContactInitilizesConnector": true, + "FFlagSimDeprecateConstraintLegacyAngularVelocity": true, + "FFlagSimEnablePreciseConvexDecomposition": true, + "FFlagSimExpandPartPhysicsApi": true, + "FFlagSimIkDraggerStepRefactor": true, + "FFlagSimInterpolateInWorld": true, + "FFlagSimOptimizedReportTouches2": true, + "FFlagSimSolverOptimizedIslandizer5": true, + "FFlagSimulateStageUseArray": true, + "FFlagSkeletonDebugRenderer": false, + "FFlagSkeletonDebugRenderer_PlaceFilter": "True;2431195974", + "FFlagSkinUseSkeletonAPI": false, + "FFlagSkinUseSkeletonAPI_PlaceFilter": "True;2431195974", + "FFlagSkipFirstMechanismChangeReport": true, + "FFlagSkyUseRawTexture": true, + "FFlagSkyUseRawTexture_PlaceFilter": "True;189707", + "FFlagSmallerToolboxMinWidth": true, + "FFlagSmoothAttachmentMovement": true, + "FFlagSmoothClusterSkipEmptyChunks": true, + "FFlagSmoothGridDontWriteEmptyCells": true, + "FFlagSocketOptionFixAndLoggingImprovements": true, + "FFlagSoothsayerRoactChatEnabled4": true, + "FFlagSortsAndFiltersFitComponentFix": true, + "FFlagSpanningEdgeCacheIsInTree": true, + "FFlagStableRichTextLayout": true, + "FFlagStopAnimationEditorWhileGameRunning": true, + "FFlagStopCheckingClusterAndWorkspaceInJDI2": true, + "FFlagStopCheckingFrontendProcessingInTextLayout": true, + "FFlagStopRenderVFBorderWhenRoundCorner": true, + "FFlagStopRoundingGlyphRect": true, + "FFlagStopTryingToFormatTimeInLuaForAssetManager": true, + "FFlagStopUsingStudioServiceHost": true, + "FFlagStreamingClampRadiusConsistency": true, + "FFlagStreamingGCChecksDescendants4": false, + "FFlagStudioAddAppTypeToCaptchaReq": true, + "FFlagStudioAddDistTypeToUserAgent": true, + "FFlagStudioAddingIconsToLocalAndServerScripts": true, + "FFlagStudioAddingScrollingToScreenChoosePlace": true, + "FFlagStudioAddLinkToOpenExternalLogin": true, + "FFlagStudioAddMonetizationToGameSettings": true, + "FFlagStudioAddMorePackagePermissionAndContentProviderAnalytics": true, + "FFlagStudioAddQtVersionAndLocaleDetails": true, + "FFlagStudioAddReloadOptionInLoginDialog": false, + "FFlagStudioAddRemoveSessions": true, + "FFlagStudioAddRobloxLoginOptionInLoginDialog": true, + "FFlagStudioAlignLogOutMenu": true, + "FFlagStudioAllowCoreScriptReloads2": true, + "FFlagStudioAllowNullDescriptions": true, + "FFlagStudioAssetManagerAddGridListToggle": true, + "FFlagStudioAssetManagerAddMiddleElision": true, + "FFlagStudioAssetManagerAddRecentlyImportedView": true, + "FFlagStudioAssetManagerAssetPreviewRequest": true, + "FFlagStudioAssetManagerBetaFeature": true, + "FFlagStudioAssetManagerEnableCopyGameId": true, + "FFlagStudioAssetManagerFetchMoreAssets": true, + "FFlagStudioAssetManagerFixPackageBehavior": true, + "FFlagStudioAssetManagerHideTooltipOnAssetPreview": true, + "FFlagStudioAssetManagerLinkedScriptIcon": true, + "FFlagStudioAssetManagerNewMultiselectMeshBehavior": true, + "FFlagStudioAssetManagerShiftMultiSelect": true, + "FFlagStudioAssetManagerShowRootPlaceListView": true, + "FFlagStudioAssetManagerUpdateGameName": true, + "FFlagStudioAssetManagerUXFixes": true, + "FFlagStudioAssetPreviewTreeFix2": true, + "FFlagStudioAttributesUIBetaFeature": true, + "FFlagStudioAutocompleteFixFrameInitialization": true, + "FFlagStudioBaseUrlAnalytics": true, + "FFlagStudioBetaFeaturesChannel": true, + "FFlagStudioBetaFeaturesHideInfoButtonForMissingUrls": true, + "FFlagStudioBlockLoginOnTOS": true, + "FFlagStudioBreakpointInitializeEdgeCase": true, + "FFlagStudioBrowserSandboxing": true, + "FFlagStudioCallBaseClassWhenFocusingOut": true, + "FFlagStudioCatchAndReport429InLoginRequestAuth": true, + "FFlagStudioCheckEmergencyMessageAtStart": true, + "FFlagStudioCheckEmergencyMessageOnUserLogIn": true, + "FFlagStudioCheckInLoadCorescriptTranslationsDisabled": true, + "FFlagStudioChildlessTheme": true, + "FFlagStudioClearNewPluginPermissionsOnLoggedOut": true, + "FFlagStudioClonedDataModelMemoryLeakFix": true, + "FFlagStudioCLoseDeletedScriptOnDraftDeletion": true, + "FFlagStudioCollectGPUInfo": true, + "FFlagStudioCommandBarLocalState": true, + "FFlagStudioConsolidateExternalLoginBase": true, + "FFlagStudioContinueFilteringAfterInitialFilter": true, + "FFlagStudioCoreScriptBreakpointsNotHitting": true, + "FFlagStudioCorrectDebugUserdataKeys": true, + "FFlagStudioCorrectlyDeprecateProp_UITheme": true, + "FFlagStudioCorrectMergeDialogLineNumbers": true, + "FFlagStudioCrashOnInvalidColor3Cast": true, + "FFlagStudioCrashWhenCharWrappingComplexText": true, + "FFlagStudioDebuggerContextMenuCrash": false, + "FFlagStudioDebuggerRefactorLuaArguments2": true, + "FFlagStudioDeprecateFetchUsernameAndId": false, + "FFlagStudioDeprecateQuickFindScriptTotally": true, + "FFlagStudioDeprecateRBXWorkspaceCleanupSteps": true, + "FFlagStudioDeprecateRbxWorkspaceInStudioServiceHost": true, + "FFlagStudioDeviceManagerDesignTweak": true, + "FFlagStudioDisableAutoSaveToCloud": true, + "FFlagStudioDisableDoubleAuthenticate": true, + "FFlagStudioDisableSavingNonCreatableSelections": true, + "FFlagStudioDocActivationHistoryPreventFocusLost": true, + "FFlagStudioDoNotEmitAuthenticationSignalTwiceFromWebsiteLaunch": true, + "FFlagStudioDontCleanUpDynamicDescriptorsTooEarly2": false, + "FFlagStudioDontLoadLastItemInFifoComboBoxes": true, + "FFlagStudioDraftCommitAllOnPublishOption": true, + "FFlagStudioDraftDiscardOnServerVersionMatch": false, + "FFlagStudioDraftsServiceFullNameInDiff": true, + "FFlagStudioDraftsServiceGetEditors": true, + "FFlagStudioDraftsServiceHostCrashFix": true, + "FFlagStudioDraftsServiceRemovedScriptsFix": true, + "FFlagStudioEmitCorrectAuthChangeSignalOnLogout": true, + "FFlagStudioEnableBFSupportPluginDebugging": true, + "FFlagStudioEnableCSGv2SmoothingBeta": false, + "FFlagStudioEnableLuauNonStrictByDefaultBetaFeature": true, + "FFlagStudioEnableLuauTypeChecking": true, + "FFlagStudioEnableLuauTypeCheckingBetaFeature": false, + "FFlagStudioEnableModelMeshComputerBeta": false, + "FFlagStudioEnableSafeUpdatesBetaFeature": true, + "FFlagStudioEnableSaveToCloudV2BetaFeature": false, + "FFlagStudioEnableScriptHistoryDialog": true, + "FFlagStudioEnableSignalRMetricsInUserNotificationClient": true, + "FFlagStudioEnableTableOutputViewBetaFeature": true, + "FFlagStudioEnableTeachingCallouts": false, + "FFlagStudioEnableUrlLinkForEmergencyMessage": true, + "FFlagStudioEncodeEmergencyMessage": true, + "FFlagStudioExponentialBackoffRetryInUserDataStoreService": false, + "FFlagStudioExpressivePrintFixMultipleToStringCalls2": true, + "FFlagStudioExternalDialogClosedShowRobloxLogin": true, + "FFlagStudioExternalLoginDialogAddExpirationDate": true, + "FFlagStudioExternalLoginEnabled": false, + "FFlagStudioFetchABTestForLuaApp": true, + "FFlagStudioFetchPluginMetadataOnInstall": false, + "FFlagStudioFetchPluginMetadataOnInstall2": true, + "FFlagStudioFetchPluginName": true, + "FFlagStudioFileTypeUtilsGenerateAllFilter": true, + "FFlagStudioFileTypeUtilsPrependWildcardToExtension": true, + "FFlagStudioFixAssertOnObjectBrowserClose": true, + "FFlagStudioFixAssetPreviewCloseButton": true, + "FFlagStudioFixAttachCalloutToToolbarButton": true, + "FFlagStudioFixCannotSetBreakPoint": true, + "FFlagStudioFixCombBoxSizeHint": true, + "FFlagStudioFixCommandBarLocalStateCrash": true, + "FFlagStudioFixComparePageInfo2": true, + "FFlagStudioFixCookieRetrieval": true, + "FFlagStudioFixF2AfterAutoSelectionChange": true, + "FFlagStudioFixFlatTerrainDefaultSaveLocation": true, + "FFlagStudioFixFrameworkJsonParsing": true, + "FFlagStudioFixFrameworkNonIdempotentRetries": true, + "FFlagStudioFixGameManagementIndexNil": true, + "FFlagStudioFixGetClassIcon": true, + "FFlagStudioFixGroupCreatorInfo3": true, + "FFlagStudioFixHorizontalScrollingInSearch": true, + "FFlagStudioFixImagePickerLifetime": true, + "FFlagStudioFixImageUrlReverting": true, + "FFlagStudioFixingGroupFreezingPackages": true, + "FFlagStudioFixingGroupFreezingPackages2": true, + "FFlagStudioFixInsertObjectModalHiding": true, + "FFlagStudioFixInternalSettings": true, + "FFlagStudioFixMeshPartPreview": true, + "FFlagStudioFixMissingMonetizationHeader": true, + "FFlagStudioFixMoreScriptDebuggerAssert": true, + "FFlagStudioFixNotificationDialog": true, + "FFlagStudioFixNullUniverseInGetResourceByCategory": true, + "FFlagStudioFixPackageDialogLocalPlaceBug": true, + "FFlagStudioFixPackagePermissionCallbackForErrors": true, + "FFlagStudioFixPluginDialogModalityOnMac": true, + "FFlagStudioFixPluginLoadingWhileOpeningFromWebsite": false, + "FFlagStudioFixPluginLoadingWhileOpeningFromWebsite2": true, + "FFlagStudioFixPluginMenuMainThread": true, + "FFlagStudioFixPluginUninstall": true, + "FFlagStudioFixPluginWidgetEnabledSignal": true, + "FFlagStudioFixPrimaryPartSelectionOverOutputWindowDeselect": true, + "FFlagStudioFixProcessInstallPluginFromWebsite": true, + "FFlagStudioFixPropertyWidgetEnumCrash": true, + "FFlagStudioFixPublishToDifferentGameAnalytics": true, + "FFlagStudioFixResumeOnSingleStep": true, + "FFlagStudioFixRibbonThemeHelperParent": true, + "FFlagStudioFixScriptAnalysisCopy": true, + "FFlagStudioFixScriptDatamodelMismatch": true, + "FFlagStudioFixShortcutFilter": true, + "FFlagStudioFixStepEndOfScript": true, + "FFlagStudioFixSwappingGroupTabs": true, + "FFlagStudioFixTextBoxFocusAndToolTipCloseClashHang": false, + "FFlagStudioFixTextBoxFocusAndToolTipCloseClashHang2": true, + "FFlagStudioFixTextureIconLoading": true, + "FFlagStudioFixTreeViewForFlatList": true, + "FFlagStudioFixTreeViewForSquish": true, + "FFlagStudioFixUILibDropdownStyle": true, + "FFlagStudioFixUILibDropdownText": true, + "FFlagStudioFixUndoAfterInsertByDrag": true, + "FFlagStudioFocusOnCommandBarAction": true, + "FFlagStudioFuncDeclParenIncludesAnotherBlock": true, + "FFlagStudioGameManagementBetaFeature": false, + "FFlagStudioGamePresenceToFixSyncCallHangWhenQuit": true, + "FFlagStudioGameSettingsDisablePlayabilityForDrafts": false, + "FFlagStudioGameSettingsOnlySaveModifiedPages": true, + "FFlagStudioGDPRCompliance": true, + "FFlagStudioGDPREncodeBase64": false, + "FFlagStudioGetSharedPackagesInToolbox": true, + "FFlagStudioHideSuccessDialogWhenFree": true, + "FFlagStudioHttpRequestAddSuccessRetry": true, + "FFlagStudioHttpServicePluginSecurityForOtherEndpoints": true, + "FFlagStudioHttpServiceUsePluginPermissions": true, + "FFlagStudioIgnoreFakeEvents": true, + "FFlagStudioIgnoreShowHideSpontaneousEvents": true, + "FFlagStudioIndentMultiLineStat": true, + "FFlagStudioInsertMultipleMeshPartsApiEnabled": true, + "FFlagStudioInsertObjectStreamliningv2_FeedbackImprovements": true, + "FFlagStudioInsertObjectStreamliningv2_TranslatedToolTips": true, + "FFlagStudioInsertServiceLazy": true, + "FFlagStudioInstanceSelectorCleanupSideEffectsOnClose": true, + "FFlagStudioInternalScriptVersionHistorySetting": false, + "FFlagStudioInternalScriptVersionHistorySetting_PlaceFilter": "True;2622490766;3155470637;812059980;5279580942;2267315246;4944167941;5454769054;6053482297;6087391542;6036781607;6036775491;629119226;4526445216;5410995626;5907738609;2825626;6233044695;2021713175;5998756830;663027247;1975719456;5951470484;6004108409;5372338037;5917970706;5018214687;6033318438;2260759709;6033367137;6012481859;4549679686;4431799863;4656807268;4857815074;5228468082;5363921548;2493438430;4858882918;5673340193;5352395552;2127688273;6099117169;6242582774", + "FFlagStudioIOLSetWrappingInMainThread": true, + "FFlagStudioLanguageServerGetLatestLocalScript": true, + "FFlagStudioLocalizationInGameSettingsEnabled": false, + "FFlagStudioLocalizeCategories": true, + "FFlagStudioLocalizeCommandLineErrors": true, + "FFlagStudioLocalizeMeshImportErrors": true, + "FFlagStudioLocalizePrivacyTypesInPublishPlaceAs": true, + "FFlagStudioLocalizePropertyItems": true, + "FFlagStudioLocalizeUnauthorizedToConfigureGame": true, + "FFlagStudioLocalizeUnexpectedFBXTypeError": true, + "FFlagStudioLoginInAssertFailureFixEnabled": true, + "FFlagStudioLogPlaceIdInfoEarly": true, + "FFlagStudioLogPlaceIdOnPlaceOpen": true, + "FFlagStudioLogSessionIdAndLastUpdateTime": true, + "FFlagStudioLSP_V3_1": true, + "FFlagStudioLspQtClientCreator": true, + "FFlagStudioLuaPublishFlowLocalizeUntitledGameText": true, + "FFlagStudioLuauLintWithFrontend3": true, + "FFlagStudioLuauNonStrictByDefault": false, + "FFlagStudioLuauWarningTelemetry2": false, + "FFlagStudioLuauWarningTelemetry3": false, + "FFlagStudioMacThemeChangeFixesEnabled": true, + "FFlagStudioMassClose": true, + "FFlagStudioMeasureRigidJointsNotInWorld": true, + "FFlagStudioMergeFixModByZero": true, + "FFlagStudioMigrateGlobalToCJVInChina2": true, + "FFlagStudioMinorFixesForAssetPreview": true, + "FFlagStudioMultiTableIndent": true, + "FFlagStudioMuteOnlyOnUnfocus": true, + "FFlagStudioMuteOnlyOnUnfocus2": true, + "FFlagStudioNewEventsOnPluginInstall": true, + "FFlagStudioNewRevertPackageMessage": true, + "FFlagStudioNewTableOutputWidget": false, + "FFlagStudioNonRibbonInsertObjectParentsToSelectedObject": true, + "FFlagStudioOpenGameSettingsEvent": true, + "FFlagStudioOpenInstanceWithInstancePrintLink": false, + "FFlagStudioOpenScriptDocBasedOnPrintedGST": true, + "FFlagStudioOutputViewDropdownRefactor": true, + "FFlagStudioOutputViewPrintTableSupport": false, + "FFlagStudioPackageBlockPublishDialog": true, + "FFlagStudioPackageRequestResult": true, + "FFlagStudioPackagesBlockingPublishDialogRemoveWhatsThisButton": true, + "FFlagStudioPackagesSelectingAfterUpdate": true, + "FFlagStudioPermissionsServiceEnabled": true, + "FFlagStudioPersistentFifoComboBoxThemeChanging": false, + "FFlagStudioPlaceVersionHistoryMacModalityFix": true, + "FFlagStudioPlaceVersionHistoryShowCorrectPlace": true, + "FFlagStudioPluginManagerInterface": true, + "FFlagStudioPluginsDontUseUITheme": true, + "FFlagStudioPreventOverwriteToTCPlaceWithActivePlayers": true, + "FFlagStudioPropertiesProperStringConversion": false, + "FFlagStudioPropertyItemReset": true, + "FFlagStudioPublishLuaWorkflow": true, + "FFlagStudioPublishMediatorFailedConnection2": true, + "FFlagStudioQuickOpenFilterHiddenInstances": true, + "FFlagStudioQuickOpenFixPosition": true, + "FFlagStudioQuickOpenPatch": true, + "FFlagStudioQuickOpenReopenShowHistory": true, + "FFlagStudioQuickOpenSelectFirstByDefault": true, + "FFlagStudioRefactorTCConnectionDialog": true, + "FFlagStudioRemoveBadThrowFromInsertPackageFromToolbox": true, + "FFlagStudioRemoveExtraFindAction": true, + "FFlagStudioRemoveGetFindAllDialogHack": true, + "FFlagStudioRemoveIndentationFromEmptyLine": true, + "FFlagStudioRemoveShareOptionFromLocalFiles": true, + "FFlagStudioRenderingTestClosureWhenNoTestsRun": true, + "FFlagStudioReplaceApplyEditWithCommit": true, + "FFlagStudioReportDAUInflux": true, + "FFlagStudioReportElevatedCount": true, + "FFlagStudioReportHang": false, + "FFlagStudioReportHang2": false, + "FFlagStudioReportingSuccessToRCity": true, + "FFlagStudioReportOpenPlaceTime": true, + "FFlagStudioReportOSVersionDiag": true, + "FFlagStudioReportPluginLoadTelemetry": true, + "FFlagStudioReportPluginsActiveOnStart": true, + "FFlagStudioReportTeamCreateFailureInfo": true, + "FFlagStudioReportUserToolbarButtonClick": true, + "FFlagStudioResetPrevSessionCrashKey": true, + "FFlagStudioResizeEmulationDeviceWriteLock": true, + "FFlagStudioRestartFindFilterOnTableExpand": true, + "FFlagStudioRobloxGoogleAnalyticsFix": true, + "FFlagStudioRobloxNetworkReplyDeleteLater": true, + "FFlagStudioRuiHyperlinkWithUnderline": true, + "FFlagStudioSandboxCrashFix": true, + "FFlagStudioSandboxDraftsHardening": true, + "FFlagStudioSandboxDraftsHardeningAsyncSave": true, + "FFlagStudioSandboxDraftsHardeningFileSave": true, + "FFlagStudioSandboxPerGlobalState": true, + "FFlagStudioSandboxUtf8Fix": true, + "FFlagStudioSandboxVerifyIntegrityOnInitialize": true, + "FFlagStudioSavePlaceAndUniverseIdOnSessionConfiguration": true, + "FFlagStudioSavePlaceAs2": true, + "FFlagStudioSavePlaceHandleUserCancel": true, + "FFlagStudioSaveToCloudV2": false, + "FFlagStudioSaveToCloudV3": false, + "FFlagStudioSaveToCloudV3SpotFixes": false, + "FFlagStudioScriptEditorBetaFeature": true, + "FFlagStudioScriptEditorColorsPresets": true, + "FFlagStudioScriptEditorEventsCrashFix": true, + "FFlagStudioScriptEditorSemanticHighlighting": true, + "FFlagStudioScriptInjectionLocalizedErrorMessage": true, + "FFlagStudioScriptInjectionProtection": true, + "FFlagStudioScriptVersionHistoryv2": true, + "FFlagStudioSelectUILayerDuringPlay": false, + "FFlagStudioSelectUILayerDuringPlay2": true, + "FFlagStudioServiceActiveInstanceHighlight": true, + "FFlagStudioServiceDraggerSolveConstraints": true, + "FFlagStudioSettingsDialogFixCategoryUpdates": true, + "FFlagStudioSettingsDialogNoInstances": true, + "FFlagStudioShouldFocusInsertedAssets": true, + "FFlagStudioShowConfigErrorMessageOnFailure": true, + "FFlagStudioShowCursorWhenSwitchingScripts": true, + "FFlagStudioShowDotsForScriptEditors": true, + "FFlagStudioShowHideABTestV2": true, + "FFlagStudioShowIndividualPermissionsForGroupGames": true, + "FFlagStudioShowInExplorerAtBreakpoint": true, + "FFlagStudioShowInExplorerChangeFocus": true, + "FFlagStudioSkinnedMeshBeta": false, + "FFlagStudioSkipTeamTestConnectDialog": true, + "FFlagStudioSortInTabOrder": true, + "FFlagStudioStartServerIfNotStartedWhenStartingClient": false, + "FFlagStudioStartTimerOnMainThread": true, + "FFlagStudioStopOutputTextWrapCutoff": true, + "FFlagStudioSunsetMac1010": true, + "FFlagStudioSupportUploadGroupAnimations": true, + "FFlagStudioSuppress401InGetAccountInfo": true, + "FFlagStudioSurfaceErrorDetail": true, + "FFlagStudioSwitchQNetworkToHttp2": true, + "FFlagStudioSwitchQNetworkToHttpLoginManagerFetch": true, + "FFlagStudioSwitchQNetworkToHttpLoginManagerGetAccountInfo": true, + "FFlagStudioSwitchQNetworkToHttpLoginManagerLogout": true, + "FFlagStudioSwitchQNetworkToHttpLoginRequestAuth": true, + "FFlagStudioSwitchToStudioHttpRequestRetryConfig": true, + "FFlagStudioSyncPluginSource": true, + "FFlagStudioTableOutputFocusFix": true, + "FFlagStudioTaskControllerHandlePlaceClosing": true, + "FFlagStudioTCConnectionDialogShowAttemptCount": true, + "FFlagStudioTCShowPermissionsMovedMessage": true, + "FFlagStudioTeamCreateReportToEventIngest": true, + "FFlagStudioTeleportServiceSanitize": true, + "FFlagStudioTestServiceRunStateRecovery": true, + "FFlagStudioTimeStampFix": true, + "FFlagStudioToggleComment": true, + "FFlagStudioToolboxEnablePlaceIDInAnalytics": true, + "FFlagStudioToolboxFixNewEndpointFilters": true, + "FFlagStudioToolboxInsertAssetCategoryAnalytics": true, + "FFlagStudioToStringSelfArgument": true, + "FFlagStudioTrackSessionTimeForLastWeek": true, + "FFlagStudioTrackVersionHistoryNonTC": false, + "FFlagStudioTrackVersionHistoryNonTC_PlaceFilter": "True;2622490766;3155470637;812059980;5279580942;2267315246;4944167941;5454769054;6053482297;6087391542;6036781607;6036775491;629119226;4526445216;5363921548;2127688273;5410995626;5907738609;2825626;6233044695;2021713175;5998756830;663027247;1975719456;5951470484;6004108409;5372338037;5917970706;5018214687;6033318438;2260759709;6033367137;6012481859;4549679686;4431799863;4656807268;4857815074;5228468082;2493438430;4858882918;5673340193;5352395552;6099117169", + "FFlagStudioTranslationLib": true, + "FFlagStudioUIItemsHighlightFixEnabled": true, + "FFlagStudioUILibFixAssetTypeMap": true, + "FFlagStudioUILibraryRoundTextBoxNoTooltip": true, + "FFlagStudioUpdateDebuggerAnalytics": true, + "FFlagStudioUpdatePropertiesWidgetNameOnChange": false, + "FFlagStudioUpdatePropertiesWidgetNameOnQtThread": true, + "FFlagStudioUseAnimationEditorAnalytics2": true, + "FFlagStudioUseAssetIdsForImagePicker": true, + "FFlagStudioUseAutocompleterCursorCallback": true, + "FFlagStudioUseCaptchaDialog": true, + "FFlagStudioUseCJVAppName": true, + "FFlagStudioUseDevelopAPIForPackages": true, + "FFlagStudioUseHttpImageProvider": true, + "FFlagStudioUseLocalizedColorNamesText2": true, + "FFlagStudioUseMapForVariantMessageContentsTable": true, + "FFlagStudioUseNativeBrowserForCookieConstraint": true, + "FFlagStudioUseNewPluginPermissionsBackendForScriptInjection": true, + "FFlagStudioUseNewQtNetworkWrapper": true, + "FFlagStudioUseOldSignalRInUserNotificationClient": true, + "FFlagStudioUseQtNetworkReplyForUserAgreements": false, + "FFlagStudioUserAgreementCheckEnabled": false, + "FFlagStudioUseScriptContextUserdataParse": false, + "FFlagStudioUseStartupLayout": true, + "FFlagStudioUseStringIncidentID": true, + "FFlagStudioUseStudioAssert": true, + "FFlagStudioUseStudioCookieJar": true, + "FFlagStudioUseStudioHttpRequestInAPIUtilities": true, + "FFlagStudioUseStudioHttpRequestInConversationStore": true, + "FFlagStudioUseStudioHttpRequestInGameIconsStore": true, + "FFlagStudioUseStudioHttpRequestInGamesPageController": true, + "FFlagStudioUseStudioHttpRequestInGroupGamesGroupModel": true, + "FFlagStudioUseStudioHttpRequestInMRURobloxApiGameStore": true, + "FFlagStudioUseStudioHttpRequestInPluginLoader": true, + "FFlagStudioUseStudioHttpRequestInPublishedGamesStore": true, + "FFlagStudioUseStudioHttpRequestInStudioWebAPIUtilities": true, + "FFlagStudioUseStudioHttpRequestInTemplatePageModel": true, + "FFlagStudioUseStudioHttpRequestInUserDataStoreService": true, + "FFlagStudioUXImprovementsAddDialogOnTCClose": false, + "FFlagStudioUXImprovementsFixTCPublishButton": true, + "FFlagStudioUXImprovementsLoosenTCPermissions": true, + "FFlagStudioVerbInvocation": true, + "FFlagSupportAnimImportByID": true, + "FFlagSupportDeathTypeClient": true, + "FFlagSupportDeathTypeServer": true, + "FFlagSupportFreePrivateServers": true, + "FFlagSupportJoinDataItemV2UseInvalidOffsets": true, + "FFlagSupportLegacySkinnedMeshParts": true, + "FFlagSupportLegacySkinnedMeshParts_PlaceFilter": "True;4599786547;5326950832", + "FFlagSupportMeshPartHeads_PlaceFilter": "True;189707;5306826776", + "FFlagSupportMeshV4ReadSkinData": true, + "FFlagSupportMeshV4ReadSkinData_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagSupportMeshV4Write": true, + "FFlagSupportMeshV4Write_PlaceFilter": "True;4599786547;5326950832", + "FFlagSupportOneShotButtons": true, + "FFlagSupportPluginDebugging": false, + "FFlagSupportTextScaledForRichText": true, + "FFlagSurfaceAppearanceFixFastClusterDecal": true, + "FFlagSurfaceAppearanceFixThumbnail": true, + "FFlagSwitchFormatRequestHeader2_PlaceFilter": "True;189707;2573981315", + "FFlagTakeAScreenshotOfThis": true, + "FFlagTapAwayToCloseBackpack": true, + "FFlagTaskSchedulerAsyncTasksEnsureValidThreadCount": true, + "FFlagTattletaleScanRichTextContent": true, + "FFlagTelemetryForHideScaryBetaFeaturesDialog": true, + "FFlagTeleportHttpErrorCounter": true, + "FFlagTerrainChunkAnalyticsOnPublish": true, + "FFlagTerrainImportFixOutOfBounds": false, + "FFlagTerrainImportNewYieldMethod": true, + "FFlagTerrainImportUseService": false, + "FFlagTerrainInvertMaterialDetiling": false, + "FFlagTerrainOpenCloseMetrics": true, + "FFlagTerrainShaderRefactor2": true, + "FFlagTerrainToolsFixLabeledElementPairWidth": true, + "FFlagTerrainToolsFixLargeSmoothAirFillerMaterial": true, + "FFlagTerrainToolsFixPluginActivationOnWidgetOpen": true, + "FFlagTerrainToolsFixRegionPreviewDeactivation": true, + "FFlagTerrainToolsImproveColorImport": true, + "FFlagTerrainToolsIncludeDevFrameworkTheme": true, + "FFlagTerrainToolsRaycastUpdate": true, + "FFlagTerrainToolsRedesignProgressDialog": true, + "FFlagTerrainToolsReplaceSrcTogglesOff": true, + "FFlagTerrainToolsSmoothToolFixErode": true, + "FFlagTerrainToolsTerrainCylinderOnSizeOne": true, + "FFlagTerrainToolsUseDevFramework": true, + "FFlagTerrainToolsUseMapSettingsWithPreview2": true, + "FFlagTerrainToolsUseSiblingZIndex": true, + "FFlagTestRParolinHelloWorld": true, + "FFlagTextBoxOverrideManualFocusRelease": false, + "FFlagTextMeasureTemporaryPatch": true, + "FFlagTextMemoryTracking": true, + "FFlagTextureCompositorUseRawTexture": true, + "FFlagTextureCompositorUseRawTexture_PlaceFilter": "True;189707", + "FFlagTexturePackGImageFixes": true, + "FFlagTexturePackScopedLockFix": true, + "FFlagThreadsafeDeferredTerrain3": true, + "FFlagThresholdMinPowHaze": true, + "FFlagThrottleLightGridUpdate2": false, + "FFlagThrottleLightGridUpdate3": true, + "FFlagThwartPurchasePromptScams": true, + "FFlagTighterCylinderBoundingSpheres": true, + "FFlagToolboxConsolidateInsertRemainsEvents": true, + "FFlagToolboxDisabledWhenDebugging": true, + "FFlagToolboxDisableForLuobu": false, + "FFlagToolboxDisableMarketplaceAndRecentsForLuobu": true, + "FFlagToolboxDontFetchPluginPreviewModel": true, + "FFlagToolboxFixAnalyticsBugs": true, + "FFlagToolboxFixDecalInsert": true, + "FFlagToolboxFixDuplicateAssetInsertions": true, + "FFlagToolboxFixShowNilCreationStatus": false, + "FFlagToolboxForceSelectDragger": true, + "FFlagToolboxHideInventorySearchWhenEmpty": false, + "FFlagToolboxInsertEventContextFixes": true, + "FFlagToolboxNewAssetAnalytics": true, + "FFlagToolboxNewInsertAnalytics": true, + "FFlagToolboxPreventCameraMoveForScripts": true, + "FFlagToolboxRestoreInsertEventName": true, + "FFlagToolboxShowHideABTest": false, + "FFlagToolboxShowRobloxCreatedAssetsForLuobu": false, + "FFlagToolboxThemeConsumerPreventDuplicateDisconnection": true, + "FFlagToolboxUrlEncodeQueryStrings": true, + "FFlagToolboxUseNewPluginEndpoint": true, + "FFlagToolboxViewInBrowserUtmAttributes": true, + "FFlagToolboxWaitForPluginOwnedStatus": true, + "FFlagTopBarCloseContextMenuWhenHotkeysUsed": true, + "FFlagTopBarHideSiteBanner": true, + "FFlagTopBarNewGamepadMenu_PlaceFilter": "True;2567750478", + "FFlagTouchEventSameSHCellBugFixEnabled": true, + "FFlagTouchscreenSupport": false, + "FFlagTrackCurlTimeProfile": true, + "FFlagTrackIndividualParts": true, + "FFlagTruncateDevFrameworkHyperlinkText": true, + "FFlagTSMk2ThrottleStreamJob": true, + "FFlagTurnoffNavigateBackupError": true, + "FFlagUGC_ShowRetryCount": true, + "FFlagUGCUpdateErrors": false, + "FFlagUGCValidateHandleSize": false, + "FFlagUGCValidateMeshBounds": true, + "FFlagUIBloxRefactorCreateImageSetComponent": true, + "FFlagUILibraryInfiniteScrollingFrameRender": true, + "FFlagUniversalAppOnWindowsLaunchEnabled": true, + "FFlagUnlockedTopbarTransparency": true, + "FFlagUnlockMouseIfKicked": true, + "FFlagUnlockOnlyCountTheRecentGamesOnce": true, + "FFlagUpdateAdvSkyBoxTextureLoad": true, + "FFlagUpdateDevFrameworkCheckboxStyle": true, + "FFlagUpdateExtentsForManualStep": true, + "FFlagUpdateHoverOnMouseDown": true, + "FFlagUpdateMousePositionOnMouseButtonEvents2": true, + "FFlagUpdateOpaqueWithAlphaMipThreshold": true, + "FFlagUpdateParticlesOnce": true, + "FFlagUpdateRichTextFits": true, + "FFlagUpdateScaleBeforeBuildRig": true, + "FFlagUpdateSettingsHubGameText": false, + "FFlagUpdateStudioOpenBFReporting": true, + "FFlagUpsellDirectToPackage": true, + "FFlagURLConstructionCleanup": true, + "FFlagUseAccuratePlaySoloForced": true, + "FFlagUseAdvancedCharacterScales3": true, + "FFlagUseBaseUrlInPlugins": true, + "FFlagUseCategoryNameInToolbox": false, + "FFlagUseCylinderHandle": true, + "FFlagUseDateTimeType3": true, + "FFlagUseDisclaimerLinkRtf": true, + "FFlagUseEditorBackgroundInCommandLine": true, + "FFlagUseEngineFeature": true, + "FFlagUseFakeFavoriteIncrement": true, + "FFlagUseGetKeyframeSequenceIgnoreCache": true, + "FFlagUseHipHeightInKeyframeSequences2": false, + "FFlagUseInitialTerrainCache": true, + "FFlagUseInitialTerrainCacheForNonStreaming": true, + "FFlagUseInitialTerrainCacheForNonStreaming_PlaceFilter": "True;2317712696", + "FFlagUseKeyframeMarkersForEvents2": true, + "FFlagUseLuaGameDetailsOnIPad": true, + "FFlagUseLuaGameDetailsOnIPhone": true, + "FFlagUseNewAnimationRuntime": false, + "FFlagUseNewAnimationRuntime_PlaceFilter": "True;4599786547;5064251723;1105449649;2336571550", + "FFlagUseNewLeaveGamePrompt": true, + "FFlagUseNewSleepStage2": true, + "FFlagUseNewTexturePackGenerator2": true, + "FFlagUseOptimizedGetPartsObscuringTarget": true, + "FFlagUsePolicyServiceForCoreScripts2": true, + "FFlagUserAgentInBacktraceReports": true, + "FFlagUserAllCamerasInLua": true, + "FFlagUserAnimateScriptEmoteHook": true, + "FFlagUserAnimationSpeedDampening": true, + "FFlagUserBetterDynamicTouchstickCamera": true, + "FFlagUserBetterHandlingVehicleInputStates": true, + "FFlagUserBetterInertialScrolling": false, + "FFlagUseRbxSignalR2": true, + "FFlagUseRBXThumbInToolbox": true, + "FFlagUserCameraInputRefactor": false, + "FFlagUserCameraInputRefactor2": false, + "FFlagUserCameraInputRefactor2_PlaceFilter": "False;370731277", + "FFlagUserCameraInputRefactor3": true, + "FFlagUserCameraToggle": true, + "FFlagUserCarCam": true, + "FFlagUserChatAddServerSideChecks": true, + "FFlagUserChatAddServerSideChecks2": true, + "FFlagUserChatHistorySinksInput": true, + "FFlagUserChatNewMessageLengthCheck": false, + "FFlagUserChatNewMessageLengthCheck2": true, + "FFlagUserChatValidateFirst": true, + "FFlagUserClickToMoveBetterCleanup": true, + "FFlagUserClickToMoveCancelOnMenuOpened": true, + "FFlagUserClickToMoveFollowPathRefactor": true, + "FFlagUserDontAdjustSensitvityForPortrait": true, + "FFlagUserDTDoesNotForceAutoJump": true, + "FFlagUserDTDoesNotTrackTools": true, + "FFlagUserDTFastInit": true, + "FFlagUserDynamicThumbstickUseContextActionSevice": true, + "FFlagUserEnableDynamicThumbstickIntro_PlaceFilter": "True;1817743405", + "FFlagUserFixBubbleChatText": true, + "FFlagUserFixCharacterRemovingControlModule": true, + "FFlagUserFixChatMessageLogPerformance": false, + "FFlagUserFixChatMessageLogPerformance_PlaceFilter": "True;370731277", + "FFlagUserFixChatMessageLogPerformance2": false, + "FFlagUserFixChatMessageLogPerformance3": false, + "FFlagUserFixChatMessageLogPerformance4": true, + "FFlagUserFixClickToMoveWithACM": true, + "FFlagUserFixExternalJumpRequest": false, + "FFlagUserFixGamepadCameraTracking": true, + "FFlagUserFixMouseCapture": false, + "FFlagUserFixMovementCameraStraightDown": true, + "FFlagUserFixTouchGuiWhenNoCharacter": true, + "FFlagUserFixZoomClampingIssues": true, + "FFlagUserFixZoomInZoomOutDiscrepancy": true, + "FFlagUserHandleChatHotKeyWithContextActionService": false, + "FFlagUserHandleChatHotKeyWithContextActionService_PlaceFilter": "True;4738806136", + "FFlagUserHttpAPIVisible": true, + "FFlagUserInGameChatUseNewFilterAPIV2": true, + "FFlagUserInputServicePipelineMacClient": true, + "FFlagUserInputServicePipelineStudio": true, + "FFlagUserInputServicePipelineWindowsClient": true, + "FFlagUserIsNowADynamicThumbstick": true, + "FFlagUserJSONConvertInfAndNanToNull": true, + "FFlagUserJumpButtonPositionChange": true, + "FFlagUserMakeThumbstickDynamic": false, + "FFlagUserNavigationClickToMoveNoDirectPath": true, + "FFlagUserNavigationClickToMoveNoDirectPath2": true, + "FFlagUserNavigationClickToMoveSkipPassedWaypoints": true, + "FFlagUserNavigationClickToMoveUsePathBlocked": true, + "FFlagUserNavigationFixClickToMoveInterruption": true, + "FFlagUserNavigationFixClickToMoveJump": true, + "FFlagUserNewCameraRaycastingAPIsEnabled": true, + "FFlagUserNewClickToMoveDisplay": true, + "FFlagUserNewDefaultCameraAngle": true, + "FFlagUserNewPoppercam": false, + "FFlagUserNewPoppercam_PlaceFilter": "False;855499080;606849621;537413528;402122991", + "FFlagUserNewPoppercam3": true, + "FFlagUserNewPoppercam3_PlaceFilter": "False;1997193809;734159876", + "FFlagUserNewPoppercam4": true, + "FFlagUserNoCameraClickToMove": true, + "FFlagUserNoDynamicThumbstickRecenter": true, + "FFlagUserNoMoreKeyboardPan": true, + "FFlagUserNoUpdateOnLoop": true, + "FFlagUseRoactPolicyProvider": true, + "FFlagUserPlayEmoteBySlotEnabled": true, + "FFlagUserPlayEmoteChatCommand": true, + "FFlagUserPlayerScriptsBindAtPriority": false, + "FFlagUserPlayerScriptsBindAtPriority2": true, + "FFlagUserPointerActionsInPlayerScripts": true, + "FFlagUserPoppercamLooseOpacityThreshold": true, + "FFlagUserPreventOldBubbleChatOverlap": true, + "FFlagUserRbxUtilityCreateSetParentLast": true, + "FFlagUserRemoveTheCameraApi": true, + "FFlagUserRoactBubbleChatBeta": false, + "FFlagUserRoactBubbleChatBeta_PlaceFilter": "True;5465723678;5100919959;5064251723;4794228797;2146460778;1987001769;256497097;5020473653;3016661674;679498303;250724380;5208655184;3541987450", + "FFlagUserServiceEnabledV2": true, + "FFlagUserServiceWhiteListV2": true, + "FFlagUserShouldClipInGameChat": true, + "FFlagUserShouldLocalizeGameChatBubble": true, + "FFlagUserShouldLocalizeServerMessages": true, + "FFlagUserSiblingTouchGui": true, + "FFlagUserTheMovementModeInquisition": true, + "FFlagUserThirdGamepadZoomStep": true, + "FFlagUserThumbstickFrameIsActuallyFrame": true, + "FFlagUserToolR15Fix": true, + "FFlagUserTouchSensitivityAdjust": true, + "FFlagUserUpdateCameraConstants": true, + "FFlagUserUseCachedFriendChecksForChat": false, + "FFlagUserUseNewControlScript": true, + "FFlagUseSignalRCommonInUserNotificationClient": false, + "FFlagUseSolverDisplacementForWake": true, + "FFlagUseSolverDisplacementForWake_PlaceFilter": "True;679715583", + "FFlagUseSteppingParamsInsteadOfConstants": false, + "FFlagUseSteppingParamsInsteadOfConstants2": true, + "FFlagUseStudioLocaleForForceLocale": true, + "FFlagUseThumbnailUrl": true, + "FFlagUseUpdatedDisclaimerLinks": true, + "FFlagUseVersionedEncryptionFormat": false, + "FFlagUseVersionedEncryptionFormat_PlaceFilter": "True;5646917919;5535247402;5650743011;5732185084;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5180703112;5036207802;5947859215;5968314783;5976554489;5967514178;5762783081;4927429832;5271804927", + "FFlagUsingBrowserServiceCaptcha": true, + "FFlagUsingCaptchaCDN": false, + "FFlagUsingFunCaptchaDxForLuaLogin": true, + "FFlagUsingFunCaptchaDxForLuaSignup": true, + "FFlagUsingNewCaptchaApi": true, + "FFlagUsingSendMeasureBatch2": true, + "FFlagUWPFixBackCrash": true, + "FFlagUWPGamepadButtonBShouldntTriggerSystemMenu": true, + "FFlagUWPLocaleManagerEnabled": true, + "FFlagUWPNoLongerShowLeaveConfirmationOnStart": true, + "FFlagUWPUseDataModelTaskForStartGame": true, + "FFlagUXImprovementAdaptScrolling": true, + "FFlagUXImprovementAddScrollToGamesPage": true, + "FFlagUXImprovementAddSearchBar": true, + "FFlagUXImprovementsFixEscKeyClosing": true, + "FFlagUXImprovementsNonTCPlacesAllowedPlay": false, + "FFlagUXImprovementsPublishSuccessScreenPublishAs": true, + "FFlagUXImprovementsShowUserPermsWhenCollaborator": false, + "FFlagVerifyBuiltInPlugins": true, + "FFlagVerifySliceCenterOnRenderNotSet": true, + "FFlagVersionControlServiceForceDraftsUsage_PlaceFilter": "True;4203193037;2772125205;3069606769;4094440665;2413179002;3344058302;3566618597;4041475807;2061558182;4074515213;2309740430;2670461983;4137940225;3096515841;4133172402;4163865257", + "FFlagVersionControlServiceScriptCollabEnabled": true, + "FFlagVersionControlServiceScriptCollabEnabledByDefault": true, + "FFlagVersionControlServiceScriptCollabEnabledByDefaultFalse": true, + "FFlagVersionHistoryAutoCommitOnTeamCreateTurnOff": true, + "FFlagVersionHistoryFastCommit2": true, + "FFlagVideoDocumentationPluginEnabled": true, + "FFlagVideoRecordDeadlockFix": true, + "FFlagVideoRecordFix": true, + "FFlagVideoRecordFix2": true, + "FFlagVideoSupport": true, + "FFlagVideoSupport_PlaceFilter": "True;4927429832;4587054145;4521759066;4589144917;1921623329;4710199611;4739075775;4786133739;4846054211;4898701067;4898983990;4898980405;4898177642;4911320968;5271804927;5535247402", + "FFlagVideoUISupport": true, + "FFlagViewportFrameDefaultFovFix": true, + "FFlagVIPServersRebrandToPrivateServers": true, + "FFlagVisibilityWithUpdatedAbsolutePosition": true, + "FFlagVoxelizerMeshPerExtentsScale": false, + "FFlagVRDontDetectHMD": false, + "FFlagVRDontRunSteamVR": false, + "FFlagVulkanMemoryAllocationOptimization": true, + "FFlagWatchWidgetContextMenuCopy": true, + "FFlagWatchWidgetDisplayVariadicArgs": true, + "FFlagWatchWidgetSortVariables": true, + "FFlagWebViewsUseLuaCatalog": true, + "FFlagWebViewsUseLuaGameDetails2": true, + "FFlagWeldConstraintRelativeCFrame1": true, + "FFlagWhitelistThumbnailsAPI": true, + "FFlagWin32DuarSaveAllCookies": true, + "FFlagWindowsGameLaunchUseAppBridge": true, + "FFlagWindowsReportAbuseNotification": true, + "FFlagWindowsTouchEnabled": false, + "FFlagWireframeRendering": true, + "FFlagWorldModelRefactorV4": true, + "FFlagWorldModelV5": true, + "FFlagWrapDeformer": false, + "FFlagWrapDeformer_PlaceFilter": "True;2431195974", + "FFlagWrappedDevFrameworkLinkText": true, + "FFlagXboxAppBridgeRewrite5": false, + "FFlagXboxAvatarExperienceEnabled": true, + "FFlagXboxFixEngagementLayout": true, + "FFlagXboxFixNanVoiceChatVolume": true, + "FFlagXboxRemoveAccountAgeStatus": true, + "FFlagXboxReportPlayerLocFix": true, + "FFlagXboxUpdateSessionChecker": true, + "FFlagXboxUseNewAuthEndpoints": true, + "FFlagXboxUseRoactRoduxNewConnectionOrder": true, + "FIntABTestRequestTimeoutMilliseconds": 5000, + "FIntAENewCategoryApisRollout": 100, + "FIntAntiSpamSpamLimit": 1000, + "FIntAppConfigurationExpiry": 86400, + "FIntAppShellFPSReportPeriod": 120, + "FIntAppShellMemoryReportPeriodicity": 120, + "FIntAtomicRequestingTeleportRollout": 100, + "FIntAvatarEditorNewCatalogButton2": 100, + "FIntAvatarEditorTimeBetweenSaves": 20, + "FIntAvatarExperienceNewCategoryApisRollout": 100, + "FIntAvatarExperienceNewNavigationRollout2": 0, + "FIntBFAlignToolImprovementsRolloutPercent": 100, + "FIntBFTableOutputViewRolloutPercent": 200, + "FIntCameraFarZPlane": 100000, + "FIntCameraMaxZoomDistance": 400, + "FIntCLI20390_2": 16, + "FIntCLI30390": 2, + "FIntCLI30497I": 2048, + "FIntClientCompressionFormatRequestPC": 1, + "FIntCtrlPinchRejectionTimeoutMillis": 80, + "FIntCurlProbePermyriad": 10000, + "FIntDataModelPatcherEventPercentage": 1, + "FIntDebugVersionHistoryTCMessageOnInternalError": 1, + "FIntDebugVersionHistoryWiremockApi": 0, + "FIntDelayBeforeFirstPostStatsSeconds": 180, + "FIntEducationalPopupDisplayMaxCount": 1, + "FIntEnableFriendFooterOnHomePageV369": 100, + "FIntEnableTencentSignupCleanup": 100, + "FIntESGamePerfMonitorReportDetails": 1, + "FIntGamePerfMonitorPercentage": 10, + "FIntGoogleAnalyticsLoadLuaShellHundredth": 100, + "FIntGraphicsVulkanARMVaryingBufferMb": 160, + "FIntGraphicsVulkanMinAndroidVersion": 25, + "FIntGraphicsVulkanMinDriverVersionPVR": 4981305, + "FIntHttpCacheRedirectsTimeoutMs": 14400000, + "FIntHttpCurlMaxCachedHandlesPerHost": 8, + "FIntJointTime_TextureCooldown": 0, + "FIntLDLPGSMaxParallelTasks": 16, + "FIntLocalizationAnalyticsSamplesPerMillion": 1000000, + "FIntLuaAppAutocompletePercentageRollout": 0, + "FIntLuaAppBacktraceErrorReportPercentage": 20, + "FIntLuaAppLogoutUserOnUnauthorizedPercentRollout": 100, + "FIntLuaAppMorePagePremiumIcon": 2, + "FIntLuaAppNonFinalThumbnailMaxRetries": 1, + "FIntLuaAppPercentRolloutFeaturedGameTileInSearch": 100, + "FIntLuaAppPercentRolloutGameDetailShareButtonUseAppsflyer": 100, + "FIntLuaAppPercentRollOutNewThumbnailsApiV3": 100, + "FIntLuaAppRenderTransparentPageMaxCount": 1, + "FIntLuaAppSearchAutocompleteDebounceMs": 100, + "FIntLuaAppSpotlightFetchRollout": 0, + "FIntLuaChatUseNewFriendsEndpointsV2": 100, + "FIntLuaLoginGenderSelector": 1, + "FIntLuaStartupManagerRollout2": 100, + "FIntLuauTableTypeMaximumStringifierLength": 40, + "FIntMaxCameraMaxZoomDistance": 100000, + "FIntMaxClients": 1023, + "FIntMessageListMountingBuffer": 1500, + "FIntNeighborSleepThresholdMult": 10, + "FIntNewDevConsoleMaxHttpCount": 300, + "FIntNewDevConsoleMaxLogCount": 500, + "FIntNewInGameMenuPercentRollout": 1, + "FIntNotMovingSleepThresholdMult": 1, + "FIntNumSmoothingPasses": 3, + "FIntParalleNarrowPhaseThreads": 16, + "FIntPartMinSizeMul1000": 50, + "FIntPercentLuaGameDetailsPageOnAndroidPhone": 100, + "FIntPercentLuaGameDetailsPageOnAndroidTablet": 100, + "FIntPercentReportingByCountryCode": 100, + "FIntPercentReportingGamesListRTT": 5, + "FIntPercentReportingGamesSortsRTT": 50, + "FIntPercentReportingLeaveGameAnalytics": 10, + "FIntPercentReportingNetworkProfileAfterStartup": 20, + "FIntPGSAngularDampingPermilPersecond": 950, + "FIntPGSPStageStiffnessWorseFitnessThreshold": 2, + "FIntPGSVStageStiffnessAggressiveValue": 99995, + "FIntPGSVStageStiffnessConservativeValue": 99000, + "FIntPGSVStageStiffnessWorseFitnessThreshold": 2, + "FIntPL_TeleportPlaceLauncherExpBackoffRollout": 100, + "FIntPlayerPolicyHttpRequestRetryTimes": 3, + "FIntRegLambda": 1400, + "FIntRenderDitherMode": 1, + "FIntRenderGrassHeightScaler": 50, + "FIntReportDeviceInfoRollout": 100, + "FIntSendScreenOrientationToEventIngestHundredthsPercentage": 100, + "FIntSmoothMouseSpringFrequencyTenths": 45, + "FIntStartupInfluxHundredthsPercentage": 100, + "FIntStudioAttributesUIBetaFeatureRoleSet": 4, + "FIntStudioBFRolesetAssetManager": 2, + "FIntStudioBFRolesetGameManagement": 4, + "FIntStudioBFRolesetSaveToCloudV2": 4, + "FIntStudioBFRolloutPercentAssetManager": 75, + "FIntStudioDeprecateQuickFindScriptStep": 2, + "FIntStudioInfluxDAUReportPercent": 100, + "FIntStudioInsertDeletionCheckTimeMS": 30000, + "FIntStudioNativeCaptchaDisplayTimeoutMillis": 180000, + "FIntStudioProfilerHangThresholdSec": 60, + "FIntStudioRobloxAnalyticsLoadHundredth": 10000, + "FIntStudioRobloxGoogleAnalyticsLoadHundredth": 100, + "FIntStudioUserDataStoreRetryTimes": 1, + "FIntStudioVIPUserGALoadHundredth": 10000, + "FIntTaskSchedulerAsyncTasksMinimumThreadCount": 3, + "FIntTaskSchedulerAutoThreadLimit": 8, + "FIntTaskSchedulerThreadMin": 0, + "FIntTeleportMethodAnalyticsHundredthPct": 100, + "FIntTexturePacksBetaFeatureRoleSet": 4, + "FIntUGC_TeleportPlaceLauncherExpBackoffRollout": 100, + "FIntUSC180727B": 32, + "FIntValidateLauncherPercent": 100, + "FIntWeldConstraintAdornSize": 10, + "FIntZoomOutDistance": 500, + "FixChromebookEnterKeyIssue": true, + "FLogBrowserActivity": 3, + "FLogCloseDataModel": 3, + "FLogDXVideoMemory": 4, + "FLogError": 6, + "FLogFastLogValueChanged": 0, + "FLogFullRenderObjects": 0, + "FLogGraphics": 6, + "FLogHangDetection": 3, + "FLogLegacyLock": 0, + "FLogLuaBridge": 2, + "FLogNetwork": 7, + "FLogNetworkItemQueueDtor": 1, + "FLogPlayerShutdownLuaTimeoutSeconds": 1, + "FLogRccSoapMicroprofiling": 6, + "FLogStudioLocalSaveMD5HashOutput": 6, + "FLogUpdateUIManager": 6, + "FLogVR": 6, + "FStringABTestNameIPhoneLuaGameDetails": "iPhone.AllUsers.LuaGameDetails2", + "FStringAutomaticSizeBetaFeatureUrl": "https://devforum.synt2x.xyz/t/automaticsize-studio-beta/790215", + "FStringBreakpointPropagationBetaFeatureUrl": "https://devforum.synt2x.xyz/t/universal-breakpoints-beta-one-breakpoint-to-rule-them-all/643907", + "FStringClarifiedDraggerBehaviorLearnMoreUrl": "https://devforum.synt2x.xyz/t/grab-these-new-physical-dragger-features/818166", + "FStringClarifiedIKDraggersBetaUrl": "https://devforum.synt2x.xyz/t/grab-these-new-physical-dragger-features/818166", + "FStringCLI27760S": "nn62qq5r3q8n9sn537r1r00o43nq1p458391556o", + "FStringCoreScriptBacktraceErrorUploadToken": "53268e7f81b40f5dca5b80ad0fb9b7b2fd750e96ece3480ad1fb89a4a4cc4766", + "FStringEnableiCloudWebCredentialsBtIdsList": "49593556386,49593556386,44219219422,49373021284,49849080647", + "FStringGamesUrlPath": "/games/?referrer=rblx23-player-preflux", + "FStringGraphicsVulkanBlacklist": "", + "FStringLuaAppGameSortGridABTestJSONV2_3": "{\"ABTestData\" : {\"Control\" : {\"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation1\" : { \"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation2\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"IncludedSorts\" : {\"Home\": [\"PersonalRecommendation\"]}, \"SeeAllButtonType\" : 1 }, \"Variation3\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"IncludedSorts\" : {\"Home\": [\"PersonalRecommendation\"]}, \"SeeAllButtonType\" : 2 }, \"Variation4\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"IncludedSorts\" : {\"Home\": [\"PersonalRecommendation\"]}, \"SeeAllButtonType\" : 3 } }}", + "FStringLuaDraggersBetaUrl": "https://devforum.synt2x.xyz/t/say-hello-to-the-new-lua-dragger-beta/504815", + "FStringLuaErrorByPlatformCounter": "LuaErrorPlatformWin32UA", + "FStringLuobuMarketplaceDisabledCategories": "FreePlugins;PaidPlugins;Plugins;FreeVideo", + "FStringNewGamepadMenuForcedUserIds": "959520514,656046844,146914182,975669155,344925094,247305679,956690111,1026207482,485327537,166540505,1300488959,1220631541,169775909,1498251806,401950003,751568948,2231221,7210880,931389991,1478764079,597663806,1298953044,1542933305,1182179679,1516442,1155027644,648897862", + "FStringNewInGameMenuForcedUserIds": "1279871910;7210880;2231221;112417865;1081124046;1324587240;1325541372;716741702;366370235;402758067;283865447;401950003;1079612769;931389991;959520514;656046844;146914182;975669155;344925094;247305679;956690111;1026207482;485327537;166540505;169775909;597663806;1325592031;5116262;782148096;1182179679,1155027644,648897862;1793939930;1793937071;1793941574;1771680004;1771664206;1771677092", + "FStringRENAME_ABTEST_AllUsers_GameDetails_UseAbbreviatedDescription": "AllUser.LuaApp.GameDetailsAbbreviatedDescriptionV3", + "FStringRENAME_ABTEST_AllUsers_GameSearch_Autocomplete_V2": "AllUsers.GameSearch.AutocompleteV2New", + "FStringRichTextBetaFeatureUrl": "https://devforum.synt2x.xyz/t/richtext-beta/634167", + "FStringSIMForceCSGv2LearnMoreUrl": "https://devforum.synt2x.xyz/t/deprecating-legacy-csg-system/766077", + "FStringStudioBuiltinPluginDefaultFont": "SourceSans", + "FStringStudioEmergencyMessageV3": "eyAicmVnaXN0cnlLZXkiOiAiRW1lcmdlbmN5TWVzc2FnZUZvckNoaW5lc2VTdHVkaW8iLCAicGxhdGZvcm1zIjogWyAiV2luZG93cyIgXSwgIm1lc3NhZ2UiOiB7ImVuIjogIlRvIGdldCB0aGUgYmVzdCBTdHVkaW8gZXhwZXJpZW5jZSBhbmQgcGVyZm9ybWFuY2UgaW4gQ2hpbmEgdXNlIHRoZSBDaGluZXNlIHZlcnNpb24gb2YgU3R1ZGlvIGF2YWlsYWJsZSBvbiA8YSBocmVmPWh0dHA6Ly93d3cucm9ibG94ZGV2LmNuPmh0dHA6Ly93d3cucm9ibG94ZGV2LmNuPC9hPiIsICJ6aF9DTiI6ICJcdTU5ODJcdTY3OWNcdTRmNjBcdTYwZjNcdTRmNTNcdTlhOGNcdTU3MjhcdTRlMmRcdTU2ZmRcdTY3MDBcdTdhMzNcdTViOWFcdTc2ODRcdTAwNTNcdTAwNzRcdTAwNzVcdTAwNjRcdTAwNjlcdTAwNmZcdTcyNDhcdTY3MmNcdWZmMGNcdThiZjdcdTRmNjBcdTUyNGRcdTVmODAgXHUwMDNjXHUwMDYxIFx1MDA2OFx1MDA3Mlx1MDA2NVx1MDA2Nlx1MDAzZFx1MDA2OFx1MDA3NFx1MDA3NFx1MDA3MFx1MDAzYVx1MDAyZlx1MDAyZlx1MDA3N1x1MDA3N1x1MDA3N1x1MDAyZVx1MDA3Mlx1MDA2Zlx1MDA2Mlx1MDA2Y1x1MDA2Zlx1MDA3OFx1MDA2NFx1MDA2NVx1MDA3Nlx1MDAyZVx1MDA2M1x1MDA2ZVx1MDAzZVx1MDA2OFx1MDA3NFx1MDA3NFx1MDA3MFx1MDAzYVx1MDAyZlx1MDAyZlx1MDA3N1x1MDA3N1x1MDA3N1x1MDAyZVx1MDA3Mlx1MDA2Zlx1MDA2Mlx1MDA2Y1x1MDA2Zlx1MDA3OFx1MDA2NFx1MDA2NVx1MDA3Nlx1MDAyZVx1MDA2M1x1MDA2ZVx1MDAzY1x1MDAyZlx1MDA2MVx1MDAzZSBcdTRlMGJcdThmN2RcdTdmNTdcdTVlMDNcdTRlNTBcdTYwMWRcdTcyNDggXHUwMDUzXHUwMDc0XHUwMDc1XHUwMDY0XHUwMDY5XHUwMDZmXHUzMDAyIn0sICJzaHV0ZG93biI6IGZhbHNlIH0=", + "FStringStudioLuauLints": "1,2,3,6,10,11,12,13,14,15,18,19", + "FStringStudioPlaceVersionHistoryHelpLink": "https://devforum.synt2x.xyz/t/beta-place-version-history-in-studio/607597", + "FStringStudioReportOpenPlaceTimeFilter": 95206881, + "FStringStudioUrlAssetManager": "https://devforum.synt2x.xyz/t/asset-manager-is-here-beta/517475", + "FStringStudioUrlCSGv2SmoothingBeta": "https://devforum.synt2x.xyz/t/introducing-smoothingangle-property-for-partoperation/552810", + "FStringStudioUrlGameManagement": "https://devforum.synt2x.xyz/t/additional-game-management-in-rblx23-player-preflux/642282", + "FStringStudioUrlSupportPluginDebugging": "https://devforum.synt2x.xyz/t/plugin-debugging-new-beta-feature/623350", + "FStringTexturePacksBetaFeatureUrl": "https://devforum.synt2x.xyz/t/surfaceappearance-studio-beta/663449", + "GoogleAnalyticsAccountPropertyID": "UA-43420590-3", + "GoogleAnalyticsAccountPropertyIDPlayer": "UA-43420590-14", + "GoogleAnalyticsLoadStudio": 0, + "JavaCrashUploadCountToEphemeralCounter": true, + "PublishedProjectsPageHeight": 535, + "PublishedProjectsPageUrl": "/ide/publish", + "PublishedProjectsPageWidth": 950, + "SFFlagFixBallRaycasts": true, + "SFFlagFixHumanoidOwnershipRoot": true, + "SFFlagFixRaysInWedges": true, + "SFFlagNetworkHumanoidStatePropertyReplication": false, + "SFFlagTerrainRaycastsRespectCollisionGroups": true, + "SFFlagUseNativePathWaypoint": true, + "SFFlagWeldConstraintRelativeCFrame2": true, + "StartPageUrl": "/ide/welcome", + "TreatAndroidInputSourceAsBitmask": true, + "VideoPreRollWaitTimeSeconds": 45 +} +} \ No newline at end of file diff --git a/app/files/AnimationThumbnail.png b/app/files/AnimationThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..36aa431f05e4159e6c61a1d77e12949c2f7111ce GIT binary patch literal 44652 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 qpnUc@4lEGWh@Q5QR`pF()c*k}Rs*X5 literal 0 HcmV?d00001 diff --git a/app/files/AudioThumbnail.png b/app/files/AudioThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..1f72a790bb6bb94436f6f167359089069c9e15c1 GIT binary patch literal 42139 zcmW)n1yCE^*Ty%vyHi|)JCp*&-JL>_;zf!VC%EOMxVw9c6pDx9h2j*4P`p@*Yx(m3 zGRf@BW|C~~z2~0u{GPM%y4ouEI5ao_0N|^sD(V9OsQiB~EDYqCP)$8iV zxsOHwU8BtLV$1g=|>*@jJtVKk7`oxWATFZCc+UVYdyjgt)!I4HD# z_bb8P>FLJfzX#;LxhKk ztQ92KkxH6)(L!nc`w`#q=Y3G@R{aQJV*XBI>PA4FprZwo?ViX}hjs~?hX1_JuSlxZ z@|*YS+HQetY>|_8k%GoaGw4Bf9?GA;s-`$g2IQbqQwEXr@P7Y{+kAl&?Wi;7lJ)|V z*w~7ZzatseUxW8OUp|-L$;>z_+x&5vscs>z$rb-z7Ja;VMQ`!H@4(x8uc1+2bewhP z(;q5WuqyA*gWvYuh~L{o`ufTV;%x=YhckhNG8jOa7JgJU$R9O}mv$gQIl$E5Hp6;zdg&02YW&P1r{ zY4q=eK>OAEe6NoiqLTb(x9(ZpHQ&Bxv|6`1uKIC%6M_k%=|=w2jU1Y0E|l||#z^I` zYXzrXy&e23Pyk{~4lvHuUNiVJ7@$6gs@Bg5)2nd!bh=)eg-bu{3yAn?3wn24jYhto zTOPwP;bLv+9lSp+dF^QlOzV@YI7te2&>etNJX6S^D4mtDWz{*!W=!p|ZEhbi*GH|P zaeIGtfYrgv+V?MvT5H0xf)?3O@g@ z={#s(!v76kWu9vM;PuWLMW~{vKL9UIcJZE|a+!5;hh1%};$JOAw1wR}gldBD9@g&EYlA zv^UKpuMT{af3j}2EGw;lo$OysBPfLrxY4zZGeqOiNmYBtGRE2mtyxFK{pLh5<=}QC z;!VM9(JY(-BhIH2>V2l$+;ru>m+V+3CJ5P>o!8Yba~3H&uA%bV=?XStl+9Fg>d_10a57uhobT7O!WF_7tVLzD{$cahBE_p>UcBwPSy8xCPL3qjXrrVv zO~qth7p0meOdfA=hrT_?ntfkmLm$BT{3lz5())wfT`}MNLpsWVz*}}={Glmy&Y|eH zKS*A3Cwm4Y2(}diqD8V`b=-taj=HD?NP3vAS3mc01QwMW2UwYkk`ez1EQg|r>(f(X zeOie!Vc7WYvIqUAyulXOEk$LGS$WY~ggyXYh4;5Cn95_*2+%-o;=(R!c1`uSQqp5* zTz|^)a5~)dqsr8PucB%KDEJxPf^~&k7199K_UTSC=COQFvQ&mC;#s zKyD`{_Jtx4d86x@=dknW)p6 z728^^<(M`l$*P=PA+5Lp_U8Fjtgsr5Us?6mCCSqlGmvt%v3|$^gsOMPBirsDjo17^B+0OFUe%d(5TmQ<<6G&qFjVBq6ue% z{^~zc5xTw^93YyU<2&qKgYkyS6aWkmO`8@Lh!iVMtp8lPNO4P9!1v4DOZko0=o8&mWo%tByYX6U0XCyW_bjR@EKuBW2;JC&)X-BY ziUj5MvBJ^12FX^hgogUm^&EtiMqka{KGKykzUrE+;^ys(4?PE5u!jG(rQ?K94M&5Q zJWeJw#$NBPmXSI~#I0TX;3`Tn(zRG)rTfKqa4SIc38juXhNoZQRGvUM3@Hz9BynWl zhl?BXO*=|uv!HilZRmY21!Q4VxH?0psa16^gZ#><^|o1$Pw-GGAcB63)X+dkS@RkF z?R&yy$EB**8WJlgbXVU{hO;>{IY~ZDD)op5lpMwJ|0D!%p@L0mwW!jDx1&7{(6^XU zH!UpGUhlc2*g!I?X*6KL4}(;%qPJeH4T)^9LmDwEbADsu2Di9pw~@`AZ(r-s$)Bat zEK+Cms|evMfWq}jWnDH{=$mYh54Vn)Wva@#-G&vMsSKbI%jGTLL(y5`6DBp|vLUT_X&M!Be~knwsY_abTmnJ@QbkQJ%IPgHa}$|{hkc;(pEeg#z}>}s_U zJZE(skv~dNn}d5p>;ZM}R-(gixs(N+1CU7%)?D96zbTYqZ8$VTQ2s?Ul#0W<72UY) z8ok)eClJ?r&x>|F^UrMGD~a5TDy}-hqj@ff(Ae=>)L%t{LzISCD%Ka0Rq6anY&`oo z;DT8|`D6bDW~b1HPM8zEf~$MRn!J^H5 z^PgAv>Ks$Y_K4=SXe#UXw$RmZQF{XAIvmF3GGbY^GjXi+Yail?`1}^r)^BLO#0G$+ zjnqY>EArZ}1t`3~BMLT%UfOuQP>FJSL&nU>DUUidP3>GK@m!dKCrfaf@@fDPi?umc zd6|fKs}g(0&etApZ}#qo7UB6j^gqy`BoV0!eF_(fosQ;c{IcL=C{D*os`e#jfz@cXh2Fsd z-Gr0&*eD!mtrDRh&J>kbE^?#o)-8DjWdFv)#QZZEti^$^3S!LRY^adyRejxj9bKhgC2gmn^X8`Gl5lsj<_Y@y?1W^bum`B!GwqN6fB8r@rW>wD1j=() zbywm%AW~tH-}>+9ifub(wb0&7OEOVtN9#wg>nW>}I2W;*IOy`lNKSl0*Oyo_6%^N~ z#cdY{Em!h*uE8d^1lDmE^mB(!)YUdZvc-J)Fw^Ttp3Jn#Z&l^ze%A_H%vQ893S()b zK_5rR*Gr_}xr5o4V@D}U;uHtD0=}-Ry#g-usR?h2mmQO~Zlw%`n7pk9#Tj{P*R{r)c2C$l(ELK9`OfhH@92Nu0N3AacfQ z6h<33k(siD){RW4>CT6>Xb*`D`BgJ_i`)_XfL3T4Yvx>5c}Eem*mMD6i0PLaoao^m^JV$8pefp*eLUL8dL3q~Nd2Z;cRiDp6lDmV%U| z?SN&H+vagabW3OxNr1o+w8?(hG&&Hl-^Wf+K34zN#U(5ihq*#RU4-2s+8;#oNHwJz zsV6DK+URfL)G!4pH9=RgRTRU{$HBq4QM0)cZ2z50f1f2xarL{+B9f$-4|~x%9iLI@ zt}hBLkx$|0J}w%khMlf^s$4wPz!&fgIc|cB9c{N`sp2MUmM3>+Dy0IWf)MR=0Z3@B5wri-+Me;=UGwlxe3IppuA2B+?_WJlnLfAo150gxL zWpIG{1MBA?);=2OFs7=SR0aL-sscmsccw&HAGTo|Igm&=YqQOyyj>a9JH!USRtE5(0g2)*@P?6|3WC;3M>Z8vy#o&iw=)I#Mr{XVhtO6Gmv#LLf{>NX-bdlax z*7Lf}EeP5qjnFNq#co59$=F(wSEQj{NT4VxYq( zYk9{t&NMC`>dn?dlgy5*O5o4QC&;N(Uy2(4z(@0;tX#n}SL8pwc6uewl>vx8>nszk z)0%iixV(QM2CG&Y3M-*Vo%(s0n%tPyZ5PVWnd*1cz|-Q&4i+w)xF2yUOo##-=?WrW zR?F1)A)kuQy(bm1bWmsQiW-)P0;<2{VnoamSqtJsPLeYU4nwCkyibE^Q(|~#Ws5~d z4fGpAK&h0_ij38qQSQUgw6Ory&}=zs+jq6s2`K5sh?uCaMmXyx4ju7EesI52*+Ab#uF@;Z-4jPcS-_mEKzW?zrUo6=j z!}JrGib0UJ@DQQU%QYk@Vhi|O1F#X>Fa7FH`7f~+oVWje(Cm$k4mPTnI`%NKpi*&O zbR`?BlU70%@qPJp9H`nW@2*s$Q2XbV7IJ=nF6qhYpC;pk>({1wXw@7-3WLNi&y%~W z2hh%bY_gWgsl2FMe5DUcogJSk7NJg*opXZn4o|7{_foenq+GB2U?+1OOo5FAc4XMJ z{*tY*u!&VETfIX|D?tPfzzoqhr&n{LdqljkloKz7m^Wr@)&eAxNQnqD*zQ{)WDn_k zIju@r(o_xHkkCYSK34K1`_Ul$YsR9GD(7xTbHIxG3*>g}2mNjG?>3pT8Wa{Yf_B{A z4pCK)BDt3pbjui~S}O{Y*aGiUD>CNaQx@tQy^}QrZap_LE1UcckP3`$yg9er8YiKJ zVj~p^q>N?fK+5Xd{NOlNMEZ{vgIW4n)_y0{^ZfiJ-i(efPCAE!8OtaIpWf@o$dnyk zLI>SzjBz>^3TLs(6KRwkU7PY$(UrTL$@I&ofZGZVVOX(1X(nAREQP z<-*M{?o+(@h_2#>-xdX3a>V~N@AS3LMa(1@rk?)qGEG%0>Jvs8RjM?;kEl~5{Zh=6 zSefpSow_3P|C};J#XXGIgYJ*raSR<~R^oNJOEoic4r9Yrc$*dFLU_p9&>%XhAS~Vd zEijUYPv1}Zz#=MwC+c5su>dm)V%plEXjIoxe4-qKp_^4AN&n~Z9071Z4E z@XD$Hbof>u%eERRaW!%%{)_k_;J6j_`cnE~qbJ2o%%?zXp`U{#cX@nM)H zHwqkM9DAbiz2s(QH<_AEx&xQ&_xoi9Wn4U3cQ0*0GF&<}n0NmqUNg5B{yxJRYs@sq zSM5Myqdtj@UH8%Zjz}oSp?`N|1I5Lt*>^Q!7N8Y!JMn*G_WF-Xxzw3U4^2Gdtvusj zc(~)bCY$T&!6i;kRX{Oi!CMukH9+c)Zue8BOpnF6fyHejA=GvC*WAsV(u-gHxGFyY z3ZC(Ep7B4 z#yL1U=SR{)C>Mvm$IMrZN_(?LW4n%YGl`__8Hg=8=hf)=!d;P1u@&quqFrukWsWV@ zmK}%TMAnj|_jA9KUFu&C@?gpD#mSc>{?$5{VMel~G#IXj(z4IL+emg?z$lklkUUAr zl%V$tmL#Xn0yH^xxSIGt9dbKFReuLnB~?+=MqXwbaoJKGJd$VIznh9hpbmbtjXxC7 znL5=>gf1w#c}i4dZXjbvk-oSztQVG>U0>YK8N@;Y;Nh#LU8Vbh@-d5u8v32OCkh4) zXwpZB72NFS6~jo~sQ(as!n+jNEs|vYykElMW_QShZ_o6ehJo|2!)Q5Trua)fBHfRz z;#aK1o2Y6o88bWRSGQGnHQCD8e~%eVAg&Lpj0@>3I@l`q>$$^ts&6<&ezMwf{7vWN z*+vpeEeb@V{9m52#^~Vv|7uMt_@zod>7*sScaohIS%vHrzjh?OPS?!1dB56*TPPfd zqN)ZGLGm57xdSim>rQl9httMtC1kzuBu*r&v6VKSEKZ&_y$q=eIl=mu;0 zbtGSW><$N7V~3eDeQt5+@yn1CY)5`f1S>#@;jun_@qhyn@4&wx|JvEtupGQsMkDV~ zRrMnYHYy*s7{rJyWDz3kjTki@K2J}{?JTm+3Z+ERRjn+4)1`2jOfS#){Bzpz3@u)0 zK~6b0I70c9vA#0$$7L%Ckjx42(V$m?y7wvDPu~b2Vw>oQi?5x};3vhZLWcKnqyTHxAa69-W%5mtIkjZe zI6*>Nr65gVxtQ-)SrIq^6053uB#q9jl43Kzqi>eGY&(e7yhej82;d>^1CN4F5{|11 zxilcwBVXE9@iQV>4_htjZ+eY8cUscTcZWtjH z1Jc88+*bWa))ZpTwBy!d?vw$O@*WwWaosJ4uZZuJ`lnzC1?aM)GW^PSJ2eElJ|2Jv8w9LIByD5 zz<;3xzzaOu?=#T^9P$jZ&wMo{HP(>zbIluujq@)jubgy$h*C8SL-aP?!L~no8DXTQ z=r4>61Jt&kN{&om-kQy^K61ajOAi&NdH~Dcyr`H>C^A%k|26NK$?m5&>ucJlF2ZX! zr5|b|!bj{p&k8?%2!8C!z+8Xc{mFmGQPAaW6%kyNjajIDsQBOLce0R|L@PLhZ_Bgn z&3;ALo3V{I7U*4I;X zJhH5Bdgep?OPN#RnIWn6W^O-8Yj)aHhX+fOSBADhv{%bx(1)JM zPm>9+k z8u^_w^uZ4$ZV|C(mnE#PyNsegCUR`dyu6}q|7i6V8B#yxDFb9S9BFQ&hhAS3UZqV9 zE$5Y6apSOfzmk0E_+H*G)BY|YIUzxDtrMsCNFs>?djW|s33@&gb+jRUKZ966yO48! zhGnozu4Hw*Tc47Ce1C>XVC8cs<Vx>FI`{iANm{<@Fp zTd(eKND7=Og6SbT5z|}6u9HL(xzl|fLk+oAe_jV5Qls@fKI6G>q9UT+tcT@<&UVbs zcy4v^uC__rV&rsd{!kYccIJNbpuI=|!(}eD+|Hb2+da?UmUaFlRcZrMJ=Q;$4~u!; z7=V}sS}Mf2B<)~&f93@34(l6kyI8t zxX^OTPv14X`uEqJlYTHn*5T0omaQU3$+Imko03Seuz`A+2k)&DxIf03i&$A9SH=`P zb04(UXMFRzL5JT&shlovL)BQXZK&2?Ux{v;|ybTnMftrV&y*+xi>K>TCnM= zxk$IOZpAIG3FpWlX@U*7$c*VYYWCG3)`CtqFZ;#adcPXNehPovT?Ez|jBh?KaO8yP zj7fwOlDw_mV-}inf>_6WMWu&WuKAXKF;;bELJ`_8HRwHjI%4&==@j4t&8K5?;-9CB zQ2loer98Zg*>%KB*i#<6i(|h8u;q)OP2UsG+CQ!qb?6;wDUpg#!nrN5;Wo(JTBRer zSu8Tc^=iC%kmg(<10bs=4JESuoFdvS%h+OVmg#Jk$x#=Kli|w`_b2@Vf_;2Z#S+j5 z29;Z0_T-++p{jourLy0T&SX9>bFGRS4JMWn=Vlk3hgFrx8ege9(md`j|2)Yn`15pj zwb&h$6C?6N5brGmY{k0~Z=*^_MBIzJp*OEJ){u=*QMsv*q#C6|;E|s6u-EO~n-R4kMqnp2lc*{f8f!`8WrfV4M|D`4k9x~;NdY=6(s}nECo~VoU zK62ktT1mw2$>?=^&_kEy=O^R21M?tho;#or3x4+A*D7|?`wv(v&_{Qza+C&=k-lw) z1OM++VuGNM+vTSwPA-{GpZ*DoqD!lDZYl;f5nw}BBvuSpFqPd0c)IW}wtx+Ecp}h< zfiMCXP!THb15y=52ZA3|D>#1FR;KEr2Q!%Ic@=_y{l$OwSBX}VCiex5u>QEs0W<_9 za9Z+7#KemmnyUa5sG-glZ&G5aza2d567(ROOcVU5aUN>s><{@zPR_n(Z8QQE@Fxvk z7|nEBb;G7|L-D7Dh@*ac4bd1ASVlwG0)@En?f*~MBA=*(J%xIPsp>ePVwC4EqihCr zzwVW7VWl4QfXij+%_%DNsO6kX4meNO=cpg*0I9kVN&0B3-rVIC-H=FtP-7)5Hn9r2<%D3$_x4)kUuXf{BW~I4GdjX4OaU_n2@xb$ zj|GHg{X)86&==N43}7Xej^*18t=OjL^>i>ji932y$q_N9*}bVZM~fW26zgk@^n0rL zwiAjB*AK+C7$nna_}<5CAXR-kq|3d`+-@U76#UX+R{ysK@K~`bK-u~+UDW}dGlNZN zH)X#Q6OOXuGC@h!cf<@x|C6r!yylYkA!T&`iw_~7<4aqa6sVcAE9|~U!SXDP&Iwle zmv-f&x}l$5OG2oTOFPRWa3O2xNxRnq8}P|funaW;UYCGsJ`wbr43A%qb#eu(7$b&u zT~l4SJ!5vVCNm`a?i&{z+X9C%g{OnU065bd`8~2^EXLBlsj7d41vXL@apK$R-9;$# z3;s=;MKV?OKBgvnnhaD8sQzpaN5=KQKvGzbD5Ki$0V78GJ6t-&{)nAE^~mm~=Z?1d zfak?J9W+EVai0k>Oaoc^47}0bn^Q>DGQWTA*gCTnV!scr(;hp12|b=tpZO?o$Sd=bT;72=}&=)MR-sJGiRI>nD+lI!F) zDZplJpeK+U+#C{J6kE-Os`>uE4#qlLp1v%Z<|a%)Pu$mEd08`ZXpaj-A8sXN{O2Rz zZP{o;MghbeV2J^5#&dspcBf!ZFxGYg5oG_-ltorJOR%%h6p@ucoSfP-_30qWz2P)$ z*)97MDq>2P2hddgh>Q)OP;y9!+b1Bp(10j)InnDCzT|PaH0$f%Cs;aaK}p>()m|i&lSqQiLI7jUOt6=t3I#?_&jP*$b^AyiLF6_;been)E*SRcs0 z6J<1}Wb-5Ko=B{N(&~4dv16g95d7|%J2Hqcv&rsK{YP@drVyelAT11~r_%4o(XA zZOHnDkxuLd4Xm>qQBCr*SHn4~8xLly(!F2=oSM}=Y!-bNPIUuQDbiD~^FiD#nd$ei zk!9k!y6Hi&MpH|b2qV9IunQnYZJU_Z+PfBm-ELz^2@6sMAL?%$lNGcQsWG*nO0xmG z^>?MlH$iZ6?;_g2#^M-=H83x_4of>aB1Jn7J}2}e0Fljphp^vBnqAP=Jt&p~+m@zU zU>@R1B#?1Q;1`RXUX%pSNCS_rAVm?AH&B)cW^P5Cce2h5f^1vKB2x~4dKW++Ig|LJ z5kORfr8p=LX=CsaYjf=WW1)Xp!=0HSijjJCB!+|-oTKwdvsix)~+kJ^SZf#x_n zPox2Q%esdG>NIn`_;#R>5*noZL+#k$h=~}w@!RcEJL@=? zCXBIq@WYXwFW(b2p1!&r+59^mB+?Cyz8kU$(k{;3gFt+DApJCJL3dV)ua1zm?n zp;ubWTPOZ@Zvmi}{_YkCgfd7;+xybqGiP0_MBiH23@s01vA0CEfqY`13JP25e4L@5kjUmj(wnymB7%gdp9-5u9YX|%xpsci zkSMjYwR}ScC-54jcj2myJSQLL!W!_}hKK{sf^erxy4qo81da?1_$70m+T zFb+sJDs04yr(La2BifRe#`py6Z}VxAg{HSYOtdqi-E!)h zoIPCNCL0-Vv$|ZQ$&INaOK6Kt!MVmv7p%d!V2F_CU6atTHsqM%bP-rtSpVwjW)7)ax)}Di(@?S4~hj{`%8P2=4&?IYzDWpg8UL*C*ErA#AI0Wd78V zlnvZ4TAkSb=fW8NQhARaP5o#qwx5c0s{qM>o2wQkrhTyBJP>b*Klc=KQ$1AUF4zfc zbm6n0`=AU>-7w_h7YB7?z>4GwZ?!e(A&VgYN|_bK`3hkjH1*3HBO#g=RnRR}$cj8! zdK>KFS0~Hb-U#S1FbRK*H+9(?p3&F^FX_;RhMN^%Sm>@TMh4Hx`C1JBV`Ue`t8HAa ze5;BAoq$qxqHkQ3)}1uJ(r9uB#Qr0sYk#VpqI3Ry^mji?XW>yidD>A;3!yyLhgM{8 zolAC;J?^|&Xtl_1B_AL+)|(|t-Iu$1@D{GeGWYxX<)eR9}2PgiYBz$4%a*X z2sL*{avvI)3b5uHwc3paJKOyVvjGIi)d)?dsRe`+jlv{FCc4u^2fobfC&HU9!2C zf{e`n`S%>1o`O-{kMlqeY(!*ZV-|io3z_7TJ|zBN^~^tH9thuBPK?=BI~mmv9w|a+ z7|m-du0w~9AUDpik#d&A^5dXwz+o2uotLuVbGw>*TA*5xNCKyDu4$^ftTr|dcM#H1 zZF5_Ficz<}{3Wz%T#`R*dFpfnN@jH0&#AZxLIjt8-s48C?!p%yKV%Zxb`>nCVpXnLILI|h zHQ$vHn*IEc>Zlvl9ic6<5HmKqR4tX`JB6b=Td3#vt1)20X4t9`!aisw_w|z$DBk7RGnge>(6dk_oZz zEJ=Xw7qBYjZ$Aq_Qap)M3XrnYx*;^AE$J1?9`Lqm)He0)zS;{^RN11xYLaFcsyPI2 zrJIyL>uxWInSEPDb{*iT+UTgEtH0A%c(Gk4TNC?lPwGP4JI5ottO~ALy^TTf=r6K5bcd5KM9q-hWzsH!GggDq3Ch2oE89ZrwwY%&F!9H}%?f5@5M6rs}QvAsrb#h0-J zC+^=n0b#kmMUzxLtbji~Ql%kM3y;MncA-}uwC5r3fQFlRml4>^`|Jb93~JmBq9uV} zHaN&%jU!u-EHwx<*~;YrW1p#a*V`HwtO_gw-3~P`q|lc$BQO9<^g{m5H$~@5>E~7v zl<{^Y28DR=1UxV9w9*hnJly$EALtYMev>g)i172n@K=umRa6d+CSP&fVK?h7U1slL$Wz#T+GRiN1|78~+czmbMKL$0pWYWbUD@<)=%}=0PA$gez(!bnqR=%N6 z+RsB7dJja&l73MpQnR}^K4Wgfu4ZN5N?Sx zl_)|g-`~hnL=LG8#Sch^muN)ADA+-|B7TSaW7~8Y?to=Ly9nFJg)vY>Kck^8+#_f7 zj;>N{tcWYP>OB3Lb9S1w<2AHxak}qg|ASnf?oPhKLNLK$xZ5ahrG6SntEK$77S5vh zy;WzyYvv}m{FVzx!^wOhM5m&MABADjVB*%Ln;Le8)I@%n;y=e*KLnmS>W>!csE?sf zQ{NQZAoT$eHEsJi4CYS_;rR6@^i%~G$#lYjf7FKxQ+*b751$!QImDQ~r~nCWTFqD1 zAJ&*|(M}J)R)ZC-wI!vBop}tYc9{PA4W2PPppDSc47C`x-a)w~1wQ?xfqE&+%nq#& zac27>f~`cy;6I6_D(dUR8fq-O-a` z`Pg00^C4DwDGGmE6Sv&Hxa*`PT?iSd!dPCnlLJC%Gb)#leSqTMfhb!16B?8`1ty~> zo=Y2Y$sTN`s_al6pBqM3M{aW-P%&y+xDr8F^zj9B`*u?D*H=#{2w9g3Fx-9yiasp zJ%#9CN-zW#lx1a~ENKJ!M(3FnBUD?r%>GV(9|s>y0ZX|PP(alU=ynYY{&0j$#_Y-F zO|7krg3OV`vfwt>U>X2C0nckSS8%yMM0TrKEUQGwgiGigo-Tec?+d2A*+qWE_cU^J zU;`h1ij4l{0NSMYtA4Vif`j8_(SGmRwkaSk*u}Ym`%V#rQx=IigE9#tkT>hkjF3%8 zcUc%!Cn{urug5vl>up%lrL@=$xuXIeLm{0*@arv$bMeCHh#<$unU8=J28;o@QcGmU6!)2xB~C~MI&jbpF$lNp zPs4R3t~%fu31v~niNL=fZrO|Dcebz5rh+Qa;YG;Mw;u>p-XSK;>r*!;Db$ed1OoKU zrM}f-R9NW092S-YJd!IPFYV_CZRu z+Ou;))j{~H@2(das|WZb?W zP!@@{i4^q9wal9bT=f2lwc#rq6QlA&52~RVo~A=cnyx{AdZXOEpdfgke(V`JOAj%r z>|O)-eF??UDaovN(qiYRD`Gi8oVyzaLWhZH<)hbR#jTRVORbeYWP@1pGyyB~ zeb6`bxhf(!nt?(x#3`gR77_fc zMR6Gl@WY($Se1*@_pv5kmTz*oKqx)2&Q(W#Oa}cYXslgpOKocnrM?uRwpHp34Zrl| zXKzk5*A*%&0rY*E?caVC6l$;B;w^E9ve^w$6Aex*(7p{FOJIQO!3RV>Wc*d>rh%a% z2mOPKFVdkn&K{ANxWE$c&qa0|q24K8?+Qkr1|y{9&lr%D1ryN{AkBlr-$!#uNwr}` zCY~I+Zn9P=z%!2ObH(hH8zaazfgfm1hwbgc54K{( zD7+UeOy#j_^?5(D`3NuLm)e~#edc<1z;oCKTB}3mhSE=}Tvny~F4={GSj?(`caF#Bg%CoRhJmF!;Gd4<>hk+!c-vq->Sv7RL|tFOz_g1c zDb@u>82$Zr0mg7T=YmLT#1Z>tdM3@yO5g6;<{`pYV;9~(DrPm0f)D}vN-mUY@Dh=Y zBJY%70s5w)Q1XU9qN%$S8n$Ar&*+EjHL-`DfP2ce?Y%g#sTOeZ3FTYGpn>*paD2_9 zvw|z=uR^TdJm?Ec9%~_`>>CGY26+j(nd7%=g4uL_lC4)}C6Qls@w9s$DBBrslk-G3 z_5SC+y{U@G`YTfuXe9CygdqBz(kJ~&jZ;5#`(5C2=u6P8?|~f1kcBrnQpx>PT?F8khJ&OG z-T3$Oi7PE`<{y{$lSjXqDmYnh<1YpdEy_6EBpjJ;FwkN&TV`IrM5vcOk6lQ0*54q3 zp&|B*6*5V>5#-%#!p*8Nh6H0llF{1%D7#4octw9hM$Oe}-<*TiJ|ovsx&eJB*gte$ z-SdtRu;AlHV2e($XZ$4aS0AFiv8+!+B+KF%8u+U<3k`9J>@FL0E)9ikGPv{qo8xzV zUalD5Xc59-VSv2?tyLM{JUbS~l*N#Z(txY*SN=$nP3tbC3l?LGG1i&1>93?3ZKTAK zU)AG5`_!)$;N;F_2W5`*v1jEeL^yvZEg}Q5b12D~AW5uv zhO=F1UUcV&z*4|Q&kcXbOvsI8i#|4er0YPv8xV#8r*!cRb0J`8G0mhjzUEe?qF~|o zi|o$E*IkmTTvUama@@V(+FjR=N*Y!s>kOh$HvjVx6M^_}8ka!30rj~!!5h@9q$28l z<>0y}`kW@pNN$g(alp$BTHKEEQg{1v`%ps>S)X<278!d`D19`3iNQ%} zaNZJLOokJg)jv>ckF($kp3jjB!&H>`UZ_tb#MkDyEUb@hOnt5oFZ`Z5lg=-|h3W*{29;}c56@tN9(|C( zs{Q)VbmJ4ZJmCMW>Xj^eG$xyYakGWK5=hk&Wy<}9`YPrJkOxwFlCngqT_`%MVCMkz z64jerA~SNXq=f-fs_3dp(O&`-OyhI4F`$hanX73jZjHsb@H_Z`Uf<^;A7s?@$7%TX0m#{@h~&Hy|NGU#$ptR5&~J<^>S^{F8fMN-=AginNe~ zsK$`|)qhy^3GkQYxr$;gB>ZJ6jK*=J^*?A|5zE#tJRx_=Fx0})zR(17Dj*bDNq(rz zpzJ7lv;IGOrVsSZEMYth3)TP%mQU0ZlFhBt&0iG&!S{fFnSdIli^si~|BL6ez#L0v zYERgHCN+r;Hn4UO2)h6HNw7@=PK>X|D=VxuR9q4wao5_cFxhKi3{$H)^^a%_xL)G;%9I&PNTAh% z4Be7`PC-UG$jB3Fbd_Nu_=sZhBO6AUrgB=$G;V_G2g)b~08yT={o$4ja#q=W zz46kjBZXU*ixsV=#>6mPBm^I#A)) zj_`cxDTs=&K#yZD`9F@%!Y`_?3FCL^?pC_HMY7_(qfn`}z=?-ZD z$pr)nkrEN9r9lOjZg}tS{Ri&n?%i|doSAu^?>xq7wO?d{*|OCb1)h^5#OCEPU?|ip zmx4d5uQ0r&*{xjHnn1U9)q7d}cR&e8YRtGwy=6XLpsXi?3UP%ubCH_G&6 zT+zQS@{G@5etxEaW57g%vZXfl5KGnbw9BtM6yKBT5u8xhRoKGxQ@6*(i#Yl#I|~>qLCB1K690 zhc4Uh|8De$pw*k|o<$zrD<0z&g+N8^A~pP}F^fo6SL z^pj!*9n#S5tWqj^`l1NuZ{&lz%O=9xY5$(+U%7nT_3<=g8qz#)KImmqBoowS79g(W z^|<;(J6M#*V~}zbN{dA*wK#SWq5qmMu8;sGF(IFH%=^@}pBd<+eQ)Sz@*^H!?Mel! zr<7a^mT^;S$DvOWEQt_D+?k-zB(|taZ%^C+Uylh-kH*w?fQol{Qqwb2*m>gpkz#u}fj+=X`ZSCbN(FD(>ZBv;17OG|j-eI~0AaU|g!SFMzH_;`4vZsJditD0a>H5QR4 z*)H$D<3h<`o1oe?iAc$Lz3m1z*o*!!32-QY*FjZWtUh3mZyyE96>it>ePe7T_YrC8@RSML@4wRs1GT(tBY`ZA&qJvMv%d`2O_b7Vj}=ZLu3qO8~X z=_pu6wl&NkC=LWqy7r!o?a&8NW*!o@5lZ1QbyAYX`mJ*kK6onBm{{s13x8%P@qt$< z+E5|kXnk@72ou}cD?NW10s4hU-}!mXE%ul#>k1D9(^>`7$1P)*QS3uFFNH-NSr8j> zK|n4c=0DNr1JxwUCcR+^gJ-Yo3jcg@RExXt&LzhL5v#720CwyxKK!~z9>q%;M;zH6 zdCb&m;0IHGj1ZT@gNC`Yh7?%w_+ZHqCQqS4$B}L4>b0x-FluyoNyo{XHA$BT&*ppuI{0yo zaXX$U{u{m5a~SNt^+0p2-zC>SZ2{}ggm*^Uhv2K2_Kv4Kv@LTuR}bGRv4nk1S0bEE zbZP@~&u*+g?zSAIl<YP4UZbEAkEb3Ycld&el%e0+Nri{eDY?m=6xCg{5mvl=-s5 zHsnIYr?~TOcv)c-fgE|G`_dtdXO)MebTcYHyfViU-V1@&K}2;{L0+6_Th921MNZNG zUEi^5^BT7oIkE%4@P$Zk?+1?d1u3fHv3XC!@K_rRwWAgAu{sJ9JDuuj<~m0A^GVst z(vM{yjVHEEX(ZS%`GM7_FbB9fvKt3edw934=y~#O%E7^%6j#YD=1iKgQmxGv0+k1D zX#-^aIVre-vt7h?obJFG0d(Dt1$X7AZLti;bA5t{A)&Jm)gIq0H`yYPFWzq&7qI(1D}tM?P*lS5DLup>nrXm9@OS$-oQ z{lFZ23>)*-z0}-mg3)H-;k7qv;x;kBE+Izo%jCF;oBk9`Mob8aH2av(kl&PW^C6{f zQD!~5vOk|ZuttCZHCR{oQU-G<(|K?3W&KulmH+Nn*ea`iMc7Zum)=^lH@IuTm-}hX zA4&=?$(SDep>Pin8MhH719)dcGrZ4`(vY*dX_=!U+esOYl24gYX$IqvWX7+&iJ;5X zvX5mBkr6Le2{W1^CVEHx7|nqXiUsL$a%iB?00EPA(c6}~;2v4~gb9+T-vOvgQfKkg zV)h3?!PvU@@f2G(6cKu)N{n=54_}a6$tN^PFN_E0Nlwn z)N%Vy4{FA6TYql&e{bFq&F*aWnL8=)n)^6%TYVY|bmR4ZFN*dTUkgBNwx9|7OACVG zFVmMRXP%b7MGlDN44=u%V$dy_Agry~tHnLn7D+Y64|Gs%AL{c0Cc{o*alLQcU3(Ug z*1mAxT#ob92qaUrP!R>s^2wXAGvDFlLd`dRYn)btzXekZ?QbvMNXiQIA9qjP8)GGI zWHJ3x!pZ*Uk@071n<-}{UV4F;3SEaEtm~%}Ut%`7uUlDxR`Ii6IZBg+=62w^5YvAi z&ETdTC|Q#e`CkJeqs}D2H1*@3Y^SCvsak{cr{17S{&&a7&kn#`{#j>sURP<;3SnP3 zST);!EB?cp@Q5XlWTQr?gU5cwDvnRZc#7D7?X0@po1q)bw%UPQxWA?nzUsBh1NP0$ z6tPotg4*UNjh_#e%m3Yg7Ze+-QuYH>HgdC>$w`l`Xm5vp5@(WcQuG|$f-yg4YBBga zl~`?nX_I19NODX8)J~Cd8iuf#@*6yd73(S*^9uypKy_#?e6aen?%S^5xpjS4Wtagr zR@`Bo7HmVYEyrnS_|B$PH{Tz2vr^ok!O-c(vsOvk?-`|LTaLm*+}nIwy1{^uDinfd z1nBq7H$+re4f>Hwt(QRD71Z2gtN*eI&U}=Fr3|)o03H7F+jNNlfUPaT)|)rx)B4!<`8OPaxPx2$tG0)L z-etmWbjV3Z2)-Wu9|c;Vf$0na)jx$m??17QZz2i|*4E`ps0`VyKV^LbN1yJ0M2%rC zEE?Y0;hNiWwalXgZY`ae7HcA?BL%S&1`uJ1*Tc??&}`wg$6 zWjQG-+aIl6_-xk4yaUUHy$JZQmpV26w(#5@bRfW7CF-x^*|jMPq7?4zSi50-FQ}q2 zjf|spMR$QUZqrF)QBlS~Kn%ubOkF62eOP)V0CW*3`80GVG)*<&&g1;4`C)?uLOwyaoVUA~R!c*h4dSYXYl&1|I<>05$%V)?~1jCk3MKc z=u!oV<=X8n>h2MaC03WTp40$~sK&j+*Ts);?Ifc9zGdY*K)n%QKARY1VV-o!N#%ii-&A09VepcI z9@eCrH(E9xsYtlVjdsKBn1#lOoV~u7?Z*#jn)Wk;M@|%_)e&M=1#3IKD0HWvavTh~$gBmm111~UqYcy+9{+9m_?&dvtJ=u2XTKW#3kvfl((JWaT zr&1adg@^k4dPCA#&TYz*#bn3?+r=@oXMCYzEU@gh9vmzA2FO>8b?m(5BMp7z<4PRT zc`hrD^DBK$Vl49Edvbie46)$%7*16^r4p4@v5NW(XO?yi!s47#$&uA4GHm4l36Lzg zK_YHBxMLKo7tdB~1ktzP`=N0Wk|ofhs?D(9k@)!Hf+*j&>TXz`3`5MTsZl%a9?kj~ z3a8>Gn2a$SQaVyh6sQyU{pwXS<{J)8%qt-hN6%VcN`l$qO=Ap7E=NeNe1o-Ea|0sF6wsfays7q4!=o$7!LwtvR>cra>StB=nr!98Nw0UIej&hsptov zSgkFZjl{p#;O2_^>Mj2m6h=ZUVybI$UKuTZXD(SV4_Z))poY=6cs5z!Omgifd}W$T zf|Rr(u}Z+?0DR~pW&RM8=ZZi_7f~Q}s-y*H`#V>jOK*y`)Q~AtNC>;RO$NKkhgsap zm-8j#dKSya4B7$?1MEXH7Ip!Al-$uoaBIkq-^!~`hUcoI&-!pFIs4a91FT(!Rj$=G zvLfzhb%qY2bCt?|@;p|V6qxgOQE<%{y%v-C{=P zlWATh?gM}7V#+ezk#-Xn)Fe)oETQim(}WRxEfQ`QK4)DknGssNBBxv$nAbq&cfk_X zZk(ia#(3{NwsJG*xZfwQ_I{?n$P(6trxw3FvOkp^d@D_T({t#P##t*&!;z!dGiIk< z?%es;QFT4^fj;z^>6y0|e7U{po3;NPm(SLxiWVG=z}WRWqG&e?2B+!B`=3h$?_FXF z&a8k9kw86y9~R6Mjd&!Q-Z>vVP272$o~4ScKfn7rG!I8SYQY(91FtuqKP0#54>g9X zOH64B<6=qrElIG^s+aXkOUH>#Q~D&h&}Wmp%kCpx!c1Ld|BBsG*4|{40WO`;hxIG|a+jP(K{eMZq`+ZA;3@qQuXBH{zFh?P)S05X>J<87z zqy~8lCk^wtFATRt%(LGbB%@WuegE1uSnAO~-8!#GP{3Q-*(RB_bln(2$HH$&0;`_K zKt2sH%~6)6w384XTFWY#syO8Ok*R-;z3q z4pk3Z%{o{qke0c9_eajEwMm#DxINrHv-9Ee?k$A&ukNhxG3&EV+a+Y% zjy86qG=bNj9~FUYkV%V46m#4t!m$e6YCF7UWOUxN4qSXh!SPergSH&o1)ueQ?ZvEOZE1~rW@>E&52-yqSZek4npxFtmCQTBKM`u*AH>k5o@%qZ zJ>(6R$#NvT<~_roWF_3_(5pT{4LoRY_9rL4P%QuL5*6LYRd63)+fENg16AQ*c`t@U ze4}09T7SLteK|nCG5^64$3|SdkWVP^2~qPziG1i{{7cApp6R57BfEq`?)Mnw$XA^@ zY(ris1}3LcdDqB04?%0IjQPGfd6eR^FiB6j8B;+iAZs=);ItbUbkbrNxL_rJC6-Z& zS9~b#n_kGVS`2J+34oej+%-3K$IKeoDN$vinekEVZagsThp+ccK?b&Sr{IsYtT?&W&`~2qcKmb?~g=$qc}iONVL9s3L1TQAx-CaJjVRJ z^9H6QqnsT8o4Hk*o48>O{#u&iA&y>vX4{h(T#T^%rC3JE(F;n?*Q!38?M@R9(+F8!6Gu>DcTwsMzG>2b%K9)~0o=^w07$CNJKd4O*ytl*72 zXj8H#6)WlR4)687Q-X^xV0VPFjG-u)O?evkN8ZE}wci=x6cFdq8U zFK{M!!3LLy?smWPFW_Vc1>vPxjxJsdMxL7kD(^ z2x*#Edz%Fs{C$->NkvVnO6)<-W6m)lSo16-IQeFgJEqY6fpRfboxjG^j4`o5gk*Eo z7MYLkSyK^^cP~lqOS9`$mMR|lc}LJ`&^nNYt+-Gn@m$BsAG3wYm(QseJRO^`-8R;qXeyBquT#QmfD1XMu$f z1=dG1S#nfjDG~&`-aX=0en)nfx6z~6(iSessHTfM^$piNFW|$t1qduFaICD?s{eZ} zAGnwdyd05XB!E!du6s^X4h)JA{TRV;JGQ~=`N|=IaNpoq)XdYwtI>K~SW}S(Uz(;A z?eGi4fCU)M5+GI|z8LOcKe_wrxyu#Cn@QZk93}~^W)ghd)*7_@d?RJbRi$UORabq^ z^;1y+7qeYayT`&FwzKKkC(ua)4bwGxDekPC4hpIHV2ULjSDu+qxVL$L?cc=1)sjRA zE}epgan7F1f*%6%gEaWi-l~M6vqK57PW7KN1fkT*p~3O`%NJh{zQ8nMwZ9}YXS+%W zL7)_qwePp=Iv+wu-c0=~K|D?sS+l^T)=*V(Qb@iU1QcHei&Z!mmBQ=`6p zUl~Btb3eHahhTHx&FAv3I0|frgP=|c_hl7o>93Q# za`T;%j@`LcoMMD44{kgKEXR?HTHn{eorIN7p&|k{)Hi`O%EA$%7T6Y~nObL#lehjT zQ`7ccP(SUM3-%DVb@N>dn4kod=-;G%i+sCi2W#sd!4ZGMbn@_uX|mSiOz%PR?pwjy z_BQL&D9J&u53ZmfB8Sh4<^c7fTB&4($bOvUsrZ4uG8XDjxley5fAMY7ih3H6W6SFs zj)%@P9NH0_O!)BLd@b-BhZ;ze=@7v9aiCl8T0ql_?Z;hqi2aAiU<_K{5G=pK2ZC!ampES?DXAVxwD85eV2YGtp+Aq6{XQ*|JfdKbl7Pw zDZ!2kZ%oh3OG^iy_(YM5b9dxIN$a1_<2)y<{mdUZ0%K-rCO4B+G((Vbw%QkL#kD4; zE-~sf&K!+dfd=mUprwLC5OMGb*gH}&<>aw>s<_si!Amx$|G2(D(2piHM3i{yBj_`s z7T1m`Q9Bhv9D~f@5|~nnP1w%>jf+|DNHAh&9i6IsE|B9OX@;JrN^Yo0<*57rk{)R&TYTlsUNe1dM=|Cl%FFQ?=#ncP`@toCzjCjtH%g!7H4(Fr&Xx&h zBU{o~T|$t-e@>oF&Iv-3VIq)wX=PQf;pXIK;(IN%;gqJf8%LKCg_@RyOM=Ys61+1Z z!A9e|0XKeXtqCATZ5(<{95 z39p;q%Os5yqbaZ4@}BD{CGuB?0>$U!0x<*Xd}olk8WE)ZQ171HJGt-CYoOv{RfEig z9PV9AKD)zdv+8LXS1mnYAVpAyT@YJ)tihNsD4x$#>A5oS?nw6QME66YXpt4diA{5+ z$t?+q%R7!E+;+Dlz#jQ^yW!@&Z@t5@3uhgUoZU2VCAekYBz7 z%6Sgj8kzQtx^jEBlJR-7i@DJ*)ViEY&q%H$2!{fH5By?-_9vc=^DP)wXIjS)8Wba% zIkRpI^u2UxXl$RsKlx6|Jchgki6l1ystBHEULVseF)#n7gp|+x>0*Z@YdY$UXVK|-k8tuj>7m1^Vfw-vkpco{1)B1O zCL{m@vlC(b_#fQCh6kE^pva&j_twk8?ljGIfqkxxO(Dv=+|AA5EJ>2@=(V-i{lb@g zkJZdu!S-{=80SI&aKg(v`KfLU$`JuhP<_Y-OKq8eOFOdGXVIQ!eGsdt6M!S;s?=R|M;! zqmm(x%j%%oK>K;R5#*1HF8hH;Vs=gIop=Udo*u2Z@b;YX#}ratfKw%;5w?qXDE9 z{M*Ap{e?8EPafI=X>-P9FK{vKUu*N@qViH1^nKHI{1zK>`Q_Pj$`cy+;}Ea5?yq3A zTLL^bH=6Rv(PkF|PfDV_`b8lsTs^GsQ;Yt#nZIODRtWWi2iYg<45ycoH>G)I5GW-igP(wc;|chr!;^Refy?#cd^(SYIXrevpNh&& z4H8evgN9w+{@N5sCPDGU7N}|=?+{q!QTwk?GOe4!gt{T@u-_EN!BpKBBKUJ065`qN z{O0=flvLHK>N3v=&>^LZr*0qgs5H1Q>72I4KvP>*j)`d2`WoF?s>=~7*#`>r?b*iS z*0#S|*xh8kf|D7n2$}^wrxIYLVM@G~X5hxu8NsVQ{Jbl)^ic=)j95uN2*~GmFFh1& zYGixvJ&?&ACmxRvbBqv_9LRs~tXudRi^Q;lzWF>#gD^@`1IcAYN~PPP9yh3I8v}aE z{&uUsd*{5>?lVkdCib?(uVf+oY^9ftvO7OtfQH8RF z+uk*Fu1~zVmq-I^o|DJ`lqj|nm=`UpE(6!|K!@=oAvJ~NF)@SQ=bW~TO1IL~Xb}UY z^fX95k3!pXRYuuA?UtpYPCws#nG!_c)00o&;~AvA`&4qMS7bqtwt&oo4v*xI)7Rgq zR2sy!zjgiv#SuAw9*VI?)(Rko_6c71o<4JaN`QwirPZ$@CGMeZA*|z{XG7ls@FJLy z2!IBC%C^9_J`(_3IVB};5@3Q6ljCI%4x)4odS|veBK4!F^J^MX={chp4i;g-H5xQ_ zw8R!!k(SYy&YWG<9xG4FPdmPmUdzBJTgeaaF-x}+Eya<%CuM<474!nDQr@pe^7YBB z%7yLQY4Qa%>|)l7RFipBruLFCtex~7RD8Am{KfCb>+lz)p(|Pg->kPjsczq`B|(s3 zcVAdNaA(v#Ou?ZS5L}t^BJN8sgd3Fa=&L-m{+vvTDfx8xpalm@4eqFUugn;-tj8ij zo_|HrP8l=hWtMQ_5&vggWb{~he<@tepAJtS5b167*k@7#FTbLe+VL?~fub(?R}%~1 z%Av=eynRANFVY0o%|B@MOmGlnFesS5Ms3l~nnRWG2T2)};?&An{BiLgB^mwbzcI1> z3c)!3p20n{@UZdDFzR^+(4(935nq#50?1Kwigqm)lH^xCL=Bh3 z*vPjX=JXv{9`ev;uu_=)=@K%O2EYadMTIuT@C*7q8q5@?%QJXZ(vVAjG>@OzYcs_2 z)x66k!F>FIDHFVft*I}ja^si0qyJ})$`_s>ZkSD3-~_grl&{4IPi4sF<<|pFARQu` z2A9oxEzaYF*jJ-Jebsz9^5(0KP+T0VYKs+5O`-aIL7rI_A9odjFnY9XHoaJGPZZ>; z3KW`@vFnDt^Hnrsrgm)oS(nel#Y&R3H|M0Yd?)--^3J{L$6d>9r#!{%7ANGu-q88} zyyE(6iU(c2VlA+>l#He_EQ%lkS?N$9F<4@9cK){Wp5Qej>=Ng!yqDyI?u8jnN$ixh ziShYi5}>lKQJs{0h+2UaMcu4$PG|9_bUFntZZ3G%+thqz>x`+2UtWs3l#)uq( zKe_CLWz5m$QY792(DLsHnE4ZZ=%nwzrr9BfXiqE9vK9g!;iouQ+AmM!zKuZ6dnDJX zGT)jDUJ0CurB`p!!Q^mSKg~(pzPM}ACtGrljXLFV{hBZRby4;+!(ROjWu7XkLvE07 zZ`yrSwEJhhs?$v9Zx=phM_x7KP9jIZ?H&)yvoZ+ciYN-KjafkrgiQY+GB`8aNdu*t z5?34lD3I(G6SIV}w|R@$ktK%R1_Z5hYFXrO+M@*U^QvvllIE^AXvgdb(T0$#yA4%Z z)xen(Am@8$!w2_%-fF$5-!^B=+Rrlbng-suUW?!6GGlGj9Dei;eoPa@vGHR+WXK-< zrz6m%H=cLETRo&7G{eu1+%*~q7E+r`yz#C2`^)=yeC6X)GP5nUj?!+)MiMW zxF5f*8*0xHXiuq2udaw0O*{0xCtUo9BqigQ{3pHPWjdJQe?p1TrNGmd5POZD@;#S83CRc-q}S)(E!)lmU|3t;c{osGRn%GMt>=1EG$ zoXRCm%k8G?o&hkCcsCu_@ynVP4;3pKN9MOTUDl^9eqnr7K$y^I%ueq9c|ho=-#B@> zU3e;jJ^14vHY55Nm3gwXL1+M2S$Q=I4wWdfwEI4*In_D?a$JJfTZAb0E_8nK?qmQ^ zX_#vpd1Gbr))&Z-1rUivy%i%K8}x$$u-K%R345>>=e3;Oc>nc9uuZ_;^-~ba`P7zy znvx|*F@r6Y`RgxYHGQZ73#x&iP`Bi0WxAv>{!_jZ``IX{n^;fFt56=^Vc8ow^GgGi zSkZq$X_*20)L9%VRV0Jy%ivBN40LhNK(6H1Ebbx^lo)&rZTaB?N<%+0D)f2p>|}Vq zmX38#U)6fxR242nu%N8?Kj6hif9Tyj(btfWJF7Mqrz&ej-~_4g^P!T)HLyg?}UO!%X?rq zi{@2r&^~`g*FDVD@LH(oXlje|q$YD~zJAnX9K?bnFfPy{$!qTMeFMFgBGqkx$F-7tI4NDKn)&NqNQLiZ2(V47-8~&Nk&AL#GoSEHMSU33#|~%Tmre^ zk$-9NQt1?biBL|4o~+|?P7(h-*|#XBYvH3x53wyH9AuR99b8#~b;c$o7W_uz+$qTf zXzlZh)6ms{cGdIF1E(OBuH5}vRa^`?kh^ius8dZcSfWz@W)AlyqG?4YYGam%txpKX zD2$dCyjBJFMlNT;s#hPvyA4DYEEFvF5#FzSVyRupumyKvLm7eW^tXZ~56nTD$hKBz z1x1AU62suv4!<40@WUlTO277jZqB(lMyvl+;-Gs~>7xl3t%PkNq^O`}H_4PHS4;g4 zCa|BKec5vl7iycth>h9yEzaA$*4El^HUF}T;9`v>nH6z$yl)g0i_+PTQPw=T;B~T-Sb0#m0)M1|GJa!*FPXrBCtO=_AGFe z=QS7NKKz+w=$T1m|eciEgCzP!pbA$ zn3lOgOGYxNb$zh7j_iG%NBDBYv6dVNXmMY>KB>Kbysh4;|r@&`Zfe4OhaNE__FQ7|lWWzIi$$T@&;#*m^87R+n*= zi(Q7w;qfaSQoy6J{2`$fYp6T-0ZDR$jZUx~ zFQ~Y~m&Er1eHbCUSbuWPIPZG9$>uw?VINT|GbZ$^4Zzp{-k>Jc9<(fph8D-6x$^x` zAHC}VCU|`m9z!!VQeBg)HYSrO4k#fNqWo~6WAep~ybi$H0Y2~FHWut%3G00}a2k9^Q*K6xM!|FIA~~YP+5-HWIsVU zJ4y@x6HJNeOgiEYF8q-ixb5Bd1P5yi?~?u(>YwLczy(`+P=y->)M|v#zDVh?owloF zxR_!asMgN=Hr_|Yn}-8`dyRayqWPZ5=F!>X@$({)G|S{{hyMGVR;^CNf4;chxxN;7 z3k?Si6xnLq2F^>hM?F0D=nw+F7&+Ugw`7J(n&30jL{gJo!StEhN@=;;;>^_`78M~lLqOFn+pHd$D zDsMxQl_6>_;>^@@|CO2tnEKtZ;<WK3Dwra)c9;z6CXXO=3>?}FG>tM z-f^gyzRm|d9=I44U@>|BTTd|k&g2B$DmkS9F{4A1v|Hp?sv~ZUA+xUX9Y*vjXnB~Y z(@GT6NdhUBFR#rx^&bC8tU4v}X*h%%ve8UsuzfNUhi7!DuprR-Rd2WM^ zj1}3Y0d4_|pv<6oDoduq{oh<2sRgc06ek=;4Em*KD3l z+u7mQz~?rLi1JWigZP(GEX5G7a%ZQ;LNjs^G=K$ zJ2|FPrc!4r6U^;K)^c1RI-)>#+&^Jy{zBS4-@wZjvh&CI1I@e^W#^%Xw_bHmn5!RQc+NsLP7#(aw>!^%T% zx9@$+n+hzck4#A`aQ%Ugy#y9jc>{}_qz*0!_vT&d?Xu zwcwiGpCE4iFK3(z4f7)&LH{icl`#Wr$5a`*j5s9dLIvrm_N15ypet>^(HTRY)~);W zFuMVt8)o9zYC_O*2)QDMJ$%5)w9NOu^N*L!X#o64)9@5cdOs2&$6Xa7%4tK?Y2xA< z*!_W^cnAlnn;P8Wq*U?=Y&FAd(>LAt@EVJcUI8F}P~Ca1))E&R0@O}j8)Qu>K+G8i zh8{zdl*dME4XR=#5AjbI+YLX`!B=>@SUVv1|C|qMY&C4=Xt_AY=&BDKfLif^o||V} zzQBKQRcB!V=TbLu&hazkSQZPy<25@N@0CGZIksi6*}eh*&C7wj3$-ZLYZ;x#yqsH3 zKv=u=>HDcOs@%}i>)}MXpzwD`%F15A7~|pu5NP=kxy_64vN7w+pOyhdq-ldCVqYY! zHB9tn6|{`5$T2mc~f>D>8yeejx-mfv}7agXOOG4?qFbs~z<;zI)1_f{n1`!a~z=b^vENE7`nj%Mx_w66z8 zJ!D_NpFK9T?72+y20fnqrk|Et=}&PwgW!@6p#>J+Id)9TzxQy@`oYa~(i9eW&~QtI zKAv23>h`)hw76Y5u=+A5OegrNFGO8x-jE|9tIH%i?K030 z*Dxwf54j?NQG(PB-STHI%m?PB&aiX+f~T1(aR2kzD#+Cf@VI|7yng%@eX3N#rHcMO z*KHoU?LBg&Nw7`wgH%e^T`il88rPbRZIXlXxoJV4Wo(?l>@^+MYW%@KOE)bn9RFo4 zarj3Z!MxWX9)P0tiVI{49%Op~$>1?1ZX|8eMh=FcAnD`TPeB7!H!DjY+4Tx}8lLKA z%WxRe!5M~plgw!tL%=7CKn*|+L1b<8jSl!^Hdp|dA)Pi13tJ_q6NY?u@`Rb0LFy{9 zzvTKIpzpjN;|sZ!2PkoCE8n|FNTCzF!#twrLW*q3?0|DIDclgEh7*(w$2tkzIh3df zYA{7%0LDcVDuGa*zjLYmm*y-n(%F|zXzKlBRp~lovMif zk6HEf|GBg>AMvC`5$9UokoNoCjj7>$*+v#Ze_3~Q0z#@=S3-=iNNl!7x-G_&Gg43~ z)e4Z~s_g);Fdzd$RoE9qSlaVqj32wtLtb`+FExl5*k%JB)}Bs)wjMQ_gcj#-EvXD} zuKXs*xj^B)v$x|81a#35ObuX{Kt1e3-$aNZbzX2K(Bs4hr|kG~AHI7cb+@T*Eq2D6 z3{!-WrkR?&11MSFhPZo&CbIMfwQ|Ex3Mq2 z=2sWvai2lpt(%6P8n%+Imbl`iGe{(*L?x`&fO%c*1u$kl`j<3j@1%feNgW(2qsBs8 zk-jPFT=Gssp4TSzZ~kcG6oJtael6zWQYj?YdW>q?&w5_E^g*E2;#e=y^Zsn95_`gz zd(?aTA;aMVL)AbDNG|)UL5RPNSa_!eYXsODQk2I+fuvyzlF?4-Et7h^TB`HYeENQ4 zY)F6gqXs_M*C>-`j}$A$Uj33?46e$^y?MPXF%fvr%5gH2%99YCzBm|CsPx(u*!$`h zIBWv6UXt7UmflI3EC2U)-C7$09qjyQq8qH2h4}T4B=9vkdUX(-ni|%OW4G;>O*fm} z`nDs__uc+#Ih@&c11zbiz#hULE{BTi9yG*fP6i*iJnt~&>(ibZf=$o_E)>BgATZSq z@FsT#+|&0qiC|>=h$%;xXt3>bTzjZ>$yM5Dt_Y_Bat*)qOK7=Mxf7_LZg~P9pFk zT81NW#KJrRss3|{%gG34mM-Zm85XwDtNx?u+zX(Dh|lG2N$6{mM?M$ebN%vySkxl{ zy5fKbBtx)<+>3uk^3Lqewe3HfJ{ggqDUf>dAM>ca%$dkU5Yz{7)_%nuQq8^nqn_5pw8s zi&!=s8PH^5!FHYWiH6`*G-kb-a4~zCM*Lp{W7h{lAEm{t7?oZT{n|XHs4_e>`FboF zu|P$~-He+fO|`YZT4&m(e}J>cEskOI9Tocov{(eFIUHf~jM_XcjQ5Iw$Mgw+N`-6; z=j^jDjY3>=ahus|ixbS)uI6cKZ`yxN-)0v6lHa+l0tpT>33c-q@3MAl<7k;(2)6H& z>(OFS&iTbSMLRY&4YH6nnvm@!Psr7mXfkrp30?&7CP@B-+qO4*UBc@bE@q-0f?t{y zuGKvus`J@orY|FJ-|=sMux=IaMIq;Jhr2BAKqm`BVxQN*FOX~zK{1;+VNv*DQfwu4 zA7lV(2LBiBY6;Pyin;qNMgp~3k5vQ4*}J59^SR3f&$GUBCo;mx024y&AyWaCgQ)Iy zXfGr0Ai~G;c>+77EK>nFLGA5C%^%DDL@5> zt*RH(skX_g$g$y1Ay-TjNvnXpAM<==;|j-$hTNUs49`qQrtG5D$?=ieIg zWN~5v=#beEK~4tO&Wg*-*G!-W8&2Rl+*WDNtiZ8t)gH@&JD75F(0Z%$ZQ(E?w%hAk zb?JCIMz=Y5Alw9_ggZF$x@v;J&EV%Spg&@F;^2>qeN9ybE=WZn*Z(VHi+0R9WN0TB z9O9?MBj_&d)qwud3(s)P z8b?nP8ABcVbh+rXazR$6r#Kik;TiAJ$Xa)p4YzdH0SLYbvec z7U2Wo_!t#1>FC6yb{q%hz~()`F+2(I9pL``e=I$?OAR;6E!RuEn&48IZOVUnQ->wK zP;Pi|yD0H9uk>3_IaxjglOf%@kO5qQQk}m;bF2Io&+5D&TmL=B5H70LTfmrmv%Fqq ze->9_ui|#+Rz^f1P^Bhp=3y0kS@`gQSy=Cwvq!DF$Pqv0Jl9NDQXU8cIcCRhF{zR~ zq4kHxV2sN0yRIPdU`N5jjyFB#TEb?xm)d^{UfEFbKH z_ZV47jg@bKo^c$kE;FYx!s|%iaxdGYQ zW;XXD*He*{V{*a?5dm74-ruv^e@nO*va?avE-u7$pO#SPan1RPZb#@&&T^h$homZ( zLk`{^sRVyflpe%t>v?onxTQ-hWD7Leynx$jZ%5UZobihq(5BgF66m4n(n6;=x?X>& zjRY$!@Om*Dl^sNXwfo5+N+2`A6`UM{W}@Y7|EWGl#CG-bI9X-2hL95aYcxCDQW!r# zn!Gv|?+XNr4~&KMcGp~e1+SbFdoMY~XHI*9M?~7bI+AhhL{QqwZk>KJq_mA$yC+u7 zATbbh^zZjk89V5;sGZmY#eEGn#J9;nE(q=p;-4Vam0i&w4#Y2(I(t^_sM1)c^%M|Q z{u5d%;)5G9;>}rjHl|BX6|{%MqVTSV7AV9zMgK0I1qpZZR?)nGw347Rnj%5lm9^y6 zqIez|j1Sff@R3X@-{G!C5>12yXP?3BaiUDdEUX+EK~ow!*PK&vfIx_CcvBswL!eC* z=oB0K?9wE%n7>P#;LLH%djTj`0bAl34zhwol??_9JRp)2uP=dN+}@X=oAJF5Co({ z1}LcrNOz}5{xpLW_(b-f2h#MMef~@Qr?oD6;1xSS zugXHjW^&sz7OIvW=UH+)f#TxFA#RDLF9VicYmdhCyl>a9B5vOflzsK04(0D9Ip>R^ zn_T9XxhZlFPG+NGx;J#gf8_gX7SAFBX7qiA++(Mc6!h#7i8<~1hr5HqkKjs^{&Jmn zxEMf~!{Er@Q+E#QFR(uij!0eT1|Q)CX#)nAjXL0jtkMQiqOiE@)`3G-|1O*%-0~;k znj@Q@Xh9{Yn0_D~$AP-jP%E_E2Fxz={YD0!A>Os}|DB87$F2bUp2k_HqmHBiB+38u z^9`TVsYy#&TLyi0n&fulK=Uvh;|p_U^y5H^6Z{*9ZRTLyY(T8ENJBYB9XQi;1+5US zNiZ+h5v--)-IxP6y`pV?dTcr6Q2XXeZrzA$_DoxIe zOSA+#272J0Bt8|#Eu3oR3mqJI2-MI`2bBve%YgeLNz~$DtKN4`oYpOzNx?dywfm zG0e9@wlyB1{oy@GNhws}Y{3c+1}|UMnVg?fe}B2N13A)*QBimkqXLp7J_?}J{fu6G z-}43wA_d@fx`BJLuc<^L6dGByWH!~nuFHi_yWZp4Nt%3iXL~R2-{J>%)fHjngUoYl zKh5#gHpdnJW1JkfVB#^GAgIMn4<6$-1;kk@Z*h2EHY`Rr#ev>Dw?Dff`6-(WMk;_k z@ZxHFbK{1wv)IJ+uZX}2XH4K}gR$qg{-^0Iy0$x7Wv;96s8aNr%Gm2Jc~Mkxa3C-rWqi~(sNn}A=qTfBc#74v zn+^yzI9t)A+lVa$PR*BD&^t>MX_h~#zWN_DmO`HDSX@w{GTZEf#{RA}9DnbwSx;xI z>JGeAdS%YNAPpOQQz$9cC1VI@#|7%a4yo2n@$R%;= zi7yKPj?Osoj;tuu@g5TCjsiC7_^19|`PCxI!6ju{00*QBIv9!K^j`c8;PS!`-BzPj z8Y~lA;%Ic{l5en}g7;NbetN3#&&{}75g>pF*~THximqKhhZt)<&_tQAW13>r8#$$epnwRajaN zqxex(qWVnw6?4OT7iSM1f^`>JKnCpiytXxY$)4PjGhECjga(A#iG(g*BvT zYX%^7MAfxDc{SPtxPt8Gl*j$Vo6X=#WEu%(WF6nRV8Y0D(LS`;)K`T^N|8HeAIX_b zFQobmBYF&{F!sbLqGXKusS-xeO?ChsmU$P$AS7aj_u=Su^~NS`NW)8qfC>5AG(EW(`i9E*l9+#8 zIIz)OR{FCszCnM{omWSl8Miw@eT=b?BG9OR?61=&*Cz;ASkL18cT=r2msVbBr9jU0 zfFJ|LJM1R_B~fEA(&-j5M z3;;6Et~WHGSmrHF)#^h0|5}&_{j}c0b0ujE0I&<5LA%eQamb@_kDC~PwrCzb`AnaD zvq8h7{VSEr^3+!%%CTPi$|u z7XLk2=l&x8LypGb1TU2Azv$eBM#5V*W$8B7IZ z^r_zR6(^3?(1fnB&URCW7Ke~J09Ec=V~p$xZ+UaRb(($DoZ;Oy&3#33!Ujv*`66*8 z>J6yH8^Trl%$|&B0@+77mKrBOf)l;;UN=CziaZ=LiiN(n`WqEu$Y4ElUz<|@<5$BW zDHkXueyJ0MzaV8PkudYzJB43vNz5&E@N{yZ1X*eAuf5DA>x{~-pzKLRlsdu(+{ZSw zKNI#38nfpl>gw@IAbwhF4-#69CC|UE&HL!$jZ##PX%hQSnPb6Y$e{a1!P{H0y*^8FZs>RRK%YM^N-2SWB zplX9)xGuEq)~S7z7qL1 z)jOBaS9WFfHktfoj$l4N8}h+@p0f8h&`~Vs0#nxCwrbLA!6=)^4!#h96FIyr}!)B zBizEylcqxj6PgI66STy^<24WJNdaeX&CPdiea@NYeGu+u-}|MXepwk8o4OO`wUVv@ zl^_|?7E0SU>G!$&fGTMz)Mp*7JmOL^)2-}gUyR_6ob;M5Wpumde}o5ovLp7bvXb_$gd{pW*D74n0Y5+=tz zSe(udh?{-Wp_TSCxhJa~9VHxSBAkWK#q=_KjDO6=C*t}1ZaaFLm{&uF-w`BKEgZ!A ztSGYVW4;f)9`D@7(8XsA8>^y}CB`4Brtf|CVC%W+n(yB%7UnuU4GU;ss^6TB=_@%vIH| z98~(JQylUF9>B}j91&|2zm#y|Ec`e%Y$7)8W-lgthU?kHe&iDy_;S6$iZ_z60a}~f z`;F7E-4(@;BzAa@b?$qkd0MZ%4WLn(yyG}<#4<#pq ziOFG5F-KY6KKNuEwyY@*mJhkdW*mR)FmV}(%%^q6dK@1OnCU<6{TjVwv9;nGQchYR zXCfL({F7np9UaSN6nI+&K#jJ@T=K$%HC|blkQQtzjy=$&r0@HKZdIJ8PV<8#MAzKq zWz@NBj)ErSn03NqT zVhO0&TKDUB!FjV6`o*z+MovQ_8*d#{Lw?!zwpmQrS5M=?a&|-Q!^R%+4KmXEH99Xo zd%Gg4tK-@@~~v0&1nXQX=b0xeK{W^}+ZHq!zp5!GEau{=EfT?23Wg-2S`4-GXhP?bJ>G)9c=82DS9%(vb9JH$Y!RG`*tevq`UIAeR z(A@-q4=XyOR94bkC$N4+A6Fm-b9WGzIFHf4KQPJutSbTlDn|aND{8RTB~~h$i)Ke6D}t{ z4A5rdw&iG{Pt7;#nX6mt#fHnr&6AjP^Ta}IWnB#k$k|;S00Hr=;HNyjeq0xtJO~fE zk>&XK7H!Kr`YM_4&1m-qt^4M953=u zJ6^&2PwhJH%tXwyq?HwV<}+`#%ZV{;Z1k*vP;B*kONdF3zGx_5QZjZINNheIRMe4g z(YiSRtfH>C7kC}_k7yy3x<8K5X%S|y&H%?St7yJfT{|-bp3D1H`j@rDCEIwVr)N_R zvSFXadBV~)??`+7?9}>GMIKozp4uxjGds~8da#YpcY+B8_&1|7bdKJIe=J=Jv@Is6 ztc-mIPD2Hxn=2g-GE zL}>=lG#x7;69x!1-^Ccxtr7nX=e)YXFgfvg1;#&7%)yeIt&UhZTdLw=h&^!fDoe@V zYzBjtXaJ=;L@A0sqOI9F(OI*mHxkTTmjKKB^$zzw6x9W?Pim?VLW0gU_aGeZ2ci$S zyoOoJ4Qrv(xdYyGC!RBkFtR2e63n~RG?W?MiE5xTb?+mMsS)VNd#VTE3wgK{6ji~)?678c!=FmzdF#b>36|Ig>0ffZW$_rH0q z(fj%oLySt3^xZY55B|rch6o)S$+k%^6aI}3P5YA9P@pZdD|l&3_ED3;Vm#o$!Su9i zM7jy%=uy-%KvJ#0(ro15TcMAa&YqW{B`et4_~+JAEqf6a~>uX{^!s6WCY76sv2&w7LA zCiaoQubA-Gv~L2LPR|VcQ2uqDBU!(XE*u@!In!%0+DL6*c;3K-0P8E(g;yv40QROD zS1a+5)o||)k+xd)kay{qS7fwkjaV`_$bvWuc1)S>xg$^7YC-?_QVlO9?88ESDl{LS zvlYdOf0eBEHhVqZnC%IdrO8*pe^!w#){nh%EMJhWS8RXiFoI7-xhjS>CxWA?a;9jk z^7mN5An6ftjYqKKOvm4A z9tI{a6n75&27b`250}gViVKm~D1E;T8PjU+j5e)L{F6I{EOVyl`xeMUy#WfnkCEui zllTv7eijAl_^c@rDikVM)lNr_j6LjoB7El%$;9ZSV1jpy5NmOfyEtPup3TmBih)re z=t7Cc3wBAO50SIa5d``XRE7P6Fgm8{g0FAzn4Av(g5Xp4OVckxz2fY>w^P?Arrc#` z9SD!Y8)L~1?;#41AH;^uKBWQ_aO;*LcM+B19Ej$=fbr9^|Foc8(U5>7a)IyJgm(BK zU&jfc{kHGrSWEd`epH5DY9Ut#E!u>t4o@ib1zu(gMKa=n#fNva=iy#MZSEM)$wK1N zC4%%rMU%v_3O-Yh7~;}O;$i_a?5RG$c+is(LL&GL7m-}QYp4it$se;crs??{8X{?i zA_D(B-g758gLxipjcbcDf!|wMF!A9r^ZER3@DDr?2;vQZ;^}@VE`hog^0jJYTBbno z>B)pL21E`#5=GTrtmcX$K0XJ`p%gz0Ksa45h^J<>>Z9sN9pe8<954VueTmLGXT%e8ojg_8=U4S$4N~K(S zG`+Vn7(}BWSe>(2U%)Vx3v@J7bIEj5e8vq+!9YnaO7)nW0Rx&mpO;of6xRfq&!k1A zPW<%g_w~zy$f*T4`YdopTG476i?bjmWkCHrVxC@zzn@V`h`JXS(K=M! z$#l=PhE)}fpxw2J1)VUGOT}4LrQNnau+?&Ch}k;{M=Vh0pZbf%wwh-gKL@F$T0Kh< zVP-QeUcZs0Ue297l}J}%K)M^fvgdNoEI@P5H+b4dn)nn%*ZT zg8!-EB3p=4i{g+Dq?ICvyb4*9-lPg16NjI21Z_84_$|Z)Xw!M8k0Is=ZDM#r-K{e9 zZaL-oC_(Ktm{G<_tIDqDMJ=;Nq`I0t*EAQ8(?{gV;@Ci=txeu>lbY9PvBx}#K8PZm z1d!RC6w5HY^Md{aLPAgW;dtw3tX=+rT*Av0kVDe&6vcU@xRx5tRm6z0c@Wh0B<-y8 z=QP4v?*x*CLX`=o+C0g*Gag0Xs7)F&^1abV*&#`eABE)SFB8_&-fWC5PW}trMAdD% zNDWg$$#DspzVG^zj_=k~dcOz1gDC6voHjB!*Ky}UtfJfaOe>1It1gSFf=r}^h1fOP zF9UZ5Deg6Is2ZOMT30DSb8O(W*Je3nQ4WTYrY!^b!9`BA&na6`e5ujHOa#tYBhjH@ z-}!|mN|CCpa~5-MvQAp5p|P(;DH2&ScM=qRxZA&J7(spAW~b$Nxe#a-F_@Eibbr3b zP+>XY3fp|baniGsZ?RH3C}f(@^=#DZ3WlKCRhA(AoB#XVogjVoa4?u1{LQ!@kAN0=t>#b=wP zN@ntYWpV$=mFyiyALYE(ll_m@8WqD#; zR$P)7W6d0S5Xnhe|dbda&8o-|M^=D?irj+smh zVx049Rto^DrOhDH90psCx7sB)mNiWJ{({J%hZka)l0rH888l zRqJLf@&Zs~#;Wx3pGV_L8Ter*?VlGCwME&A;@yvpRE#cfgp9S0BgCxNqEV&&Omxl; z3AAuCdZhuEAxjjH?Y4<)9eSpygKmc>8Klv{w7V{}H$|}K<@Ro&0^2d11S*oGZ3<8ZxO4a+$4>to?w#x_q;A}Y{vF8FDVH04O z#MI_6#ZhY~aS-H73FoHKP|{QmfN4fQ8$p)^DQR4FiPE)7UxNR5Yra(bt~Hd=$X}++ zTDU1tW)0rHO^YH4t!rW17dPhTe1qH9cJKEwl{8&yj8rN08Kuk4r+?but3V-JglPw- zZY%CYY)%CJu?4P0QdC6`ow6tKdG6kp;yDmD0=36CW})>0{z%xzxZUS#_T^SHb@8j9 zBmvB6x9p4#(E+)}*}I3$%Dhz zA+oGTY`_>`BK&-_M&y!{EUBR!paNQPjnDN@hE;IT%GboUmYNSFW>R%_Kfen1(#TnW>Sc0ci-EfAnkhtoRcopVaeOHfBxhNw(BCWi8IaD0Rfh;&r2Sy!F>qi zuRsWeSAeYoF-9q^UIqkgke;5!jsa8b1CfLL^I=Ty@xK)~#i$j1SW?3!&WZgU@YgXu zDjU%7wMeY + null + nil + + + false + RBX1512699E848543EC96B3B41C9AAF63F2 + 0 + false + -500 + true + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + Workspace + false + 1 + null + false + + + + + 0 + 18.7408524 + 23.4260654 + 1 + 0 + -0 + -0 + 0.707106829 + 0.707106829 + 0 + -0.707106829 + 0.707106829 + + null + 0 + 70 + + 0 + 17.3266392 + 22.0118523 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + true + Camera + + + + + true + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 4 + 0 + 194 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + true + + 4288914085 + + false + + 0.300000012 + 0.5 + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 0 + 0 + true + 256 + Terrain + 0 + -0.5 + 0.5 + 0 + 0 + + 0 + 0 + 0 + + AQU= + -0.5 + 0.5 + 3 + 0 + 0 + + 0 + 0 + 0 + + 4278998108 + 0.300000012 + 0.150000006 + 10 + + 2044 + 252 + 2044 + + + + + + true + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 4 + 0 + 199 + + 0 + -10 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + true + 4284702562 + + false + + 0.5 + 0.300000012 + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 0 + 0 + true + 256 + BasePlate + 0 + -0.5 + 0.5 + 0 + 0 + + 0 + 0 + 0 + + -0.5 + 0.5 + 3 + 0 + 0 + + 0 + 0 + 0 + + 0 + 1 + + 512 + 20 + 512 + + + + + + + NonReplicatedCSGDictionaryService + + + + + CSGDictionaryService + + + + + true + 12 + Players + 7536745 + + + + + ReplicatedFirst + + + + + true + 400 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + true + 100 + true + StarterPlayer + 100 + + + + StarterPlayerScripts + + + + + + StarterPack + + + + + StarterGui + true + true + + + + + Teleport Service + + + + + 0 + 10 + 1 + SoundService + 1 + + + + + CollectionService + + + + + PhysicsService + + + + + Geometry + + + + + RenderHooksService + + + + + false + InsertService + + + + + SocialService + + + + + GamePassService + + + + + 1000 + Debris + + + + + Instance + + + + + Instance + + + + + CookiesService + + + + + ContextActionService + + + + + Instance + + + + + AssetService + + + + + Selection + + + + + false + ServerScriptService + + + + + ServerStorage + + + + + ReplicatedStorage + + + + + Instance + + + + + 4278190080 + 1 + 14 + 4278190080 + 4278190080 + 4290822336 + 100000 + 0 + 41.7332993 + true + Lighting + 4286611584 + true + 4289967032 + 14:00:00 + + + + + false + HttpService + + + \ No newline at end of file diff --git a/app/files/Client18Setting.json b/app/files/Client18Setting.json new file mode 100644 index 0000000..6ba0706 --- /dev/null +++ b/app/files/Client18Setting.json @@ -0,0 +1,1769 @@ +{ + "FIntGraphicsOculusDetectTimeout":0, + "FFlagDebugRenderVRHUD":false, + "FIntGraphicsVulkanAdrenoArghVersion":24, + "FFlagDebugGraphicsDisableVulkan11":false, + "FFlagDebugGraphicsD3D9ForceSWVP":false, + "FFlagGraphicsGLUseNewPacksES":false, + "FFlagGraphicsGLUseNewPacksGL":false, + "FFlagGraphicsGL3InstancingEnabled5":false, + "FFlagGraphicsGL3UseUBO3":true, + "FFlagDebugGraphicsForceGL2":false, + "FFlagSIMDVoxelizerEnabled":true, + "FIntCSGVoxelizerFadeRadius":300, + "FFlagG3DRayCylinderintersectionTimeFix":true, + "FFlagRenderIC2VoxelizerUpdatesEnabled":false, + "FFlagRenderInstancingDeferUpdates2":true, + "FIntSuperClusterFastClusterSize":1000, + "FFlagJoinTime_LocalUserClusterPriority":true, + "FFlagRenderFixEmojiPadding":false, + "FFlagDebugOccupancy":false, + "FFlagFixTextureAtlasLineHeightOn4xDevices":true, + "DFIntPreloadTextureTimeBuget":1000, + "FFlagFixTextureCompositorFramebufferManagement":false, + "FIntJointTime_TextureCooldown":0, + "FFlagJoinTime_AllowFullTexturePrioUpdate":false, + "FFlagJoinTime_PassTexturePriority":true, + "FFlagRenderInstancingEnabled8":true, + "FFlagGridMaterialFix":true, + "FIntFastClusterUpdateWaitingBudgetMs":4, + "FFlagNoFaceHeadMeshTag":false, + "FFlagFixTextureCubeFramebuffers":false, + "FIntOutlineThickness":40, + "FIntOutlineBrightnessMin":50, + "FFlagEnableRobloxGuiEffect":true, + "FFlagRenderRestrictHeads5":true, + "FFlagDebugGraphicsVsync":false, + "FFlagDebugGraphicsCrashOnLeaks":true, + "FFlagDebugGraphics":false, + "FFlagFixIAdornableCollectorCrash3":false, + "DFFlagReplicatorPacketStatsHandleBursts":true, + "DFIntJoinDataCompressionLevel":1, + "DFFlagCorrectDevConBw":true, + "DFFlagCantGetMad":false, + "DFFlagStreamAvoidResetRegionRadius":false, + "DFIntStreamJobMinBufferHealthThresholdHundredths":40, + "DFIntMaxConsecutiveStreamJobWorkLoad":1, + "DFIntStreamJobPriorityAmplifierRadius":0, + "DFIntNetworkSchemaCompressionRatio":9, + "DFIntRakNetUseSlidingWindow2_maxSpeed":0, + "DFIntRakNetUseSlidingWindow2_minSpeed":1536, + "DFIntRakNetUseSlidingWindow2_minRtt":30000, + "DFIntRakNetUseSlidingWindow2_startUpdateMs":10, + "DFIntRakNetUseSlidingWindow2_startFactor":200, + "DFIntRakNetUseSlidingWindow2_rangeCount":10, + "DFIntRakNetUseSlidingWindow2_trackLengthMs":2500, + "DFIntRakNetResendScaleBackFactorHundredthsPercent":6500, + "DFIntRakNetConnectionStartWindow_HundredthsPercentage":1000, + "DFFlagDelistPpr":false, + "DFFlagNotChristmasTodayEither3":false, + "DFFlagDontWhitelistUserInputConnectionCounts":true, + "DFFlagDropItLikeItsHat2":false, + "DFIntWeldPermyriad":100, + "DFFlagActOnNewCheck":false, + "DFFlagCheckBackpack":false, + "DFIntMaxServerStreamRegionRadius":16, + "DFFlagOneWeldToRuleThemAll2":false, + "DFFlagMoreWeldRestrictions":false, + "DFFlagUseVelocityGateForMoment":false, + "DFIntDebugSendMomentInSteps":6, + "DFIntDebugSendDistInSteps":5, + "DFIntMaxFramesToSend":2, + "FFlagDistanceThinningForClient":true, + "FFlagUseRoundRobinForClient":false, + "DFFlagUseDistanceThinning":true, + "DFFlagUseRoundRobin":false, + "DFFlagUseSort":false, + "DFFlagSetSimulationRadiusInPhysicsSender":true, + "DFFlagNewSortAndFilter":true, + "DFFlagSendAllPhysicsPackets":false, + "DFIntPhysicsPacketsPerStepAdjustPeriodTenths":30, + "DFIntS2PhysicsSenderRate":15, + "DFIntS2NumPhysicsPacketsPerStep":2, + "FIntNumPhysicsTouchPacketsPerStep":1, + "DFIntMaxStreamPacketsPerStep":16, + "DFStringDebugServerProfilerIdList":"", + "DFIntDebugProfilerCaptureTime":4, + "FIntAntiSpamSpamLimit":1000, + "DFIntAniCycleCount":0, + "DFFlagAniLongCycleFix":true, + "DFFlagSteadyAni":false, + "DFFlagAniCoalesce":true, + "DFFlagGameLoadDataStatistics":false, + "DFFlagFilterCheckMap":false, + "DFIntServerPlayerFilterPermyriad":0, + "DFIntDisconnectReportPermyriad":0, + "DFFlagFixServGenPlayer4Spawning2":true, + "FFlagDebugForceRegenerateSchemaBitStream":false, + "DFIntDepthLimit":4000, + "DFFlagUseNewLeakyBucketForRateLimiting":false, + "DFIntRxRlReport":15, + "DFIntRxRlEn2":0, + "DFIntQLimit":3072, + "DFIntReportFill":0, + "DFIntSoundFill":83333, + "DFIntReportLeak":100000000, + "DFIntSoundLeak":10000000, + "DFIntRatePermyriad":0, + "DFIntClusterEstimatedCompressionRatioHundredths":200, + "DFIntClusterCompressionLevel":1, + "DFFlagUseMegaReplicationData":false, + "DFFlagDebugSendStreamingEnabledKeyStatsPlaceSpecific":false, + "DFFlagSendStreamingEnabledKeyStats":true, + "DFFlagSendQueueTimeByPlayers":true, + "DFFlagSelectiveNegativeTarget":true, + "FFlagNetworkDeserializePacketsInAJob":true, + "DFFlagLogMemoryStatsOnCompressionError":true, + "DFFlagTeamCreateServerTrackScriptChangesFullSource":true, + "DFFlagReportMtubyCountyAndCntoDc":true, + "FFlagDebugSendPhysicsFBUpdateRatePlaceSpecific":false, + "DFStringSendPingForCnConnectingToDcList":"111,174,191,133", + "DFIntSendRakNetStatsThrottle":2, + "DFIntSendRakNetStatsInterval":300, + "DFIntReplicatorMaxPacketBytesSentToInfluxOnError":256, + "FIntEventReportLagThrottleHundredThousandths":0, + "DFFlagPhysicsResetOsp":true, + "DFIntMaxDataOutJobScaling":10, + "DFIntMaxClusterSendStepsAccumulated":15, + "DFIntMaxClusterSendStepsPerCyclic":5, + "DFIntMaxDataStepsPerCyclic":5, + "FFlagPpjClientBreak":false, + "FIntSSAOMipLevels":4, + "DFFlagPpjServerBreak":false, + "DFIntPpjCapacity":100, + "DFIntPpjPmFill":10, + "DFIntPpjEtrFill":10, + "FFlagJoinTime_LocalUserMeshPriority":true, + "DFIntMaxProcessPacketsJobScaling":10, + "DFIntMaxProcessPacketsStepsAccumulated":15, + "DFIntMaxWaitTimeBeforeForcePacketProcessMS":0, + "DFFlagNotTouching":false, + "DFIntMaxLearnDescriptors":8192, + "FFlagUseNetworkStream":true, + "DFIntClientOwnershipMs":100, + "DFFlagDebugSendServerPerfInfoPlaceSpecific":false, + "DFFlagSendServerGenPerfInfo":true, + "DFFlagReportHttpServiceToEc":false, + "DFIntInfluxReportFeOnStartupErrorPermyriad":0, + "DFFlagDontRemoveGUIDEarly":true, + "DFIntReportFeOnStartupPermyriad":0, + "DFFlagIPV6RobloxStudioCleanUp":false, + "DFFlagRCCSupportCloudEdit":true, + "DFFlagInstancePacketCacheRemoveCorrectKeyOnAncestorChanged":true, + "DFStringGamePerfMonitorPercentageCountryOverride":"CN,50,AU,50,NZ,50", + "DFIntGAThrottlingEventThresholdHundredthCat1":90, + "DFIntGAThrottlingEventThresholdHundredthCat2":75, + "DFIntGAThrottlingEventThresholdHundredthCat3":50, + "FIntGamePerfMonitorPercentage":0, + "DFIntDebugClientSvrProfilerFramesOverride":0, + "FFlagTxRlEn":false, + "DFFlagClientJoinProcessToEventIngest":true, + "DFIntTimePermyriad":10000, + "FFlagCLI21289":true, + "DFIntClientInstanceQuotaInitial":2000, + "FFlagLoadCoreScriptsEvenInTeamCreate":true, + "FFlagDebugEnableSpoofGameLocaleId":false, + "FStringDebugSpoofRobloxLocaleId":"es-es", + "FFlagDebugEnableSpoofRobloxLocaleId":false, + "FFlagJoinTimeByCountryByPlatform":true, + "DFStringSendJoinTimeDeltasHundPrecCountryOverride":"CN,5000,US,100,AU,3000,KR,2000,NZ,3000", + "FFlagSendJoinTimeDelta":true, + "FStringGameLocaleIdName":"GameLocale", + "FFlagTSMk2ThrottleStreamJob":true, + "DFFlagUseCorrectCoreCase1Devices":false, + "DFIntSendJoinTimesToDiag_HundredthsPercentage":0, + "FFlagSendPlatformOverallJoinTime":true, + "FFlagPlaceLauncherIncludePlStartTime":true, + "FFlagLogJoinTime":false, + "FFlagJoinTime_AvatarTextureCompositorSignal":true, + "FFlagJoinTime_AvatarFastClusterSignal":true, + "FFlagUnlockMouseIfKicked":true, + "FFlagDebugForceChatDisabled":false, + "FIntDisconnectInfluxHundredthsPercentage":0, + "DFIntJoinTimeCounters_JoinInfluxHundredthsPercentage":0, + "FStringServerConfigChatFilterUrl":"/Game/ChatFilter.ashx", + "FStringServerConfigAbuseReportUrl":"/AbuseReport/InGameChatHandler.ashx", + "FIntServerConfigScriptTimeoutSeconds":10, + "DFFlagServerCopiesPlayerGui":false, + "DFIntPhysicsCompressionSizeFilter":50, + "DFIntRakNetLoopMs":10, + "DFFlagSimplifyRakNetConnectionHandshake":false, + "FFlagDebugEnableInternetSimulator":false, + "DFFlagCLI120342":true, + "DFIntClientNetworkInfluxHundredthsPercentage":1000, + "FIntDebugClientNetworkUnthrottledGAForDatacenterId":0, + "DFIntServerPlayerFilterConfig":0, + "FIntRakNetResendBufferArrayLength":512, + "DFIntRakNetNakResendDelayRttPercent":0, + "DFIntRakNetNakResendDelayMs":0, + "DFFlagRakNetFixBwCollapse":false, + "DFFlagRakNetUseSlidingWindow4":false, + "DFFlagDebugRakNetUseUdt":false, + "DFFlagRakNetDetectNetUnreachable":true, + "FStringClientExternalBrowserUserAgent":"Roblox/WinInet", + "FFlagCSGv2UseIterativeSimplification":true, + "FFlagCSGv2EnablePerPrimitiveBoxMaps":true, + "FFlagCSGv2ControlSignificands":false, + "DFFlagCSGv2AlwaysClusterPositions":false, + "DFFlagCSGv2UsePositionClustering":true, + "FFlagCSGv2UnionOrientationFromFirstPart":true, + "FFlagStudioCSGChildDataNoSizeLimit":false, + "FFlagTaskSchedulerRemoveLast":false, + "FFlagTaskSchedulerSTDThreadwrapper":true, + "FFlagFixPluginActionIds":true, + "FFlagRapidJson110Studio_2":true, + "FFlagStudioAnimationEditorClickAndScrubFix":false, + "FFlagAvatarEditorTabResizing":false, + "FFlagRapidJson110":false, + "FFlagDebugFastFlagEditor":false, + "DFFlagDebugDisableTimeoutDisconnect":false, + "DFFlagHttpUrlSubdomainDotFix":false, + "DFFlagHttpUrlDecodeFix":false, + "DFFlagHttpUrlPortFix":true, + "FIntTaskSchedulerTasksDefaultMaxCountPerCycle":16, + "FFlagStudioCheckForUpgradeEnabled":true, + "FFlagDebugDisableOnScreenProfiler":false, + "FFlagStudioAnimationEditorKeyframeIndicators":true, + "FFlagEnableMobileMicroProfilerWebServerApi":false, + "FFlagCSGv2BalanceExponents":false, + "DFIntMaxAverageFrameDelayExceedFactor":3, + "FFlagArrayDynamicReserveUsesMoveSemantic":false, + "DFFlagFindLightestUpstreamNew":false, + "DFIntTattletaleFlushIfNotUpdatedForSeconds":60, + "FIntXboxGameSortsUpdateInterval":1800, + "FFlagNavigationDebugDrawIterateSpiral":true, + "FFlagDebugNavigationDrawNavMesh":true, + "FFlagDebugNavigationDrawCompactHeightfield":false, + "FFlagDebugNavigationDrawHeightfield":false, + "DFFlagBuiltInPluginsCanModifyHttpEnabled":true, + "DFIntDefaultBalanceD":100, + "DFFlagPhysicsSenderBitStreamAllocateExtraHalfPacket":true, + "FIntPGSAlign2AxesPStageFrictionConstant":1, + "FIntPGSAlign2AxesVStageFrictionConstant":2, + "FIntPGSPStageStiffnessEasingDownToConservative":10, + "FIntPGSPStageStiffnessEasingUpToAggressive":1, + "FIntPGSPStageStiffnessConservativeValue":90000, + "FFlagStudioUseBulkImporterMock":false, + "FFlagNavigationFixCheckOcclusionAsyncV2":true, + "FIntPGSPStageStiffnessBestFitnessThreshold":1, + "FIntPGSPStageStiffnessWorseFitnessThreshold":2, + "FIntPGSVStageStiffnessEasingDownToConservative":100, + "FFlagLuaHomeGetFriendsPlayingGamesInfo":false, + "FIntPGSVStageStiffnessAggressiveValue":99995, + "FFlagFixSubsequentFolds":false, + "FFlagForceSDLInitOnMainThread":false, + "FIntPGSVStageStiffnessBestFitnessThreshold":1, + "FIntPGSAngularDampingPermilPersecond":950, + "DFFlagErrorForFailedRequestsInThumbnailLogic":false, + "FIntPGSPenetrationVelocityForMinMargin":20, + "FFlagEnableOnboardingMemoryAPI":true, + "DFIntHttpBatchAssetV1HundredthsPercentage":10000, + "DFIntHttpBatchDelayMs":3000, + "DFFlagBgUpdateRedirects":true, + "DFFlagFindClosestHandleHitTestFixEnabled":true, + "DFIntFreeFallBalanceP":5000, + "FFlagFixFolderDescendantSelection":true, + "DFIntTextScraperServerMaxRowsPerMessage":100, + "DFIntDefaultBalanceP":7000, + "DFIntMaximumUnstickForceInGs":4, + "DFIntUnstickForceAttackInTenths":1, + "FFlagUseLuaHomePageOnAndroidPhone":false, + "DFIntRagdollEarlyExitTimeTenthSecond":20, + "DFIntDataRequestInQueueTime":10, + "DFIntLandedBalanceP":7500, + "DFFlagExternalWakeOtherAssembly2":false, + "DFFlagPGSWakeOtherAssemblyForJoints":true, + "FFlagEscapeHtmlInDocTabTooltip":false, + "FFlagQuantumGuiImplementCircularPageLayout":true, + "FFlagLuaAppCancelSearchOnBackButtonPressed":false, + "DFIntNumberFramesSubmergedBeforeVSquareBlendFrames":10, + "DFFlagUserUseSoundDispatcher":true, + "FFlagTighterCylinderBoundingSpheres":true, + "DFFlagDebugDisableProjectileOwnershipLock":false, + "SFFlagFixRaysInWedges":true, + "FFlagStudioStartPageSortSearchAnalytics":false, + "DFIntMaxContentProviderRunsAccumulated":20, + "FFlagUseLuaGamesPageOnAndroidTablet":false, + "DFIntMaxContentProviderRunsPerStep":10, + "DFFlagReportSolverUsageStats":true, + "DFIntJoinInfluxHundredthsPercentage":100, + "FFlagDebugTracebackOptionalCoroutineArg":true, + "FFlagStudioScriptPerformanceWidgetRefactor":true, + "FIntSmoothTerrainPhysicsCacheSize":16777216, + "FIntNavigationAgentMaxDrop":100, + "FIntNavigationAgentJumpDistance":7, + "DFIntMaxDataStepsAccumulated":15, + "FIntNavigationAgentWalkableClimb":1, + "FIntNavigationAgentRadius":2, + "FFlagUserUseNewClickToMove":false, + "FIntNavigationSearchTileOffset":2, + "FFlagStudioAnimationEditorMultiSelectEasingOptions":true, + "DFIntNavigationJobMaxTimeBudgetMS":100, + "FIntNewGameTemplateId":95206881, + "DFIntNavigationJobRunsPerSecond":10, + "FIntNavigationServicePercentStatsReported":20, + "DFFlagNavigationServiceTimingAnalytics":false, + "DFStringAssetPurchasePath":"marketplace/purchase", + "FFlagStudioFixInsertObjectWindowCrash":true, + "FIntFMODSoundChannels":100, + "DFIntTextScraperServerMaxBytesPerMessage":100000, + "DFIntTextScraperClientDataNBytes":1000, + "DFIntMaxAltitudePDStickHipHeightPercent":10, + "DFIntMaxAltitudePDHipHeightPercent":100, + "FFlagStudioTrackRPCFailure":true, + "DFIntNewRunningBaseAltitudeD":346, + "FFlagStudioResendDisconnectNotification":true, + "FFlagRunningBaseUseNewAltitudePD":true, + "FIntDebugInternetSimulatorLatencyMS":0, + "DFIntRunningBaseAltitudeD":100, + "DFFlagDebugReportAnchoredSimBodyUpdatedFromSolver":false, + "FFlagDebugCountSimBodyAllocations":false, + "FFlagAppShellReporterMonitorFrameTimeIOS":true, + "DFFlagNormalizeForcedLocales":true, + "FFlagUseMatrix3ForInertiaTensor2":true, + "DFIntPpjPmThreshold":0, + "FFlagEnableImageTilingInGUI":true, + "FFlagClickDetectorCursorIconEnabled":true, + "DFIntBroadPhaseIslandMaxPartLinearFactorTenth":10, + "DFFlagDebugStreamingFastRecovery":false, + "FFlagStudioAnimationEditorContextPopupMenuScrolling":true, + "DFFlagDebugBroadPhaseIslandBufferZoneApplyPartLimit":true, + "DFFlagThrowOnCompressionError":true, + "FFlagPassDataModelInitializationParams":true, + "DFIntRunningBaseMaxAcceleration":5000, + "DFFlagDontCallOnMovingAssemblyRoot":false, + "FFlagReportAbuseMenuDescriptionFix":true, + "FIntNetworkStatRefreshRate":1, + "FFlagCSGv2ForceEnabled":true, + "DFIntTelegrafTCPPort":8094, + "DFIntTelegrafUDPPort":8092, + "FFlagPGSSolverDetectHighMassRatiosEnabled":false, + "FFlagPGSSolverFileDump":false, + "FFlagDebugIgnoreVolumeIsZeroAssert":false, + "FFlagHttpReportCacheStatisticsNew":false, + "FFlagUseTLSv1_2_a":false, + "DFIntHttpCurlDeepErrorReportingCount":0, + "DFFlagInconsistent3DChecks":false, + "DFFlagHttpCacheCleanBasedOnMemory":false, + "DFIntHttpCacheCleanIfGBLessThan":5, + "DFFlagRemoveDeadCode":false, + "DFIntCreatePlacePerMinute":5, + "DFIntHttpCacheCleanMaxFilesToKeep":7500, + "DFIntHttpCacheCleanMinFilesRequired":10000, + "FStringFriendsOnlineUrl":"/my/friendsonline", + "DFStringHttpCurlProxyHostAndPort":"", + "FIntHttpCurlMaxCachedHandlesPerHost":16, + "DFIntDataStoreInfluxValueSubstringSize":512, + "DFIntDataStoreInfluxReportNonParsableDataPerMyriad":10000, + "DFIntDataStorelastSetByKeySize":512, + "FFlagDataStoreUseLRUCachedKeysV2":false, + "DFIntDataStoreSameKeyPerMinute":10, + "DFIntDataStoreKeyLengthLimit":50, + "DFIntDataStoreMaxKeysToFetch":100, + "FFlagXboxUseNewValidUsernameCheck2":false, + "FFlagRandomType":true, + "FFlagFreeCameraForDevelopers":true, + "FFlagPlayerAcceptPlayerScriptsStatus":true, + "FStringAnalyticsSessionIdName":"AnalyticsSessionId", + "FStringStudioTeamCreateHelpUrl":"https://wiki.roblox.com/index.php?title=Team_Create", + "FFlagStudioShowTutorialsByDefault":true, + "FFlagStudioAnimationEditorUseStudioThemeAPI":true, + "FIntStudioRecentActionCacheSize":25, + "FFlagStudioAnimationEditorOptimizeSelection":true, + "FFlagStudioAnimationEditorWorldSpaceJointPropertyFix":false, + "DFStringSendJoinTimeStatsHundPrecCountryOverride":"CN,5000,US,100,AU,3000,KR,2000,NZ,3000", + "FFlagStudioAnimationEditorKeyframeOverwriteWarning":true, + "FFlagStudioAnimationEditorLessThanOneSecondUnusableSpaceFix":true, + "DFIntDataStoreOrderedGetInitialBudget":10, + "FFlagPlaceLauncherConnectGameShutdownSignal":true, + "DFFlagDuplicateNotArchivableParts":true, + "FFlagStudioAnimationEditorMoveScrubberToSelectedPose":false, + "FFlagStudioNativeHttpLayerWrapper":false, + "FFlagSurfaceToolOnLockedParts":true, + "FFlagStudioAnimationEditorPlayFromBeginningIfAtEnd":false, + "DFIntHttpRbxApiMaxRetryCount":10, + "FFlagReportInGameAssetSales":true, + "FFlagStudioAnimationEditorMultiSelectAreaOffsetFix":true, + "FFlagStudioAnimationEditorTimePrecisionFix":true, + "FFlagStudioAnimationEditorResetLockedJoints":true, + "FIntPGSPStageStiffnessAggressiveValue":99500, + "FFlagStudioAnimationEditorDefinedBoundaryNotches":true, + "FFlagStudioFLogFlagEditorFix":true, + "FFlagAnimationEditorMaxLengthRestriction":true, + "FFlagAnimationEditorRigNameFix":true, + "FFlagAnimationEditorCreateKeyframesForUndoAndExport":true, + "FFlagFix3DMouseScrolling":true, + "FFlagAnimationEditorDeleteFix":true, + "FFlagAnimationEditorRenameKeyFrame":true, + "FIntStudioRightClickMax":700, + "FIntPGSBallInSocketCorrectionDamping":10, + "FFlagUserNoUpdateOnLoop":true, + "FIntStudioCheckTeamServerExistsFrequency":5000, + "DFIntMinSoundStreamSizeBytes":512000, + "DFStringR15CollisionTypeField":"universeAvatarCollisionType", + "DFIntPhysicsDecompSerialVersion":5, + "FStringApolloServerUrl":"http://127.0.0.1:8001", + "FFlagNavigationUseJumpLinksV3":false, + "FFlagFixHandlesMouseEvents":true, + "DFIntContentProviderJobDutyCycleMicroseconds":1000, + "DFIntResetNetworkFloorAfterNoFloorTenthSeconds":50, + "DFFlagResetNetworkFloorOnStates":true, + "FFlagDebugGraphicsD3D11DisableDriverThreading":false, + "DFIntSwitchFromRunningNoPhysToRunningThresholdInHundredths":4, + "DFIntDelaySwitchingFromRunningToFreefallInHundredths":20, + "FFlagQuantumGuiFixScalingOfCanvasPosition":true, + "DFFlagReduceTrussSearchDistance":false, + "DFIntMaxProcessPacketsStepsPerCyclic":5, + "DFFlagUserFixCharacterSoundIssues":true, + "DFFlagFixFirstPersonSwimmingStateChange":true, + "DFFlagHumanoidWithPGSConstraintsUsePhysicsState":true, + "FFlagEnableLuaSortTokensManualRefresh":false, + "FFlagStudioThrottleCacheScriptIssueReporting":false, + "DFFlagDebugAdvancedNetworkedVisualizer":true, + "DFIntNumFramesToKeepAfterInterpolation":1, + "DFFlagGamePassOwnershipCache":true, + "DFIntSimToInterBufferClearFactorTenths":3, + "DFIntHopperBinTrackingPermyriad":100, + "DFIntMaxAcceptableUpdateDelay":15, + "FFlagQuantumGuiFixScrollingFrameCanvasSizing":true, + "FIntInterpolationMaxDelayMSec":500, + "DFIntRagdollDefaultTimerTenthSecond":50, + "DFIntThrottledVelocityThresholdTenths":15, + "FIntOutlineBrightnessMax":160, + "DFFlagDebugAllowMultiRotationInterpolation":true, + "DFIntBgUpdateRedirectsRejectInfluxHundredthsPercentage":0, + "DFIntHttpRbxApiRequestsPerMinutePerPlayerInServerLimit":100, + "FFlagInterpolationAwareTargetTime":true, + "DFIntDataStore429MinReponseTimeMSec":10000, + "DFIntDataStoreMaxRetriesPerCycle":6, + "DFFlagDataStoresP50":true, + "DFIntTattletaleReportUnfilteredJobMaxReportsPerTick":64, + "DFIntDataStoreMaxThrottledQueue":30, + "DFIntDataStoreWaitOnYieldingRequestsExpiration":2, + "DFIntDataStoreBudgetOnCloseBase":150, + "DFIntDataStoreMaxBudgetMultiplier":100, + "DFIntDataStoreOrderedSetInitialBudget":50, + "DFIntPointsServiceBatchingImplOnUpdateDelaySeconds":5, + "DFIntDataStoreOrderedSetFixedRequestLimit":30, + "DFIntUnstickForceEpsilonInHundredths":1, + "DFIntDataStoreInitialBudget":100, + "DFIntDataStorePerPlayerRequestLimit":10, + "FFlagDebugSSAOForce":false, + "DFIntDataStoreFixedRequestLimit":60, + "FIntRenderMaxParticleSize":200, + "DFFlagInstancePacketCacheUseBitstreamPointerForDirtyState":true, + "DFIntDataStoreJobFrequencyInSeconds":1, + "DFIntPointsServiceBatchingImplMaxDelaySeconds":30, + "FFlagStudioCanSelectMeshPartWhileUIEditorIsActive":false, + "DFIntMaxAwardPointsHttpCallsPerMinute":60, + "DFIntUS20162":0, + "FIntAppBridgePlaceLaunchMaxSleepBetweenRequests":10, + "DFIntFriendServiceCachedOfflineStatusMaxAgeSeconds":300, + "FFlagEnableNewChatApi":true, + "DFIntProbeHttpRequestsPerMinuteLimitZero":10, + "FFlagChatServiceSubscribePlayerRemove":false, + "DFIntInfluxReportLocalFilterStringPermyriad":500, + "DFStringFilterTextSubdomain":"textfilter", + "DFStringModerationFilterTextUrlV2":"moderation/v2/filtertext", + "FFlagDontTagsMeBro":true, + "DFFlagDSPLeakDueToGCofParent":true, + "DFIntTattletaleReportUnfilteredJobFrequencySeconds":30, + "DFIntGetUserThumbnailExpirationTime":60000, + "DFIntTattletaleMaxPendingReports":1024, + "DFIntTattletaleFlushIfOlderThanSeconds":300, + "DFIntChatServiceCachedResultCount":30, + "FFlagFilterStringForBroadcastConsideredPublic":false, + "FFlagLuaAppFriendshipCreatedSignalREnabledV355":true, + "FFlagPassIsPublicChatOnFilterMessage":true, + "DFIntRtl7InfluxHundredthsPercentage":100, + "DFFlagHttpZeroLatencyCaching":false, + "FFlagStudioFixStartPageThumbnails":true, + "FFlagUserInGameChatUseNewFilterAPIV2":true, + "DFIntFreeFallOrientationP":100, + "DFIntLinearToVSquaredVelocityThresholdMaxTenths":100, + "DFIntInfluxOverUDPThreshold":1400, + "FFlagStudioPlaceSessionModelGetCurrentSoundJobStudioCrashFix":true, + "DFFlagAllowDuplicateWeldConstraintsAnalytics2":false, + "DFFlagAllowDuplicateWeldConstraints2":false, + "DFIntTrackServerPhysicsPerfSessionNMinutes":10, + "FIntRenderTextureManagerBudgetFor4k":0, + "DFIntSendJoinTimeStatsToDiag_HundredthsPercentage":0, + "DFIntWorldStepDtAveExpFactorHundredth":1, + "DFFlagCyclicExecutiveThrottlingCancelWorldStepAccum":false, + "DFIntMaxMissedWorldStepsRemembered":16, + "DFIntWaitForChildWarnTimeOutTime":5, + "DFIntWorldStepsOffsetAdjustRate":100, + "DFIntWorldStepMax":30, + "DFIntBulletContactBreakThresholdPercent":200, + "FFlagFreeCameraForAdmins":true, + "FFlagStudioFixUniverseAlwaysRecreate":false, + "FFlagJoinTime_HttpQueuePrio":true, + "FFlagHttpUseContentCacheFlag3":true, + "DFIntTattletaleMinimumClientCountWithoutServerVerification":1, + "DFIntSolidFloorPercentForceApplication":100, + "DFFlagFavorIPV4Connections":false, + "DFStringHttpResultsApprovedUserIDs":"", + "DFIntPurchaseErrorReportRate":100, + "DFIntBadLogMask":0, + "DFIntPpjEtrThreshold":6, + "FIntStreamingCriticalLowMemWatermarkMB":15, + "FIntStreamingSafeMemWatermarkMB":100, + "FFlagDebugShowTextBounds":false, + "DFIntClientInstanceQuotaCap":10000, + "FIntFontSizePadding":1, + "FFlagQuantumGuiUIScaleHandlesPositionOfChildrenOfLayerCollectors":true, + "DFFlagPGSSolverIntegrateOnlyPositionsEnabled":false, + "FFlagQuantumGuiTextRespectsFrameStyle3":true, + "FIntRelayoutRecursionLimit":0, + "FFlagSimplifiedAtomicValueFFI2":false, + "FIntSettingsHubInviteToGameIOS5":100, + "FFlagFixBillboardTextSizeRounding":true, + "FFlagRoundInAdorn":false, + "DFFlagAdditionalCheckC1_2":false, + "DFIntRemoteDelayedQueueLimit":256, + "DFIntRakNetUseSlidingWindow2_startInitSpeed":200000, + "DFIntSavePlacePerMinute":10, + "DFFlagLogGroupTeleportInfluxDB":true, + "DFFlagCheckMultipleLoadCharacterCalls":true, + "DFIntRunningBaseGravityReductionFactorHundredth":100, + "DFFlagEnableTrackingAccessoryDestoyedWithLiveSignals":false, + "DFIntStepsToJoin":2, + "DFFlagAccoutrementWeldingFilteringEnabled":false, + "FIntOptimizedContactOverlapGoalMicro":0, + "FIntOptimizedContactWakeDepth":8, + "DFIntHighVelocityContactThresholdHundredth":100, + "DFFlagContactWakeOnNewContact":false, + "DFFlagContactWakeImprovements2":false, + "DFStringCrashUploadToBacktraceWindowsRCCToken":"82fc562ca79e6df76a1add3c37aca015601a7326f48d4476fdc37bfe85e44673", + "FIntOnContactOwnerBufferTimeCentiSec":300, + "DFIntBroadPhaseIslandMaxSortDepth":2, + "FIntSettingsHubInviteToGameWindows5":100, + "FFlagEnableLuaAppFormFactorAndPlatformV355":false, + "FIntMsecBetweenTextureMemoryUsageArrayRefresh":1000, + "FIntIntersectingOthersCallsAllowedOnSpawn":5, + "FFlagOrientationConstraintPrimaryAxisOnlyFix":true, + "DFIntHttpGAFailureReportPercent":1, + "FFlagWeldConstraintAdornHighlightConnectedParts":true, + "DFIntHttpServiceProbeRateLimit":1000000, + "FIntIkDraggerAnchorMode":0, + "FFlagSettingsHubInviteToGameThumbnailNoBackground":false, + "FFlagDebugEnableRenderCSGTriangles":false, + "FFlagFutureIsBrightPhase1_1":true, + "DFFlagEnableWakingPGSJointsForNonSolverPrimitives":true, + "FFlagEnableGameSignalRWithAllPlatforms":true, + "FStringGoogleAnalyticsAccountPropertyLuaTest":"UA-43420590-19", + "DFIntHttpInfluxHundredthsPercentage":5, + "FStringGoogleAnalyticsAccountPropertyIDLuaShell":"UA-43420590-18", + "DFStringRobloxAnalyticsURL":"http://ecsv2.roblox.com/", + "FFlagScreenGuiOnTopOfCoreBlur":true, + "FFlagDevConsoleOnTopOfCoreBlur":true, + "FIntDiabolicalModeLatecyMaxMS":600, + "DFIntMaximumFreefallMoveTimeInTenths":1, + "FIntDiabolicalModeFailRateDiv10K":3000, + "FFlagBgUpdateRedirectsHttpErrBase64Body":true, + "DFFlagSoundServiceCleanBuggyTempSoundFilePath":false, + "DFFlagUseMomentumThinning":true, + "DFIntClientJoinProcessPositiveSamplesThousandths":10, + "FFlagPGSOrientationConstraintImproveBehaviorAtTarget":false, + "FFlagFutureIsBrightPhase1_2":true, + "FFlagFutureIsBrightPhase1_12":true, + "FFlagFutureIsBrightPhase1_13":true, + "FFlagStudioFixDocHistory2":true, + "FFlagDebugRenderForceTechnologyVoxel":false, + "DFFlagFindHeaviestDownstreamNew":false, + "DFIntDebugClientSvrProfilerCaptTimeOverride":0, + "DFFlagStudioTrackPluginButtonSetActiveThrottled":true, + "DFIntPhysicsImprovedCyclicExecutiveConsecutivePredictionRequired":2, + "FFlagAnthroArtistIntentFBXImporterIntermediateState":true, + "FFlagLuaPeopleListContextualListMenu":true, + "FFlagStudioClearSelectionExitsAttachmentTool":true, + "FIntMaxCameraMaxZoomDistance":400, + "DFIntPhysicsDecompForceUpgradeVersion":3, + "FFlagCSGLoadFromCDN":false, + "FFlagCSGAllowUnorderedProperties":false, + "DFFlagFixMeshNormalsForNonUniformScaling":true, + "FFlagBoxSelectAttachments":true, + "FFlagJoinTime_ThreadedCacheableContentProvider":true, + "FFlagStudioThemeSwitchingEnabled":true, + "FFlagStudioAnimationEditorColorMoveHandles":true, + "DFIntDraggerMaxMoveSteps":10000, + "FFlagAndroidShutdownViewFix":false, + "DFIntDraggerMaxMovePercent":60, + "FFlagDebugStudioRigImporter":false, + "SFFlagFixBallRaycasts":false, + "FFlagSendJoinTimesToDiag":false, + "DFFlagDoesItHalt":true, + "DFFlagLockViolationScriptCrash":false, + "FIntDiabolicalModeAnalyticsIntervalSeconds":60, + "DFIntLuaGcBoost":1, + "FFlagStudioAnimationEditorStayActiveWithOtherPlugins":true, + "FFlagLuaAppUseImageSets":false, + "FFlagDebugScriptContextCoverageEnabled":false, + "DFIntHttpResponseDefaultTimeoutMillis":60000, + "DFStringRobloxAnalyticsSubDomain":"ecsv2", + "FFlagLuaChatContextualMenuTransition":false, + "FFlagDebugCrashEnabled":false, + "FFlagFixPlayerActionTypeOverride":true, + "DFFlagBadgeInfoErrorFix":true, + "DFIntHttpSendExtendedTimeoutMillis":600000, + "FFlagBadgeReadDisabledFromInfo":true, + "DFFlagUseConvertToHex":false, + "DFFlagDisableHopperBin":false, + "DFIntExternalHttpRequestSizeLimitKB":1024, + "FFlagGraphicsVulkanUseNewPacks4":false, + "DFFlagDebugDisable180DegreeFlip":false, + "DFFlagAnimatorOnSteppedKeepAlive":true, + "DFIntExternalHttpResponseTimeoutMillis":30000, + "DFIntHttpRbxApiMaxBudgetMultiplier":1, + "FFlagPhysicsAnalyzerAnalyticsEnabled":true, + "FFlagStudioDebuggerCheckBothTableAndArrayLength":true, + "FIntSmoothTerrainMaxCppRegion":67108864, + "FFlagDebugCSGExportFailure":false, + "FIntSmoothTerrainMaxLuaRegion":4194304, + "FIntTeleportMethodAnalyticsHundredthPct":100, + "DFFlagInsertServiceLoadFlowSimplification":true, + "DFFlagFixCharacterStuckInFreefall":true, + "FFlagBuiltInPluginGetPackageAPIEnabled":false, + "FIntStudioGamePageHandfulSize":50, + "FFlagFixUIScaleTextBlowingUpFontAtlas":true, + "DFFlagNewRejoinMessage":false, + "FIntKeyframeSequenceInfluxPermyriad":0, + "FFlagEnableGuiLayerCollectorResetOnRespawn":true, + "DFStringCrashUploadToBacktraceToBacktraceBaseUrl":"http://roblox.sp.backtrace.io:8443/post?format=minidump", + "FFlagLuaChatUsesZIndexSibling":true, + "DFIntDataStoreCachedKeysMemSize":8388608, + "FFlagPluginGuiBindToClose":true, + "FFlagPGSSolverDetectUnstableConstraintsEnabled":false, + "DFFlagAddInvalidJSONErrorDetail":true, + "FFlagThwartPurchasePromptScamsGamepad":true, + "DFIntPurchaseMismatchReportRate":100, + "DFFlagDebugLaunchTimeByCountryPlaceSpecific":false, + "DFIntPhysicsImprovedCyclicExecutivePredictiveThrottlingStepsAhead":20, + "DFFlagDebugLaunchTimeByCountryPlaceSpecificAddPlatform":false, + "FFlagDelayPurchasePromptActivation":true, + "FFlagReportRobuxUpsellEnabled":true, + "FFlagEnableWebServerOnStart":true, + "DFIntDataStoreMaxPageSize":100, + "FFlagStudioAnimationEditorRightClickMenuPositionFix":true, + "DFFlagUserPreloadAnimations":true, + "FFlagStudioAnimationEditorSaveLoadPopupScaling":true, + "FFlagDebugStudioFlagState":false, + "FFlagStudioReportRAMUsage":false, + "DFFlagAllowClientFallback":true, + "DFIntGamePassOwnershipCacheSeconds":10, + "DFFlagCheckMarketplaceAvailable":false, + "FStringLuaAppsDiagPageLoadTimeGames":"LuaAppsPageLoadTimeGames", + "FFlagAnimationEditorScrubbingPlayingMatch":true, + "DFStringHttpRbxApiBlacklistedEndpoints":"", + "DFIntSendJoinTimeDeltasToDiag_HundredthsPercentage":100, + "DFFlagHttpRbxApiWithWhitelistedDomains":true, + "DFIntHttpRbxApiSyncRetryWaitTimeMSec":500, + "DFIntHttpRbxApiMaxRetryBudgetPerMinute":500, + "FIntDebugForceMSAASamples":0, + "DFIntStreamJobMaxBufferHealthThresholdHundredths":75, + "DFIntHttpRbxApiMaxThrottledQueueSize":50, + "DFIntPercentApiRequestsRecordGoogleAnalytics":0, + "DFIntPercentSentAlways":50, + "FFlagStudioDoNotDeleteLineOnComment":false, + "DFIntInitialAccelerationLatencyMultTenths":20, + "DFFlagFixMechanismInterpolationOnPlatforms":true, + "DFFlagDynamicLocalizationTableDataModelTestingNonProd":false, + "SFFlagReplicateInterpolateRelativeHumanoidPlatformsMotion":true, + "DFFlagHumanoidScalingFixHipHeightDuplication":false, + "DFIntGameIntlApiThrottleHundredthPct":10000, + "DFFlagStopStopping":true, + "DFIntDataStoreMaxValueSize":262144, + "DFIntLocalizationServiceContentLoadErrorHundredthsPercentage":0, + "FIntStreamingLowMemWatermarkMB":30, + "FFlagLocalizationServiceUseNewTextScraper":false, + "DFFlagReportCharacterLoadTimeMetrics2":true, + "FFlagAllowLocaleIdForcing":true, + "FFlagFixPlayerlistFollowing":true, + "FIntLocalizationAnalyticsSamplesPerMillion":50000, + "FFlagUseNotificationsLocalization":false, + "FFlagDoLocalizationServiceOverrideLocale":false, + "FFlagStudioAnimationEditorPoseDragSnapping":true, + "FFlagLuaChatAssetCardsSelfTerminateConnection":true, + "DFIntProbeHttpRequestsPerMinuteLimitMult":0, + "DFIntHttpServiceProbeConcurrentRequests":1000000, + "DFIntDebugRestrictGCDistance":0, + "FFlagRunningBaseClampAcceleration":true, + "DFIntHttpServiceErrorRateLimit":1000000, + "DFIntHttpServicePermyriad":0, + "FFlagStudioLuaWidgetToolbox":true, + "DFIntHttpServiceReportUrlBlacklistedHundredthsPercentage":0, + "DFStringHttpBlacklist":"", + "DFFlagHttpServiceBlacklist":false, + "DFFlagDebugEnableInterpolationVisualizer":false, + "DFFlagHttpRbxApiRequestAsync":true, + "DFIntHttpServiceMaxConcurrentRequests":500, + "FFlagApplyHttpServiceConcurrentRequestLimit":false, + "DFIntUserHttpRequestsPerMinuteLimit":500, + "DFFlagHttpServiceRequestAsync2":true, + "FFlagLoadAvatarEditorTranslations":true, + "FFlagUseLuaGamesPageOniPad":false, + "FFlagKeyframeSequenceReportInstanceLoading":false, + "FFlagKeyframeSequenceIgnoreContainerPoses":true, + "DFIntMaxDebugFramesForVisuals":2000, + "DFFlagHttpServiceRequestAsyncHeader":true, + "FFlagStudioPluginStartDecalDragApi":true, + "DFIntDataStoreFetchFrequenceInSeconds":30, + "FStringDebugSpoofGameLocaleId":"de-de", + "FIntSettingsHubInviteToGameUWP5":100, + "FFlagKeyframeSequenceCacheMemoryOptimization":false, + "FFlagUseNewStructurePlayerScripts":false, + "FFlagKeyframeSequenceEnableFrozen":true, + "DFFlagOnlyFireHealthChangedWhenHealthChanges":false, + "FFlagStudioAnimationEditorChangePopupStyle":true, + "DFFlagFixJointDestroyedPrimitiveInsert2":false, + "DFFlagFireHealthChangedLater":false, + "FFlagStudioAnimationEditorClipCutoffFix":true, + "DFFlagHumanoidSimulateIfWorld":true, + "FFlagStudioPreventUnneededScriptSelectionRepaint":true, + "DFIntSimilarHipHeightPercentage":50, + "DFFlagEnableMeshHeadAttachments":false, + "DFFlagEnforceSlaveStateEnabledStatus":true, + "FFlagEnableReplaceBodyPartR15":false, + "FIntPGSVStageStiffnessWorseFitnessThreshold":2, + "DFFlagNPCUnequipTools":true, + "DFFlagUserHttpRequestsThrottle2":true, + "DFFlagScaleAllAccessories2":true, + "FFlagClampCharacterScales":true, + "FFlagFixHeadScales":true, + "FFlagFixScalingValueReplication2":false, + "FFlagCFrameFromMatrix":true, + "FFlagFixScalingValueRename":true, + "FStringGraphicsVulkanBlacklist":"Meizu", + "FFlagUseR15PartsCache2":false, + "FFlagStudioGrabWriteLockOnUpdateToolbars":false, + "DFFlagServerNotifyPlayerScriptsStatus":false, + "DFIntMotionDiscontinuityThreshold":1, + "DFFlagFixHeartburn":false, + "FFlagStudioStartServerGuestAppearance":false, + "DFFlagHandlePlayerBlockListsInternalPermissive":false, + "DFFlagTextScraperHasServerMessageLimit":false, + "DFIntHumanoidFloorManualFrictionVelocityMultValue":100, + "DFIntPointsServiceBatchingImplMinuteSeconds":60, + "FFlagLuaDebuggerBreakOnError":true, + "FFlagLuaDebugger":false, + "DFFlagLocalizationAnalyticsLetterContentOnly":true, + "DFStringCrashUploadToBacktraceBlackholeToken":"7705528468a303e4e34a13fbcf9e42e219633ed6868e143e5ab16cd33bd2a069", + "DFStringCrashUploadToBacktraceMacStudioToken":"71f38d9e22eac3ed9fdb80607d798f829e051303baa63cb9766e6f2e9d0584d8", + "DFStringCrashUploadToBacktraceLinuxRCCToken":"82fc562ca79e6df76a1add3c37aca015601a7326f48d4476fdc37bfe85e44673", + "FFlagDebugStudioReenableDeprecatedWebviewToolbox":false, + "DFIntDataStoreOrderedGetFixedRequestLimit":5, + "DFIntReportCharacterLoadTimeMetricsInverseProbability":1000, + "DFFlagCloudEditLogFailuresWithInflux":false, + "FFlagStudioAnimationEditorIKMode":true, + "FFlagStudioFixCallToAddItems":true, + "FIntPGSFrictionUpdatePeriod":4, + "DFIntBulletContactBreakOrthogonalThresholdPercent":200, + "DFFlagRotationalViscocityEnabled2":false, + "DFIntExpireMarketPlaceServiceCacheSeconds":60, + "FFlagInitializeBeforeAuthentication2":true, + "DFIntTimeBetweenCheckingApiAccessMillis":5000, + "FFlagDebugHumanoidRendering":false, + "FIntCameraMaxZoomDistance":400, + "FIntPartMinSizeMul1000":50, + "FFlagUseLargerFontAtlasOn3xDevices":false, + "DFIntPartStreamingGCMinRegionLength":2, + "DFFlagDebugSimulateHangAtShutdown":false, + "DFFlagDebugGameLoadDataStatisticsPerPlace":false, + "DFFlagThrottleDeveloperConsoleEvents":false, + "DFIntHttpRbxApiJobFrequencyInSeconds":1, + "DFIntMemoryPlaceIDReportThreshold":600, + "DFFlagTriangleFomatChecks":false, + "DFFlagDescendentChangedSignalEnabled":false, + "DFIntHttpMaxRedirects":10, + "FFlagFixIncorrectHangDetection":false, + "DFFlagVerifyWorldInTryFloor":false, + "DFIntBadLogInfluxHundredthsPercentage":0, + "FFlagHttpHttpAsyncQueue":false, + "FFlagConvertMyPlaceNameInXboxApp":true, + "FFlagFEForEveryone":true, + "DFIntHttpServicePermyriad2":100, + "FIntRenderTextureManagerBudget":0, + "FIntAppShellMemoryReportInitialDelay":10, + "DFFlagUseBitCountLimit":false, + "DFIntTattletaleMinimumClientCountWithServerVerification":1, + "DFFlagUseHttpsAnalyticsUrls":false, + "FFlagStudioSortAndSearchOnStartPageLastUpdatedOption":true, + "DFIntWebChatFilterHttpTimeoutSeconds":60, + "DFIntPointBalanceCacheInvalidateTimeMs":1000, + "DFFlagUseMegaReplicationCaching":true, + "FFlagFixCurrentScreenOrientation":false, + "DFFlagOrder66":false, + "DFFlagDebugDisableLogServiceExecuteScript":false, + "FFlagShowConnectionErrorCode":true, + "FFlagLuaSearchPageHandlesFailedRequests":false, + "FFlagLuaChatNotificationButtonEnabled":false, + "FFlagUseNewAppBridgeXbone2":false, + "FFlagFixLoadingScreenJankiness":true, + "FFlagLoadTheLoadingScreenFaster":true, + "DFIntUS20162Permyriad":0, + "DFFlagThrottleDebuggerMetrics":true, + "FFlagAvatarEditorSliderUIAdjustments":true, + "FFlagAvatarEditorCatalogRecommended":true, + "FFlagStatUtilsUseFormatByKey":true, + "FFlagAvatarEditorRecomputeCameraLookAt":false, + "FFlagUrlSupportNewGamesAPI":true, + "DFIntAccErrorDrainedThousandth":100, + "FFlagAvatarEditorAnthroSlidersUIOnly":true, + "FFlagStudioNotReturnStartPageFix1":true, + "FFlagNewDefaultScriptSource":true, + "FFlagGraphicsVulkanPVRWorkaroundRG":true, + "FFlagUseLDLPGSSolver4":false, + "FFlagAvatarEditorWhiteLineFix":true, + "FStringGetPlayerImageDefaultTimeout":"12", + "FFlagShadowBoxFix":true, + "FFlagTeamCreateDataStorePerKeyThrottleFixEnabled":false, + "FFlagAvatarEditorUsesBrowserWindowCall":false, + "FFlagStudioStopLoggingTeamCreateLocalCacheScriptIssues":false, + "DFIntNewSettingsEndpointExceptionInfluxPermyriad":10000, + "DFFlagFixCutAndUndoAfterSavingCSGUnionToNewFile":true, + "DFIntChatSignalMaxCachedRequestMilliseconds":5000, + "FFlagTextMeasureTemporaryPatch":true, + "FFlagFixTextLayoutWithUIScaleAssert":true, + "FFlagTextTruncationEnabled":true, + "FFlagLineHeightEnabled":false, + "FFlagStudioThumbnailImageRetryUrl":true, + "FIntSendScreenOrientationToEventIngestHundredthsPercentage":100, + "DFIntChatFilterMaxCachedRequestMilliseconds":5000, + "DFFlagRbxFormatMultiByteSizeFix":true, + "FFlagShowPlaceholderTextWhileFocused3":false, + "FFlagEnableSpecialMeshTransformInVoxelizerDescriptors":false, + "DFIntMaxLogHistory":512, + "FFlagUseTextLayout5":true, + "FFlagInsertInstanceRecommendedList":false, + "FFlagEnableDesktopMicroProfilerApi":true, + "FFlagXboxUseRobloxInput":false, + "DFFlagRaceConditionWithIs3D":false, + "FFlagAvatarEditorHideSliderHighlightOnInit":true, + "DFFlagSoundPreventRedundantWork":true, + "DFFlagWorkspaceNotificationMasterEnable":false, + "FFlagStudioFixCtrlShiftF":true, + "FFlagFixSurfaceGuisBreakingAfterRespawn":false, + "FFlagFixSmallSurfaceGuiMouseInput":true, + "DFIntTextScraperClientDataMSecs":1000, + "FFlagUseSafeZoneOffsets":true, + "FFlagFixStaleBillboardGuiPosition2":true, + "DFFlagHandlePlayerBlockListsInternalStrict":false, + "DFFlagDeferTerrainUpdate":false, + "FFlagRecalculateAbsolutePlacementFix":true, + "FStringStudioTutorialsSeeAllUrl":"https://wiki.roblox.com/index.php?title=AllTutorials", + "FFlagDebugPrintGuiStateTransitions":false, + "FIntFriendServiceCachedOfflineStatusCount":256, + "DFStringCrashUploadToBacktraceMacPlayerToken":"24cb37449e120c3a0618b1bf0585e339571828cae4dc73c7b8c99f67fcd751e9", + "FFlagCSGv2FixOrientationWhenSeparatingNegates":true, + "FFlagUseLuaAppStarterScriptOniOS":false, + "FFlagAvoidFindFirstChildCallsInGuiBase2d":true, + "FFlagStudioClearStartPageOnPlaceLoad":true, + "FFlagUserNoCameraClickToMove":true, + "DFIntPpjLeak":10, + "FStringDebugShowFlagState":"", + "SFFlagBodyColorsColor3PropertyReplicationEnabled":false, + "FFlagUserNewPoppercam":false, + "FIntPGSAlignmentConstraintsMaxCorrectiveAngle":3, + "DFFlagDistributeNetworkOwnershipServeronly":true, + "DFIntCrashUploadToBacktracePercentage":10, + "DFFlagFixInsaneInTheCFrameReplication":true, + "DFFlagInsaneInTheCFrame":true, + "DFIntDistToShowBufferCountSqr":0, + "DFFlagShowBufferCount":false, + "DFFlagPartInstanceCofMPropertyExposed":false, + "DFFlagFixTinyMeshScales":false, + "FFlagVideoDocumentationPluginEnabled":true, + "FFlagEnabledAppShell3D":true, + "DFFlagUWPReportTimeToFetchSettings":true, + "FIntLuaChatPlayTogetherThrottleAndroidTablet3":0, + "FFlagLuaChatPerformanceTracking":true, + "DFFlagFixCheckSeatTransitionEnabled":false, + "FFlagKeyframeSequenceApplyZeroWeight":true, + "FFlagFixVRScrollingFrames":false, + "FIntReleaseEventStreamThreshold":10, + "FFlagFixBoundSocket":false, + "DFFlagHttpAnalyticsType":false, + "DFIntHttpServiceProbeCapLimit":1000000, + "DFFlagDataStoreAutoHttpRetry":false, + "DFFlagAnalyticsDeferredEventIngestShutdown":true, + "DFIntAnalyticsMaxSendWaitTimeMs":1500, + "FFlagDebugDisplayFPS":false, + "FIntStudioUserNotificationMinReconnectTimerMs":1000, + "FIntDebugInternetSimulatorLatencyVariance":0, + "DFIntTextFilterMaxCachedRequestMilliseconds":500, + "FFlagStudioRobloxIDEDocDeleteThisFix":false, + "FFlagUseNewGoogleAnalyticsImpl2":true, + "FFlagNewABTestingEndpoint":false, + "DFIntRenderingThrottleDelayInMS":0, + "FStringLuaErrorsInfluxSeries":"LuaShellErrors", + "DFFlagCloudEditGARespectsThrottling":false, + "DFIntTexAtlasUpdateLineHeight":150, + "DFFlagNewHttpAnalytics":true, + "DFFlagAdditionalCheckC0":false, + "DFIntWebParserInfluxWriteNanInfPerMyriad":1000, + "DFIntNonSolidFloorPercentForceApplication":10, + "FFlagDebugGraphicsIntelCrash":false, + "FIntScriptAnalyzerIgnoreWarnings":0, + "DFIntNumberFramesSubmergedBeforeVSquaredViscocity":32, + "FStringSettingsHubInviteToGameThumbnailType":"", + "DFFlagPartyPooperSecurity":false, + "DFIntHttpConnectExtendedTimeoutMillis":600000, + "FFlagPGSAlign2AxesInitBasis":true, + "FFlagLuaChatPlayTogetherUseRootPresence":false, + "FFlagLuaHomeControlNativeBottomBar":false, + "FFlagStudioAutocompleteStopLosingModuleScriptDataOnClose":false, + "FFlagLuaChatSearchFeedBack":false, + "FIntPGSInsideOfSpherePenetrationResolutionDamping":7, + "FFlagDataModelForwardForceLocaleIds":true, + "DFIntLogGroupTeleportInfluxPerTenThousand":1000, + "DFFlagAnchoredSendPositionUpdate":false, + "DFFlagGroupTeleportMetricsByGroupSizeV2":true, + "FFlagStudioEnableCollisionGroupsEditorPlugin":true, + "DFFlagTeleportPartyAsyncEnable":true, + "DFIntConnectionMTUSize":0, + "FIntStudioTreeWidgetProcessingTime":100, + "FFlagUseOptimizedGetPartsObscuringTarget":true, + "FFlagStudioUpdateLastDirForSaveAsLocalPlugin":true, + "FFlagLuaChatGroupChatIconEnabled":false, + "DFIntTeleportPollinInterval":1000, + "DFIntMaxViscousForceGravityTimesMult":100, + "FFlagStudioAnimationEditorSetIntervalFix":true, + "DFIntShowTeleportFailedMessageTimeInMillisecond":3000, + "FFlagLuaUseWebPageWrapperForGameDetails":false, + "FFlagHoverAndPressedTextureSwap":true, + "DFFlagInfluxEnabled":true, + "FFlagSettingsHubPlayersHorizontalScroll":true, + "DFFlagFilterAllPlayerPropChanges":false, + "DFStringNewClientSettingsServiceHost":"clientsettingscdn", + "FIntStudioClientPresenceUpdateInterval":120, + "FFlagConnectionScriptEnabled":true, + "FFlagForceSetSizeOfErrorPrompt":true, + "FFlagLazyCreateErrorPrompt":true, + "FFlagStudioComponentRoundingFix":false, + "FFlagFixPgsState":true, + "FFlagReportAutoJointsModeJoinAll":false, + "FFlagFixScrollbarNotBeingDraggableWithUIPadding":true, + "FFlagExplicitAutoJointsForced":false, + "DFFlagCloudEditSaveFailureExtraInfo":false, + "FFlagExplicitAutoJointsDefault":false, + "FFlagScriptContextSearchFix":true, + "DFIntGetUserThumbnailMaxThrottle":20000, + "DFIntPhysicsImprovedCyclicExecutiveThrottleThresholdTenth":8, + "DFFlagLimitDepenetrationSpringStrength":false, + "DFIntProbeHttpRequestsPerMinuteLimit":1000, + "DFStringAdditionalBlacklistHeaders":"SOAPAction", + "FIntPercentReportingGamesListRTT":2, + "FFlagLuaAppGamesPagePreloadingDisabled":false, + "DFFlagNullCheckInReEnableWeldConstraint":true, + "FFlagStudioTutorialSeeAll":true, + "DFIntElevatedPhysicsFPSReportThresholdTenths":585, + "FFlagQuantumGui2":true, + "DFFlagLuaStrlibLimitMatchDepth":true, + "FFlagNavigationFixShutdown":true, + "FIntStudioMaxCommandHistorySize":50, + "FFlagInGameUIForceDefaultLocaleOnWin32":true, + "FFlagUserPortraitPopperFix":false, + "FFlagStudioRecomputeFoldState":true, + "DFFlagProtectNullRakPeer":true, + "DFFlagDebugReportElevatedPhysicsFPSToGA":true, + "DFIntHttpReportCacheStatisticsThreshold":32, + "DFIntHttpNewHundredthsPercentage2":0, + "FFlagStudioReportNewMeshUploaded":true, + "DFFlagPreventReturnOfElevatedPhysicsFPS":true, + "FIntPGSPenetrationResolutionDamping":7, + "FStringLuaAppsDiagErrorCounter":"LuaAppsErrorCount", + "DFIntInfluxTattletaleReportCommunitySiftOutputPermyriad":0, + "FFlagPackagesEnabled":false, + "FFlagStudioUseNewAPIsForInsertObjectWindow":true, + "FIntNumDummyJobs":0, + "SFFlagRemoveDistributedPhysicsBool":false, + "DFFlagServerGenPlayerXboxFixTag":true, + "FFlagLuaMathLibUseNewRNG":true, + "DFFlagDontSuggestUndoingPgs":false, + "DFFlagDebugThumbnailForceFailure":false, + "DFIntReportTeamTestFailurePermyriad":100, + "DFIntGetUserThumbnailMapSizeCap":500, + "DFFlagSmootherVehicleSeatControlSystem":true, + "FIntDiabolicalModeLatecyMinMS":300, + "FFlagRecordInGameDeaths":false, + "FStringServerConfigCloudEditServerSaveUrl":"/ide/publish/UploadFromCloudEdit", + "FFlagLuaAppRemoveGetFriendshipCountApiCalls":false, + "FFlagStudioDisableTabOnClose":false, + "DFIntGetUserThumbnailAsyncThrottleTime":3, + "FFlagArrowByGraphemesInTextbox":false, + "DFIntHttpServiceReportUrlHundredthsPercentage":0, + "FIntSettingsHubInviteToGameAndroid5":100, + "DFFlagThrottleGetUserThumbnailAsync":true, + "FFlagWeCanTouchTapInTheWorldNowNice2":true, + "FFlagUsePurchasePromptLocalization":false, + "FFlagPGSAdaptiveCollisionMarginFixEnabled":false, + "FFlagFixPreferredSoundDeviceVR":false, + "DFIntGetUserThumbnailAsync2ThrottleCountPerMinute":500, + "DFFlagDebugMechanismInterpolationWorldSpace":false, + "FFlagStudioScriptDocLocationDataContentsAboutToChangeCrashFix":true, + "DFFlagThrottleGetUserThumbnailAsync2":false, + "FIntSettingsHubInviteReleaseStreamTime":10, + "FFlagPassUserLocaleOnFilterMessage":true, + "FFlagForceSaveSelection":false, + "FFlagCSGv2SnapPlanes":false, + "DFFlagGiveControlToFFlagThatSwitchesSolverControl":true, + "FIntStudioPlaySoloGuestCharacterAppearance":15437777, + "FFlagCoreScriptTranslateGameText2":true, + "DFFlagCLI15496":false, + "FIntLuaAppNonFinalThumbnailMaxRetries":3, + "FIntPGSGyroscopicEffectPrecisionPercent":5, + "FIntStudioStartServerGirlGuestCharacterAppearance":15437741, + "FFlagBackpackScriptUseFormatByKey":false, + "FIntStudioStartServerBoyGuestCharacterAppearance":15437777, + "FFlagEnableGameSignalRWithWindows":true, + "FIntPercentReportingByCountryCode":100, + "DFFlagFixCharacterAppearanceLoadedEvent":true, + "DFIntWideToNarrowScaleInHundredths":0, + "FFlagStudioFixShareForU13":true, + "DFIntAnthroPercentInHundredths":0, + "DFFlagDebugPrintLagServer":false, + "DFIntTeleportPartyExpirationMillisecond":180000, + "FFlagStudioScopedWidgetDisabler":true, + "FFlagEnableGetAvailableForExperimentAPI":false, + "FFlagFixGuiStateTransitions6":false, + "DFIntRandomSpawnRetryTimes":20, + "FFlagStudioUseSingleStyleSheet":true, + "DFFlagGoodbyeChoiceActiveProperty":true, + "DFIntDataStoreOrderedSetPerPlayerRequestLimit":5, + "DFFlagGetTeamLazyEvaluation":true, + "DFIntRunningBaseOrientationP":100, + "DFIntHumanoidFloorTeleportWeightValue":50, + "FFlagBorderSizeRespectUIScale":true, + "DFFlagHttpNew2":false, + "DFFlagHttpReportStatisticsNew":false, + "SFFlagSendPlayerGuiEarly2":false, + "DFIntDataStoreTouchTimeoutInSeconds":5, + "FFlagDontLoadCoreScriptsFromRenderScheduler":false, + "DFIntHttpStudioInfluxHundredthsPercentage":1, + "DFIntTextScraperServerDataQSize":128, + "DFFlagDebugHttpSyncCallsForStatsReporting":false, + "FFlagScriptFullNameOnHover":false, + "FFlagStudioTeamCreateDisconnectRetryTimeoutSendThrottlingEvent":true, + "DFFlagPlayerGeneratedOnTheServerNoBacksies":false, + "FFlagHttpTrackSuccessfulUrls":false, + "FFlagR15ToArtistIntentAssetMigratorEnabled":false, + "FIntStudioAutomaticScriptRecoveryManagerTimeout":5000, + "DFIntHttpGAFailureReportHundredthsPercent":1, + "DFFlagUseCombinedAnimationEvent":true, + "FFlagAnimationEditorSnapIncrementsDivideByZeroFix":true, + "DFIntReportInfluxHundredthsPercentage":0, + "FFlagSplitTypesetter3":true, + "DFFlagRCCKickDuplicatePlayersOnJoin":true, + "DFFlagFixFreefallStuckIgnoreSelfContact":true, + "FFlagDebugRenderDisableWangMobile":false, + "FFlagCSGv2InGameEnabled":true, + "FFlagUseNonCollidableRootR15":false, + "FFlagDebugGraphicsDisableVulkan":false, + "DFIntSecondsPerBatchAwardPointsCall":10, + "FFlagLuaHomePageEnablePlacesListV1V356":false, + "FFlagNotificationScript2UseFormatByKey":true, + "DFFlagSendClientNewJoinData":true, + "FStringHttpRequestImplType":"", + "FIntNewDevConsoleMaxGraphCount":30, + "FFlagStudioUpdateAddRemoveTeamCreateWebEndpoints":true, + "FFlagStudioAnimationEditorScaleKeys":true, + "DFIntDataStoreOrderedGetPerPlayerRequestLimit":2, + "FFlagUserIsNowADynamicThumbstick":false, + "FFlagHttpSkipQueueIfCached":true, + "FFlagUserEnableDynamicThumbstickIntro":false, + "FIntFixForBulkPresenceNotifications":0, + "FFlagXboxUseNewBundleEndpoints":true, + "FFlagUseAdvancedCharacterScales3":true, + "DFIntConnectReportPermyriad":0, + "DFFlagDefaultArtistIntentJoints":false, + "FFlagUseAccuratePlaySoloForced":false, + "FIntXboxGameDetailsRefreshInterval":1800, + "FStringAnthroStandardPartIds":"532219986;532219997", + "DFFlagTrackHopperBinUsage2":true, + "DFIntPartSizeUnder0P2AnalyticsInfluxHundredthPct":100, + "FStringXboxSaleAvatarPackageIds":"", + "FFlagXboxUseNewGamesEndpoints":false, + "DFIntLandedBalanceD":50, + "FFlagXboxUpdateBadgeEndpoints":false, + "DFIntAnalyticsMaxShutdownWaitTimeMs":100, + "FFlagQuantumGuiTemporaryLoadingScreenFix":true, + "DFFlagGetJoinDataEnable":true, + "DFIntStreamingMemoryUsagePercent":50, + "FStringGetUserIdUrl":"users/get-by-username?username=%s", + "DFIntApiRateLimit":200, + "FFlagXboxUseCuratedGameSort2":false, + "FStringBgUpdateRedirectsDisable":"", + "FFlagStudioFixTimingOnPluginDockWidget":true, + "FFlagStudioUpdateProgressDontPumpEventLoop":true, + "DFIntAnalyticsDeferredEventIngestReportingIntervalSeconds":30, + "FFlagXboxRoduxScreenFocus":false, + "DFStringDataStoreThrottleMsg":"DataStore request was added to queue. If request queue fills, further requests will be dropped. Try sending fewer requests. Key =", + "FFlagPhysicsAnalyzerUsed":true, + "FFlagEnableQuickGameLaunch":false, + "FFlagEnableLuaGamesListSortsFix":false, + "DFIntSpecialFill":0, + "FFlagEnableLoadingHUDOniOSForGameShare":true, + "DFIntAnalyticsMaxEventIngestPostArrayLength":900, + "DFIntSolidFloorMassMultTenth":50, + "FFlagFixMissingStandardAnthroParts":false, + "FFlagRemoveLoadingHUDOniOS":true, + "FFlagStudioAddStackedWidgetForMainView":true, + "FFlagPGSOrientationConstraintAngleComputationFix":true, + "FFlagAppShellReporterMonitorFrameTimeAndroid":false, + "FFlagUseLuaGamesPageOnAndroidPhone":false, + "FIntStudioInsertDeletionCheckTimeMS":30000, + "DFIntTattletaleMaxInstancePathLength":512, + "FFlagUseLuaHomePageOnAndroidTablet":false, + "FFlagLuaCorrectContextualMenuPosition":false, + "DFIntLatencyErrorMultiplierTennths":20, + "DFFlagReplicatorFixBadPacketSnprintf":true, + "FIntLuaHomeMaxFriends":9, + "FFlagLuaHomePageFriendWindowing3":false, + "DFFlagUseUNSPEC1":false, + "FFlagFixMouseServicePropChanges":true, + "FIntWeldConstraintAdornSize":10, + "DFIntLuaGcMaxKb":100, + "DFIntRCCInfluxHundredthsPercentage":1000, + "DFFlagNamesOccludedAsDefault":true, + "DFFlagStudioApplyScriptEditsWithoutGivingUpLock":true, + "FFlagLuaAppPeopleListV1":true, + "FFlagUseLuaGamesPageOniPhone":true, + "DFIntPlaceLauncherExceptionInfluxHundredthsPercentage":0, + "FFlagLocalizationTableImportStrict2":false, + "FIntFRMRecomputeDistanceFrameDelay":100, + "FFlagStudioMaximizeButtonForAllDockWidgetsEnabled":false, + "FFlagUseLuaHomePageOniPhone":true, + "DFIntBroadPhaseIslandAlwaysSimulateDepth":1, + "DFStringTelegrafAddress":"ec2-54-165-151-168.compute-1.amazonaws.com", + "DFIntMaxDataPayloadSize":96000000, + "FFlagUseLuaHomePageOniPad":false, + "DFStringHttpInfluxDatabase":"prod", + "DFStringDefaultCustomAnimationType":"True", + "DFFlagPlayHereFix":false, + "FFlagDebugNavigationDrawNavMeshConnections":true, + "FFlagGuestFriendCheckFailImmediate":true, + "FFlagStudioEnableLuaAPIsForThemes":true, + "FFlagPassDataModelDPIScale":true, + "FFlagDebugNavigationDrawEnable":true, + "FFlagLuaAppRemoveFitScrollingFrameFromCarousel":true, + "DFFlagFixCustomWeldSeatPart":true, + "FFlagFixInactiveSelectorArrows":false, + "FFlagStudioReportAllApplicationLocationsOnCrash":false, + "FIntPercentReportingGamesSortsRTT":20, + "FFlagLuaAppUseRequestInternalWrapper":false, + "DFIntHttpRbxApiMaxSyncRetries":3, + "FFlagLuaAppRefreshScrollingFrameRefactor":true, + "FFlagLuaHomePageShowFriendAvatarFace150By150":false, + "FFlagFixBindActivateStackOrderCAS":true, + "FIntNewDevConsoleMaxLogCount":500, + "FFlagEnableNewDevConsoleDataOnInit":false, + "FFlagStudioStartPageAnalyticsFinalFix":true, + "DFIntExternalHttpResponseSizeLimitKB":4096, + "FIntLuaChatPlayTogetherThrottleiOSPhone3":0, + "FFlagDonotAllowTeleportInRobloxStudio":true, + "FIntStudioMaximumPasswordLength":1000, + "FFlagLuaChatCheckIsChatEnabled":false, + "FFlagStudioUseNewAPIsForScriptColors":true, + "DFFlagPrepareClientForNewJoinData":true, + "FFlagLuaChatFlexibleTitleWidth":false, + "DFIntDebugProfilerFramesToCapture":60, + "FIntStudioWebDialogMinimumHeight":480, + "FFlagLuaChatIcebreaker":false, + "FFlagLuaChatReplaceAvatarBorderAndBackground":false, + "DFStringCustomAnimationTypeAllow":"True", + "FFlagLuaChatActiveConversationId":false, + "FFlagLuaChatFixAssetCardResizeTruncation":false, + "DFIntScriptContextShutdownTimeoutSeconds":30, + "FFlagLuaChatLoadGameLinkCardInChatAnalytics":true, + "DFFlagFixSloppyWeakPtrs":true, + "FFlagLuaChatToastRefactor":false, + "DFStringDeveloperProductPurchasePath":"marketplace/submitpurchase", + "FFlagLuaChatReplacePresenceIndicatorImages":false, + "FFlagUserAllCamerasInLua":true, + "FFlagStudioDoNotEndBlockForFunctionArgs":false, + "FFlagLuaChatSortFriendsForConversation":false, + "DFFlagDebugSimulateHangAtStartup":false, + "DFFlagSpecificGravityDummyFunctionGA":true, + "FFlagStudioABTestFramework":false, + "FFlagLuaChatCreateChatUserScrolling2":false, + "DFIntWaterViscosityDragFudgeFactor":10, + "FFlagHarfbuzzEnabled5":true, + "FFlagLuaChatUseCppTextTruncation":false, + "FFlagCSGLoadBlocking":false, + "FFlagPGSAlwaysActiveMasterSwitch":false, + "DFIntHttpResponseExtendedTimeoutMillis":600000, + "DFIntAnalyticsDeferredEphemeralReportingIntervalSeconds":30, + "FFlagRestrictSales2":false, + "SFFlagUseNativePathWaypoint":true, + "FFlagLuaChatRefactoredChatInputBar":true, + "FFlagStudioUseAccuratePlaySoloAnalytics":true, + "FFlagFixG3DFpChecks":true, + "FFlagLuaChatShareGameToChatFromChat":false, + "FFlagStudioTeamCreateAllowTakingLockFromInActivePlayerFix":true, + "FFlagAvatarEditorUseNewR15Model":true, + "DFFlagSendFrameTimeBreakdowns":true, + "FFlagEnableAEAndroidBackButton":true, + "FFlagUseNewAELoadTimeMetrics":false, + "FFlagNoCacheForLocalContent":false, + "DFFlagDebugDisableAngularVelocityInterpolationComponent":false, + "DFFlagStreamCountClustersInClientQuota":false, + "DFFlagThisJointAintBigEnoughForTheTwoOfUs2":false, + "FFlagAvatarEditorSelectivelyUseDefaultAsset":true, + "DFIntTouchPermyriad":0, + "FIntHttpInfluxClientExceptionStatusCode":0, + "FFlagAvatarEditorDefaultTabSelection":true, + "FFlagRenderIC1BouncingEnabled":true, + "FFlagLuaAppLegacyInputDisabledGlobally2":true, + "DFIntHttpSendStatsEveryXSeconds":300, + "FFlagLuaUseUtf8TextTruncation":true, + "DFIntPGSJumpForceAdjustment":520, + "DFIntCrashUploadArchiveAfterErrorsDelaySeconds":86400, + "FFlagEnableResponsiveUIFix":true, + "FFlagLuaChatAddToStringWhenUpdatingPresence":true, + "FIntDebugNavigationMaxMemoryUsageInBytes":52428800, + "FStringSettingsHubInviteToGameThumbnailSize":"Size150x150", + "DFFlagEnableMeshHeadNative":false, + "DFIntActionStationDebounceTime":2, + "DFIntHttpRbxApiRequestsPerMinuteServerLimit":300, + "FFlagDebugAnalyticsForceLotteryWin":false, + "FStringStudioGameSettingsExperimentalModeToolTip":"When turned on, the game server is not authoritative of changes, meaning that LocalScripts on clients can take any arbitrary actions they like. It is highly recommended to turn off Experimental Mode before opening a game to the public.", + "DFIntDataStoreRefetchPerPlayerRequestLimit":5, + "DFFlagFileSystemGetCacheDirectoryLikeAndroid":false, + "FFlagEnableLocalizationForToolbox":false, + "DFFlagAllowJoinsToWait":true, + "FFlagFriendPlayerPromptUseFormatByKey":false, + "FFlagLuaAppEnableStopWatchReporter":false, + "FFlagFixTextAsserts5":true, + "FIntStudioUserNotificationReconnectTimerIncrementMs":5000, + "FIntPGSAlign2AxesCorrectionDamping":10, + "FIntWeldConstraintAdornHighlightedPartSize":2, + "FIntZoomOutDistance":500, + "FFlagStudioSortAndSearchOnStartPageV2":true, + "FFlagLoadingScreenUseLocalizationTable":true, + "FFlagFixUsersReducerDataLoss":false, + "FFlagEnableNewDevConsole":true, + "DFIntDataStoreRetryWaitTimeMSec":500, + "DFFlagAllowTeleportsToWait":false, + "FFlagEnableLuaEventStreamRelease":true, + "FFlagSafeScalePartFail":true, + "FFlagStudioPreventScriptDocDoubleOpening":true, + "FIntStudioAutocompleteNumMaxLineForParamSearch":10, + "FFlagFreeCameraAPI":true, + "FFlagTextBoxOverrideManualFocusRelease":false, + "FFlagIWannaBeTheVeryBestThumbstick":false, + "DFIntLimitReplicatorState":0, + "FFlagFixGamepadNavigationInVR":true, + "DFIntGettingUpBalanceP":2250, + "FFlagPGSConstraintConeLimitFix":false, + "FIntLuaChatPlayTogetherThrottleiOSTablet3":0, + "SFFlagTerrainRaycastsRespectCollisionGroups":false, + "FFlagEnableLoadingScreenPlaceIconTween":true, + "FIntGoogleAnalyticsLoadLuaShell":1, + "FFlagAdvancedMouseSensitivityEnabled":true, + "DFIntTextScraperServerDataNBytes":1000, + "FFlagEnableGameSignalRWithAndroid":true, + "FIntStudioMeshPartScaleValue":5000, + "FFlagAvatarEditorRoactRewrite":true, + "FStringStudioTutorialsDevHubUrl":"https://www.robloxdev.com/learn-roblox/studio-basics", + "DFStringCustomAnimationField":"allowCustomAnimations", + "FFlagChatServiceAnalyticsOnFilterStringCalls":true, + "DFStringAvatarJointPositionsArtistIntent":"ArtistIntent", + "DFIntBgUpdateRedirectsHttpErrInfluxHundredthsPercentage":100, + "DFIntNetworkStreamingGCMaxMicroSecondLimit":4000, + "FIntAppBridgePlaceLaunchExponentialBaseFraction":3, + "DFIntSoundServiceCacheCleanupMaxAgeDays":7, + "FFlagDisablePlayerScriptWhenDisconnected":false, + "FFlagStudioPatchOpenedScripts":false, + "DFIntR15DefaultCollisionType":0, + "DFIntRunningBaseAltitudeP":3000, + "FFlagImprovedAutoJump":false, + "FFlagStudioIndentIfLineEndsWithFoldEnder":false, + "DFIntOnCloseTimeoutInSeconds":30, + "FIntInGameGlobalGuiInset":36, + "FIntStudioUserNotificationMaxReconnectTimerMs":50000, + "DFIntMaxDataPacketPerSend":1, + "FIntGamePerfMonitorReportTimer":99999999999999999999999, + "FFlagImporterUseAnthroProportions":false, + "FFlagStudioInsertObjectMenuButton":false, + "FIntPGSPenetrationMarginMin":100, + "FFlagCoreScriptsUseLocalizationModule":true, + "FFlagContentProviderTempDirWithPid2":true, + "DFIntContentProviderThreadPoolSize":16, + "FIntPhysicsBulletManifoldPoolSize":1024, + "DFIntRakNetResendMaxThresholdTimeInUs":2000000, + "FFlagCallPlaceLauncherFromMainThread2":true, + "DFIntLinearToVSquaredVelocityThresholdMinTenths":20, + "FFlagMemoryFromAppShellReporterAndroid":false, + "FFlagStudioMoreRPCLogging":false, + "DFFlagUploadPlaceNoStream":false, + "DFFlagNoDSPOnServer":true, + "DFFlagBadCoreScriptCrashFixEnabled":true, + "FFlagStudioRemoveDuplicatesInRestoreStateQtFixEanbled":true, + "FIntAppShellMemoryReportPeriodicity":120, + "DFIntTextSizeLimit":16384, + "FIntAppShellFPSReportPeriod":120, + "FFlagDatamodelServicesConnectionFix2":true, + "DFFlagPhysicsSkipNonRealTimeHumanoidForceCalc":false, + "FFlagEnableGameSignalRWithUWP":true, + "FFlagHarfbuzzEnabledInGame":true, + "DFIntHttpRbxApiClientPerMinuteRequestLimit":300, + "FFlagLuaChatPlayTogetherJoinGameInstance":false, + "FFlagStudioShortcutDuringGameDefaultFalse":false, + "DFFlagUWPAlsoFetchSettingsFromNewEndpoint":true, + "FFlagImageHandleAdornUseGuiImage":true, + "DFIntGlobalLeak":100000000, + "DFFlagReportClientMemoryCat":true, + "FFlagStudioPublishScriptsBeforeTurnOffTeamCreate":true, + "FFlagPlaceLauncherSetCurrentGameEntryOnceOnTeleport":true, + "FFlagJoinTime_LocalUserTexturePriority":true, + "FFlagUIShiftScrollHorizontal2":true, + "FFlagAutocompleteRefactorAssertFix":false, + "FFlagWebkitDeveloperToolsEnabled":false, + "FFlagTextTruncationEnabledInGame":true, + "DFIntDataStoreMaxRetryCount":5, + "FIntStreamOutCompressionIdListLengthThreshold":250, + "DFIntPacketErrorInfluxHundredthsPercentage":10000, + "FFlagTextBoxManualFocusRelease":true, + "FFlagEnableGameSignalRWithOSX":true, + "FFlagDebugNavigationDrawTileBounds":false, + "FIntRakNetDatagramMessageIdArrayLength":512, + "FFlagLogClientLoadToAvatarLoad":false, + "DFIntTeleportExceptionInfluxHundredthsPercentage":9000, + "DFIntTeleportRetryTimes":5, + "DFIntMadnessPermyriad":0, + "FFlagSystemErrorMessageLocalize":false, + "DFIntDataStoreRefetchFixedRequestLimit":30, + "DFStringCopyrightKey":"RBX-Content-Protected", + "FFlagStudioTeamCreateWidgetBottomButtonClickCrashFix":true, + "DFIntMinimumFreefallMoveDistanceInTenths":5, + "FFlagStudioWorkspaceFilteringEnabledOnNewPlaces":false, + "DFIntStudioPercentScaleRepeatCount":140, + "FIntPGSVStageStiffnessConservativeValue":99000, + "DFFlagInfluxOverTCP":false, + "FIntAppBridgePlaceLaunchMaxTotalSleepTime":0, + "FIntAppBridgePlaceLaunchMaxRetries":5, + "FFlagShareOnStartPageAnalyticsFixV2":false, + "FFlagFixInputCanSinkCAS":true, + "FFlagStudioFixBindToCloseOnDm2":false, + "DFIntDynamicLocalizationTablesDataTimeout":5, + "DFIntUserHttpRequestsPerMinuteLimitZ":2000, + "FFlagStudioUseNewThemeAPIsInStudioCode":true, + "DFIntSendHttpBodyOnFailureMaxBytes":128, + "DFFlagSafeSwimmingJump2":false, + "FFlagCSGUnionsSizeShouldNeverBe000":false, + "FFlagSettingsHubInviteToGameInStudio4":true, + "DFStringCrashUploadToBacktraceWindowsPlayerToken":"417ecb0fbc032ce087e6af3b780c298e3356089f050c8130d2318109e80417a4", + "FFlagClientFireEventPlaceLauncherFail3":true, + "FFlagResetMouseDeltaFix":false, + "FFlagDebugRenderDragAxis":false, + "DFFlagNavigationServiceAnalytics":true, + "FFlagStudioDefaultAPSOn":true, + "DFStringLocalizationServiceOverrideLocale":"es", + "FFlagFixLineHandleAdornmentsNearPlane":true, + "FFlagDebugStudioUseModelPublishAsPackagePublish":false, + "FFlagQuantumGuiEnabledInApp":false, + "FFlagStudioBetterRBXMessageBox":true, + "DFFlagUseHttpDefaultUrlSchema":false, + "FIntXboxPresencePolling":120, + "FFlagStudioTabCloseButtonObjectName":true, + "FFlagRakNetSupportIpV6":false, + "FFlagStudioPreventPluginSettingsCorruption":false, + "FFlagCSGv2UseImprovedSphereAndCylinder":true, + "FIntDiabolicalModeEnable":0, + "FFlagEnableGameSignalRWithiOS":true, + "FFlagAdjustHipTranslationBasedOnHipHeight":false, + "FFlagUserNavigationFixClickToMoveJump":true, + "FFlagStudioAsyncLambdaCallbackWithQPointerThisFix1":true, + "FStringPerformanceSendMeasurementAPISubdomain":"www", + "FFlagTestForBadNormal":false, + "FFlagLuaChatNewPageSlidingTransition":true, + "FFlagHarfbuzzEnabledInApp":true, + "FIntHttpCacheRedirectsTimeoutMs":30000, + "FFlagAvatarEditorUseArtistIntentFolder":true, + "FFlagUseSortForClient":false, + "FFlagRenderConstraintsWithDepth":false, + "DFIntInfluxTattletaleV2Permyriad":10000, + "FFlagRefactoringAvatarEditorSetup":false, + "FIntSpeedTestPeriodMillis":1000, + "DFIntCreatePlacePerPlayerPerMinute":1, + "FIntStudioLongCacheRecoveryTime":3600, + "FFlagStudioBulkImportAlpha":false, + "DFIntInsertServiceErrorInfluxHundrethsPercentage":0, + "FFlagServerGeneratesPlayer4":false, + "FFlagStudioAddLinkedAssetsFolder":false, + "DFIntOnDisconnectHTTPTimeout":2000, + "FFlagStudioUseLuaGameSettingsDialog":true, + "FFlagStudioFixPackageDuplicationInRGE":false, + "FFlagUseSelectionServiceToShowScriptInExplorer":false, + "FIntStudioStopOSXReportingForOSAtAndBeforeMinor":8, + "FIntStudioStopWindowsReportingForOSAtAndBeforeMinor":0, + "FIntCLI20390":20, + "DFFlagAlternateScalingForNativePartsV3":false, + "FIntStudioStopWindowsReportingForOSAtAndBeforeMajor":6, + "FIntPGSPenetrationMarginMax":50000, + "DFIntNumFramesAllowedToBeAboveError":10, + "FFlagDisconnectUseConnectionErrorCode":false, + "DFIntNewRunningBaseAltitudeP":30000, + "FFlagSolverHotSwappingEnabled2":true, + "DFIntBadgeInfoCooldownTime":5, + "DFIntBulletContactBreakOrthogonalThresholdActivatePercent":200, + "DFFlagUseDeltaForFBAdorn":false, + "DFFlagGroupTeleportMetricsSuccessAndFailure":true, + "FFlagAddEndedSignalToSoundJobStudio":true, + "FStringStudioTutorialsTOCUrl":"https://wiki.roblox.com/index.php?title=Studio_Tutorials_Landing&studiomode=true", + "FStringLuaAppsDiagPageLoadTimeHome":"LuaAppsPageLoadTimeHome", + "FFlagDoNotDeleteSelectionOnTab":false, + "DFIntBroadPhaseIslandBufferZoneMinPartLimit":0, + "FIntGameViewItemCap":10000, + "DFIntNoTouchOneSecondYVelocityThresholdInHundredths":10, + "FFlagLuaAppSiteMessageBannerEnabled":true, + "FFlagStudioEnablePlayerLocaleViewPlugin3":true, + "DFIntMaxClusterKBPerSecond":400, + "FFlagStudioUseAnalysisReceiverClass":true, + "FFlagStudioShareFromRibbonBarUXChanges":false, + "DFFlagReplicatedEventsUseSharedArgs":true, + "DFFlagDebugAnalyticsSendUserId":true, + "FFlagAnimationEditorNewWikiDocumentation":true, + "FFlagStudioReportOSArchToGoogleAnalytics":false, + "DFFlagPreserveJointsOnSpawn":true, + "FFlagPluginDragApi":true, + "FFlagStudioBlockAnalyticsBasedOnOS":false, + "FFlagStudioFixAutocompleteEnabledSetting":true, + "DFIntCacheDirectoryExceptionInfluxHundredthsPercentage":0, + "FIntStudioSyntaxCheckTimerInterval":500, + "FFlagUserNavigationFixClickToMoveInterruption":true, + "DFIntHttpDataSendExtendedTimeoutMillis":600000, + "DFIntHttpServiceErrorCapLimit":1000000, + "FFlagStudioUseNewAPIsForStartPage":true, + "DFFlagPGSWakeOtherIfOneAssemblyIsAwake":false, + "DFStringAvatarJointPositionsFixed":"Fixed", + "FFlagLuaChatPlayTogetherPlaceIdHackFix":false, + "DFFlagFixDuplicateServerLogRequests":false, + "FFlagStudioDoubleClickFlag":true, + "FFlagShareOnStartPageAnalyticsFix":false, + "DFIntNavigationServiceAnalyticsIntervalMillisec":60000, + "FFlagStudioPluginNativeCursors":false, + "DFFlagDebugVisualizationImprovements":true, + "FIntDebugInternetSimulatorPacketlossHundredth":0, + "DFIntTeamCreateTimeOutInSec":60, + "FFlagStudioCrashPlayersDataManagerUpdatePlayersInfoFix":true, + "FFlagAddSymbolicLinkManagement":false, + "FFlagStudioEnableWebKitPlugins":true, + "FFlagWarnOnNoCoreFunction":false, + "DFIntReportDeviceInfoRate":100, + "FStringStudioTutorialsUrl":"https://wiki.roblox.com/index.php?title=Studio_Tutorials_Test&studiomode=true", + "DFIntHttpServiceConcurrentThrottleInfluxPermyriad":0, + "DFFlagReportDataPingByPlayerBin":true, + "DFFlagCSGv2UseQuadricPosition":false, + "FFlagHelpMenuShowPlaceVersion":true, + "FFlagStudioShareModalWindowCrashWhenFetchIconFix":true, + "DFFlagLockViolationInstanceCrashStudio":false, + "DFIntHangDetectionTimeoutMs":180000, + "DFIntAvatarJointPositionsDefaultType":0, + "DFFlagNonJsonParseType":false, + "DFIntWaitGetInQueueTime":200, + "DFIntTextScraperClientDataQSize":128, + "FFlagStudioTutorialsUseDevHub":true, + "DFIntHttpBatchLimit":128, + "DFIntSendRakNetStatsThrottleStreamingOverride":1, + "DFFlagDebugGAReportThrottledSessions":true, + "DFIntPrimStatsGANumDelimited":3000, + "FStringGetUserThumbnailAsyncRetryTime":"4", + "FIntAdvancedRCCLoadFMODRetryCount":3, + "FIntInterpolationAwareTargetTimeLerpHundredth":13, + "FFlagGetDefaultClothesFromWeb":true, + "DFFlagNewClientSettingsServiceConfigurableHost":true, + "FIntLuaErrorsInfluxThrottling":1, + "DFFlagPGSSolverSimIslandsEnabled2":true, + "FFlagChatServiceInstallerExemptLocalizationFromAnalytics":true, + "DFIntReportTeamCreatePostFailurePermyriad":100, + "FFlagStudioDontAssertWhenQmlCannotLoadImages":true, + "FFlagDebugStartMicroProfilerWebServer":false, + "FFlagStudioAsyncLambdaCallbackWithQPointerThisFix2":false, + "DFStringOverrideSendRakNetStatsThrottleCountries":"CN,50", + "FFlagWeDontWantAnyGoogleAnalyticsHerePlease":false, + "FFlagDebugDoNotLoadHumanoidSounds":false, + "FIntXboxAvatarPaneRefreshInterval":1800, + "FFlagStudioAnimationEditorWarnForPastingOutOfBounds":true, + "FFlagStudioFixScreenShot":true, + "DFIntGetUserThumbnailThrottleExponent":1500, + "DFIntAnalyticsMaxDeferredStats":50, + "DFIntUnstickForceDecayInTenths":9, + "FFlagFixButtonR2MouseClickOnGui":false, + "FFlagStudioStartPageUiFixes":true, + "DFFlagDeprecatableBroadcasts":true, + "FIntStudioBulkImporterMockUploadTimeInMs":0, + "DFIntUserHttpRequestsPerMinuteLimitM":0, + "FFlagLuaChatFriendIconRefactor":false, + "FFlagStudioLeaveScriptsOpen":true, + "DFFlagCLI120342p2":true, + "FIntStudioStopOSXReportingForOSAtAndBeforeMajor":10, + "DFStringCollideInnerBox":"InnerBox", + "FIntCameraFarZPlane":100000, + "FFlagStudioFixShareIcon":true, + "FFlagEnsureVisibleOnFindResult":false, + "DFIntWriteFullDmpPercent":0, + "FFlagFixScrollingTouchInputEnded":false, + "FFlagStudioHttpUpgradeToHttps":false, + "DFIntQKick":3072, + "FFlagScrollToTopShortDistanceResponseFix":true, + "FFlagStudioStopDoubleUserActionReporting":true, + "DFFlagUseSpecificContentTypeForAbuseReports":false, + "DFIntGlobalFill":0, + "FFlagStudioUIEditorRotateV2":false, + "FIntSpeedCountCap":5, + "FFlagStudioAutocompleteRefactorFasterEnumLookup":false, + "FFlagStudioCommandBarButtonText":true, + "FFlagRCCSupportTeamTest":true, + "DFFlagForceUseProductionForAssetFetching":false, + "FIntStudioTreeWidgetFilterTime":30, + "FStringToolboxInLuaWidgetMacOSABTest":"AllUsers.Studio.ToolboxInLuaWidgetMacOS", + "FIntStudioRobloxAnalyticsLoad":100, + "FFlagStudioAnimationEditorParentScaledDragArea":true, + "FFlagAnimationEditorCutCopyEntireKeyframes":true, + "DFFlagBodyColorsColor3PropertyReplicationLogicEnabled":true, + "FFlagFixParentChildInsert":false, + "FIntAppBridgePlaceLaunchRetryWaitInSec":1, + "DFIntReportTeamCreatePublishFailurePermyriad":100, + "DFIntCSGv2OperationInfluxHundredthsPercentage":10000, + "FFlagFixOutOfBoundsMouseLocation":true, + "DFIntStreamedRegionGCFactor":250, + "FFlagStudioOnlyShowPackageLinkIfPackageOwner":false, + "FIntStudioBootstrapperVersionNumber":52886, + "FIntStudioRPCMessageResponseTimeOut":30000, + "DFIntReportCloudEditJoinFailureReportPerMyriad":10000, + "FFlagDebugGraphicsGLDisableDiscard":false, + "DFIntLoginFailureStudioInfluxDbHundredthsPercentage":10000, + "FFlagStudioExtDebuggerClientCrashFixEnabled":false, + "FFlagStudioRobloxIDEDocShareModalWindowDeleteThis":false, + "DFFlagDataStoreMinMaxErrorEnabled":false, + "FStringToolboxInLuaWidgetWinABTest":"AllUsers.Studio.ToolboxInLuaWidgetWin", + "FFlagDebugNavigationDrawCompactHeightfieldLayerSet":false, + "FIntStudioAuthenticationTimeoutMs":10000, + "FFlagDebugLocalRccServerConnection":false, + "DFFlagCSGv2SkipDegenerateTriangles":true, + "DFFlagFixCharacterAppearanceLoadedEvent2":false, + "DFFlagStudioTrackDeadRobloxIDEDocsThrottleEvents":false, + "FFlagFixScrollingFrameClipRect":true, + "DFIntMaxHttpResultResponseSize":500, + "FFlagStudioStartPageUsePlainText":true, + "FIntLuaChatPlayTogetherThrottleAndroidPhone3":0, + "DFFlagDoNotRunAnimationEditorInPlayMode":true, + "FStringDebugStudioPlayerConnectToServerIPAddress":"", + "DFFlagNoInfiniteLoopOnChatInfoLoadFailure":true, + "FFlagStudioAnimationEditorMultiSelectJoints":true, + "DFFlagReplicatorEventDoNotVerifyInstanceStillReplicationContainer":true, + "FStringStudioDefaultNewTemplatePlaceId":"95206881", + "DFFlagDynamicLocalizationTablesEndpointStressTest":false, + "DFFlagSpecificGravityDummyReturnsZero":false, + "FIntStudioPartSizeCameraDistRatio":30, + "DFFlagDebugEnableReportPlaceIDAboveMemory":false, + "FIntTaskSchedulerTasksDefaultMaxTimeMsPerCycle":10, + "FFlagStudioStartWithGameLocaleId":true, + "FFlagDebugBreakOnFMODErrors":true, + "FFlagDebugReportPhysicsMissingPlaceSpecific":false, + "DFStringCollideOuterBox":"OuterBox", + "DFIntSpecialLeak":111111, + "FFlagFixIncorrectScrollingFrameBounds":true, + "FFlagStudioRemoveInsertEvent":false, + "DFFlagFixCharacterJitterDownStairs":false, + "FFlagStudioUIEditorZoomPanel":false, + "FIntOptimizedContactPipelineSpatialHashOverlapToleranceMicro":10000, + "DFIntGettingUpBalanceD":50, + "DFFlagFixStudioPositionAndOrientationPropertyWeldConstraints":false, + "DFFlagCalculateExpirationOnTheDestinationServer":true, + "FFlagStudioAllowMouseTrackingOnMac":false, + "FFlagReportRuntimeJoinCount":true, + "FFlagLoadTimesFromAppShellReporter":true, + "DFIntSmoothTerrainPhysicsRayAabbSlop":1, + "DFFlagFireCharacterAddedAfterSpawn":false, + "FIntUIQuadTreeCellAreaMin":20000, + "DFFlagHttpServiceRequestAsyncError":true, + "DFFlagTheseAnalyticsAreBigEnoughForTheTwoOfUs2":false, + "FFlagDebugScriptAnalyzer":false, + "FFlagPreventCommandLineRaceCondition":true, + "FFlagStudioForwardForceLocaleIds":true, + "FIntStartupInfluxHundredthsPercentage":100, + "FFlagStudioDeprecateUIThemeProperty":false, + "FFlagUseGamePerfMonitorWithAppShell":false, + "FFlagThwartPurchasePromptScams":true, + "FFlagCrashReporterNew":false, + "FIntPGSPenetrationMarginMaxBump":5, + "DFIntHttpRbxApiMaxRetryQueueSize":500, + "FFlagLogCorectTeleportFailureMessage2":true, + "FFlagEnableAutomaticScalingEnabled":true, + "DFFlagAllowMultipleHangReports":false, + "FFlagReportJoinAllCount":true, + "DFFlagHttpBatchSecure":true, + "FIntStudioTeamCreateDisconnectHandlingMaximumRetries":120, + "FFlagLuaChatDisplayInFront":true, + "FFlagXboxAvatarEditorOutfitThumbnailFix":false, + "FIntPGSConeLimitMaxCorrectiveAngle":15, + "FFlagMemoryFromAppShellReporterIOS":false, + "DFFlagLockViolationInstanceCrash":false, + "FFlagUseAvatarAPIAvatarFetch":true, + "FFlagStudioOnlyRefreshWhenAddingNewPackages":false, + "FFlagLuaSearchPageDispatchesInitialSearch":true, + "FFlagJoinTimeCounters":true, + "FIntPGSVStageStiffnessEasingUpToAggressive":10, + "FIntStudioThumbnailImageRetryMaximum":3, + "DFIntRetryBaseTimeMSec":1000, + "FFlagProcessStarterGuiInEditMode":true, + "FFlagUnlockedTopbarTransparency":true, + "DFIntAvatarAPIAvatarFetchRollout":0, + "FFlagCSGv2UnparentPartsBeforeModifyingCFrames":true, + "DFFlagCLI16089_2":true, + "DFIntHttpConnectDefaultTimeoutMillis":60000, + "FFlagStudioLogIsVIPDeveloper":true, + "FFlagStudioFbxImportVerboseErrorOnLoad":true, + "FFlagDebugAdornsDisabled":false, + "FFlagLocalizationAppendFunctionsAlwaysAppend":true, + "FFlagDebugSendAttemptsToDiagCase1":false, + "FFlagStudioPackagesUsePrimaryPartAsBaseInModel":false, + "FFlagAutocompleteRefactorCheckScriptCreatable":false, + "FFlagOutputWidgetFindEnabled":false, + "FFlagCSGv2EnableEmptyMeshError":true, + "FFlagSetMouseInputStateLater":true, + "FStringDiabolicalModeWhiteLists":"", + "FFlagStudioShowLocalFilePathOnStartPage":true, + "FIntMaxSpeedDeltaMillis":300, + "FIntStudioSecondsBeforeInactive":300, + "FFlagPassDataModelInitializationParamsEvenMore":false, + "FFlagDebugStartPageRefreshOnF5":false, + "FFlagSpringConstraintInGameAdornFix":true, + "FIntFriendRequestNotificationThrottle":5, + "FFlagAnimationEditorLuaWidgetsVersion":true, + "FFlagStudioRefreshInsertServiceDialog4":true, + "FIntStudioTreeWidgetEventProcessingTime":10, + "FStringStudioDebugBTID":"StudioDebugBTID", + "FIntStudioGuiObjectSecondRectOffset":4, + "DFIntCrashUploadHttpResponseDefaultTimeoutMillis":80000, + "DFIntTattletaleMaxTextLength":1024, + "DFFlagEnableSitNilProtection":true, + "FIntHttpClientHandlerFixed":1, + "FIntStudioWebDialogMinimumWidth":970, + "FIntStudioBulkImporterMaxJobs":50, + "FFlagWeldConstraintAdornImprovements":true, + "DFFlagImproveTimeStamp":false, + "FFlagStudioInsertObjectWindowShortcut":false, + "DFFlagSendServerPerfInfo":true, + "FFlagLuaChatUseNewFriendsAndPresenceEndpointV356":true, + "FFlagReleaseAllEventStreamsEnabled":true, + "FFlagBestProximatePartFix":true, + "DFFlagCloudEditPublishNoStream":false, + "FFlagCheckRequestingTeleportAtTeleportImplBeginning":true, + "DFIntHttpCacheSendStatsEveryXSeconds":60, + "FFlagAutocompleteRefactorCompleteLocalsInTheirDefinition":false, + "FFlagJoinTime_LocalUserAnimationPriority":true, + "FIntAutocompleteRefactorDeclarationSearchRange":10, + "DFIntMaxFrameBufferSize":10, + "FFlagDataModelForwardGameLocaleId":false, + "DFFlagNewClientSettingsServiceUsePlainHttp":false, + "DFFlagPlayerCleanCharacterModelOnRemove":true, + "DFFlagWhitelistUserInputEvents":true, + "FFlagDebugStudioPackageValidator":false, + "FFlagGuiObjectNotRegisteringKeys2":true, + "FFlagStudioFixScriptDocState":true, + "DFIntCanHideGuiGroupId":3013794, + "FIntStudioThumbnailImageRetryInterval":6000, + "FFlagLuaChatShareGameToChatFromChatV2":false, + "DFIntDynamicLocalizationTablesAssetTimeout":1, + "FIntStudioRPCMessageWriteTimeOut":3000, + "FFlagStudioRigImporterDebugMode":false, + "FFlagTextTruncationEnabledInApp":true, + "DFIntTextScraperServerDataMSecs":1000, + "FFlagQuantumGuiEnabledInGame2":false, + "FFlagStudioRecoveryScriptIgnoreUnchangedOnes":true, + "DFIntTattletaleReportToRCCCooldownSeconds":30, + "DFStringAvatarJointPositionsTypeField":"jointPositioningType", + "FStringStudioDevHubBaseUrl":"http://robloxdev.com/", + "FFlagPluginGuiGetRelativeMousePositionApi":true, + "FFlagFixCustomTeleScreen":true, + "DFFlagDebugRakNetNoTimestampInUdt":false, + "FFlagStudioUseDebuggerController":false, + "DFFlagDynamicLocalizationTables":false, + "FFlagAvatarEditorUseAvatarRulesForScales":true, + "DFIntCrashUploadErrorInfluxHundredthsPercentage":1000, + "FIntNewDevConsoleMaxHttpCount":300, + "FFlagHttpReportStatisticsOnce":true, + "FFlagGameExplorerCopyPath":true, + "FFlagStudioBreakOnInfiniteLoopsRunFixEnabled":false, + "FFlagStudioCheckCloseCaptchaArgument":true, + "DFFlagUrlReconstructRejectInvalidSchemes":false, + "FFlagStudioRobloxScriptDocPushScriptSourceToDataModelCrashFix":true, + "FIntMaxClients":128, + "FFlagDebugClientNetworkPerPlaceMetrics":false, + "FFlagStudioPreventMeshPublishOnErrorEnabled":false, + "DFIntServerConfigCloudEditSavePeriodSeconds":300, + "DFIntNavigationPolygonMergePasses":2, + "DFFlagRagdollNotSuperAnnoying":false, + "FIntRenderShadowIntensity":75, + "DFIntDataStoreAnalyticsReportEveryNSeconds":300, + "FFlagMoreViewCreationFailureHandling":true, + "DFIntCrashUploadMaxDumpFiles":3, + "DFIntRakNetNakResendDelayMsMax":0, + "FFlagStudioFilterPreferredParent":true, + "FFlagStudioMigrateToDevHub":true, + "FIntIkDraggerSolveIterations":16, + "FFlagLoadAdditionalCoreScriptsInStudio":true, + "FIntNavigationAgentHeight":5, + "DFStringCrashUploadToBacktraceWindowsStudioToken":"8608fce9cad86072eee36b7d1d9dc56d68101a6b1f783c7bf568d80972ee1837", + "FIntStudioRightClickBuffer":500, + "FFlagStudioShareModalWindowCrashWhenFetchUniverseFix":true, + "FFlagShareGameToChatStatusAnalytics":false, + "DFFlagStudioThrottleNewEmulationMetrics":false, + "FFlagStudioAutocompleteRefactorFilterServices":false, + "FIntStudioResendDisconnectNotificationInterval":1000, + "DFFlagEnableRemoteProfiling":true, + "DFFlagDialectPreferenceOrder":false, + "FIntCloudEditWaitTimeMs":500, + "DFIntRagdollSlowEnoughToNotTenth":10, + "DFFlagAvatarJointPositionsEnabled":true, + "FFlagRenderPartInstancingEnabled6":true, + "DFFlagAlternateScalingForNativeParts":false, + "FIntSettingsHubInviteToGameOSX5":100, + "FIntNavigationAgentJumpHeight":6, + "DFFlagFixGameJoinTrying":true, + "DFIntDebugNetworkPacketAgeHistory":30, + "DFIntHttpAnalyticsMaxHistory":256, + "FFlagMakeStudioDefaultTextLabelColorBlack":true, + "DFFlagInWithTheNew":true, + "DFFlagCleanCacheMoveMutex":true, + "FFlagStudioGradientEditorCrashFixEnabled":false, + "FStringStudioUserNotificationTopSubdomain":"realtime", + "FIntCloudEditTimeoutTimeMs":60000, + "FIntLuaAnalyticsReleasePeriod":60, + "FStringStudioUserNotificationPath":"/notifications", + "DFIntTargetTimeDelayFacctorTenths":20, + "FFlagRequireRbxSig2":true, + "FFlagStudioQMLControllerWithParentFix":true, + "FIntStudioRightClickDelay":150, + "DFFlagCSGMeshLevelOfDetail":true, + "DFFlagCSGMeshV4DeserializerEnabled":true, + "DFFlagCSGv2UseMegaAssetFetcher":true, + "DFFlagHttpAddRbxHeaders":true, + "DFFlagHttpFollowAllRedirects":true, + "DFFlagHttpServiceBetterUserAgent":true, + "FFlagChangeInfoInNetworkMenu":true, + "FFlagDevConsoleTabMetrics":true, + "FFlagEnableChatMessageType":true, + "FFlagEnableGetBoundingBox":true, + "FFlagEnableStudioService":true, + "FFlagFasterCoreScriptLoading":true, + "FFlagNavigationAgentCanJump":true, + "FFlagNavigationPathBlockedEventEnabled":true, + "FFlagNavigationVariableAgentSize":true, + "FFlagRapidJson110_2":true, + "FFlagSetPlaceIdInAdvance":true, + "FFlagStudioBulkImport":true, + "FFlagStudioBulkImportMinorFixes":true, + "FFlagStudioChangeUIThemeToOSTheme":true, + "FFlagStudioLuaGameSettingsDialog2":true, + "FFlagStudioRefactorUniverseCollection":true, + "FFlagStudioShowChatWidgetOnDoubleClick":true, + "FFlagStudioTeamCreateConnectionCancellable":true, + "FFlagStudioUpdateThemeDataStructures":true, + "FFlagStudioUseNewThemeAPIsInRibbonCode":true, + "FFlagUseDevelopmentLuaGameDetails":true, + "FFlagUseGameStateTypeInPluginManager":true + } \ No newline at end of file diff --git a/app/files/ClientAppSettings.json b/app/files/ClientAppSettings.json new file mode 100644 index 0000000..f917199 --- /dev/null +++ b/app/files/ClientAppSettings.json @@ -0,0 +1 @@ +{ "AllowVideoPreRoll": "True", "AxisAdornmentGrabSize": "12", "CaptureCountersIntervalInMinutes": "5", "CaptureMFCStudioCountersEnabled": "True", "CaptureQTStudioCountersEnabled": "True", "DFFlagAccessoriesAndAttachments": "True", "DFFlagAccessUserFeatureSetting": "True", "DFFlagActivatePGSMechanicalJoints": "True", "DFFlagAddPlaceIdToAnimationRequests": "True", "DFFlagAddRequestIdToDeveloperProductPurchases": "True", "DFFlagAdjustFloorForce": "True", "DFFlagAllowAllUsersToUseHttpService": "True", "DFFlagAllowBindActivate": "True", "DFFlagAllowCustomR15Character": "True", "DFFlagAllowFullModelsWhenLoadingModules": "True", "DFFlagAllowHideHud": "True", "DFFlagAllowHideHudShortcut": "False", "DFFlagAllowHttpServiceInTeamCreate": "True", "DFFlagAllowHumanoidDecalTransparency": "True", "DFFlagAllowModuleLoadingFromAssetId": "True", "DFFlagAllowMoveToInMouseLookMove": "True", "DFFlagAllowRequireByAssetIdInTeamCreate": "True", "DFFlagAllowResetButtonCustomization": "True", "DFFlagAllowTeleportFromServer": "True", "DFFlagAlwaysUseHumanoidMass": "True", "DFFlagAnimationAllowProdUrls": "True", "DFFlagAnimationEasingStylesEnabled": "True", "DFFlagAnimationFailedToLoadContext": "True", "DFFlagAnimationFormatAssetId": "True", "DFFlagApiCapitalizationChanges": "True", "DFFlagApiDictionaryCompression": "True", "DFFlagAppendTrackerIdToTeleportUrl": "True", "DFFlagAvatarFetchCanLoadCharacterAppearanceFix": "True", "DFFlagAvxImplEnabled": "False", "DFFlagBackTabInputInStudio": "True", "DFFlagBadTypeOnConnectErrorEnabled": "True", "DFFlagBetterGetPlayerPlaceInstanceError": "True", "DFFlagBlendPosesWithIsOver": "True", "DFFlagBlockCustomHttpHeaders": "False", "DFFlagBlockUsersInLuaChat": "True", "DFFlagBodyMoverParentingFix": "True", "DFFlagBrickColorParseNonDeprecatedMatchEnabled": "True", "DFFlagBroadcastServerOnAllInterfaces": "True", "DFFlagBulletFixCacheReuse": "True", "DFFlagCachedPoseInitialized": "True", "DFFlagCatchThrottledVelocityComponents": "True", "DFFlagCFrameRightAndUpVectors": "True", "DFFlagCharacterAppearanceLoadedEnabled": "True", "DFFlagCharacterScriptsLoadingRefactor": "True", "DFFlagChatServiceFilterStringForPlayerFromAndToStudioBypass": "True", "DFFlagCheckApiAccessInTransactionProcessing": "True", "DFFlagCheckDataModelOnTeleportRetry": "True", "DFFlagCheckForHeadHit": "False", "DFFlagCheckStudioApiAccess": "True", "DFFlagClampRocketThrustOnPGS": "True", "DFFlagCleanCacheMoveMutex": "True", "DFFlagCleanUpInterpolationTimestamps": "True", "DFFlagClearAllChildrenUseDestroy": "True", "DFFlagClearFailedUrlsWhenClearingCacheEnabled": "True", "DFFlagClearPlayerReceivingServerLogsOnLeave": "True", "DFFlagClickDetectorReplicate": "True", "DFFlagClientAdditionalPOSTHeaders": "True", "DFFlagCloudEditByPassCheckForServer": "True", "DFFlagCloudEditPreventDefaultScripts": "True", "DFFlagCloudEditPublishBeforeTeamTestEnabled": "True", "DFFlagCloudEditRemoveEditorOnPlayerRemove": "True", "DFFlagCloudEditReplicateWorkspacePropAndCollisionFidelity": "True", "DFFlagCloudEditShowSaveFailureMessages": "True", "DFFlagCloudEditSupportImmediatePublish": "True", "DFFlagConfigurableFallenPartDestroyHeight": "True", "DFFlagConfigureInsertServiceFromSettings": "True", "DFFlagConsoleCodeExecutionEnabled": "True", "DFFlagConstructModerationFilterTextParamsAndHeadersUseLegacyFilterParams": "False", "DFFlagContactManagerOptimizedQueryExtents": "True", "DFFlagContentProviderHttpCaching": "True", "DFFlagCoreGuiCustomizationApi": "True", "DFFlagCorrectFloorNormal": "True", "DFFlagCorrectlyReportSpeedOnRunStart": "True", "DFFlagCrashOnNetworkPacketError": "False", "DFFlagCrashTouchTransmitterIfRefDtor": "False", "DFFlagCreateHumanoidRootNode": "True", "DFFlagCreatePlaceEnabledForEveryone": "True", "DFFlagCreatePlayerGuiEarlier": "True", "DFFlagCreatePlayerGuiLocal": "False", "DFFlagCreateSeatWeldOnServer": "True", "DFFlagCrispFilteringEnabled": "False", "DFFlagCrossPacketCompression": "True", "DFFlagCSGDictionaryReplication": "True", "DFFlagCSGLeftoverDataFix": "True", "DFFlagCSGPhysicsDeserializeRefactor": "True", "DFFlagCSGPhysicsErrorCatchingEnabled": "True", "DFFlagCSGPhysicsNanPrevention": "True", "DFFlagCSGPhysicsRecalculateBadContactsInConnectors": "True", "DFFlagCSGPhysicsRefreshContactsManually": "True", "DFFlagCSGPhysicsSphereRotationIdentity": "True", "DFFlagCSGPreventCrashesWhenPartOperationsNotInDataModel": "True", "DFFlagCSGPreventNoContextCSGCrashes": "False", "DFFlagCSGShrinkForMargin": "True", "DFFlagCustomEmitterInstanceEnabled": "True", "DFFlagCustomTeleportLoadingScreen": "True", "DFFlagCyclicExecutiveFixNonCyclicJobRun": "True", "DFFlagDataStoreAllowedForEveryone": "True", "DFFlagDataStoreDisableReFetchingRecentKeys": "True", "DFFlagDataStoreUrlEncodingEnabled": "True", "DFFlagDataStoreUseUForGlobalDataStore": "True", "DFFlagDE6959Fixed": "True", "DFFlagDebrisServiceUseDestroy": "True", "DFFlagDebugLogNetworkErrorToDB": "False", "DFFlagDeferredTouchReplication": "True", "DFFlagDeprecateHttpStatisticsPendingStatStruct": "True", "DFFlagDeserializePacketThreadEnabled": "True", "DFFlagDesiredAltitudeDefaultInf": "True", "DFFlagDisableBackendInsertConnection": "True", "DFFlagDisableCharacterRequest": "True", "DFFlagDisableGetKeyframeSequence": "False", "DFFlagDisableMovementHistory": "True", "DFFlagDisableProcessPacketsJobReschedule": "True", "DFFlagDisableRequestMarker": "True", "DFFlagDisableTeleportConfirmation": "True", "DFFlagDisableTimeoutDuringJoin": "True", "DFFlagDisallowHopperServerScriptReplication": "True", "DFFlagDisplayTextBoxTextWhileTypingMobile": "False", "DFFlagDoNotForwardClientTimestamp": "True", "DFFlagDoNotHoldTagItemsForInitialData": "True", "DFFlagDontCacheHumanoids": "True", "DFFlagDontPrintMalformedUrls": "True", "DFFlagDontReorderScreenGuisWhenDescendantRemoving": "True", "DFFlagDontUseInsertServiceOnAnimLoad": "True", "DFFlagDoUpdateStepDetachedChannels": "True", "DFFlagDraggerUsesNewPartOnDuplicate": "True", "DFFlagDuplicateInstanceReferenceFix": "True", "DFFlagDynamicGravity": "True", "DFFlagElasticEasingUseTwoPi": "True", "DFFlagEnableAdColony": "False", "DFFlagEnableAnimationInformationAccess": "True", "DFFlagEnableAnimationSetTimePosition": "True", "DFFlagEnableAnimationTrackExtendedAPI": "True", "DFFlagEnableBindToClose": "True", "DFFlagEnableChatTestingInStudio": "True", "DFFlagEnableClimbingDirection": "True", "DFFlagEnableGetPlayingAnimationTracks": "True", "DFFlagEnableGoodbyeDialog": "True", "DFFlagEnableHipHeight": "True", "DFFlagEnableHumanoidDisplayDistances": "True", "DFFlagEnableHumanoidSetStateEnabled": "True", "DFFlagEnableJointCache": "False", "DFFlagEnableMarketPlaceServiceCaching": "True", "DFFlagEnableMobileAutoJumpFlag": "True", "DFFlagEnableNPCServerAnimation": "True", "DFFlagEnableParticleBurst": "True", "DFFlagEnableParticleEmissionDirection": "True", "DFFlagEnableParticleEmitterClear": "True", "DFFlagEnableParticleNewBoundingBox": "True", "DFFlagEnableParticlePartLock": "True", "DFFlagEnableParticleVelocityInheritance": "True", "DFFlagEnablePreloadAsync": "True", "DFFlagEnableRapidJSONParser": "True", "DFFlagEnableReverseAnimations": "True", "DFFlagEnableShowStatsLua": "True", "DFFlagEnsureSoundPosIsUpdated": "True", "DFFlagEnumTypeEnabled": "True", "DFFlagEquipClonedToolFix": "True", "DFFlagExplicitPostContentType": "True", "DFFlagFastClone": "True", "DFFlagFastFilterHumanoidParts": "False", "DFFlagFavorIPV4Connections": "False", "DFFlagFilterAddSelectionToSameDataModel": "False", "DFFlagFilteringEnabledDialogFix": "True", "DFFlagFilterStreamingProps": "True", "DFFlagFindFirstChildOfClassEnabled": "True", "DFFlagFireCharacterAddedAfterSpawn": "False", "DFFlagFirePlayerAddedAndPlayerRemovingOnClient": "True", "DFFlagFireSelectionChangeOncePerChange": "True", "DFFlagFireStoppedAnimSignal": "True", "DFFlagFixAccessoryWeldsBrokenWhenScaling": "True", "DFFlagFixAllCharacterStreaming": "True", "DFFlagFixAnchoredSeatingPosition": "True", "DFFlagFixAnimationControllerAnimator": "True", "DFFlagFixAnimationPhaseInitialization": "True", "DFFlagFixBallInsideBlockCollision": "True", "DFFlagFixBodyColorsR15": "True", "DFFlagFixBufferZoneContainsCheck": "False", "DFFlagFixBytesOnJoinReporting": "True", "DFFlagFixDoubleJointR15Character": "True", "DFFlagFixExperimentalSolverSetter": "True", "DFFlagFixFallenPartsNotDeleted": "True", "DFFlagFixGhostClimb": "True", "DFFlagFixHealthReplication": "True", "DFFlagFixInstanceParentDesyncBug": "True", "DFFlagFixJointReparentingDE11763": "True", "DFFlagFixJumpGracePeriod": "True", "DFFlagFixJumpRequestOnLand": "True", "DFFlagFixLadderClimbSpeed": "True", "DFFlagFixLuaMoveDirection": "True", "DFFlagFixMatrixToAxisAngle": "True", "DFFlagFixNestedAnimators": "True", "DFFlagFixParticleDistribution": "True", "DFFlagFixProcessReceiptValueTypes": "True", "DFFlagFixR15BodyPhysics": "True", "DFFlagFixR15HeadScale": "True", "DFFlagFixR15SphereHead": "False", "DFFlagFixRetriesExhaustedHandling": "True", "DFFlagFixRotatedHorizontalScrollBar": "True", "DFFlagFixScaledR15Physics": "True", "DFFlagFixScriptableCameraRoll": "True", "DFFlagFixScrollingOffSurfaceGUIs": "True", "DFFlagFixSeatingWhileSitting": "True", "DFFlagFixShapeChangeBug": "True", "DFFlagFixSlowLadderClimb": "True", "DFFlagFixTimePositionReplication": "True", "DFFlagFixTimeStampsForRunningNoThrottle": "True", "DFFlagFixToolSwapWhileCaptured": "True", "DFFlagFixTouchEndedReporting": "False", "DFFlagFixYieldThrottling": "True", "DFFlagFMODSetAccurateTime": "True", "DFFlagFoldersInGUIs": "True", "DFFlagFormFactorDeprecated": "True", "DFFlagFullscreenEnabledWhileRecording": "True", "DFFlagFullscreenRefocusingFix": "True", "DFFlagGamepadProcessMouseEvents": "False", "DFFlagGetAssetIdsFromPackageAPI": "True", "DFFlagGetCharacterAppearanceEnabled": "True", "DFFlagGetEnumsEnabled": "True", "DFFlagGetFocusedTextBoxEnabled": "True", "DFFlagGetFriendsEnabled": "True", "DFFlagGetFriendsOnlineEnabled": "True", "DFFlagGetGroupInfoEnabled": "True", "DFFlagGetGroupRelationsEnabled": "True", "DFFlagGetGroupsAsyncEnabled": "True", "DFFlagGetGuiInsetEnabled": "True", "DFFlagGetLastestAssetVersionEnabled": "True", "DFFlagGetLocalTeleportData": "True", "DFFlagGetUserIdEnabled": "True", "DFFlagGetUserNameEnabled": "True", "DFFlagGoodbyeChoiceActiveProperty": "True", "DFFlagGuiBase3dReplicateColor3WithBrickColor": "True", "DFFlagHttpCurlDomainTrimmingWithBaseURL": "False", "DFFlagHttpCurlHandle301": "True", "DFFlagHttpCurlSanitizeUrl": "True", "DFFlagHttpDelaySendInfluxStats": "True", "DFFlagHttpReportStatistics": "True", "DFFlagHttpStatusCodeErrorIncludeBody": "True", "DFFlagHttpZeroLatencyCaching": "True", "DFFlagHumanoidCheckForNegatives": "True", "DFFlagHumanoidCookieRecursive": "True", "DFFlagHumanoidFeetIsPlastic": "True", "DFFlagHumanoidFloorDetectTeleport": "True", "DFFlagHumanoidFloorForceBufferZone": "False", "DFFlagHumanoidFloorManualDeltaUpdateManagment": "True", "DFFlagHumanoidFloorManualFrictionLimitation": "True", "DFFlagHumanoidFloorPVUpdateSignal": "True", "DFFlagHumanoidJumpPower": "True", "DFFlagHumanoidMoveToDefaultValueEnabled": "True", "DFFlagHumanoidStandOnSeatDestroyed": "True", "DFFlagICMPPingHundrethsPercentage": "100", "DFFlagImageFailedToLoadContext": "True", "DFFlagImprovedKick": "True", "DFFlagIncreaseScrollWheelMultiplyTime": "True", "DFFlagIncreaseSoundPositionClampLimit": "True", "DFFlagInfluxDb09Enabled": "True", "DFFlagInfluxOverTCP": "False", "DFFlagInfluxOverUDP": "True", "DFFlagInsertServiceForceLocalInTeamCreate": "True", "DFFlagInstancePredeleteNuke": "True", "DFFlagInterpolationTimingFix": "True", "DFFlagIsBestFriendsWithReturnFriendsWith": "True", "DFFlagIsUrlCheckAssetStringLength": "True", "DFFlagKeepXmlIdsBetweenLoads": "True", "DFFlagLegacyBodyColorsOnCharacterLoadFailure": "False", "DFFlagLimitScrollWheelMaxToHalfWindowSize": "True", "DFFlagListenForZVectorChanges": "True", "DFFlagListenPositionEnabled": "True", "DFFlagLiveColorUpdatesCanceling": "True", "DFFlagLoadAnimationsThroughInsertService": "True", "DFFlagLoadCoreModules": "True", "DFFlagLoadFileUseRegularHttp": "True", "DFFlagLoadingGuiTeleportCrashFix": "True", "DFFlagLoadInstancesAsyncReally": "True", "DFFlagLoadInstancesAsyncUseDataModelTasks": "False", "DFFlagLoadSourceForCoreScriptsBeforeInserting": "False", "DFFlagLoadStarterGearEarlier": "False", "DFFlagLocalHumanoidSoundsEnabled": "True", "DFFlagLocalScriptSpawnPartAlwaysSetOwner": "True", "DFFlagLockViolationInstanceCrash": "False", "DFFlagLockViolationScriptCrash": "False", "DFFlagLoggingConsoleEnabled": "True", "DFFlagLogPacketErrorDetails": "False", "DFFlagLogServiceEnabled": "True", "DFFlagLookForDuplicateCoordinateFrameInBuffer": "True", "DFFlagLoopedDefaultHumanoidAnimation": "True", "DFFlagLuaCloseUpvalues": "True", "DFFlagLuaDisconnectFailingSlots": "False", "DFFlagLuaFixResumeWaiting": "True", "DFFlagLuaGcPerVm": "True", "DFFlagLuaInstanceBridgeDescriptorLookupByAtom": "True", "DFFlagLuaInstanceBridgeNewCamelCaseFixerEnabled": "True", "DFFlagLuaLoadStringStrictSecurity": "True", "DFFlagLuaNoTailCalls": "True", "DFFlagLuaResumeSupportsCeeCalls": "True", "DFFlagLuaSignalCamelCaseAPI": "True", "DFFlagLuaSourceContinerScriptGuidEnabled": "True", "DFFlagLuaYieldErrorNoResumeEnabled": "True", "DFFlagMacInferredCrashReporting": "True", "DFFlagMakeWebPendingFriendRequests": "True", "DFFlagMaskWeightCleared": "True", "DFFlagMaterialPropertiesDivideByZeroWeights": "True", "DFFlagMaterialPropertiesEnabled": "True", "DFFlagMaxPlayersEnabled": "True", "DFFlagMiddleMouseButtonEvent": "True", "DFFlagMoveResumeWithErrorToScriptContext": "True", "DFFlagMoveToDontAlignToGrid": "True", "DFFlagMovingHumananoidWakesFloor": "True", "DFFlagNameOcculsionIgnoreTransparent": "True", "DFFlagNamesOccludedAsDefault": "True", "DFFlagNetworkFilterAllowToolWelds": "True", "DFFlagNetworkFixJoinDataItemOrder": "True", "DFFlagNetworkOwnerOptEnabled": "True", "DFFlagNetworkOwnershipRuleReplicates": "True", "DFFlagNetworkPendingItemsPreserveTimestamp": "True", "DFFlagNewAvatarHumanoidAPIs": "True", "DFFlagNewLuaChatScript": "True", "DFFlagNoAnimationTrackState": "True", "DFFlagNonBlockingTeleport": "True", "DFFlagNonEmptyPcallError": "True", "DFFlagNoOwnershipLogicOnKernelJoint": "True", "DFFlagNoRunSteepSlope": "True", "DFFlagNoWalkAnimWeld": "False", "DFFlagNullCheckJointStepWithNullPrim": "True", "DFFlagNullStarterCharacterPrimaryPartFix": "True", "DFFlagOnCloseTimeoutEnabled": "True", "DFFlagOptimizeAnimator": "True", "DFFlagOrder66": "False", "DFFlagOrthonormalizeJointCoords": "True", "DFFlagOverrideScollingDisabledWhenRecalulateNeeded": "True", "DFFlagPartForRegion3NoMaxLimit": "True", "DFFlagPartsStreamingEnabled": "True", "DFFlagPasteWithCapsLockOn": "True", "DFFlagPathfindingEnabled": "True", "DFFlagPGSSolverUsesIslandizableCode": "True", "DFFlagPGSWakeOtherAssemblyForJoints": "True", "DFFlagPGSWakeOtherIfOneAssemblyIsAwake": "False", "DFFlagPGSWakePrimitivesWithBodyMoverPropertyChanges": "True", "DFFlagPhysicalPropMassCalcOnJoin": "False", "DFFlagPhysicsAggressiveSimRadiusReduction": "True", "DFFlagPhysicsAllowSimRadiusToDecreaseToOne": "True", "DFFlagPhysicsFastSmoothTerrainUpdate": "True", "DFFlagPhysicsFPSTimerFix": "True", "DFFlagPhysicsInvalidateContactCache": "True", "DFFlagPhysicsOptimizeAssemblyHistory": "True", "DFFlagPhysicsOptimizeBallBallContact": "True", "DFFlagPhysicsPacketAlwaysUseCurrentTime": "True", "DFFlagPhysicsSenderErrorCalcOpt": "True", "DFFlagPhysicsSenderSleepingUpdate": "True", "DFFlagPhysicsSenderThrottleBasedOnBufferHealth": "True", "DFFlagPhysicsSenderUseOwnerTimestamp": "False", "DFFlagPhysicsSkipUnnecessaryContactCreation": "True", "DFFlagPhysicsUseNewBulletContact": "True", "DFFlagPlaceValidation": "True", "DFFlagPlayerDescendantsDeleteOnDisconnectOff": "True", "DFFlagPlayerOwnsAssetFalseForInvalidUsers": "True", "DFFlagPreferredPlayersEnabled": "True", "DFFlagPreProcessTextBoxEvents": "True", "DFFlagPreventReturnOfElevatedPhysicsFPS": "True", "DFFlagProcessAcceleratorsBeforeGUINaviagtion": "True", "DFFlagProjectileOwnershipOptimization": "True", "DFFlagPromoteAssemblyModifications": "True", "DFFlagPromptPurchaseOnGuestHandledInCoreScript": "True", "DFFlagPushLuaWorldRayOriginToNearClipPlane": "True", "DFFlagRaiseSendPriority": "False", "DFFlagRaycastReturnSurfaceNormal": "True", "DFFlagRayHitMaterial": "True", "DFFlagReadXmlCDataEnabled": "True", "DFFlagRealWinInetHttpCacheBypassingEnabled": "True", "DFFlagReconstructAssetUrlNew": "False", "DFFlagRecursiveWakeForBodyMovers": "True", "DFFlagReduceHumanoidBounce": "True", "DFFlagRejectHashesInLinkedSource": "True", "DFFlagRemoteFixDisconnectedPlayer": "True", "DFFlagRemoteValidateSubscribersError": "True", "DFFlagRemoveAdornFromBucketInDtor": "True", "DFFlagRemoveDataModelDependenceInWaitForChild": "True", "DFFlagRenderSteppedServerExceptionEnabled": "True", "DFFlagReplicateAnimationSpeed": "True", "DFFlagReplicateSeatDisabled": "True", "DFFlagReplicatorCheckBadRebinding": "True", "DFFlagReplicatorWorkspaceProperties": "True", "DFFlagReportElevatedPhysicsFPSToGA": "True", "DFFlagResetScreenGuiEnabled": "False", "DFFlagRestoreTransparencyOnToolChange": "False", "DFFlagRevisedClientJoinMetrics": "True", "DFFlagRobloxAnalyticsTrackingEnabled": "False", "DFFlagSanitizeKeyframeUrl": "True", "DFFlagSanitizeLoadingGUICorrected": "True", "DFFlagScaleR15Character": "True", "DFFlagScopedMutexOnJSONParser": "True", "DFFlagScreenShotDuplicationFix": "True", "DFFlagScriptContextGuardAgainstCStackOverflow": "True", "DFFlagScriptDefaultSourceIsEmpty": "True", "DFFlagScriptExecutionContextApi": "True", "DFFlagScrollingFrameDraggingFix": "True", "DFFlagSendDisconnectReasonWithDisconnectSignal": "True", "DFFlagSendHttpBodyOnFailure": "True", "DFFlagSendHttpInfluxDatabaseField": "True", "DFFlagSendHumanoidTouchedSignal": "True", "DFFlagSeparateBulletNarrowPhaseAndMidStepUpdates": "True", "DFFlagServerSenderDontSendInterpolatedPhysics": "True", "DFFlagSetCoreDisableNotifications": "True", "DFFlagSetCoreSendNotifications": "True", "DFFlagSetHumanoidRegardlessOfNetworkOwnership": "True", "DFFlagSetNetworkOwnerAPIEnabled": "True", "DFFlagSetNetworkOwnerAPIEnabledV2": "True", "DFFlagSetNetworkOwnerCanSetCheck": "True", "DFFlagSetNetworkOwnerFixAnchoring": "True", "DFFlagSetNetworkOwnerFixAnchoring2": "True", "DFFlagSetRenderedFrameOnClumpChanged": "True", "DFFlagShowFormFactorDeprecatedWarning": "False", "DFFlagShowRedForAutoJointsForPartsWithConstraint": "True", "DFFlagSimpleHermiteSplineInterpolate": "False", "DFFlagSmootherVehicleSeatControlSystem": "True", "DFFlagSmoothTerrainDebounceUpdates": "True", "DFFlagSmoothTerrainPhysicsExpandPrimitiveOptimal": "True", "DFFlagSmoothTerrainPhysicsRayAabbExact": "True", "DFFlagSmoothTerrainWorldToCellUseDiagonals": "True", "DFFlagSmoothTerrainWriteVoxelsOccupancyFix": "True", "DFFlagSoundEndedEnabled": "True", "DFFlagSoundFailedToLoadContext": "True", "DFFlagSoundV2LoadedRunCallbacks": "True", "DFFlagSoundV2LoadUseParamContext": "True", "DFFlagSoundV2LogOnSetSoundId": "True", "DFFlagSpawnPointEnableProperty": "True", "DFFlagSpringConstraintInGameAdornFixEnabled": "True", "DFFlagStackTraceHasNewLines": "True", "DFFlagStarterGuiMethodsWarnServer": "True", "DFFlagStarterGuiPropertiesReplicate": "True", "DFFlagStopUsingMaskWeight": "True", "DFFlagStreamLargeAudioFiles": "True", "DFFlagStudioFixPastingDecalsIntoMultiple": "True", "DFFlagStudioScriptRecoveryEnabled": "True", "DFFlagStudioTrackEmulationWithGANoThrottle": "True", "DFFlagStudioUseNewActiveToolEffect": "True", "DFFlagSupportCsrfHeaders": "True", "DFFlagSupportNamedAssetsShortcutUrl": "True", "DFFlagTaskSchedulerFindJobOpt": "True", "DFFlagTaskSchedulerNotUpdateErrorOnPreStep": "True", "DFFlagTaskSchedulerUpdateJobPriorityOnWake": "True", "DFFlagTeamCreateDoNotReplicateShowDevGuiProp": "True", "DFFlagTeleportSignalConnectOnServiceProvider": "True", "DFFlagTextBoxIsFocusedEnabled": "True", "DFFlagTextScaleDontWrapInWords": "True", "DFFlagToolRequiresHandleProperty": "True", "DFFlagTrackLastDownGUI": "True", "DFFlagTrackPhysicalPropertiesGA": "True", "DFFlagTrackTimesScriptLoadedFromLinkedSource": "True", "DFFlagTurnOffFakeEventsForCAS": "True", "DFFlagTurnOffFakeEventsForInputEvents": "True", "DFFlagUpdateCameraTarget": "True", "DFFlagUpdateHermiteLastFrameWhenUpdatePrevFrame": "True", "DFFlagUpdateHumanoidNameAndHealth": "True", "DFFlagUpdateHumanoidSimBodyInComputeForce": "True", "DFFlagUpdateTimeOnDelayedSamples": "False", "DFFlagUrlReconstructToAssetGame": "False", "DFFlagUrlReconstructToAssetGameSecure": "False", "DFFlagUse9FrameBackgroundTransparency": "True", "DFFlagUseApiProxyThrottling": "True", "DFFlagUseAssetTypeHeader": "True", "DFFlagUseAvatarFetchAPI": "True", "DFFlagUseCanManageApiToDetermineConsoleAccess": "True", "DFFlagUseCharacterRootforCameraTarget": "True", "DFFlagUseComSiftUpdatedWebChatFilterParamsAndHeader": "False", "DFFlagUseDecalLocalTransparencyModifier": "True", "DFFlagUseFolder": "True", "DFFlagUseGameAvatarTypeEnum": "False", "DFFlagUsegetFamilyandMapAddress": "False", "DFFlagUseHermiteSplineInterpolation": "True", "DFFlagUseHttpsForAllCalls": "True", "DFFlagUseImageColor": "True", "DFFlagUseImprovedLadderClimb": "True", "DFFlagUseIntersectingOthersForSpawnEnabled": "True", "DFFlagUseLuaCameraAndControl": "True", "DFFlagUseLuaPCInput": "True", "DFFlagUseMeshPartR15": "True", "DFFlagUseModerationFilterTextV2": "True", "DFFlagUseMultiFormatCharacterAppearanceLoading": "True", "DFFlagUseNewAnalyticsApi": "True", "DFFlagUseNewBubbleSkin": "True", "DFFlagUseNewDataStoreLogging": "True", "DFFlagUseNewFetchFriendsFunction": "True", "DFFlagUseNewFullscreenLogic": "True", "DFFlagUseNewHumanoidHealthGui": "True", "DFFlagUseNewPersistenceSubdomain": "True", "DFFlagUseNewSounds": "True", "DFFlagUseNewTextBoxLogic": "True", "DFFlagUsePasiveOnlyForBind": "False", "DFFlagUsePGSSolverSpringConstantScale": "True", "DFFlagUsePlayerInGroupLuaChat": "True", "DFFlagUsePlayerScripts": "True", "DFFlagUsePlayerSpawnPoint": "True", "DFFlagUsePointsNewBatchingImpl": "True", "DFFlagUsePreferredSpawnInPlaySoloTeleport": "True", "DFFlagUseR15Character": "True", "DFFlagUseR15Character3": "True", "DFFlagUseR15SwimFreestyle": "True", "DFFlagUseR15Animate4": "True", "DFFlagUserAccessUserSettings": "True", "DFFlagUserHttpAPIEnabled": "True", "DFFlagUserInputServiceProcessOnRender": "True", "DFFlagUserServerFollowers": "True", "DFFlagUserUseLuaVehicleController": "True", "DFFlagUseSaferChatMetadataLoading": "True", "DFFlagUseServerCoreScripts": "True", "DFFlagUseSpawnPointOrientation": "True", "DFFlagUseStarterPlayer": "True", "DFFlagUseStarterPlayerCharacter": "True", "DFFlagUseStarterPlayerCharacterScripts": "True", "DFFlagUseStarterPlayerGA": "True", "DFFlagUseStarterPlayerHumanoid": "True", "DFFlagUseStrongerGroundControl": "True", "DFFlagUseTerrainCustomPhysicalProperties": "True", "DFFlagUseW3CURIParser": "True", "DFFlagUseYPCallInsteadOfPCallEnabled": "True", "DFFlagValidateCharacterAppearanceUrl": "false", "DFFlagValidateSetCharacter": "True", "DFFlagVariableHeartbeat": "True", "DFFlagVideoCaptureTeleportFix": "False", "DFFlagVIPServerOwnerIdEnabled": "True", "DFFlagWaitForToolHandleToEquip": "True", "DFFlagWebParserDisableInstances": "False", "DFFlagWebParserEnforceASCIIEnabled": "True", "DFFlagWeldCheckClient": "False", "DFFlagWindowsInferredCrashReporting": "True", "DFFlagWorkspaceSkipTerrainRaycastForSurfaceGui": "True", "DFFlagWriteXmlCDataEnabled": "True", "DFFlagZeroVelocityOnDelayedSamples": "True", "DFIntAndroidInfluxHundredthsPercentage": "0", "DFIntBulletContactBreakOrthogonalThresholdPercent": "200", "DFIntBulletContactBreakThresholdPercent": "200", "DFIntDataStoreMaxValueSize": "262144", "DFIntDraggerMaxMovePercent": "60", "DFIntElevatedPhysicsFPSReportThresholdTenths": "585", "DFIntExpireMarketPlaceServiceCacheSeconds": "60", "DFIntHttpCacheCleanMaxFilesToKeep": "7500", "DFIntHttpCacheCleanMinFilesRequired": "10000", "DFIntHttpInfluxHundredthsPercentage": "5", "DFIntHttpSendStatsEveryXSeconds": "300", "DFIntInfluxTattletaleCooldownSeconds": "300", "DFIntInfluxTattletaleInstancePathMaxLength": "200", "DFIntInfluxTattletalePerEventHundredthsPercent": "750", "DFIntInfluxTattletalePerUserHundredthsPercent": "3000", "DFIntInterpolationDelayFactorTenths": "10", "DFIntiOSInfluxHundredthsPercentage": "100", "DFIntJoinInfluxHundredthsPercentage": "100", "DFIntLuaChatFloodCheckInterval": "15", "DFIntLuaChatFloodCheckMessages": "7", "DFIntMacInfluxHundredthsPercentage": "0", "DFIntMaxClusterKBPerSecond": "300", "DFIntMaxMissedWorldStepsRemembered": "16", "DFIntMoveInGameChatToTopPlaceId": "1", "DFIntNumPhysicsPacketsPerStep": "2", "DFIntPercentApiRequestsRecordGoogleAnalytics": "0", "DFIntReportDeviceInfoRate": "100", "DFIntSmoothTerrainPhysicsRayAabbSlop": "1", "DFIntStudioWorkspaceNotificationLevel": "0", "DFIntTargetTimeDelayFacctorTenths": "20", "DFIntTaskSchedularBatchErrorCalcFPS": "1200", "DFIntTeleportExceptionInfluxHundredthsPercentage": "9000", "DFIntThrottledVelocityThresholdTenths": "15", "DFIntUserHttpAccessUserId0": "0", "DFLogLuaTypeErrors": "4", "DFStringHttpInfluxDatabase": "prod", "DFStringHttpInfluxPassword": "faster1Play", "DFStringHttpInfluxURL": "http://ec2-54-84-170-153.compute-1.amazonaws.com:8086", "DFStringHttpInfluxUser": "rob", "DFStringHttpInfluxWriterPassword": "faster1Play", "DFStringRobloxAnalyticsURL": "http://ecsv2.roblox.com/", "DFStringWorkspaceMessageLink": "http://blog.roblox.com/2016/08/announcing-deprecation-and-removal-of-old-terrain/", "DFStringWorkspaceMessageText": "This place is using old terrain which is deprecated and will be removed in January 2017", "EnableFullMonitorsResolution": "True", "ExcludeContactWithInteriorTerrainMinusYFace": "True", "FFlagAdServiceReportImpressions": "True", "FFlagAllowClientInsertFiltering": "True", "FFlagAllowCommentedScriptSigs": "True", "FFlagAllowCopyUnArchivableObjects": "True", "FFlagAllowFullColorSequences": "True", "FFlagAllowInsertConstrainedValuesAnywhere": "True", "FFlagAllowInsertFreeModels": "False", "FFlagAllowOutOfBoxAssets": "False", "FFlagAllowResizeRenderBufferiOS": "True", "FFlagAlternateFontKerning": "True", "FFlagAltSpinlock": "True", "FFlagAnalyzerGroupUIEnabled": "True", "FFlagArcHandlesBidirectional": "True", "FFlagAsyncPostMachineInfo": "True", "FFlagAutodetectCPU": "True", "FFlagAutoJumpForTouchDevices": "True", "FFlagAutoRotateFlag": "True", "FFlagBadTypeOnPcallEnabled": "True", "FFlagBalancingRateLimit": "True", "FFlagBetterPlaceLauncherStatusHandling": "True", "FFlagBetterSleepingJobErrorComputation": "True", "FFlagBetterTabManagement": "True", "FFlagBillboardGuiVR": "True", "FFlagBindPurchaseValidateCallbackInMarketplaceService": "True", "FFlagBlockBlockNarrowPhaseRefactor": "True", "FFlagBreakOnErrorConfirmationDialog": "True", "FFlagBubbleChatbarDocksAtTop": "True", "FFlagCacheFallbackHumanoidTextures": "False", "FFlagCallSetFocusFromCorrectThread": "True", "FFlagCameraChangeHistory": "True", "FFlagCameraInterpolateMethodEnhancement": "False", "FFlagCameraUseOwnViewport": "True", "FFlagCameraZoomNoModifier": "True", "FFlagCancelInputOnGuiNavigation": "True", "FFlagCancelPendingTextureLoads": "False", "FFlagChangeHistoryFixPendingChanges": "True", "FFlagChannelMasterMuting": "True", "FFlagCharAnimationStats": "False", "FFlagChatFilterWorksLocally": "True", "FFlagChatLayoutChange": "True", "FFlagChatServiceReplicates": "True", "FFlagChatVisiblePropertyEnabled": "True", "FFlagCheckDegenerateCases": "True", "FFlagCheckPlayerProcessMutexCreation": "True", "FFlagCheckRegisterSoundChannelUniqueness": "True", "FFlagCheckSleepOptimization": "True", "FFlagClampControllerVelocityMag": "True", "FFlagCleanFilteringEnabledLocalSpawnParts": "True", "FFlagCleanUpStandardOutSpew": "True", "FFlagClientABTestingEnabled": "False", "FFlagClientLoadFMODReportDeviceInfo": "True", "FFlagCloudEditAllowScriptDeleteWithLocal": "True", "FFlagCloudEditDoNotLoadCoreScripts": "True", "FFlagCloudEditPublishScriptsOnTest": "True", "FFlagCloudIconFixEnabled": "True", "FFlagCollectClientIDUpdateStatistics": "True", "FFlagConfigurableLineThickness": "True", "FFlagConstraintPropertyReplicationRaceConditionFixEnabled": "True", "FFlagConstraintStateChangeFixEnabled": "False", "FFlagConstraintUIEnabled": "True", "FFlagControllerMenu": "True", "FFlagCorescriptNewLoadChat": "True", "FFlagCrashOnScriptCloseFixEnabled": "True", "FFlagCreatePlaceEnabled": "True", "FFlagCreatePlaceInPlayerInventoryEnabled": "True", "FFlagCreateReplicatedStorageInStudio": "True", "FFlagCreateServerScriptServiceInStudio": "True", "FFlagCreateServerStorageInStudio": "True", "FFlagCSGAllowUnorderedProperties": "False", "FFlagCSGChangeHistory": "True", "FFlagCSGDataLossFixEnabled": "True", "FFlagCSGDecalsEnabled": "True", "FFlagCSGDecalsV2": "True", "FFlagCSGDelayParentingOperationToEnd": "True", "FFlagCSGDictionaryServiceEnabled": "True", "FFlagCSGMeshColorEnable": "True", "FFlagCSGMeshColorToolsEnabled": "True", "FFlagCSGMeshRenderEnable": "True", "FFlagCSGMigrateChildData": "True", "FFlagCSGNewTriangulate": "True", "FFlagCSGRemoveScriptScaleRestriction": "True", "FFlagCSGReportSuccessFailure": "True", "FFlagCSGScaleEnabled": "True", "FFlagCSGStripPublishedData": "True", "FFlagCSGToolsEnabled": "True", "FFlagCSGTriangleCount": "True", "FFlagCSGUnionCatchUnknownExceptions": "False", "FFlagCSGVoxelizer": "True", "FFlagCSGVoxelizerPrecompute": "False", "FFlagCustomEmitterLuaTypesEnabled": "True", "FFlagCustomEmitterRenderEnabled": "True", "FFlagCyclicExecutivePriorityJobs": "True", "FFlagCyclicExecutiveRenderJobRunsFirst": "True", "FFlagCylinderUsesConstantTessellation": "True", "FFlagD3D9CrashOnError": "False", "FFlagDataModelUseBinaryFormatForSave": "True", "FFlagDataStoreEnabled": "True", "FFlagDE14316CrashFix": "True", "FFlagDE14317CrashFix": "True", "FFlagDE4423Fixed": "True", "FFlagDE4640Fixed": "True", "FFlagDE5511FixEnabled": "True", "FFlagDE7421Fixed": "True", "FFlagDE8768FixEnabled": "True", "FFlagDebugAdornableCrash": "True", "FFlagDebugCrashEnabled": "False", "FFlagDebugCSGExportFailure": "False", "FFlagDebugUseDefaultGlobalSettings": "True", "FFlagDefaultToFollowCameraOnTouch": "True", "FFlagDeferredContacts": "True", "FFlagDeleteLogsByDate": "True", "FFlagDeleteLogsOnMac": "True", "FFlagDeprecateScriptInfoService": "True", "FFlagDetectRedundantDisconnectEvents": "True", "FFlagDetectTemplatesWhenSettingUpGameExplorerEnabled": "True", "FFlagDeviceEmulationStatistics": "True", "FFlagDirectX11Enable": "True", "FFlagDisableAbortRender": "True", "FFlagDisableBadUrl": "True", "FFlagDisableChangedServiceInTestMode": "True", "FFlagDisableLayersForNSViewOnEarlyMac": "True", "FFlagDisableScriptContextScriptsDisabled": "True", "FFlagDoIncrementalLoadingForR6AvatarFetch": "True", "FFlagDoNotPassSunkEventsToPlayerMouse": "True", "FFlagDontBreakOnDatamodelShuttingDown": "True", "FFlagDontFireFakeMouseEventsOnUIS": "True", "FFlagDontSwallowInputForStudioShortcuts": "True", "FFlagDraggerCrashFixEnabled": "True", "FFlagDualSolverSimplex": "True", "FFlagDynamicEnvmapEnabled": "True", "FFlagEnableAdServiceVideoAds": "False", "FFlagEnableAndroidMenuLeave": "True", "FFlagEnableAnimationExport": "True", "FFlagEnableControllerGuiSelection": "True", "FFlagEnableDisplayDistances": "True", "FFlagEnabledMouseIconStack": "True", "FFlagEnableFullMonitorsResolution": "True", "FFLagEnableFullMonitorsResolution": "True", "FFlagEnableGetHitWhitelist": "True", "FFlagEnableiOSSettingsLeave": "True", "FFlagEnableLuaFollowers": "False", "FFlagEnableNonleathalExplosions": "True", "FFlagEnableRenderCSGTrianglesDebug": "False", "FFlagEnableRubberBandSelection": "True", "FFlagEnableSetCoreTopbarEnabled": "True", "FFlagEnableViewportScaling": "True", "FFlagEnableVoiceASR": "False", "FFlagEnableVoiceRecording": "False", "FFlagEnsureInputIsCorrectState": "False", "FFlagEntityNameEditingEnabled": "True", "FFlagExplosionsVisiblePropertyEnabled": "True", "FFlagFakePlayableDevices": "False", "FFlagFastClusterDisableReuse": "True", "FFlagFastClusterThrottleUpdateWaiting": "True", "FFlagFastFontMeasure": "False", "FFlagFastRevert": "True", "FFlagFastZlibPath": "True", "FFlagFeatureLvlsDX11BeforeDeviceCreate": "True", "FFlagFetchJoinScriptWithHttp": "False", "FFlagFFlagPGSMaxAccelerationFix": "True", "FFlagFilterAddSelectionToSameDataModel": "True", "FFlagFilterDoublePass": "False", "FFlagFilterEmoteChat": "True", "FFlagFilterMessageWithCallbackNoTryCatch": "True", "FFlagFilterSinglePass": "True", "FFlagFireUserInputServiceEventsAfterDMEvents": "True", "FFlagFixAlwaysOnTopSurfaceGuiInput": "True", "FFlagFixArraysNotUnmarkedFromCyclicTableDetection": "True", "FFlagFixBadMemoryOnStreamingGarbageCollection": "True", "FFlagFixBoxSelectWithCtrl": "True", "FFlagFixBulletGJKOptimization": "True", "FFlagFixCancelBrickColorPicker": "True", "FFlagFixCaptureFocusInput": "True", "FFlagFixCollisionFidelityTeamCreate": "True", "FFlagFixColorSettingsCancel": "True", "FFlagFixCorruptionInLogFiles": "True", "FFlagFixCrashAtShutdown": "True", "FFlagFixCrashOnEmptyTextOnAutoComplete": "True", "FFlagFixDecalTextureOrientation": "True", "FFlagFixedStudioRotateTool": "True", "FFlagFixHumanoidRootPartCollision": "True", "FFlagFixIsCurrentlyVisibleSurfaceGuis": "True", "FFlagFixLoadingScreenAngle": "False", "FFlagFixLogCulling": "True", "FFlagFixLogManagerWritingToTempDir": "True", "FFlagFixMeshOffset": "True", "FFlagFixMouseFireOnEmulatingTouch": "True", "FFlagFixMouseLockLeftTopCorner": "True", "FFlagFixNoPhysicsGlitchWithGyro": "True", "FFlagFixPartOffset": "True", "FFlagFixPhysicalPropertiesComponentSet": "True", "FFlagFixPlayerProcessMutexDeadlock": "True", "FFlagFixPlayerProcessMutexDeadlockForReal": "True", "FFlagFixSlice9Scale": "True", "FFlagFixStickyDragBelowOrigin": "True", "FFlagFixStudioCursorJitter": "True", "FFlagFixStudioInGamePaste": "True", "FFlagFixSurfaceGuiGamepadNav": "True", "FFlagFixSurfaceGuiGazeSelect": "True", "FFlagFixTouchInputEventStates": "False", "FFlagFixUphillClimb": "True", "FFlagFixUsePartColorBug": "True", "FFlagFixWindowsMultipleMonitorMaximize": "True", "FFlagFlexibleTipping": "True", "FFlagFlyCamOnRenderStep": "True", "FFlagFontSizeUseLargest": "True", "FFlagFontSmoothScalling": "True", "FFlagFontSourceSans": "True", "FFlagForceVertexUVCalcForUnionDecal": "True", "FFlagFramerateDeviationDroppedReport": "True", "FFlagFRMAdjustForMultiCore": "True", "FFlagFRMFixCullFlicker": "True", "FFlagFRMFogEnabled": "True", "FFlagFRMInStudio": "True", "FFlagFRMUse60FPSLockstepTable": "True", "FFlagFrustumTestGUI": "True", "FFlagGameConfigurerUseStatsService": "True", "FFlagGameExplorerAutofillImageNameFromFileName": "True", "FFlagGameExplorerBulkImageUpload": "True", "FFlagGameExplorerCopyPath": "True", "FFlagGameExplorerEnabled": "True", "FFlagGameExplorerImagesEnabled": "True", "FFlagGameExplorerImagesInsertEnabled": "True", "FFlagGameExplorerMoveImagesUnderAssetsGroup": "True", "FFlagGameExplorerPublishEnabled": "True", "FFlagGameExplorerUseV2AliasEndpoint": "True", "FFlagGameNameAtTopOfExplorer": "True", "FFlagGameNameLabelEnabled": "True", "FFlagGamepadCursorChanges": "True", "FFlagGetCorrectScreenResolutionFaster": "True", "FFlagGetUserIdFromPluginEnabled": "True", "FFlagGetUserIDFromPluginEnabled": "True", "FFlagGlowEnabled": "True", "FFlagGoogleAnalyticsTrackingEnabled": "False", "FFlagGradientStep": "True", "FFlagGraphicsD3D10": "True", "FFlagGraphicsD3D11HandleDeviceRemoved": "True", "FFlagGraphicsD3D11PickAdapter": "True", "FFlagGraphicsD3D9ComputeIndexRange": "True", "FFlagGraphicsD3DPointOne": "True", "FFlagGraphicsFeatureLvlStatsEnable": "True", "FFlagGraphicsGL3": "True", "FFlagGraphicsGLReduceLatency": "True", "FFlagGraphicsMacFix": "True", "FFlagGraphicsNoMainDepth": "True", "FFlagGraphicsTextureCommitChanges": "False", "FFlagGraphicsUseRetina": "True", "FFlagGuiRotationEnabled": "True", "FFlagHandleSoundPreviewWidgetWithNoSelectedSound": "True", "FFlagHeartbeatAt60Hz": "False", "FFlagHideDeprecatedEnums": "True", "FFlagHintsRenderInUserGuiRect": "True", "FFlagHttpCurlCacheHandles": "True", "FFlagHumanoidMoveToDefaultValueEnabled": "True", "FFlagHumanoidNetworkOptEnabled": "False", "FFlagHumanoidRenderBillboard": "True", "FFlagHumanoidStateInterfaces": "True", "FFlagHummanoidScaleEnable": "True", "FFlagImageRectEnabled": "True", "FFlagImprovedJoinScriptFlow": "True", "FFlagImprovedNameOcclusion": "True", "FFlagInformClientInsertFiltering": "True", "FFlagInitGoogleAnalyticsWindowsASAP": "False", "FFlagInitializeNewPlace": "True", "FFlagInsertUnderFolder": "True", "FFlagIntellisenseScriptContextDatamodelSearchingEnabled": "True", "FFlagInterpolationAwareTargetTime": "True", "FFlagInterpolationFix": "False", "FFlagInterpolationUseWightedDelay": "True", "FFlagIOSConvexShapeBulletCrashFix": "True", "FFlagJNIEnvScopeOptimization": "True", "FFlagKKTChecks": "False", "FFlagLadderCheckRate": "True", "FFlagLastWakeTimeSleepingJobError": "True", "FFlagLazyRenderingCoordinateFrame": "True", "FFlagLimitHorizontalDragForce": "True", "FFlagLinkToBadAssets": "True", "FFlagLoadCharacterSoundFromCorescriptsRepo": "True", "FFlagLoadCommonModules": "True", "FFlagLoadCorescriptsPlatformDefMode": "True", "FFlagLoadLinkedScriptsOnDataModelLoad": "True", "FFlagLoadTimeModificationTestFlag": "True", "FFlagLocalMD5": "True", "FFlagLocalOptimizer": "True", "FFlagLogServiceEnabled": "True", "FFlagLowQMaterialsEnable": "True", "FFlagLuaBasedBubbleChat": "True", "FFlagLuaBridgeOptimizedUserDataValidation": "True", "FFlagLuaChatFiltering": "True", "FFlagLuaChatPhoneFontSize": "True", "FFlagLuaDebuggerBreakOnError": "True", "FFlagLuaDebuggerCloneDebugger": "True", "FFlagLuaDebuggerImprovedToolTip": "True", "FFlagLuaDebuggerNewCodeFlow": "True", "FFlagLuaDebuggerPopulateFuncName": "True", "FFlagLuaDebugProfileEnabled": "True", "FFlagLuaFollowers": "True", "FFlagLuaMathNoise": "True", "FFlagLuaUseBuiltinEqForEnum": "True", "FFlagMacFixMouseGettingStuck": "True", "FFlagMacInferredCrashReporting": "True", "FFlagMacRemoveUserInputJob": "True", "FFlagMaxFriendsCount": "True", "FFlagMeshPartMaterialTextureSupport": "True", "FFlagMeshPartUsageAnalytics": "True", "FFlagMessageOnLoadScriptValidationFail": "True", "FFlagMetaliOS": "True", "FFlagMinMaxDistanceEnabled": "True", "FFlagMobileToggleChatVisibleIcon": "True", "FFlagModelPluginsEnabled": "True", "FFlagModifyDefaultMaterialProperties": "True", "FFlagModuleScriptsPerVmEnabled": "False", "FFlagModuleScriptsPerVmEnabledFix2": "True", "FFlagModuleScriptsVisible": "True", "FFlagMouseCommandChangedSignalEnabled": "True", "FFlagMouseUseUserInputServiceMouse": "True", "FFlagMoveGameExplorerActionsIntoContextMenu": "True", "FFlagMoveSettingsToSeparateFile": "True", "FFlagMutePreRollSoundService": "True", "FFlagNativeSafeChatRendering": "True", "FFlagNetworkKeepItemPools": "True", "FFlagNetworkReplicateTerrainProperties": "True", "FFlagNewBackpackScript": "True", "FFlagNewBadgeServiceUrlEnabled": "True", "FFlagNewColor3Functions": "True", "FFlagNewCreatePlaceFlowEnabled": "True", "FFlagNewDefaultScriptSource": "True", "FFlagNewIncomingPhysicsManagement": "True", "FFlagNewInGameDevConsole": "True", "FFlagNewLightAPI": "True", "FFlagNewLoadingScreen": "True", "FFlagNewMenuSettingsScript": "True", "FFlagNewNotificationsScript": "True", "FFlagNewPlayerListScript": "True", "FFlagNewPurchaseScript": "True", "FFlagNewTestFixtures": "True", "FFlagNewUniverseInfoEndpointEnabled": "True", "FFlagNewVehicleHud": "True", "FFlagNewWaterMaterialEnable": "True", "FFlagNoClimbPeople": "True", "FFlagNoCollideLadderFilter": "True", "FFlagNoFlyCamWhenDisconnected": "True", "FFlagNoWallClimb": "False", "FFlagNPSSetScriptDocsReadOnly": "True", "FFlagOnlyProcessGestureEventsWhenSunk": "True", "FFlagOnScreenProfiler": "True", "FFlagOnScreenProfilerGPU": "True", "FFlagOpenNewWindowsInDefaultBrowser": "True", "FFlagOpenScriptWorksOnModulesEnabled": "True", "FFlagOptimizeAnimatorCalcJoints": "True", "FFlagOptimizedDragger": "True", "FFlagOrderedDataStoreEnabled": "True", "FFlagOSXUseSDL": "False", "FFlagOutlineControlEnabled": "True", "FFlagOverlayDataModelEnabled": "True", "FFlagOverrideTypeFunction": "True", "FFlagParticleCullFix": "True", "FFlagPathfindingClientComputeEnabled": "True", "FFlagPerformanceStatsCollectionEnabled": "True", "FFlagPGSApplyImpulsesAtMidpoints": "True", "FFlagPGSGlueJoint": "True", "FFlagPGSMaxAccelerationFix": "True", "FFlagPGSSolverBodyCacheLeakFix": "True", "FFlagPGSSolverDefaultOnNewPlaces": "True", "FFlagPGSSteppingMotorFix": "True", "FFlagPGSUsesConstraintBasedBodyMovers": "True", "FFlagPGSVariablePenetrationMargin": "False", "FFlagPGSVariablePenetrationMarginFix": "True", "FFlagPhysics60HZ": "True", "FFlagPhysicsAllowAutoJointsWithSmallParts_DE6056": "True", "FFlagPhysicsAnalyzerEnabled": "True", "FFlagPhysicsBulletConnectorMatching": "True", "FFlagPhysicsBulletConnectorPointRecalc": "True", "FFlagPhysicsBulletUseProximityMatching": "False", "FFlagPhysicsCSGUsesBullet": "True", "FFlagPhysicsCylinders": "True", "FFlagPhysicsLockGroupDraggerHitPointOntoSurface_DE6174": "True", "FFlagPhysicsOptimizeSendClumpChanged": "True", "FFlagPhysicsPreventGroupDraggerPlacementToMinus400_DE6267": "True", "FFlagPhysicsRemoveWorldAssemble_US16512": "True", "FFlagPhysicsSkipRedundantJoinAll": "True", "FFlagPhysicsSkipUnnecessaryContactCreation": "False", "FFlagPhysicsUseKDTreeForCSG": "True", "FFlagPhysPropConstructFromMaterial": "True", "FFlagPlaceLauncherThreadCheckDmClosed": "True", "FFlagPlaceLauncherUsePOST": "False", "FFlagPlayerHumanoidStep60Hz": "True", "FFlagPlayerMouseRespectGuiOffset": "True", "FFlagPlayerScriptsNotArchivable": "True", "FFlagPlayPauseFix": "True", "FFlagPluginSaveSelection": "True", "FFlagPreventDuplicateCrashEventReporting": "True", "FFlagPreventInterpolationOnCFrameChange": "True", "FFlagPrimalSolverLogBarrierIP": "True", "FFlagPrimalSolverSimplex": "True", "FFlagProcessAllPacketsPerStep": "True", "FFlagPromoteAssemblyModifications": "False", "FFlagQtAutoSave": "True", "FFlagQtFixToolDragging": "True", "FFlagQtPlaySoloOptimization": "True", "FFlagQtRightClickContextMenu": "True", "FFlagQTStudioPublishFailure": "True", "FFlagQtStudioScreenshotEnabled": "True", "FFlagRakNetReadFast": "True", "FFlagRakNetSupportIpV6": "False", "FFlagRapidJSONEnabled": "True", "FFlagRCCLoadFMOD": "True", "FFlagRDBGHashStringComparison": "True", "FFlagReadCoordinateFrameFast": "False", "FFlagReconstructAssetUrl": "False", "FFlagRecordForceStereo": "True", "FFlagRecordInGameDeaths": "False", "FFlagReleaseDataModelQuicker": "True", "FFlagReloadAllImagesOnDataReload": "True", "FFlagRemoveInterpolationReciever": "True", "FFlagRemoveOldAnalyticsImplementation": "True", "FFlagRemoveOldCountersImplementation": "True", "FFlagRemoveSoundServiceSoundDisabledProperty": "True", "FFlagRemoveTintingWhenActiveIsFalseOnImageButton": "True", "FFlagRemoveUnusedPhysicsSenders": "True", "FFlagRenderAnisotropy": "True", "FFlagRenderBlobShadows": "True", "FFlagRenderCameraFocusFix": "True", "FFlagRenderCheckTextureContentProvider": "True", "FFlagRenderDownloadAssets": "True", "FFlagRenderFastClusterEverywhere": "True", "FFlagRenderFastResolve": "True", "FFlagRenderFixAnchoredLag": "True", "FFlagRenderFixCameraFocus": "False", "FFlagRenderFixFog": "True", "FFlagRenderFixGBufferLOD": "True", "FFlagRenderFixGuiOrder": "True", "FFlagRenderFixLightGridDirty": "True", "FFlagRenderGBufferEverywhere": "False", "FFlagRenderGLES2": "True", "FFlagRenderLightGridEnabled": "True", "FFlagRenderLightgridInPerformEnable": "True", "FFlagRenderLightGridShadows": "True", "FFlagRenderLightGridShadowsSmooth": "True", "FFlagRenderLoopExplicit": "True", "FFlagRenderLowerLatencyLoop": "True", "FFlagRenderLowLatencyLoop": "False", "FFlagRenderMeshReturnsCorrectly": "False", "FFlagRenderMoreFonts": "True", "FFlagRenderNew": "True", "FFlagRenderNewFonts": "True", "FFlagRenderNewMaterials": "True", "FFlagRenderNewMegaCluster": "True", "FFlagRenderNoDepthLast": "True", "FFlagRenderNoGBuffer": "True", "FFlagRenderNoLegacy": "True", "FFlagRenderOpenGLForcePOTTextures": "True", "FFlagRenderSafeChat": "False", "FFlagRenderSoftParticles": "True", "FFlagRenderTextLabelsWithTransparentText": "True", "FFlagRenderTextureCompositorUseBudgetForSize": "True", "FFlagRenderUserGuiIn3DSpace": "True", "FFlagRenderVR": "True", "FFlagRenderVRBBGUI": "True", "FFlagRenderWangTiles": "True", "FFlagReportDitchedTemplates": "True", "FFlagReportInGameAssetSales": "True", "FFlagRequestServerStatsV2Enabled": "True", "FFlagResetMouseCursorOnToolUnequip": "True", "FFlagResizeGuiOnStep": "True", "FFlagResponsiveJump": "True", "FFlagRestoreScriptSourceWhenRedoingScriptCreation": "True", "FFlagRestrictSales": "True", "FFlagRetentionTrackingEnabled": "True", "FFlagRetryWhenCloudEditEnabledEndpointFails": "True", "FFlagRibbonBarEnabled": "True", "FFlagRibbonBarEnabledGA": "True", "FFlagRibbonPartInsertNotAllowedInModel": "True", "FFlagRollOffModeEnabled": "True", "FFlagRotatingLaunchScreens": "True", "FFlagRwxFailReport": "True", "FFlagSandboxHash": "True", "FFlagScaleExplosionLifetime": "True", "FFlagScreenGuisClipDescendants": "True", "FFlagScriptAnalyzerFixLocalScope": "True", "FFlagScriptAnalyzerPlaceholder": "True", "FFlagScriptContextSinglePendingThreadsQueue": "False", "FFlagScrollingFrameMouseUpFix": "True", "FFlagScrollingFrameOverridesButtonsOnTouch": "True", "FFlagSecureReceiptsBackendEnabled": "True", "FFlagSecureReceiptsFrontendEnabled": "True", "FFlagSelectPartOnUndoRedo": "True", "FFlagSelectSpinlock": "True", "FFlagSendFilteredExceptionOnInferredStep": "True", "FFlagSendLegacyMachineConfigInfo": "False", "FFlagSerializeCurrentlyOpenPlaceWhenPublishingGame": "True", "FFlagServerSenderDontSendInterpolatedPhysics": "False", "FFlagSetCoordinateFrameLockInterpolationUntilSend": "True", "FFlagSetCoreDisableChatBar": "True", "FFlagSetCoreMoveChat": "True", "FFlagSetDataModelUniverseIdAfterPublishing": "True", "FFlagSetPhysicsToLastRealStateWhenBecomingOwner": "True", "FFlagShowAlmostAllItemsInExplorer": "True", "FFlagShowCoreGUIInExplorer": "True", "FFlagShowStreamingEnabledProp": "True", "FFlagShowWebPlaceNameOnTabWhenOpeningFromWeb": "True", "FFlagSimplifyKeyboardInputPath": "False", "FFlagSinkActiveGuiObjectMouseEvents": "False", "FFlagSkipAdornIfWorldIsNull": "True", "FFlagSkipSilentAudioOps": "True", "FFlagSleepBeforeSpinlock": "True", "FFlagSmoothMouseLock": "False", "FFlagSmoothTerrain": "True", "FFlagSmoothTerrainClient": "True", "FFlagSmoothTerrainCountCellVolume": "True", "FFlagSmoothTerrainLODEnabled": "True", "FFlagSmoothTerrainLODFalseCoarseNeighbor": "True", "FFlagSmoothTerrainLODFixSeams": "True", "FFlagSmoothTerrainPacked": "True", "FFlagSoundChannelMaxDistanceStopFMODChannel": "True", "FFlagSoundChannelOnAncestorChangedUseGameLaunchIntent": "False", "FFlagSoundGroupsAndEffectsEnabled": "True", "FFlagSoundIgnoreReplicatorJoinDataItemCache": "True", "FFlagSoundscapeReplicateChildren": "True", "FFlagSoundServiceGameConfigurerConfigureRunServiceRun": "True", "FFlagSoundsRespectDelayedStop": "False", "FFlagSoundTypeCheck": "True", "FFlagSparseCheckFastFail": "True", "FFlagSpatialHashMoreRoots": "True", "FFlagSpecificUserdataTypeErrors": "True", "FFlagSpheresAllowedCustom": "True", "FFlagSpinlock": "True", "FFlagStackTraceLinks": "True", "FFlagStartWindowMaximizedDefault": "True", "FFlagStateSpecificAutoJump": "True", "FFlagStatusBarProgress": "True", "FFlagStopLoadingStockSounds": "True", "FFlagStopNoPhysicsStrafe": "True", "FFlagStudio3DGridUseAALines": "False", "FFlagStudioActActionsAsTools": "True", "FFlagStudioActivityReportRefactoring": "True", "FFlagStudioAddBackoffToNotificationsReconnects": "True", "FFlagStudioAddHelpInContextMenu": "True", "FFlagStudioAdvanceCookieExpirationBugFixEnabled": "True", "FFlagStudioAllowAudioSettings": "True", "FFlagStudioAllowBreakpointsOnStartup": "True", "FFlagStudioAllowFullColorSequences": "True", "FFlagStudioAllowPropertyOverrides": "True", "FFlagStudioAllowSoundDraggingFromToolbox": "True", "FFlagStudioAlwaysSetActionEnabledState": "True", "FFlagStudioAnalyticsEnabled": "True", "FFlagStudioAnalyticsRefactoring": "True", "FFlagStudioAuthenticationCleanup": "True", "FFlagStudioAuthenticationFailureCounterEnabled": "True", "FFlagStudioAutoCompleteRespectsWordBoundaries": "True", "FFlagStudioBatchItemMapAddChild": "True", "FFlagStudioBreakOnInfiniteLoops": "True", "FFlagStudioBreakOnInfiniteLoopsThreadingFixEnabled": "True", "FFlagStudioBuildGui": "True", "FFlagStudioCacheRecentAction": "True", "FFlagStudioCheckForUpgrade": "True", "FFlagStudioChildProcessCleanEnabled": "True", "FFlagStudioCollapsibleTutorials": "True", "FFlagStudioCommandLineSaveEditText": "True", "FFlagStudioConsistentGuiInitalisation": "True", "FFlagStudioContextualHelpEnabled": "True", "FFlagStudioCookieDesegregation": "True", "FFlagStudioCookieParsingDisabled": "False", "FFlagStudioCorrectForRetinaScreensOnEarlyMac": "True", "FFlagStudioCSGAssets": "True", "FFlagStudioCSGRotationalFix": "True", "FFlagStudioCtrlPartResizeFromCenter": "True", "FFlagStudioCtrlTabDocSwitchEnabled": "True", "FFlagStudioCustomDragIncrements": "True", "FFlagStudioCustomDragIncrementsShortcut": "True", "FFlagStudioDataModelIsStudioFix": "True", "FFlagStudioDE11536FixEnabled": "True", "FFlagStudioDE7928FixEnabled": "True", "FFlagStudioDE9108FixEnabled": "True", "FFlagStudioDE9132FixEnabled": "True", "FFlagStudioDE9818FixEnabled": "True", "FFlagStudioDeadCodeOnMouseDown": "True", "FFlagStudioDebuggerVisitDescendants": "True", "FFlagStudioDecalPasteFix": "True", "FFlagStudioDefaultWidgetSizeChangesEnabled": "True", "FFlagStudioDelaySAResultsEnabled": "True", "FFlagStudioDeviceEmulationTouchInputFix": "True", "FFlagStudioDisableEditingCurrentEditor": "True", "FFlagStudioDisableLegacyMachineConfigInfo": "True", "FFlagStudioDisableScrollingOnEarlyMac": "True", "FFlagStudioDisconnectPopuplaunchEditorSignals": "True", "FFlagStudioDoNotOverrideHotkeys": "True", "FFlagStudioDontOverwriteSoundTasks": "True", "FFlagStudioDraggerCrashFixEnabled": "True", "FFlagStudioDraggerFixes": "True", "FFlagStudioDraggersScaleFixes": "True", "FFlagStudioDuplicateActionEnabled": "True", "FFlagStudioEmbeddedFindDialogEnabled": "False", "FFlagStudioEnableDebuggerPerfImprovements": "True", "FFlagStudioEnableDeviceScalingCalibration": "True", "FFlagStudioEnableGameAnimationsTab": "True", "FFlagStudioEnableGamepadSupport": "True", "FFlagStudioEnableLayersForNSView": "True", "FFlagStudioEnableWebKitPlugins": "True", "FFlagStudioExplorerActionsEnabledInScriptView": "True", "FFlagStudioExplorerDisabledByDefault": "True", "FFlagStudioFindCrashFixEnabled": "True", "FFlagStudioFindInAllScriptsEnabled": "True", "FFlagStudioFindWidgetStripWhitespace": "True", "FFlagStudioFireStickyMouseCommandChangedOnly": "True", "FFlagStudioFixInitializeAndApplyEmulation": "True", "FFlagStudioFixLockingScriptDisablesMenuOptions": "True", "FFlagStudioFixParenthesisAutoComplete": "True", "FFlagStudioFixPauseDuringLoad": "True", "FFlagStudioFixPropertiesWindowScrollBarNotShowing": "True", "FFlagStudioFixSelectionOutsideExplorer": "False", "FFlagStudioFixTestApis": "True", "FFlagStudioFixToolboxReload": "True", "FFlagStudioFixUndeletingSoundCausesPlayback": "True", "FFlagStudioFlycamAppBridgeFix": "True", "FFlagStudioForceToolboxSize": "True", "FFlagStudioHiddenPropertyCrashFixEnabled": "True", "FFlagStudioHideInsertedServices": "True", "FFlagStudioHideMouseCoursorOnCommand": "True", "FFlagStudioHomeKeyChangeEnabled": "True", "FFlagStudioIgnoreMouseMoveOnIdle": "True", "FFlagStudioIgnoreSSLErrors": "True", "FFlagStudioImproveModelDragFidelity": "True", "FFlagStudioIncreasedBaseplateSize": "True", "FFlagStudioInitializeViewOnPaint": "True", "FFlagStudioInsertAtMouseClick": "True", "FFlagStudioInsertAtTopCenterOfSelection": "True", "FFlagStudioInsertIntoStarterPack": "True", "FFlagStudioInsertModelCounterEnabled": "True", "FFlagStudioInsertOrientationFix": "True", "FFlagStudioInSyncWebKitAuthentication": "False", "FFlagStudioIntellesenseEnabled": "True", "FFlagStudioIntellesenseOnAllMembersEnabled": "True", "FFlagStudioKeepPositionOnPropertyResizeCollisionOffEnabled": "True", "FFlagStudioKeyboardMouseConfig": "True", "FFlagStudioLaunchDecalToolAfterDrag": "True", "FFlagStudioLightGridAPIVisible": "True", "FFlagStudioLightGridOnForNewPlaces": "True", "FFlagStudioLiveCoding": "True", "FFlagStudioLoadPluginsLate": "True", "FFlagStudioLocalSpaceDragger": "True", "FFlagStudioLockScriptsWithoutBlocking": "True", "FFlagStudioLockServiceParents": "True", "FFlagStudioLuaDebugger": "True", "FFlagStudioLuaDebuggerGA": "True", "FFlagStudioMacAddressValidationEnabled": "True", "FFlagStudioMeshIdMacCrashFixEnabled": "True", "FFlagStudioMeshImportationRobustErrorsEnabled": "True", "FFlagStudioMiddleMouseTrackCamera": "False", "FFlagStudioMockPurchasesEnabled": "True", "FFlagStudioModuleScriptDefaultContents": "True", "FFlagStudioMouseOffsetFixEnabled": "True", "FFlagStudioMultipleShortcutsEnabled": "True", "FFlagStudioNameMeshByFileName": "True", "FFlagStudioNativeKeepSavedChanges": "True", "FFlagStudioNewFonts": "True", "FFlagStudioNewWiki": "True", "FFlagStudioOneClickColorPickerEnabled": "True", "FFlagStudioOneStudGridDefault": "True", "FFlagStudioOnlyOneToolboxPreviewAtATime": "True", "FFlagStudioOnlyUpdateTeamTestActionsIfChanged": "True", "FFlagStudioOpenLastSaved": "False", "FFlagStudioOpenStartPageForLogin": "True", "FFlagStudioOrthonormalizeSafeRotate": "True", "FFlagStudioOutputFontSettable": "True", "FFlagStudioPartAlignmentChangeEnabled": "True", "FFlagStudioPartSymmetricByDefault": "True", "FFlagStudioPasteAsSiblingEnabled": "True", "FFlagStudioPasteSyncEnabled": "True", "FFlagStudioPlaceAssetFromToolbox": "True", "FFlagStudioPlaceOnlineIndicator": "True", "FFlagStudioPlaySoloCharacterAutoLoadsNullTool": "True", "FFlagStudioPlaySoloConfigurerLegacyPlayerName": "True", "FFlagStudioPlaySoloMapDebuggerData": "True", "FFlagStudioPluginUIActionEnabled": "True", "FFlagStudioPreventTabStealFocus": "True", "FFlagStudioPreventTextPropertyWhitespaceTrimming": "True", "FFlagStudioPreventTreeWidgetJumping": "True", "FFlagStudioProgressIndicatorForInsertEnabled": "True", "FFlagStudioPromptWhenInsertingConstraints": "True", "FFlagStudioPropertiesRespectCollisionToggle": "True", "FFlagStudioPropertyChangedSignalHandlerFix": "True", "FFlagStudioPropertySliderEnabled": "True", "FFlagStudioPropertyWidgetDontEditReadOnlyProperties": "False", "FFlagStudioPropertyWidgetRemoveUpdateEvents": "True", "FFlagStudioPublishToRobloxActionUXAlwaysAvailable": "True", "FFlagStudioPushTreeWidgetUpdatesToMainThread": "True", "FFlagStudioQueueUpdateToolBarRequests": "True", "FFlagStudioQuickAccessCustomization": "True", "FFlagStudioQuickInsertEnabled": "True", "FFlagStudioRecentSavesEnabled": "True", "FFlagStudioReduceTeamCreateStuttering": "True", "FFlagStudioRefreshTreeWidgetViewEnabled": "True", "FFlagStudioRelocateSoundJob": "True", "FFlagStudioRemoveDebuggerResumeLock": "True", "FFlagStudioRemoveDuplicateParts": "True", "FFlagStudioRemoveToolSounds": "True", "FFlagStudioRemoveUpdateUIThread": "True", "FFlagStudioRenderRemotePlayerSelection": "True", "FFlagStudioReopenClosedTabsShortcut": "True", "FFlagStudioReportCachedRecentActions": "True", "FFlagStudioReportTeamCreateMTBF": "True", "FFlagStudioReportVitalParameters": "True", "FFlagStudioResizeMeshPartOnImport": "True", "FFlagStudioRespectMeshOffset": "False", "FFlagStudioRibbonBarLayoutFixes": "True", "FFlagStudioRibbonBarNewLayout": "True", "FFlagStudioRibbonGroupResizeFixEnabled": "True", "FFlagStudioSanitizeInstancesOnLoad": "True", "FFlagStudioScaleFromCenterFollowsMouse": "True", "FFlagStudioScriptAnalysisGetOrCreateRefactoring": "True", "FFlagStudioScriptBlockAutocomplete": "True", "FFlagStudioSendMouseIdleToPluginMouse": "True", "FFlagStudioSendPluginMouseEventAfterProcess": "True", "FFlagStudioSeparateActionByActivationMethod": "False", "FFlagStudioSetObjectsFromPropertiesWindow": "True", "FFlagStudioSetViewportSizeOfClone": "True", "FFlagStudioShiftRetainsResizeAspectRatio": "True", "FFlagStudioShowAllAdvancedObjects": "False", "FFlagStudioShowNotSavingScriptEditsOnce": "True", "FFlagStudioShowTutorialsByDefault": "True", "FFlagStudioSmoothTerrainForNewPlaces": "True", "FFlagStudioSmoothTerrainPlugin": "True", "FFlagStudioSpawnLocationsDefaultValues": "True", "FFlagStudioStopSoundPlaybackAfterRemoval": "True", "FFlagStudioSupportBytecodeDeserialize": "True", "FFlagStudioSupportPastingIdsAndUrlsIntoContentProperties": "True", "FFlagStudioTabOrderingEnabled": "True", "FFlagStudioTeamCreatePreventSubsequentEnable": "True", "FFlagStudioTeamCreateWebChatBackendEnabled": "True", "FFlagStudioTeamTestEnabled": "True", "FFlagStudioTeleportPlaySolo": "True", "FFlagStudioToolBoxInsertUseRayTrace": "True", "FFlagStudioToolBoxModelDragFix": "True", "FFlagStudioToolboxModelDragToCastPoint": "True", "FFlagStudioTrackEmulationWithGA": "True", "FFlagStudioTreeWidgetCheckDeletingFlagWhenDoingUpdates": "True", "FFlagStudioTreeWidgetPotentialMemoryLeak": "True", "FFlagStudioTreeWidgetWheelScrollWithDrag": "True", "FFlagStudioTrimPropertyWhitespace": "True", "FFlagStudioTutorialSeeAll": "True", "FFlagStudioUndoEnabledForEdit": "True", "FFlagStudioUnixTestMenuLocalServerFix": "True", "FFlagStudioUpdatePropertiesWithoutJob": "True", "FFlagStudioUpdateRestoreBehavior": "True", "FFlagStudioUpdateSAResultsInUIThread": "True", "FFlagStudioUpdateToolbarsOnFocus": "True", "FFlagStudioUseBinaryFormatForModelPublish": "True", "FFlagStudioUseBinaryFormatForModelSave": "True", "FFlagStudioUseBinaryFormatForPlay": "True", "FFlagStudioUseBinaryFormatForSave": "True", "FFlagStudioUseCounterOnRepeatedLines": "True", "FFlagStudioUseDelayedSyntaxCheck": "True", "FFlagStudioUseExtendedHTTPTimeout": "True", "FFlagStudioUseFormattingOnLinks": "True", "FFlagStudioUseHttpAuthentication": "True", "FFlagStudioUseHTTPS": "True", "FFlagStudioUseHttpsForUserInfo": "True", "FFlagStudioUseMarketplaceApiClient": "True", "FFlagStudioUseNewEmulationReportCounters": "True", "FFlagStudioUseNewPropertyWidgetSafeMoveFlow": "True", "FFlagStudioUsePlaySoloConfigurer": "True", "FFlagStudioUsePropertyItemsUsePropDescriptorNotName": "True", "FFlagStudioUserNotificationIgnoreSequenceNumber": "True", "FFlagStudioUseScriptAnalyzer": "True", "FFlagStudioUseServerConfigurer": "True", "FFlagStudioValidateBootstrapper": "True", "FFlagStudioVideoRecordFix": "True", "FFlagStudioZoomExtentsExplorerFixEnabled": "True", "FFlagSubmitEditedColor3WhenFocusLost": "True", "FFlagSuppressNavOnTextBoxFocus": "False", "FFlagSupressNavOnTextBoxFocus": "True", "FFlagSurfaceGuiObjectEnabledCheck": "True", "FFlagSurfaceGuiVisible": "True", "FFlagSurfaceLightEnabled": "True", "FFlagSymmetricContact": "True", "FFlagSyncRenderingAndPhysicsInterpolation": "True", "FFlagTaskSchedulerCyclicExecutive": "True", "FFlagTaskSchedulerCyclicExecutiveStudio": "True", "FFlagTattletaleFixTextValue": "True", "FFlagTeamCreateChatEnableMarkAsRead": "True", "FFlagTeamCreateEnableAutoReconnect": "True", "FFlagTeamCreateOptimizeRemoteSelection": "True", "FFlagTeleportDetailedInfluxHttpStatusError": "True", "FFlagTerrainLazyGrid": "True", "FFlagTerrainOptimizedCHS": "True", "FFlagTerrainOptimizedLoad": "True", "FFlagTerrainOptimizedStorage": "True", "FFlagTestMenuEnabledOnAllWindows": "True", "FFlagTextBoundRespectTextScaled": "True", "FFlagTexturePropertyWidgetEnabled": "True", "FFlagToggleDevConsoleThroughChatCommandEnabled": "True", "FFlagTouchTransmitterWeakPtr": "True", "FFlagTrackModuleScripts": "True", "FFlagTrackOriginalClientID": "True", "FFlagTreatCloudEditAsEditGameMode": "True", "FFlagTurnOffiOSNativeControls": "True", "FFlagTweenCallbacksDuringRenderStep": "True", "FFlagTweenServiceUsesRenderStep": "True", "FFlagUDim2LerpEnabled": "True", "FFlagUpdatePrimitiveStateForceSleep": "True", "FFlagUS14116": "True", "FFlagUseAvatarFetchAPI": "True", "FFlagUseAvatarFetchThumbnailLogic": "True", "FFlagUseAveragedFloorHeight": "True", "FFlagUseBuildGenericGameUrl": "True", "FFlagUseCameraOffset": "True", "FFlagUseCommonModules": "True", "FFlagUseCorrectDoppler": "True", "FFlagUseDynamicTypesetterUTF8": "True", "FFlagUseFollowCamera": "True", "FFlagUseFullWindowsMachineConfig": "True", "FFlagUseGameAvatarTypeEnum": "True", "FFlagUseHttpsForGameserverAshx": "True", "FFlagUseInGameTopBar": "True", "FFlagUseLegacyEnumItemLookup": "True", "FFlagUseMinMaxZoomDistance": "True", "FFlagUseNewAppBridgeAndroid": "True", "FFlagUseNewAppBridgeIOS": "True", "FFlagUseNewAppBridgeOSX": "True", "FFlagUseNewAppBridgeStudio": "True", "FFlagUseNewAppBridgeWindows": "True", "FFlagUseNewBadgesCreatePage": "True", "FFlagUseNewCameraZoomPath": "True", "FFlagUseNewContentProvider": "False", "FFlagUseNewGoogleAnalyticsInitMac": "False", "FFlagUseNewHumanoidCache": "True", "FFlagUseNewKeyboardHandling": "True", "FFlagUseNewNotificationPathLua": "True", "FFlagUseNewPromptEndHandling": "True", "FFlagUseNewSoftwareMouseRender": "True", "FFlagUseNewSoundEngine": "True", "FFlagUseNewSoundEngine3dFix": "True", "FFlagUseNewSubdomainsInCoreScripts": "True", "FFlagUseNewXboxLoginFlow": "True", "FFlagUsePGSSolver": "True", "FFlagUsePreferredSoundDevice": "True", "FFlagUserAllCamerasInLua": "False", "FFlagUserHttpAPIVisible": "True", "FFlagUserInputServicePipelineMacClient": "True", "FFlagUserInputServicePipelineStudio": "True", "FFlagUserInputServicePipelineWindowsClient": "True", "FFlagUserJumpButtonPositionChange": "True", "FFlagUserUseNewControlScript": "True", "FFlagUseShortShingles": "True", "FFlagUseSimpleRapidJson": "True", "FFlagUseStrongerBalancer": "True", "FFlagUseTopmostSettingToBringWindowToFront": "True", "FFlagUseToStringN": "False", "FFlagUseUniverseGetInfoCallToDetermineUniverseAccess": "True", "FFlagUseUpdatedKeyboardSettings": "False", "FFlagUseUpdatedSyntaxHighlighting": "True", "FFlagUseUserListMenu": "True", "FFlagUseVRKeyboardInLua": "True", "FFlagUseWindowSizeFromGameSettings": "True", "FFlagVectorErrorOnNilArithmetic": "True", "FFlagVerifyConnection": "True", "FFlagVideoDocumentationPluginEnabled": "True", "FFlagVolumeControlInGameEnabled": "True", "FFlagVoxelCompressedStorage": "True", "FFlagWaitForChildTimeOut": "True", "FFlagWarnForLegacyTerrain": "True", "FFlagWaterParams": "True", "FFlagWedgeEnableDecalOnTop": "True", "FFlagWikiSelectionSearch": "True", "FFlagWindowsInferredCrashReporting": "True", "FFlagWindowsNoDmpRetry": "False", "FFlagWindowsUseSDL": "False", "FFlagWorkspaceLoadStringEnabledHidden": "True", "FIntAvatarEditorAndroidRollout": "100", "FIntEnableAvatarEditorAndroid": "100", "FIntEnableAvatarEditoriOS": "100", "FIntGamePerfMonitorPercentage": "10", "FIntLaunchInfluxHundredthsPercentage": "0", "FIntLuaAssertCrash": "0", "FIntMinMillisecondLengthForLongSoundChannel": "5000", "FIntNumSmoothingPasses": "3", "FIntPGSPentrationMarginMax": "50000", "FIntPhysicalPropDensity_ALUMINUM_MATERIAL": "2700", "FIntPhysicalPropElasticity_ALUMINUM_MATERIAL": "250", "FIntPhysicalPropElasticity_BASALT_MATERIAL": "150", "FIntPhysicalPropElasticity_BRICK_MATERIAL": "150", "FIntPhysicalPropElasticity_COBBLESTONE_MATERIAL": "170", "FIntPhysicalPropElasticity_CRACKED_LAVA_MATERIAL": "150", "FIntPhysicalPropElasticity_DIAMONDPLATE_MATERIAL": "250", "FIntPhysicalPropElasticity_FABRIC_MATERIAL": "50", "FIntPhysicalPropElasticity_GLACIER_MATERIAL": "150", "FIntPhysicalPropElasticity_GRASS_MATERIAL": "100", "FIntPhysicalPropElasticity_GROUND_MATERIAL": "100", "FIntPhysicalPropElasticity_ICE_MATERIAL": "150", "FIntPhysicalPropElasticity_MARBLE_MATERIAL": "170", "FIntPhysicalPropElasticity_METAL_MATERIAL": "250", "FIntPhysicalPropElasticity_MUD_MATERIAL": "70", "FIntPhysicalPropElasticity_PEBBLE_MATERIAL": "170", "FIntPhysicalPropElasticity_ROCK_MATERIAL": "170", "FIntPhysicalPropElasticity_RUST_MATERIAL": "200", "FIntPhysicalPropElasticity_SAND_MATERIAL": "50", "FIntPhysicalPropElasticity_SANDSTONE_MATERIAL": "150", "FIntPhysicalPropElasticity_SNOW_MATERIAL": "30", "FIntPhysicalPropElasticity_WOOD_MATERIAL": "200", "FIntPhysicalPropElasticity_WOODPLANKS_MATERIAL": "200", "FIntPhysicalPropFriction_ALUMINUM_MATERIAL": "400", "FIntPhysicalPropFriction_BRICK_MATERIAL": "800", "FIntPhysicalPropFriction_CONCRETE_MATERIAL": "700", "FIntPhysicalPropFriction_DIAMONDPLATE_MATERIAL": "350", "FIntPhysicalPropFriction_NEON_MATERIAL": "300", "FIntPhysicalPropFriction_PLASTIC_MATERIAL": "300", "FIntPhysicalPropFriction_SAND_MATERIAL": "500", "FIntPhysicalPropFriction_SANDSTONE_MATERIAL": "500", "FIntPhysicalPropFriction_SMOOTH_PLASTIC_MATERIAL": "200", "FIntPhysicalPropFriction_SNOW_MATERIAL": "300", "FIntPhysicalPropFWeight_BASALT_MATERIAL": "300", "FIntPhysicalPropFWeight_BRICK_MATERIAL": "300", "FIntPhysicalPropFWeight_CONCRETE_MATERIAL": "300", "FIntPhysicalPropFWeight_ICE_MATERIAL": "3000", "FIntPhysicalPropFWeight_SAND_MATERIAL": "5000", "FIntPhysicalPropFWeight_SANDSTONE_MATERIAL": "5000", "FIntRegLambda": "1400", "FIntRenderGBufferMinQLvl": "16", "FIntRenderNewPercentMac": "100", "FIntRenderNewPercentWin": "100", "FIntStartupInfluxHundredthsPercentage": "100", "FIntStudioInsertDeletionCheckTimeMS": "30000", "FIntValidateLauncherPercent": "100", "FLogAsserts": "0", "FLogBrowserActivity": "3", "FLogCloseDataModel": "3", "FLogDXVideoMemory": "4", "FLogFullRenderObjects": "0", "FLogGraphics": "6", "FLogHangDetection": "3", "FLogLuaAssert": "0", "FLogLuaBridge": "2", "FLogNetworkItemQueueDtor": "1", "FLogNetworkPacketsReceive": "5", "FLogOutlineBrightnessMax": "160", "FLogOutlineBrightnessMin": "50", "FLogOutlineThickness": "40", "FLogPlayerShutdownLuaTimeoutSeconds": "1", "FLogServiceCreation": "4", "FLogServiceVectorResize": "4", "FLogStepAnimatedJoints": "5", "FLogUseLuaMemoryPool": "0", "FLogVR": "6", "FStringClientInsertFilterMoreInfoUrl": "http://devforum.roblox.com/t/coming-changes-to-insert-service/30327", "FStringPlaceFilter_ChatVisiblePropertyEnabled": "True;445285081;201114142", "FStringPlaceFilter_CleanUpInterpolationTimestamps": "False;424096945", "FStringPlaceFilter_CorescriptNewLoadChat": "True;290276263;1818;439333509", "FStringPlaceFilter_DisableMovementHistory": "True;189707", "FStringPlaceFilter_InsertServiceLoadModelErrorDoNotCreateEmpty": "True;359173292", "FStringPlaceFilter_InsertServiceLoadModelErrorNoLuaExceptionReturnNull": "True;359173292", "FStringPlaceFilter_InterpolationAwareTargetTime": "True;249779150;333368740;444708274;64542766;248207867;171391948;360589910;388599755;163865146;127243303;162537373;6597705;332248116;348681325;196235086;13822889;189707", "FStringPlaceFilter_InterpolationDelayFactorTenths": "10;189707", "FStringPlaceFilter_InterpolationTimingFix": "True;208770506", "FStringPlaceFilter_MaterialPropertiesNewIsDefault": "False;276583453;29812337;264431831;189707;204990346;30869879;166456825;287335491;180714690;248409235;255280267;289685010;183384830;314906000;323111227", "FStringPlaceFilter_NewIncomingPhysicsManagement": "True;249779150;333368740;444708274;64542766;248207867;171391948;360589910;388599755;163865146;127243303;162537373;6597705;332248116;348681325;196235086;13822889;189707", "FStringPlaceFilter_NewLayoutAndConstraintsEnabled": "True;534842009;20213796;379132413;485971234;515782100;248207867;360699282;498699944;540764930;534808604;520456996;552894983;551169796;560164377", "FStringPlaceFilter_NoAnimationTrackState": "True;177200271", "FStringPlaceFilter_PhysicsPacketSendWorldStepTimestamp": "False;424096945", "FStringPlaceFilter_ReservedServersEnabled": "True;107715348", "FStringPlaceFilter_SetNetworkOwnerAPIEnabled": "True;13822889;257857728", "FStringPlaceFilter_SetNetworkOwnerAPIEnabledV2": "True;13822889;257857728", "FStringPlaceFilter_SetPhysicsToLastRealStateWhenBecomingOwner": "True;13822889;189707", "FStringPlaceFilter_StateBasedAnimationReplication": "True;175953385;174810327;181219650", "FStringPlaceFilter_SyncRenderingAndPhysicsInterpolation": "True;249779150;333368740;444708274;64542766;248207867;171391948;360589910;388599755;163865146;127243303;162537373;6597705;332248116;348681325;196235086;13822889;189707", "FStringPlaceFilter_UseHermiteSplineInterpolation": "False;424096945", "FStringPlaceFilter_UseLuaChat": "True;1818;14375697;189707;531481106;531481235;359173292;9528010;1636712;38578583;292439477;306964494;28586816;127243303;119252166;66211953;66165758;186847702;345405078;85697719;132341587;27337166;33652113;33012897;358849900;534395508;416928270;506381374;511564903;371201249;171391948;337448601;538259342;65070964;65007797;9393009;472185094;399088704;393507963;64542766;23200077;157509913;105477669;142522992;73118875;150030118;531525052;187659887;370731277;142823291;155615604;137877687;292439477;13822889;277751860;167573749;164051105;404729070;399595838;69184822;248409235;289685010;166456825;514032364", "FStringPlaceFilter_UseNewAppBridgeAndroid": "True;382285252", "FStringPlaceFilter_UseNewDataStoreLogging": "True;359173292", "FStringPlaceFilter_UseNewPersistenceSubdomain": "True;359173292", "FStringStudioTutorialsTOCUrl": "http://wiki.nexium.fit/index.php?title=Studio_Tutorials_Landing&studiomode=true", "FStringStudioTutorialsUrl": "http://wiki.nexium.fit/index.php?title=Studio_Tutorials_Test&studiomode=true", "GoogleAnalyticsAccountPropertyID": "UA-43420590-3", "GoogleAnalyticsAccountPropertyIDClient": "", "GoogleAnalyticsAccountPropertyIDPlayer": "UA-43420590-14", "GoogleAnalyticsLoadStudio": "1", "HttpUseCurlPercentageMacClient": "100", "HttpUseCurlPercentageMacStudio": "100", "HttpUseCurlPercentageWinClient": "100", "HttpUseCurlPercentageWinStudio": "100", "MinNumberScriptExecutionsToGetPrize": "500", "PrizeAssetIDs": "0=110718551=Congratulations! Your success at publishing a place has earned you the Eggcellent Builder hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;1=110719580=Congratulations! Your exploration of ROBLOX Studio's models has led you to the Eggstreme Builder hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;2=110720049=Congratulations! Your contribution to ROBLOX's content catalog has earned you the Eggsultant Contributor hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;3=110790044=Congratulations! Your large experience in scripting has earned you the rare Eggscruciatingly Deviled Scripter hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;4=110790072=Congratulations! Your flexibility at finding eggs has led you to the Yolk's on Us hat! You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;5=110790103=Congratulations! You've found the Eggsplosion hat! You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!", "PrizeAwarderURL": "/ostara/boon", "PublishedProjectsPageHeight": "535", "PublishedProjectsPageUrl": "/ide/publish", "PublishedProjectsPageWidth": "950", "SFFlagAllowPhysicsPacketCompression": "False", "SFFlagBinaryStringReplicationFix": "True", "SFFlagEquipToolOnClient": "True", "SFFlagGuid64Bit": "True", "SFFlagInfiniteTerrain": "True", "SFFlagMaterialPropertiesNewIsDefault": "True", "SFFlagNetworkStreamRotationAsFloat": "False", "SFFlagNetworkUseServerScope": "True", "SFFlagNewPhysicalPropertiesForcedOnAll": "True", "SFFlagOneWaySimRadiusReplication": "True", "SFFlagPathBasedPartMovement": "True", "SFFlagPhysicsPacketSendWorldStepTimestamp": "True", "SFFlagPreventInterpolationOnCFrameChange": "True", "SFFlagProtocolSynchronization": "True", "SFFlagR15CompositingEnabled": "True", "SFFlagReplicatedFirstEnabled": "True", "SFFlagSoundChannelUseV2Implementation": "True", "SFFlagStateBasedAnimationReplication": "True", "SFFlagTeamCreateReplicateCollisionFidelity": "True", "SFFlagTeamCreateReplicateExactCFrame": "True", "SFFlagTeamCreateReplicateTerrainRegion": "True", "SFFlagTopRepContSync": "True", "SFFlagUseLuaChat": "True", "SFFlagUseNewBlockFunction": "True", "SFFlagUseNewSetFMOD3D": "True", "StartPageUrl": "/ide/welcome", "VideoPreRollWaitTimeSeconds": "45" } \ No newline at end of file diff --git a/app/files/CoreGui/107893730 b/app/files/CoreGui/107893730 new file mode 100644 index 0000000..2896685 --- /dev/null +++ b/app/files/CoreGui/107893730 @@ -0,0 +1,1107 @@ +-- this script creates the gui and sends the web requests for in game purchase prompts + +-- wait for important items to appear +while not Game do + wait(0.1) +end +while not game:GetService("MarketplaceService") do + wait(0.1) +end +while not game:FindFirstChild("CoreGui") do + wait(0.1) +end +while not game.CoreGui:FindFirstChild("RobloxGui") do + wait(0.1) +end + +-------------------------------- Global Variables ---------------------------------------- +-- utility variables +local RbxUtility = nil +local baseUrl = game:GetService("ContentProvider").BaseUrl:lower() +baseUrl = string.gsub(baseUrl,"/m.","/www.") --mobile site does not work for this stuff! + +-- data variables +local currentProductInfo, currentAssetId, currentCurrencyType, currentCurrencyAmount, currentEquipOnPurchase, currentProductId, currentServerResponseTable +local checkingPlayerFunds = false +local purchasingConsumable = false + +-- gui variables +local currentlyPrompting = false +local currentlyPurchasing = false +local purchaseDialog, errorDialog = nil +local tweenTime = 0.3 +local showPosition = UDim2.new(0.5,-217,0.5,-146) +local hidePosition = UDim2.new(0.5,-217,1,25) +local isSmallScreen = nil +local spinning = false +local spinnerIcons = nil +local smallScreenThreshold = 450 +local renderSteppedConnection = nil + +local modalEnabledFix = false +local success = pcall(function() modalEnabledFix = settings():GetFFlag("FixModalEnabledOniOS") end) +if not success then + modalEnabledFix = false +end + +-- user facing images +local assetUrls = {} +local assetUrl = "http://www.nexium.fit/Asset/?id=" +local errorImageUrl = assetUrl .. "42557901" table.insert(assetUrls, errorImageUrl) +local buyImageUrl = assetUrl .. "142494143" table.insert(assetUrls,buyImageUrl) +local cancelButtonImageUrl = assetUrl .. "142494219" table.insert(assetUrls, cancelButtonImageUrl) +local freeButtonImageDownUrl = assetUrl .. "104651761" table.insert(assetUrls, freeButtonImageDownUrl) +local loadingImage = assetUrl .. "143116791" table.insert(assetUrls,loadingImage) + +-- user facing string +local buyHeaderText = "Buy Item" +local takeHeaderText = "Take Item" +local buyFailedHeaderText = "An Error Occurred" + +local errorPurchasesDisabledText = "In-game purchases are disabled" +local errorPurchasesUnknownText = "Roblox is performing maintenance" + +local purchaseSucceededText = "Your purchase of itemName succeeded!" +local purchaseFailedText = "Your purchase of itemName failed because errorReason. Your account has not been charged. Please try again soon." +local productPurchaseText = "Would you like to buy the itemName assetType for currencyTypecurrencyAmount?"--"Would you like to buy the itemName assetType from assetOwner for currencyTypecurrencyAmount?" +local productPurchaseTixOnlyText = "Would you like to buy the itemName assetType for currencyAmount currencyType?" --"Would you like to buy the itemName assetType from assetOwner for currencyAmount currencyType?" +local freeItemPurchaseText = "Would you like to take the assetType itemName for FREE?" +local freeItemBalanceText = "Your balance of Robux or Tix will not be affected by this transaction." +local upgradeBCText = "You require an upgrade to your Builders Club membership to purchase this item. Click 'Buy Builders Club' to upgrade." +-------------------------------- End Global Variables ---------------------------------------- + + +----------------------------- Util Functions --------------------------------------------- +function getSecureApiBaseUrl() + local secureApiUrl = baseUrl + secureApiUrl = string.gsub(secureApiUrl,"http","https") + secureApiUrl = string.gsub(secureApiUrl,"www","api") + return secureApiUrl +end + +function getRbxUtility() + if not RbxUtility then + RbxUtility = LoadLibrary("RbxUtility") + end + return RbxUtility +end + +function preloadAssets() + for i = 1, #assetUrls do + game:GetService("ContentProvider"):Preload(assetUrls[i]) + end +end +----------------------------- End Util Functions --------------------------------------------- + + +-------------------------------- Accept/Decline Functions -------------------------------------- +function removeCurrentPurchaseInfo() + currentAssetId = nil + currentCurrencyType = nil + currentCurrencyAmount = nil + currentEquipOnPurchase = nil + currentProductId = nil + currentProductInfo = nil + currentServerResponseTable = nil + + checkingPlayerFunds = false +end + +function userPurchaseActionsEnded(isSuccess) + checkingPlayerFunds = false + + purchaseDialog.BodyFrame.AfterBalanceText.Visible = false + + if isSuccess then -- show the user we bought the item successfully, when they close this dialog we will call signalPromptEnded + local newPurchasedSucceededText = string.gsub( purchaseSucceededText,"itemName", tostring(currentProductInfo["Name"])) + purchaseDialog.BodyFrame.ItemDescription.Text = newPurchasedSucceededText + setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton) + hidePurchasing() + else -- otherwise we didn't purchase, no need to show anything, just signal and close dialog + signalPromptEnded(isSuccess) + end +end + +function signalPromptEnded(isSuccess) + closePurchasePrompt() + if purchasingConsumable then + game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(game.Players.LocalPlayer.userId, currentProductId, isSuccess) + else + game:GetService("MarketplaceService"):SignalPromptPurchaseFinished(game.Players.LocalPlayer, currentAssetId, isSuccess) + end + removeCurrentPurchaseInfo() +end + +-- make sure our gui displays the proper purchase data, and set the productid we will try and buy if use specifies a buy action +function updatePurchasePromptData(toggleColoredText) + local newItemDescription = "" + + -- id to use when we request a purchase + if not currentProductId then + currentProductId = currentProductInfo["ProductId"] + end + + if isFreeItem() then + newItemDescription = string.gsub( freeItemPurchaseText,"itemName", tostring(currentProductInfo["Name"])) + newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) ) + setHeaderText(takeHeaderText) + else -- otherwise item costs something, so different prompt + local purchaseText = productPurchaseText + if currentProductIsTixOnly() then + purchaseText = productPurchaseTixOnlyText + end + + newItemDescription = string.gsub( purchaseText,"itemName", tostring(currentProductInfo["Name"])) + newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) ) + --newItemDescription = string.gsub( newItemDescription,"assetOwner", tostring(currentProductInfo["Creator"]["Name"]) ) + newItemDescription = string.gsub( newItemDescription,"currencyType", tostring(currencyTypeToString(currentCurrencyType)) ) + newItemDescription = string.gsub( newItemDescription,"currencyAmount", tostring(currentCurrencyAmount)) + setHeaderText(buyHeaderText) + end + + purchaseDialog.BodyFrame.ItemDescription.Text = newItemDescription + + if purchasingConsumable then + purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentProductInfo["IconImageAssetId"]) .. '&x=100&y=100&format=png' + else + purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentAssetId) .. '&x=100&y=100&format=png' + end +end + +function checkIfCanPurchase() + if checkingPlayerFunds then + local canPurchase, insufficientFunds, notRightBC = canPurchaseItem() -- check again to see if we can buy item + if not canPurchase or (insufficientFunds or notRightBC) then -- wait a bit and try a few more times + local retries = 1000 + while retries > 0 and (insufficientFunds or notRightBC) and checkingPlayerFunds and canPurchase do + wait(1/10) + canPurchase, insufficientFunds, notRightBC = canPurchaseItem() + retries = retries - 1 + end + end + if canPurchase and not insufficientFunds then + -- we can buy item! set our buttons up and we will exit this loop + setButtonsVisible(purchaseDialog.BodyFrame.BuyButton,purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceText) + end + end +end + +function closePurchasePrompt() + purchaseDialog:TweenPosition(hidePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true, function() + game.GuiService:RemoveCenterDialog(purchaseDialog) + hidePurchasing() + + purchaseDialog.Visible = false + currentlyPrompting = false + currentlyPurchasing = false + + if modalEnabledFix then + Game:GetService("UserInputService").ModalEnabled = false + end + end) +end + +function showPurchasePrompt() + local canPurchase, insufficientFunds, notRightBC, override, descText = canPurchaseItem() + + if canPurchase then + updatePurchasePromptData() + + if override and descText then + purchaseDialog.BodyFrame.ItemDescription.Text = descText + purchaseDialog.BodyFrame.AfterBalanceText.Visible = false + end + game.GuiService:AddCenterDialog(purchaseDialog, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + -- set the state for our buttons + purchaseDialog.Visible = true + + if not currentlyPurchasing then + if isFreeItem() then + setButtonsVisible(purchaseDialog.BodyFrame.FreeButton, purchaseDialog.BodyFrame.CancelButton) + elseif notRightBC then + setButtonsVisible(purchaseDialog.BodyFrame.BuyBCButton, purchaseDialog.BodyFrame.CancelButton) + elseif insufficientFunds then + setButtonsVisible(purchaseDialog.BodyFrame.BuyRobuxButton, purchaseDialog.BodyFrame.CancelButton) + elseif override then + if currentProductIsTixOnly() then + purchaseDialog.BodyFrame.AfterBalanceText.Visible = true + end + setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton) + else + setButtonsVisible(purchaseDialog.BodyFrame.BuyButton, purchaseDialog.BodyFrame.CancelButton) + end + end + + if modalEnabledFix then + Game:GetService("UserInputService").ModalEnabled = true + end + purchaseDialog:TweenPosition(showPosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true) + end, + --HideFunction + function() + if modalEnabledFix then + Game:GetService("UserInputService").ModalEnabled = false + end + purchaseDialog.Visible = false + end) + else -- we failed in prompting a purchase, do a decline + doDeclinePurchase() + end +end + +-- given an asset id, this function will grab that asset from the website, and return the first "Tool" object found inside it +function getToolAssetID(assetID) + local newTool = game:GetService("InsertService"):LoadAsset(assetID) + if not newTool then return nil end + + if newTool:IsA("Tool") then + return newTool + end + + local toolChildren = newTool:GetChildren() + for i = 1, #toolChildren do + if toolChildren[i]:IsA("Tool") then + return toolChildren[i] + end + end + return nil +end + +-- the user tried to purchase by clicking the purchase button, but something went wrong. +-- let them know their account was not charged, and that they do not own the item yet. +function purchaseFailed(inGamePurchasesDisabled) + local name = "Item" + if currentProductInfo then name = currentProductInfo["Name"] end + + local newPurchasedFailedText = string.gsub( purchaseFailedText,"itemName", tostring(name)) + if inGamePurchasesDisabled then + newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesDisabledText) ) + else + newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesUnknownText) ) + end + + purchaseDialog.BodyFrame.ItemDescription.Text = newPurchasedFailedText + purchaseDialog.BodyFrame.ItemPreview.Image = errorImageUrl + + setButtonsVisible(purchaseDialog.BodyFrame.OkButton) + + setHeaderText(buyFailedHeaderText) + + hidePurchasing() +end + +-- user has specified they want to buy an item, now try to attempt to buy it for them +function doAcceptPurchase(currencyPreferredByUser) + if currentlyPurchasing then return end + currentlyPurchasing = true + + showPurchasing() -- shows a purchasing ui (shows spinner) + + local startTime = tick() + + -- http call to do the purchase + local response = "none" + local url = nil + + -- consumables need to use a different url + if purchasingConsumable then + url = getSecureApiBaseUrl() .. "marketplace/submitpurchase?productId=" .. tostring(currentProductId) .. + "¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) .. + "&expectedUnitPrice=" .. tostring(currentCurrencyAmount) .. + "&placeId=" .. tostring(Game.PlaceId) + local flagExists, flagValue = pcall(function() settings():GetFFlag("AddRequestIdToDeveloperProductPurchases") end) + if flagExists and flagValue then + local h = game:GetService("HttpService") + url = url .. "&requestId=" .. h:UrlEncode(h:GenerateGUID()) + end + else + url = getSecureApiBaseUrl() .. "marketplace/purchase?productId=" .. tostring(currentProductId) .. + "¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) .. + "&purchasePrice=" .. tostring(currentCurrencyAmount) .. + "&locationType=Game" .. "&locationId=" .. Game.PlaceId + end + + local success, reason = ypcall(function() + response = game:HttpPostAsync(url, "RobloxPurchaseRequest") + end) + + -- debug output for us (found in the logs from local) + print("doAcceptPurchase success from ypcall is ",success,"reason is",reason) + + if (tick() - startTime) < 1 then + wait(1) -- allow the purchasing waiting dialog to at least be readable (otherwise it might flash, looks bad)... + end + + -- check to make sure purchase actually happened on the web end + if response == "none" or response == nil or response == '' then + print("did not get a proper response from web on purchase of",currentAssetId,currentProductId) + purchaseFailed() + return + end + + -- parse our response, decide how to react + response = getRbxUtility().DecodeJSON(response) + + if response then + if response["success"] == false then + if response["status"] ~= "AlreadyOwned" then + print("web return response of fail on purchase of",currentAssetId,currentProductId) + purchaseFailed( (response["status"] == "EconomyDisabled") ) + return + end + end + else + print("web return response of non parsable JSON on purchase of",currentAssetId) + purchaseFailed() + return + end + + -- check to see if this item was bought, and if we want to equip it (also need to make sure the asset type was gear) + if currentEquipOnPurchase and success and currentAssetId and tonumber(currentProductInfo["AssetTypeId"]) == 19 then + local tool = getToolAssetID(tonumber(currentAssetId)) + if tool then + tool.Parent = game.Players.LocalPlayer.Backpack + end + end + + if purchasingConsumable then + if not response["receipt"] then + print("tried to buy productId, but no receipt returned. productId was",currentProductId) + purchaseFailed() + return + end + Game:GetService("MarketplaceService"):SignalClientPurchaseSuccess( tostring(response["receipt"]), game.Players.LocalPlayer.userId, currentProductId ) + else + userPurchaseActionsEnded(success) + end +end + +-- user pressed the cancel button, just remove all purchasing prompts +function doDeclinePurchase() + if currentlyPurchasing then return end + userPurchaseActionsEnded(false) +end +-------------------------------- End Accept/Decline Functions -------------------------------------- + + +---------------------------------------------- Currency Functions --------------------------------------------- +-- enums have no implicit conversion to numbers in lua, has to have a function to do this +function currencyEnumToInt(currencyEnum) + if currencyEnum == Enum.CurrencyType.Robux or currencyEnum == Enum.CurrencyType.Default then + return 1 + elseif currencyEnum == Enum.CurrencyType.Tix then + return 2 + end +end + +-- oi, this is ugly +function assetTypeToString(assetType) + if assetType == 1 then return "Image" + elseif assetType == 2 then return "T-Shirt" + elseif assetType == 3 then return "Audio" + elseif assetType == 4 then return "Mesh" + elseif assetType == 5 then return "Lua" + elseif assetType == 6 then return "HTML" + elseif assetType == 7 then return "Text" + elseif assetType == 8 then return "Hat" + elseif assetType == 9 then return "Place" + elseif assetType == 10 then return "Model" + elseif assetType == 11 then return "Shirt" + elseif assetType == 12 then return "Pants" + elseif assetType == 13 then return "Decal" + elseif assetType == 16 then return "Avatar" + elseif assetType == 17 then return "Head" + elseif assetType == 18 then return "Face" + elseif assetType == 19 then return "Gear" + elseif assetType == 21 then return "Badge" + elseif assetType == 22 then return "Group Emblem" + elseif assetType == 24 then return "Animation" + elseif assetType == 25 then return "Arms" + elseif assetType == 26 then return "Legs" + elseif assetType == 27 then return "Torso" + elseif assetType == 28 then return "Right Arm" + elseif assetType == 29 then return "Left Arm" + elseif assetType == 30 then return "Left Leg" + elseif assetType == 31 then return "Right Leg" + elseif assetType == 32 then return "Package" + elseif assetType == 33 then return "YouTube Video" + elseif assetType == 34 then return "Game Pass" + elseif assetType == 0 then return "Product" + end + + return "" +end + +function currencyTypeToString(currencyType) + if currencyType == Enum.CurrencyType.Tix then + return "Tix" + else + return "R$" + end +end + +-- figure out what currency to use based on the currency you can actually sell the item in and what the script specified +function setCurrencyAmountAndType(priceInRobux, priceInTix) + if currentCurrencyType == Enum.CurrencyType.Default or currentCurrencyType == Enum.CurrencyType.Robux then -- sell for default (user doesn't care) or robux + if priceInRobux ~= nil and priceInRobux ~= 0 then -- we can sell for robux + currentCurrencyAmount = priceInRobux + currentCurrencyType = Enum.CurrencyType.Robux + else -- have to use tix + currentCurrencyAmount = priceInTix + currentCurrencyType = Enum.CurrencyType.Tix + end + elseif currentCurrencyType == Enum.CurrencyType.Tix then -- we want to sell for tix + if priceInTix ~= nil and priceInTix ~= 0 then -- we can sell for tix + currentCurrencyAmount = priceInTix + currentCurrencyType = Enum.CurrencyType.Tix + else -- have to use robux + currentCurrencyAmount = priceInRobux + currentCurrencyType = Enum.CurrencyType.Robux + end + else + return false + end + + if currentCurrencyAmount == nil then + return false + end + + return true +end + +-- will get the player's balance of robux and tix, return in a table +function getPlayerBalance() + local playerBalance = nil + local success, errorCode = ypcall(function() playerBalance = game:HttpGetAsync(getSecureApiBaseUrl() .. "currency/balance") end) + if not success then + print("Get player balance failed because",errorCode) + return nil + end + + if playerBalance == '' then + return nil + end + + playerBalance = getRbxUtility().DecodeJSON(playerBalance) + + return playerBalance +end + +-- should open an external default browser window to this url +function openBuyCurrencyWindow() + checkingPlayerFunds = true + game:GetService("GuiService"):OpenBrowserWindow(baseUrl .. "Upgrades/Robux.aspx") +end + +function openBCUpSellWindow() + checkingPlayerFunds = true + Game:GetService('GuiService'):OpenBrowserWindow(baseUrl .. "Upgrades/BuildersClubMemberships.aspx") +end + +-- set up the gui text at the bottom of the prompt (alerts user to how much money they will have left, or if they need to buy more to buy the item) +function updateAfterBalanceText(playerBalance, notRightBc) + if isFreeItem() then + purchaseDialog.BodyFrame.AfterBalanceText.Text = freeItemBalanceText + return true, false + end + + local keyWord = nil + if currentCurrencyType == Enum.CurrencyType.Robux then + keyWord = "robux" + elseif currentCurrencyType == Enum.CurrencyType.Tix then + keyWord = "tickets" + end + + if not keyWord then + return false + end + + local playerBalanceNumber = tonumber(playerBalance[keyWord]) + if not playerBalanceNumber then + return false + end + + local afterBalanceNumber = playerBalanceNumber - currentCurrencyAmount + + -- check to see if we have enough of the desired currency to allow a purchase, if not we need to prompt user to buy robux + if not notRightBc then + if afterBalanceNumber < 0 and keyWord == "robux" then + purchaseDialog.BodyFrame.AfterBalanceText.Text = "You need " .. currencyTypeToString(currentCurrencyType) .. tostring(-afterBalanceNumber) .. " more to buy this, click 'Buy R$' to purchase more." + return true, true + elseif afterBalanceNumber < 0 and keyWord == "tickets" then + purchaseDialog.BodyFrame.AfterBalanceText.Text = "You need " .. tostring(-afterBalanceNumber) .. " " .. currencyTypeToString(currentCurrencyType) .. " more to buy this item." + return true, true -- user can't buy more tickets, so we say fail the transaction (maybe instead we can prompt them to trade currency???) + end + else + purchaseDialog.BodyFrame.AfterBalanceText.Text = upgradeBCText + return true, false + end + + if currentProductIsTixOnly() then + purchaseDialog.BodyFrame.AfterBalanceText.Text = "Your balance after this transaction will be " .. tostring(afterBalanceNumber) .. " " .. currencyTypeToString(currentCurrencyType) .. "." + else + purchaseDialog.BodyFrame.AfterBalanceText.Text = "Your balance after this transaction will be " .. currencyTypeToString(currentCurrencyType) .. tostring(afterBalanceNumber) .. "." + end + purchaseDialog.BodyFrame.AfterBalanceText.Visible = true + return true, false +end + +function isFreeItem() + -- if both of these are true, then the item is free, just prompt user if they want to take one + return currentProductInfo and currentProductInfo["IsForSale"] == true and currentProductInfo["IsPublicDomain"] == true +end +---------------------------------------------- End Currency Functions --------------------------------------------- + + +---------------------------------------------- Data Functions ----------------------------------------------------- + +-- more enum to int fun! +function membershipTypeToNumber(membership) + if membership == Enum.MembershipType.None then + return 0 + elseif membership == Enum.MembershipType.BuildersClub then + return 1 + elseif membership == Enum.MembershipType.TurboBuildersClub then + return 2 + elseif membership == Enum.MembershipType.OutrageousBuildersClub then + return 3 + end + + return -1 +end + +function currentProductIsTixOnly() + local priceInRobux = currentProductInfo["PriceInRobux"] + local priceInTix = currentProductInfo["PriceInTickets"] + + if priceInRobux == nil then return true end + priceInRobux = tonumber(priceInRobux) + if priceInRobux == nil then return true end + + if priceInTix == nil then return false end + priceInTix = tonumber(priceInTix) + if priceInTix == nil then return false end + + return (priceInRobux <= 0 and priceInTix > 0) +end + +-- This functions checks to make sure the purchase is even possible, if not it returns false and we don't prompt user (some situations require user feedback when we won't prompt) +function canPurchaseItem() + + -- first we see if player already owns the asset/get the productinfo + local playerOwnsAsset = false + local notRightBc = false + local descText = nil + + if purchasingConsumable then + currentProductInfo = game:GetService("MarketplaceService"):GetProductInfo(currentProductId, Enum.InfoType.Product) + else + currentProductInfo = game:GetService("MarketplaceService"):GetProductInfo(currentAssetId) + end + + if currentProductInfo == nil then + descText = "In-game sales are temporarily disabled. Please try again later." + return true, nil, nil, true, descText + end + + if not purchasingConsumable then + if not currentAssetId then + return false + end + if currentAssetId <= 0 then + return false + end + + local success, errorCode = ypcall(function() playerOwnsAsset = game:HttpGetAsync(getSecureApiBaseUrl() + .. "ownership/hasAsset?userId=" + .. tostring(game.Players.LocalPlayer.userId) + .. "&assetId=" .. tostring(currentAssetId)) + end) + + if not success then + return false + end + + if playerOwnsAsset == true or playerOwnsAsset == "true" then + descText = "You already own this item." + return true, nil, nil, true, descText + end + end + + purchaseDialog.BodyFrame.AfterBalanceText.Visible = true + + -- next we parse through product info and see if we can purchase + + if type(currentProductInfo) ~= "table" then + currentProductInfo = getRbxUtility().DecodeJSON(currentProductInfo) + end + + if not currentProductInfo then + descText = "Could not get product info. Please try again later." + return true, nil, nil, true, descText + end + + if currentProductInfo["IsForSale"] == false and currentProductInfo["IsPublicDomain"] == false then + descText = "This item is no longer for sale." + return true, nil, nil, true, descText + end + + -- now we start talking money, making sure we are going to be able to purchase this + if not setCurrencyAmountAndType(tonumber(currentProductInfo["PriceInRobux"]), tonumber(currentProductInfo["PriceInTickets"])) then + descText = "We could retrieve the price of the item correctly. Please try again later." + return true, nil, nil, true, descText + end + + local playerBalance = getPlayerBalance() + if not playerBalance then + descText = "Could not retrieve your balance. Please try again later." + return true, nil, nil, true, descText + end + + if tonumber(currentProductInfo["MinimumMembershipLevel"]) > membershipTypeToNumber(game.Players.LocalPlayer.MembershipType) then + notRightBc = true + end + + local updatedBalance, insufficientFunds = updateAfterBalanceText(playerBalance, notRightBc) + + if notRightBc then + purchaseDialog.BodyFrame.AfterBalanceText.Active = true + return true, insufficientFunds, notRightBc, false + end + + if currentProductInfo["ContentRatingTypeId"] == 1 then + if game.Players.LocalPlayer:GetUnder13() then + descText = "Your account is under 13 so purchase of this item is not allowed." + return true, nil, nil, true, descText + end + end + + if (currentProductInfo["IsLimited"] == true or currentProductInfo["IsLimitedUnique"] == true) and + (currentProductInfo["Remaining"] == "" or currentProductInfo["Remaining"] == 0 or currentProductInfo["Remaining"] == nil) then + descText = "All copies of this item have been sold out! Try buying from other users on www.roblox.com." + return true, nil, nil, true, descText + end + + if not updatedBalance then + descText = 'Could not update your balance. Please check back after some time.' + return true, nil, nil, true, descText + end + + if insufficientFunds then + -- if this is a ticket only time and we don't have enough, tell the user to get more tix + if currentProductIsTixOnly() then + descText = "This item costs more tickets than you currently have! Try trading currency on www.roblox.com to get more tickets." + return true, nil, nil, true, descText + end + end + + -- we use insufficient funds to display a prompt to buy more robux + return true, insufficientFunds +end + +---------------------------------------------- End Data Functions ----------------------------------------------------- + + +---------------------------------------------- Gui Functions ---------------------------------------------- +function startSpinner() + renderSteppedConnection = Game:GetService("RunService").RenderStepped:connect(function() + purchaseDialog.PurchasingFrame.PurchasingSpinnerOuter.Rotation = purchaseDialog.PurchasingFrame.PurchasingSpinnerOuter.Rotation + 7 + purchaseDialog.PurchasingFrame.PurchasingSpinnerInner.Rotation = purchaseDialog.PurchasingFrame.PurchasingSpinnerInner.Rotation - 9 + end) +end + +function stopSpinner() + if renderSteppedConnection then + renderSteppedConnection:disconnect() + renderSteppedConnection = nil + end +end + +-- next two functions control the "Purchasing..." overlay +function showPurchasing() + purchaseDialog.PurchasingFrame.Visible = true + startSpinner() +end + +function hidePurchasing() + purchaseDialog.PurchasingFrame.Visible = false + stopSpinner() +end + +-- convenience method to say exactly what buttons should be visible (all others are not!) +function setButtonsVisible(...) + local args = {...} + local argCount = select('#', ...) + + local bodyFrameChildren = purchaseDialog.BodyFrame:GetChildren() + for i = 1, #bodyFrameChildren do + if bodyFrameChildren[i]:IsA("GuiButton") then + bodyFrameChildren[i].Visible = false + for j = 1, argCount do + if bodyFrameChildren[i] == args[j] then + bodyFrameChildren[i].Visible = true + break + end + end + end + end +end + +-- all the gui init. Would be nice if this didn't have to be a script +function createPurchasePromptGui() + purchaseDialog = Instance.new("Frame") + purchaseDialog.Name = "PurchaseFrame" + purchaseDialog.Size = UDim2.new(0,435,0,292) + purchaseDialog.Position = hidePosition + purchaseDialog.Active = true + purchaseDialog.Visible = false + purchaseDialog.BackgroundColor3 = Color3.new(225/255,225/255,225/255) + purchaseDialog.BorderSizePixel = 0 + purchaseDialog.Parent = game.CoreGui.RobloxGui + + local bodyFrame = Instance.new("Frame") + bodyFrame.Name = "BodyFrame" + bodyFrame.Active = true + bodyFrame.Size = UDim2.new(1,-10,1,-55) + bodyFrame.Position = UDim2.new(0,5,0,50) + bodyFrame.BackgroundColor3 = Color3.new(1, 1, 1) + bodyFrame.BorderSizePixel = 0 + bodyFrame.ZIndex = 8 + bodyFrame.Parent = purchaseDialog + + local titleLabel = createTextObject("TitleLabel", "Buy Item", "TextLabel", Enum.FontSize.Size36) + titleLabel.Active = true + titleLabel.Font = Enum.Font.SourceSansBold + titleLabel.TextColor3 = Color3.new(54/255,54/255,54/255) + titleLabel.ZIndex = 8 + titleLabel.Size = UDim2.new(1,0,0,50) + titleLabel.Parent = purchaseDialog + + local distanceBetweenButtons = 20 + + local cancelButton = createImageButton("CancelButton") + cancelButton.Position = UDim2.new(0.5,(distanceBetweenButtons/2),1,-100) + cancelButton.BorderColor3 = Color3.new(86/255,86/255,86/255) + cancelButton.Parent = bodyFrame + cancelButton.Modal = true + cancelButton.ZIndex = 8 + cancelButton.Image = cancelButtonImageUrl + cancelButton.MouseButton1Up:connect(function( ) + cancelButton.Image = cancelButtonImageUrl + end) + cancelButton.MouseLeave:connect(function( ) + cancelButton.Image = cancelButtonImageUrl + end) + cancelButton.MouseButton1Click:connect(doDeclinePurchase) + + local cancelText = createTextObject("CancelText","Cancel","TextLabel",Enum.FontSize.Size24) + cancelText.TextColor3 = Color3.new(1,1,1) + cancelText.Size = UDim2.new(1,0,1,0) + cancelText.ZIndex = 8 + cancelText.Parent = cancelButton + + local cancelHoverFrame = Instance.new("Frame") + cancelHoverFrame.Name = "HoverFrame" + cancelHoverFrame.Size = UDim2.new(1,0,1,0) + cancelHoverFrame.BackgroundColor3 = Color3.new(1,1,1) + cancelHoverFrame.BackgroundTransparency = 0.7 + cancelHoverFrame.BorderSizePixel = 0 + cancelHoverFrame.Visible = false + cancelHoverFrame.ZIndex = 8 + cancelHoverFrame.Parent = cancelButton + cancelButton.MouseEnter:connect(function() + cancelHoverFrame.Visible = true + end) + cancelButton.MouseLeave:connect(function( ) + cancelHoverFrame.Visible = false + end) + cancelButton.MouseButton1Click:connect(function( ) + cancelHoverFrame.Visible = false + end) + + local buyButton = createImageButton("BuyButton") + buyButton.Position = UDim2.new(0.5,-117-(distanceBetweenButtons/2),1,-100) + buyButton.BorderColor3 = Color3.new(0,112/255,1/255) + buyButton.Image = buyImageUrl + buyButton.ZIndex = 8 + buyButton.Parent = bodyFrame + + local buyText = createTextObject("BuyText","Buy Now","TextLabel",Enum.FontSize.Size24) + buyText.ZIndex = 8 + buyText.TextColor3 = Color3.new(1,1,1) + buyText.Size = UDim2.new(1,0,1,0) + buyText.Parent = buyButton + + local buyHoverFrame = cancelHoverFrame:Clone() + buyButton.MouseEnter:connect(function() + buyHoverFrame.Visible = true + end) + buyButton.MouseLeave:connect(function( ) + buyHoverFrame.Visible = false + end) + buyButton.MouseButton1Click:connect(function( ) + buyHoverFrame.Visible = false + end) + buyHoverFrame.Parent = buyButton + + local buyDisabledButton = buyButton:Clone() + buyDisabledButton.Name = "BuyDisabledButton" + buyDisabledButton.AutoButtonColor = false + buyDisabledButton.Visible = false + buyDisabledButton.Active = false + buyDisabledButton.Parent = bodyFrame + + local buyRobux = buyButton:Clone() + buyRobux.Name = "BuyRobuxButton" + buyRobux.AutoButtonColor = false + buyRobux.Visible = false + buyRobux.ZIndex = 8 + buyRobux.BuyText.Text = "Buy R$" + buyRobux.MouseEnter:connect(function() + buyRobux.HoverFrame.Visible = true + end) + buyRobux.MouseLeave:connect(function( ) + buyRobux.HoverFrame.Visible = false + end) + buyRobux.MouseButton1Click:connect(function( ) + buyRobux.HoverFrame.Visible = false + openBuyCurrencyWindow() + end) + buyRobux.Parent = bodyFrame + + local buyBC = buyRobux:Clone() + buyBC.Name = "BuyBCButton" + buyBC.BuyText.Text = "Buy Builders Club" + buyBC.MouseEnter:connect(function() + buyBC.HoverFrame.Visible = true + end) + buyBC.MouseLeave:connect(function( ) + buyBC.HoverFrame.Visible = false + end) + buyBC.MouseButton1Click:connect(function( ) + buyBC.HoverFrame.Visible = false + openBCUpSellWindow() + end) + buyBC.Parent = bodyFrame + + local freeButton = buyButton:Clone() + freeButton.BuyText.Text = "Take Free" + freeButton.BackgroundTransparency = 1 + freeButton.Name = "FreeButton" + freeButton.Visible = false + freeButton.MouseEnter:connect(function() + freeButton.HoverFrame.Visible = true + end) + freeButton.MouseButton1Click:connect(function( ) + freeButton.HoverFrame.Visible = false + end) + freeButton.MouseLeave:connect(function( ) + freeButton.HoverFrame.Visible = false + end) + freeButton.Parent = bodyFrame + + local okButton = buyButton:Clone() + okButton.BuyText.Text = "Ok" + okButton.Name = "OkButton" + okButton.Visible = false + okButton.Position = UDim2.new(0.5,-okButton.Size.X.Offset/2,1,-100) + okButton.Modal = true + okButton.MouseEnter:connect(function() + okButton.HoverFrame.Visible = true + end) + okButton.MouseButton1Click:connect(function( ) + okButton.HoverFrame.Visible = false + signalPromptEnded(false) + end) + okButton.MouseLeave:connect(function( ) + okButton.HoverFrame.Visible = false + end) + okButton.Parent = bodyFrame + + local okPurchasedButton = okButton:Clone() + okPurchasedButton.Name = "OkPurchasedButton" + okPurchasedButton.MouseEnter:connect(function() + okPurchasedButton.HoverFrame.Visible = true + end) + okPurchasedButton.MouseLeave:connect(function( ) + okPurchasedButton.HoverFrame.Visible = false + end) + okPurchasedButton.MouseButton1Click:connect(function() + okPurchasedButton.HoverFrame.Visible = false + if purchasingConsumable then + userPurchaseProductActionsEnded(true) + else + signalPromptEnded(true) + end + end) + okPurchasedButton.Parent = bodyFrame + + buyButton.MouseButton1Click:connect(function() doAcceptPurchase(Enum.CurrencyType.Robux) end) + freeButton.MouseButton1Click:connect(function() doAcceptPurchase(false) end) + + local itemPreview = Instance.new("ImageLabel") + itemPreview.Name = "ItemPreview" + itemPreview.BackgroundTransparency = 1 + itemPreview.BorderSizePixel = 0 + itemPreview.Position = UDim2.new(0,20,0,20) + itemPreview.Size = UDim2.new(0,100,0,100) + itemPreview.ZIndex = 9 + itemPreview.Parent = bodyFrame + + local itemDescription = createTextObject("ItemDescription","","TextLabel",Enum.FontSize.Size18) + itemDescription.TextXAlignment = Enum.TextXAlignment.Left + itemDescription.Position = UDim2.new(0.5, -70, 0, 10) + itemDescription.Size = UDim2.new(0,245,0,115) + itemDescription.TextColor3 = Color3.new(54/255,54/255,54/255) + itemDescription.ZIndex = 8 + itemDescription.Parent = bodyFrame + + local afterBalanceText = createTextObject("AfterBalanceText","","TextLabel",Enum.FontSize.Size14) + afterBalanceText.BackgroundTransparency = 1 + afterBalanceText.TextColor3 = Color3.new(102/255,102/255,102/255) + afterBalanceText.Position = UDim2.new(0,5,1,-33) + afterBalanceText.Size = UDim2.new(1,-10,0,28) + afterBalanceText.ZIndex = 8 + afterBalanceText.Parent = bodyFrame + + local purchasingFrame = Instance.new("Frame") + purchasingFrame.Name = "PurchasingFrame" + purchasingFrame.Size = UDim2.new(1,0,1,0) + purchasingFrame.BackgroundColor3 = Color3.new(0,0,0) + purchasingFrame.BackgroundTransparency = 0.05 + purchasingFrame.BorderSizePixel = 0 + purchasingFrame.ZIndex = 9 + purchasingFrame.Visible = false + purchasingFrame.Active = true + purchasingFrame.Parent = purchaseDialog + + local purchasingLabel = createTextObject("PurchasingLabel","Purchasing","TextLabel",Enum.FontSize.Size48) + purchasingLabel.Size = UDim2.new(1,0,1,0) + purchasingLabel.Position = UDim2.new(0,0,0,-24) + purchasingLabel.ZIndex = 10 + purchasingLabel.Parent = purchasingFrame + + local purchasingSpinner = Instance.new("ImageLabel") + purchasingSpinner.Name = "PurchasingSpinnerOuter" + purchasingSpinner.Image = loadingImage + purchasingSpinner.BackgroundTransparency = 1 + purchasingSpinner.BorderSizePixel = 0 + purchasingSpinner.Size = UDim2.new(0,64,0,64) + purchasingSpinner.Position = UDim2.new(0.5,-32,0.5,32) + purchasingSpinner.ZIndex = 10 + purchasingSpinner.Parent = purchasingFrame + + local purchasingSpinnerInner = purchasingSpinner:Clone() + purchasingSpinnerInner.BackgroundTransparency = 1 + purchasingSpinnerInner.Name = "PurchasingSpinnerInner" + purchasingSpinnerInner.Size = UDim2.new(0,32,0,32) + purchasingSpinnerInner.Position = UDim2.new(0.5,-16,0.5,48) + purchasingSpinnerInner.Parent = purchasingFrame +end + +-- next 2 functions are convenienvce creation functions for guis +function createTextObject(name, text, type, size) + local textLabel = Instance.new(type) + textLabel.Font = Enum.Font.SourceSans + textLabel.TextColor3 = Color3.new(217/255, 217/255, 217/255) + textLabel.TextWrapped = true + textLabel.Name = name + textLabel.Text = text + textLabel.BackgroundTransparency = 1 + textLabel.BorderSizePixel = 0 + textLabel.FontSize = size + + return textLabel +end + +function createImageButton(name) + local imageButton = Instance.new("ImageButton") + imageButton.Size = UDim2.new(0,117,0,60) + imageButton.Name = name + return imageButton +end + +function setHeaderText(text) + purchaseDialog.TitleLabel.Text = text +end + +function doPurchasePrompt(player, assetId, equipIfPurchased, currencyType, productId) + if not purchaseDialog then + createPurchasePromptGui() + end + + if player == game.Players.LocalPlayer then + if currentlyPrompting then return end + + currentlyPrompting = true + + currentAssetId = assetId + currentProductId = productId + currentCurrencyType = currencyType + currentEquipOnPurchase = equipIfPurchased + + purchasingConsumable = (currentProductId ~= nil) + + showPurchasePrompt() + end +end + +function userPurchaseProductActionsEnded(userIsClosingDialog) + checkingPlayerFunds = false + + if userIsClosingDialog then + closePurchasePrompt() + if currentServerResponseTable then + local isPurchased = false + if tostring(currentServerResponseTable["isValid"]):lower() == "true" then + isPurchased = true + end + + Game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(tonumber(currentServerResponseTable["playerId"]), tonumber(currentServerResponseTable["productId"]), isPurchased) + end + removeCurrentPurchaseInfo() + else + if tostring(currentServerResponseTable["isValid"]):lower() == "true" then + local newPurchasedSucceededText = string.gsub( purchaseSucceededText,"itemName", tostring(currentProductInfo["Name"])) + purchaseDialog.BodyFrame.ItemDescription.Text = newPurchasedSucceededText + setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton) + hidePurchasing() + else + purchaseFailed() + end + end +end + +function doProcessServerPurchaseResponse(serverResponseTable) + if not serverResponseTable then + purchaseFailed() + return + end + + if serverResponseTable["playerId"] and tonumber(serverResponseTable["playerId"]) == game.Players.LocalPlayer.userId then + currentServerResponseTable = serverResponseTable + userPurchaseProductActionsEnded(false) + end +end + +---------------------------------------------- End Gui Functions ---------------------------------------------- + + +---------------------------------------------- Script Event start/initialization ---------------------------------------------- +preloadAssets() + +game:GetService("MarketplaceService").PromptProductPurchaseRequested:connect(function(player, productId, equipIfPurchased, currencyType) + doPurchasePrompt(player, nil, equipIfPurchased, currencyType, productId) +end) + +Game:GetService("MarketplaceService").PromptPurchaseRequested:connect(function(player, assetId, equipIfPurchased, currencyType) + doPurchasePrompt(player, assetId, equipIfPurchased, currencyType, nil) +end) + +Game:GetService("MarketplaceService").ServerPurchaseVerification:connect(function(serverResponseTable) + doProcessServerPurchaseResponse(serverResponseTable) +end) + +Game:GetService("GuiService").BrowserWindowClosed:connect(checkIfCanPurchase) diff --git a/app/files/CoreGui/152908679 b/app/files/CoreGui/152908679 new file mode 100644 index 0000000..a9bb0f1 --- /dev/null +++ b/app/files/CoreGui/152908679 @@ -0,0 +1,264 @@ +-- ContextActionTouch.lua +-- Copyright ROBLOX 2014, created by Ben Tkacheff +-- this script controls ui and firing of lua functions that are bound in ContextActionService for touch inputs +-- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this + +-- Variables +local contextActionService = Game:GetService("ContextActionService") +local isTouchDevice = Game:GetService("UserInputService").TouchEnabled +local functionTable = {} +local buttonVector = {} +local buttonScreenGui = nil +local buttonFrame = nil + +local ContextDownImage = "http://www.nexium.fit/asset/?id=97166756" +local ContextUpImage = "http://www.nexium.fit/asset/?id=97166444" + +local oldTouches = {} + +local buttonPositionTable = { + [1] = UDim2.new(0,123,0,70), + [2] = UDim2.new(0,30,0,60), + [3] = UDim2.new(0,180,0,160), + [4] = UDim2.new(0,85,0,-25), + [5] = UDim2.new(0,185,0,-25), + [6] = UDim2.new(0,185,0,260), + [7] = UDim2.new(0,216,0,65) + } +local maxButtons = #buttonPositionTable + +-- Preload images +Game:GetService("ContentProvider"):Preload(ContextDownImage) +Game:GetService("ContentProvider"):Preload(ContextUpImage) + +while not Game.Players do + wait() +end + +while not Game.Players.LocalPlayer do + wait() +end + +function createContextActionGui() + if not buttonScreenGui and isTouchDevice then + buttonScreenGui = Instance.new("ScreenGui") + buttonScreenGui.Name = "ContextActionGui" + + buttonFrame = Instance.new("Frame") + buttonFrame.BackgroundTransparency = 1 + buttonFrame.Size = UDim2.new(0.3,0,0.5,0) + buttonFrame.Position = UDim2.new(0.7,0,0.5,0) + buttonFrame.Name = "ContextButtonFrame" + buttonFrame.Parent = buttonScreenGui + end +end + +-- functions +function setButtonSizeAndPosition(object) + local buttonSize = 55 + local xOffset = 10 + local yOffset = 95 + + -- todo: better way to determine mobile sized screens + local onSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.X < 600) + if not onSmallScreen then + buttonSize = 85 + xOffset = 40 + end + + object.Size = UDim2.new(0,buttonSize,0,buttonSize) +end + +function contextButtonDown(button, inputObject, actionName) + if inputObject.UserInputType == Enum.UserInputType.Touch then + button.Image = ContextDownImage + contextActionService:CallFunction(actionName, Enum.UserInputState.Begin, inputObject) + end +end + +function contextButtonMoved(button, inputObject, actionName) + if inputObject.UserInputType == Enum.UserInputType.Touch then + button.Image = ContextDownImage + contextActionService:CallFunction(actionName, Enum.UserInputState.Change, inputObject) + end +end + +function contextButtonUp(button, inputObject, actionName) + button.Image = ContextUpImage + if inputObject.UserInputType == Enum.UserInputType.Touch and inputObject.UserInputState == Enum.UserInputState.End then + contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject) + end +end + +function isSmallScreenDevice() + return Game:GetService("GuiService"):GetScreenResolution().y <= 320 +end + + +function createNewButton(actionName, functionInfoTable) + local contextButton = Instance.new("ImageButton") + contextButton.Name = "ContextActionButton" + contextButton.BackgroundTransparency = 1 + contextButton.Size = UDim2.new(0,90,0,90) + contextButton.Active = true + if isSmallScreenDevice() then + contextButton.Size = UDim2.new(0,70,0,70) + end + contextButton.Image = ContextUpImage + contextButton.Parent = buttonFrame + + local currentButtonTouch = nil + + Game:GetService("UserInputService").InputEnded:connect(function ( inputObject ) + oldTouches[inputObject] = nil + end) + contextButton.InputBegan:connect(function(inputObject) + if oldTouches[inputObject] then return end + + if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then + currentButtonTouch = inputObject + contextButtonDown(contextButton, inputObject, actionName) + end + end) + contextButton.InputChanged:connect(function(inputObject) + if oldTouches[inputObject] then return end + if currentButtonTouch ~= inputObject then return end + + contextButtonMoved(contextButton, inputObject, actionName) + end) + contextButton.InputEnded:connect(function(inputObject) + if oldTouches[inputObject] then return end + if currentButtonTouch ~= inputObject then return end + + currentButtonTouch = nil + oldTouches[inputObject] = true + contextButtonUp(contextButton, inputObject, actionName) + end) + + local actionIcon = Instance.new("ImageLabel") + actionIcon.Name = "ActionIcon" + actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0) + actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0) + actionIcon.BackgroundTransparency = 1 + if functionInfoTable["image"] and type(functionInfoTable["image"]) == "string" then + actionIcon.Image = functionInfoTable["image"] + end + actionIcon.Parent = contextButton + + local actionTitle = Instance.new("TextLabel") + actionTitle.Name = "ActionTitle" + actionTitle.Size = UDim2.new(1,0,1,0) + actionTitle.BackgroundTransparency = 1 + actionTitle.Font = Enum.Font.SourceSansBold + actionTitle.TextColor3 = Color3.new(1,1,1) + actionTitle.TextStrokeTransparency = 0 + actionTitle.FontSize = Enum.FontSize.Size18 + actionTitle.TextWrapped = true + actionTitle.Text = "" + if functionInfoTable["title"] and type(functionInfoTable["title"]) == "string" then + actionTitle.Text = functionInfoTable["title"] + end + actionTitle.Parent = contextButton + + return contextButton +end + +function createButton( actionName, functionInfoTable ) + local button = createNewButton(actionName, functionInfoTable) + + local position = nil + for i = 1,#buttonVector do + if buttonVector[i] == "empty" then + position = i + break + end + end + + if not position then + position = #buttonVector + 1 + end + + if position > maxButtons then + return -- todo: let user know we have too many buttons already? + end + + buttonVector[position] = button + functionTable[actionName]["button"] = button + + button.Position = buttonPositionTable[position] + button.Parent = buttonFrame + + if buttonScreenGui and buttonScreenGui.Parent == nil then + buttonScreenGui.Parent = Game.Players.LocalPlayer.PlayerGui + end +end + +function removeAction(actionName) + if not functionTable[actionName] then return end + + local actionButton = functionTable[actionName]["button"] + + if actionButton then + actionButton.Parent = nil + + for i = 1,#buttonVector do + if buttonVector[i] == actionButton then + buttonVector[i] = "empty" + break + end + end + + actionButton:Destroy() + end + + functionTable[actionName] = nil +end + +function addAction(actionName,createTouchButton,functionInfoTable) + if functionTable[actionName] then + removeAction(actionName) + end + functionTable[actionName] = {functionInfoTable} + if createTouchButton and isTouchDevice then + createContextActionGui() + createButton(actionName, functionInfoTable) + end +end + +-- Connections +contextActionService.BoundActionChanged:connect( function(actionName, changeName, changeTable) + if functionTable[actionName] and changeTable then + local button = functionTable[actionName]["button"] + if button then + if changeName == "image" then + button.ActionIcon.Image = changeTable[changeName] + elseif changeName == "title" then + button.ActionTitle.Text = changeTable[changeName] + elseif changeName == "description" then + -- todo: add description to menu + elseif changeName == "position" then + button.Position = changeTable[changeName] + end + end + end +end) + +contextActionService.BoundActionAdded:connect( function(actionName, createTouchButton, functionInfoTable) + addAction(actionName, createTouchButton, functionInfoTable) +end) + +contextActionService.BoundActionRemoved:connect( function(actionName, functionInfoTable) + removeAction(actionName) +end) + +contextActionService.GetActionButtonEvent:connect( function(actionName) + if functionTable[actionName] then + contextActionService:FireActionButtonFoundSignal(actionName, functionTable[actionName]["button"]) + end +end) + +-- make sure any bound data before we setup connections is handled +local boundActions = contextActionService:GetAllBoundActionInfo() +for actionName, actionData in pairs(boundActions) do + addAction(actionName,actionData["createTouchButton"],actionData) +end diff --git a/app/files/CoreGui/153556783 b/app/files/CoreGui/153556783 new file mode 100644 index 0000000..03b2218 --- /dev/null +++ b/app/files/CoreGui/153556783 @@ -0,0 +1,564 @@ +-- This is responsible for all touch controls we show (as of this writing, only on iOS) +-- this includes character move thumbsticks, and buttons for jump, use of items, camera, etc. +-- Written by Ben Tkacheff, Copyright Roblox 2013 + +-- obligatory stuff to make sure we don't access nil data +while not Game do + wait() +end +while not Game:FindFirstChild("Players") do + wait() +end +while not Game.Players.LocalPlayer do + wait() +end +while not Game:FindFirstChild("CoreGui") do + wait() +end +while not Game.CoreGui:FindFirstChild("RobloxGui") do + wait() +end + +local userInputService = Game:GetService("UserInputService") +local success = pcall(function() userInputService:IsLuaTouchControls() end) +if not success then + script:Destroy() +end + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-- Variables +local screenResolution = Game:GetService("GuiService"):GetScreenResolution() +function isSmallScreenDevice() + return screenResolution.y <= 500 +end + +local localPlayer = Game.Players.LocalPlayer +local thumbstickInactiveAlpha = 0.3 +local thumbstickSize = 120 +if isSmallScreenDevice() then + thumbstickSize = 70 +end + +local touchControlsSheet = "rbxasset://textures/ui/TouchControlsSheet.png" +local ThumbstickDeadZone = 5 +local ThumbstickMaxPercentGive = 0.92 +local thumbstickTouches = {} + +local jumpButtonSize = 90 +if isSmallScreenDevice() then + jumpButtonSize = 70 +end +local oldJumpTouches = {} +local currentJumpTouch = nil + +local CameraRotateSensitivity = 0.007 +local CameraRotateDeadZone = CameraRotateSensitivity * 16 +local CameraZoomSensitivity = 0.03 +local PinchZoomDelay = 0.2 +local cameraTouch = nil + + +-- make sure all of our images are good to go +Game:GetService("ContentProvider"):Preload(touchControlsSheet) + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-- Functions + +function DistanceBetweenTwoPoints(point1, point2) + local dx = point2.x - point1.x + local dy = point2.y - point1.y + return math.sqrt( (dx*dx) + (dy*dy) ) +end + +function transformFromCenterToTopLeft(pointToTranslate, guiObject) + return UDim2.new(0,pointToTranslate.x - guiObject.AbsoluteSize.x/2,0,pointToTranslate.y - guiObject.AbsoluteSize.y/2) +end + +function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians) + local sinAnglePercent = math.sin(radians) + local cosAnglePercent = math.cos(radians) + + local transformedPoint = pointToRotate + + -- translate point back to origin: + transformedPoint = Vector2.new(transformedPoint.x - pointToRotateAbout.x, transformedPoint.y - pointToRotateAbout.y) + + -- rotate point + local xNew = transformedPoint.x * cosAnglePercent - transformedPoint.y * sinAnglePercent + local yNew = transformedPoint.x * sinAnglePercent + transformedPoint.y * cosAnglePercent + + -- translate point back: + transformedPoint = Vector2.new(xNew + pointToRotateAbout.x, yNew + pointToRotateAbout.y) + + return transformedPoint +end + +function dotProduct(v1,v2) + return ((v1.x*v2.x) + (v1.y*v2.y)) +end + +function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation) + local thumbstickOuterCenterPosition = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2) + local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition) + + -- thumbstick is moving outside our region, need to cap its distance + if centerDiff > (thumbstickSize/2) then + local thumbVector = Vector2.new(touchLocation.x - thumbstickOuterCenterPosition.x,touchLocation.y - thumbstickOuterCenterPosition.y); + local normal = thumbVector.unit + if normal.x == math.nan or normal.x == math.inf then + normal = Vector2.new(0,normal.y) + end + if normal.y == math.nan or normal.y == math.inf then + normal = Vector2.new(normal.x,0) + end + + local newThumbstickInnerPosition = thumbstickOuterCenterPosition + (normal * (thumbstickSize/2)) + thumbstickFrame.Position = transformFromCenterToTopLeft(newThumbstickInnerPosition, thumbstickFrame) + else + thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame) + end + + return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset) +end + +function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation) + local thumbstickOuterCenter = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2) + + -- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller) + if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize/2 then + local thumbstickInnerCenter = Vector2.new(thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x/2, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y/2) + local movementVectorUnit = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit + + local outerToInnerVectorCurrent = Vector2.new(thumbstickInnerCenter.x - thumbstickOuterCenter.x, thumbstickInnerCenter.y - thumbstickOuterCenter.y) + local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit + local movementVector = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y) + + -- First, find the angle between the new thumbstick movement vector, + -- and the vector between thumbstick inner and thumbstick outer. + -- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel + local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y) - (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x) + local angle = math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit)) + local anglePercent = angle * math.min( (movementVector.magnitude)/(outerToInnerVectorCurrent.magnitude), 1.0); + + -- If angle is significant, rotate about the inner thumbsticks current center + if math.abs(anglePercent) > 0.00001 then + local outerThumbCenter = rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent) + thumbstickOuter.Position = transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x,outerThumbCenter.y), thumbstickOuter) + end + + -- now just translate outer thumbstick to make sure it stays nears inner thumbstick + thumbstickOuter.Position = UDim2.new(0,thumbstickOuter.Position.X.Offset+movementVector.x,0,thumbstickOuter.Position.Y.Offset+movementVector.y) + end + + thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame) + + -- a bit of error checking to make sure thumbsticks stay close to eachother + thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset,thumbstickFrame.Position.Y.Offset) + thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset,thumbstickOuter.Position.Y.Offset) + if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize/2 then + local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize/2 + thumbstickOuter.Position = UDim2.new(0,thumbstickFramePosition.x + vectorWithLength.x,0,thumbstickFramePosition.y + vectorWithLength.y) + end + + return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset) +end + +function movementOutsideDeadZone(movementVector) + return ( (math.abs(movementVector.x) > ThumbstickDeadZone) or (math.abs(movementVector.y) > ThumbstickDeadZone) ) +end + +function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick) + local thumbstickFrame = Instance.new("Frame") + thumbstickFrame.Name = "ThumbstickFrame" + thumbstickFrame.Active = true + thumbstickFrame.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize) + thumbstickFrame.Position = defaultThumbstickPos + thumbstickFrame.BackgroundTransparency = 1 + + local outerThumbstick = Instance.new("ImageLabel") + outerThumbstick.Name = "OuterThumbstick" + outerThumbstick.Image = touchControlsSheet + outerThumbstick.ImageRectOffset = Vector2.new(0,0) + outerThumbstick.ImageRectSize = Vector2.new(220,220) + outerThumbstick.BackgroundTransparency = 1 + outerThumbstick.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize) + outerThumbstick.Position = defaultThumbstickPos + outerThumbstick.Parent = Game.CoreGui.RobloxGui + + local innerThumbstick = Instance.new("ImageLabel") + innerThumbstick.Name = "InnerThumbstick" + innerThumbstick.Image = touchControlsSheet + innerThumbstick.ImageRectOffset = Vector2.new(220,0) + innerThumbstick.ImageRectSize = Vector2.new(111,111) + innerThumbstick.BackgroundTransparency = 1 + innerThumbstick.Size = UDim2.new(0,thumbstickSize/2,0,thumbstickSize/2) + innerThumbstick.Position = UDim2.new(0, thumbstickFrame.Size.X.Offset/2 - thumbstickSize/4, 0, thumbstickFrame.Size.Y.Offset/2 - thumbstickSize/4) + innerThumbstick.Parent = thumbstickFrame + innerThumbstick.ZIndex = 2 + + local thumbstickTouch = nil + local userInputServiceTouchMovedCon = nil + local userInputSeviceTouchEndedCon = nil + + local startInputTracking = function(inputObject) + if thumbstickTouch then return end + if inputObject == cameraTouch then return end + if inputObject == currentJumpTouch then return end + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + + thumbstickTouch = inputObject + table.insert(thumbstickTouches,thumbstickTouch) + + thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position,thumbstickFrame) + outerThumbstick.Position = thumbstickFrame.Position + + userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput) + if movedInput == thumbstickTouch then + local movementVector = nil + if stationaryThumbstick then + movementVector = stationaryThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y)) + else + movementVector = followThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y)) + end + + if updateFunction then + updateFunction(movementVector,outerThumbstick.Size.X.Offset/2) + end + end + end) + userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput) + if endedInput == thumbstickTouch then + if updateFunction then + updateFunction(Vector2.new(0,0),1) + end + + userInputSeviceTouchEndedCon:disconnect() + userInputServiceTouchMovedCon:disconnect() + + thumbstickFrame.Position = defaultThumbstickPos + outerThumbstick.Position = defaultThumbstickPos + + for i, object in pairs(thumbstickTouches) do + if object == thumbstickTouch then + table.remove(thumbstickTouches,i) + break + end + end + thumbstickTouch = nil + end + end) + end + + userInputService.Changed:connect(function(prop) + if prop == "ModalEnabled" then + thumbstickFrame.Visible = not userInputService.ModalEnabled + outerThumbstick.Visible = not userInputService.ModalEnabled + end + end) + + thumbstickFrame.InputBegan:connect(startInputTracking) + return thumbstickFrame +end + +function setupCharacterMovement( parentFrame ) + local lastMovementVector, lastMaxMovement = nil + local moveCharacterFunc = localPlayer.MoveCharacter + local moveCharacterFunction = function ( movementVector, maxMovement ) + if localPlayer then + if movementOutsideDeadZone(movementVector) then + lastMovementVector = movementVector + lastMaxMovement = maxMovement + -- sometimes rounding error will not allow us to go max speed at some + -- thumbstick angles, fix this with a bit of fudging near 100% throttle + if movementVector.magnitude/maxMovement > ThumbstickMaxPercentGive then + maxMovement = movementVector.magnitude - 1 + end + moveCharacterFunc(localPlayer, movementVector, maxMovement) + else + lastMovementVector = Vector2.new(0,0) + lastMaxMovement = 1 + moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement) + end + end + end + + local thumbstickPos = UDim2.new(0,thumbstickSize/2,1,-thumbstickSize*1.75) + if isSmallScreenDevice() then + thumbstickPos = UDim2.new(0,(thumbstickSize/2) - 10,1,-thumbstickSize - 20) + end + local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false) + characterThumbstick.Name = "CharacterThumbstick" + characterThumbstick.Parent = parentFrame + + local refreshCharacterMovement = function() + if localPlayer and moveCharacterFunc and lastMovementVector and lastMaxMovement then + moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement) + end + end + return refreshCharacterMovement +end + + +function setupJumpButton( parentFrame ) + local jumpButton = Instance.new("ImageButton") + jumpButton.Name = "JumpButton" + jumpButton.BackgroundTransparency = 1 + jumpButton.Image = touchControlsSheet + jumpButton.ImageRectOffset = Vector2.new(176,222) + jumpButton.ImageRectSize = Vector2.new(174,174) + jumpButton.Size = UDim2.new(0,jumpButtonSize,0,jumpButtonSize) + if isSmallScreenDevice() then + jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.25), 1, -jumpButtonSize - 20) + else + jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.75), 1, -jumpButtonSize - 120) + end + + local playerJumpFunc = localPlayer.JumpCharacter + + local doJumpLoop = function () + while currentJumpTouch do + if localPlayer then + playerJumpFunc(localPlayer) + end + wait(1/60) + end + end + + jumpButton.InputBegan:connect(function(inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + if currentJumpTouch then return end + if inputObject == cameraTouch then return end + for i, touch in pairs(oldJumpTouches) do + if touch == inputObject then + return + end + end + + currentJumpTouch = inputObject + jumpButton.ImageRectOffset = Vector2.new(0,222) + jumpButton.ImageRectSize = Vector2.new(174,174) + doJumpLoop() + end) + jumpButton.InputEnded:connect(function (inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + + jumpButton.ImageRectOffset = Vector2.new(176,222) + jumpButton.ImageRectSize = Vector2.new(174,174) + + if inputObject == currentJumpTouch then + table.insert(oldJumpTouches,currentJumpTouch) + currentJumpTouch = nil + end + end) + userInputService.InputEnded:connect(function ( globalInputObject ) + for i, touch in pairs(oldJumpTouches) do + if touch == globalInputObject then + table.remove(oldJumpTouches,i) + break + end + end + end) + + userInputService.Changed:connect(function(prop) + if prop == "ModalEnabled" then + jumpButton.Visible = not userInputService.ModalEnabled + end + end) + + jumpButton.Parent = parentFrame +end + +function isTouchUsedByJumpButton( touch ) + if touch == currentJumpTouch then return true end + for i, touchToCompare in pairs(oldJumpTouches) do + if touch == touchToCompare then + return true + end + end + + return false +end + +function isTouchUsedByThumbstick(touch) + for i, touchToCompare in pairs(thumbstickTouches) do + if touch == touchToCompare then + return true + end + end + + return false +end + +function setupCameraControl(parentFrame, refreshCharacterMoveFunc) + local lastPos = nil + local hasRotatedCamera = false + local rotateCameraFunc = userInputService.RotateCamera + + local pinchTime = -1 + local shouldPinch = false + local lastPinchScale = nil + local zoomCameraFunc = userInputService.ZoomCamera + local pinchTouches = {} + local pinchFrame = nil + + local resetCameraRotateState = function() + cameraTouch = nil + hasRotatedCamera = false + lastPos = nil + end + + local resetPinchState = function () + pinchTouches = {} + lastPinchScale = nil + shouldPinch = false + pinchFrame:Destroy() + pinchFrame = nil + end + + local startPinch = function(firstTouch, secondTouch) + -- track pinching in new frame + if pinchFrame then pinchFrame:Destroy() end -- make sure we didn't track in any mud + pinchFrame = Instance.new("Frame") + pinchFrame.Name = "PinchFrame" + pinchFrame.BackgroundTransparency = 1 + pinchFrame.Parent = parentFrame + pinchFrame.Size = UDim2.new(1,0,1,0) + + pinchFrame.InputChanged:connect(function(inputObject) + if not shouldPinch then + resetPinchState() + return + end + resetCameraRotateState() + + if lastPinchScale == nil then -- first pinch move, just set up scale + if inputObject == firstTouch then + lastPinchScale = (inputObject.Position - secondTouch.Position).magnitude + firstTouch = inputObject + elseif inputObject == secondTouch then + lastPinchScale = (inputObject.Position - firstTouch.Position).magnitude + secondTouch = inputObject + end + else -- we are now actually pinching, do comparison to last pinch size + local newPinchDistance = 0 + if inputObject == firstTouch then + newPinchDistance = (inputObject.Position - secondTouch.Position).magnitude + firstTouch = inputObject + elseif inputObject == secondTouch then + newPinchDistance = (inputObject.Position - firstTouch.Position).magnitude + secondTouch = inputObject + end + if newPinchDistance ~= 0 then + local pinchDiff = newPinchDistance - lastPinchScale + if pinchDiff ~= 0 then + zoomCameraFunc(userInputService, (pinchDiff * CameraZoomSensitivity)) + end + lastPinchScale = newPinchDistance + end + end + end) + pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all + if inputObject == firstTouch or inputObject == secondTouch then + resetPinchState() + end + end) + end + + local pinchGestureReceivedTouch = function(inputObject) + if #pinchTouches < 1 then + table.insert(pinchTouches,inputObject) + pinchTime = tick() + shouldPinch = false + elseif #pinchTouches == 1 then + shouldPinch = ( (tick() - pinchTime) <= PinchZoomDelay ) + + if shouldPinch then + table.insert(pinchTouches,inputObject) + startPinch(pinchTouches[1], pinchTouches[2]) + else -- shouldn't ever get here, but just in case + pinchTouches = {} + end + end + end + + parentFrame.InputBegan:connect(function (inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + if isTouchUsedByJumpButton(inputObject) then return end + + local usedByThumbstick = isTouchUsedByThumbstick(inputObject) + if not usedByThumbstick then + pinchGestureReceivedTouch(inputObject) + end + + if cameraTouch == nil and not usedByThumbstick then + cameraTouch = inputObject + lastPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y) + lastTick = tick() + end + end) + userInputService.InputChanged:connect(function (inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + if cameraTouch ~= inputObject then return end + + local newPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y) + local touchDiff = (lastPos - newPos) * CameraRotateSensitivity + + -- first time rotating outside deadzone, just setup for next changed event + if not hasRotatedCamera and (touchDiff.magnitude > CameraRotateDeadZone) then + hasRotatedCamera = true + lastPos = newPos + end + + -- fire everytime after we have rotated out of deadzone + if hasRotatedCamera and (lastPos ~= newPos) then + rotateCameraFunc(userInputService, touchDiff) + refreshCharacterMoveFunc() + lastPos = newPos + end + end) + userInputService.InputEnded:connect(function (inputObject) + if cameraTouch == inputObject or cameraTouch == nil then + resetCameraRotateState() + end + + for i, touch in pairs(pinchTouches) do + if touch == inputObject then + table.remove(pinchTouches,i) + end + end + end) +end + +function setupTouchControls() + local touchControlFrame = Instance.new("Frame") + touchControlFrame.Name = "TouchControlFrame" + touchControlFrame.Size = UDim2.new(1,0,1,0) + touchControlFrame.BackgroundTransparency = 1 + touchControlFrame.Parent = Game.CoreGui.RobloxGui + + local refreshCharacterMoveFunc = setupCharacterMovement(touchControlFrame) + setupJumpButton(touchControlFrame) + setupCameraControl(touchControlFrame, refreshCharacterMoveFunc) + + userInputService.ProcessedEvent:connect(function(inputObject, processed) + if not processed then return end + + -- kill camera pan if the touch is used by some user controls + if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then + cameraTouch = nil + end + end) +end + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-- Start of Script + +if userInputService:IsLuaTouchControls() then + setupTouchControls() +else + script:Destroy() +end \ No newline at end of file diff --git a/app/files/CoreGui/153556822 b/app/files/CoreGui/153556822 new file mode 100644 index 0000000..a94c084 --- /dev/null +++ b/app/files/CoreGui/153556822 @@ -0,0 +1,247 @@ +--[[ + This script controls the gui the player sees in regards to his or her health. + Can be turned with Game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health,false) + Copyright ROBLOX 2014. Written by Ben Tkacheff. +--]] + +--------------------------------------------------------------------- +-- Initialize/Variables +while not Game do + wait(1/60) +end +while not Game.Players do + wait(1/60) +end + +local useCoreHealthBar = false +local success = pcall(function() useCoreHealthBar = Game.Players:GetUseCoreScriptHealthBar() end) +if not success or not useCoreHealthBar then + return +end + +local currentHumanoid = nil + +local HealthGui = nil +local lastHealth = 100 +local HealthPercentageForOverlay = 5 +local maxBarTweenTime = 0.3 + +local guiEnabled = false +local healthChangedConnection = nil +local humanoidDiedConnection = nil +local characterAddedConnection = nil + +local greenBarImage = "http://www.nexium.fit/asset/?id=35238053" +local redBarImage = "http://www.nexium.fit/asset/?id=35238036" +local goldBarImage = "http://www.nexium.fit/asset/?id=154646431" -- for god mode +local hurtOverlayImage = "http://www.nexium.fit/asset/?id=34854607" + +Game:GetService("ContentProvider"):Preload(greenBarImage) +Game:GetService("ContentProvider"):Preload(redBarImage) +Game:GetService("ContentProvider"):Preload(goldBarImage) +Game:GetService("ContentProvider"):Preload(hurtOverlayImage) + +while not Game.Players.LocalPlayer do + wait(1/60) +end + +--------------------------------------------------------------------- +-- Functions + +function CreateGui() + if HealthGui and #HealthGui:GetChildren() > 0 then + HealthGui.Parent = Game.CoreGui.RobloxGui + return + end + + local hurtOverlay = Instance.new("ImageLabel") + hurtOverlay.Name = "HurtOverlay" + hurtOverlay.BackgroundTransparency = 1 + hurtOverlay.Image = hurtOverlayImage + hurtOverlay.Position = UDim2.new(-10,0,-10,0) + hurtOverlay.Size = UDim2.new(20,0,20,0) + hurtOverlay.Visible = false + hurtOverlay.Parent = HealthGui + + local healthFrame = Instance.new("Frame") + healthFrame.Name = "HealthFrame" + healthFrame.BackgroundColor3 = Color3.new(0,0,0) + healthFrame.BorderColor3 = Color3.new(0,0,0) + healthFrame.Position = UDim2.new(0.5,-85,1,-22) + healthFrame.Size = UDim2.new(0,170,0,18) + healthFrame.Parent = HealthGui + + local healthBar = Instance.new("ImageLabel") + healthBar.Name = "HealthBar" + healthBar.BackgroundTransparency = 1 + healthBar.Image = greenBarImage + healthBar.Size = UDim2.new(1,0,1,0) + healthBar.Parent = healthFrame + + local healthLabel = Instance.new("TextLabel") + healthLabel.Name = "HealthLabel" + + healthLabel.Text = "Health " -- gives room at end of health bar + healthLabel.Font = Enum.Font.SourceSansBold + healthLabel.FontSize = Enum.FontSize.Size14 + healthLabel.TextColor3 = Color3.new(1,1,1) + healthLabel.TextStrokeTransparency = 0 + healthLabel.TextXAlignment = Enum.TextXAlignment.Right + + healthLabel.BackgroundTransparency = 1 + healthLabel.Size = UDim2.new(1,0,1,0) + healthLabel.Parent = healthFrame + + HealthGui.Parent = Game.CoreGui.RobloxGui +end + +function UpdateGui(health) + if not HealthGui then return end + + local healthFrame = HealthGui:FindFirstChild("HealthFrame") + if not healthFrame then return end + + local healthBar = healthFrame:FindFirstChild("HealthBar") + if not healthBar then return end + + -- If more than 1/4 health, bar = green. Else, bar = red. + local percentHealth = (health/currentHumanoid.MaxHealth) + + if percentHealth ~= percentHealth then + percentHealth = 1 + healthBar.Image = goldBarImage + elseif percentHealth > 0.25 then + healthBar.Image = greenBarImage + else + healthBar.Image = redBarImage + end + + local width = (health / currentHumanoid.MaxHealth) + width = math.max(math.min(width,1),0) -- make sure width is between 0 and 1 + if width ~= width then width = 1 end + + local healthDelta = lastHealth - health + lastHealth = health + + local percentOfTotalHealth = math.abs(healthDelta/currentHumanoid.MaxHealth) + percentOfTotalHealth = math.max(math.min(percentOfTotalHealth,1),0) -- make sure percentOfTotalHealth is between 0 and 1 + if percentOfTotalHealth ~= percentOfTotalHealth then percentOfTotalHealth = 1 end + + local newHealthSize = UDim2.new(width,0,1,0) + + if healthBar:IsDescendantOf(Game) then + healthBar:TweenSize(newHealthSize, Enum.EasingDirection.InOut, Enum.EasingStyle.Linear, percentOfTotalHealth * maxBarTweenTime, true) + else + healthBar.Size = newHealthSize + end + + local thresholdForHurtOverlay = currentHumanoid.MaxHealth * (HealthPercentageForOverlay/100) + + if healthDelta >= thresholdForHurtOverlay then + AnimateHurtOverlay() + end +end + +function AnimateHurtOverlay() + if not HealthGui then return end + + local overlay = HealthGui:FindFirstChild("HurtOverlay") + if not overlay then return end + + local newSize = UDim2.new(20, 0, 20, 0) + local newPos = UDim2.new(-10, 0, -10, 0) + + if overlay:IsDescendantOf(Game) then + -- stop any tweens on overlay + overlay:TweenSizeAndPosition(newSize,newPos,Enum.EasingDirection.Out,Enum.EasingStyle.Linear,0,true,function() + + -- show the gui + overlay.Size = UDim2.new(1,0,1,0) + overlay.Position = UDim2.new(0,0,0,0) + overlay.Visible = true + + -- now tween the hide + if overlay:IsDescendantOf(Game) then + overlay:TweenSizeAndPosition(newSize,newPos,Enum.EasingDirection.Out,Enum.EasingStyle.Quad,10,false,function() + overlay.Visible = false + end) + else + overlay.Size = newSize + overlay.Position = newPos + end + end) + else + overlay.Size = newSize + overlay.Position = newPos + end + +end + +function humanoidDied() + UpdateGui(0) +end + +function disconnectPlayerConnections() + if characterAddedConnection then characterAddedConnection:disconnect() end + if humanoidDiedConnection then humanoidDiedConnection:disconnect() end + if healthChangedConnection then healthChangedConnection:disconnect() end +end + +function newPlayerCharacter() + disconnectPlayerConnections() + startGui() +end + +function startGui() + characterAddedConnection = Game.Players.LocalPlayer.CharacterAdded:connect(newPlayerCharacter) + + local character = Game.Players.LocalPlayer.Character + if not character then + return + end + + currentHumanoid = character:WaitForChild("Humanoid") + if not currentHumanoid then + return + end + + if not Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health) then + return + end + + healthChangedConnection = currentHumanoid.HealthChanged:connect(UpdateGui) + humanoidDiedConnection = currentHumanoid.Died:connect(humanoidDied) + UpdateGui(currentHumanoid.Health) + + CreateGui() +end + + + +--------------------------------------------------------------------- +-- Start Script + +HealthGui = Instance.new("Frame") +HealthGui.Name = "HealthGui" +HealthGui.BackgroundTransparency = 1 +HealthGui.Size = UDim2.new(1,0,1,0) + +Game.StarterGui.CoreGuiChangedSignal:connect(function(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Health or coreGuiType == Enum.CoreGuiType.All then + if guiEnabled and not enabled then + if HealthGui then + HealthGui.Parent = nil + end + disconnectPlayerConnections() + elseif not guiEnabled and enabled then + startGui() + end + + guiEnabled = enabled + end +end) + +if Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health) then + guiEnabled = true + startGui() +end \ No newline at end of file diff --git a/app/files/CoreGui/157877000 b/app/files/CoreGui/157877000 new file mode 100644 index 0000000..ad0bf19 --- /dev/null +++ b/app/files/CoreGui/157877000 @@ -0,0 +1,1038 @@ +--Include +local Create = assert(LoadLibrary("RbxUtility")).Create + +-- A Few Script Globals +local gui +if script.Parent:FindFirstChild("ControlFrame") then + gui = script.Parent:FindFirstChild("ControlFrame") +else + gui = script.Parent +end + +-- Dev-Console Root + +local Dev_Container = Create'Frame'{ + Name = 'DevConsoleContainer'; + Parent = gui; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.9; + Position = UDim2.new(0, 100, 0, 10); + Size = UDim2.new(0.5, 20, 0.5, 20); + Visible = false; + BackgroundTransparency = 0.9; +} + +local ToggleConsole = Create'BindableFunction'{ + Name = 'ToggleDevConsole'; + Parent = gui +} + + +local devConsoleInitialized = false +function initializeDeveloperConsole() + if devConsoleInitialized then + return + end + devConsoleInitialized = true + + ---Dev-Console Variables + local LOCAL_CONSOLE = 1 + local SERVER_CONSOLE = 2 + + local MAX_LIST_SIZE = 1000 + + local minimumSize = Vector2.new(245, 180) + local currentConsole = LOCAL_CONSOLE + + local localMessageList = {} + local serverMessageList = {} + + local localOffset = 0 + local serverOffset = 0 + + local errorToggleOn = true + local warningToggleOn = true + local infoToggleOn = true + local outputToggleOn = true + local wordWrapToggleOn = false + + local textHolderSize = 0 + + local frameNumber = 0 + + --Create Dev-Console + + local Dev_Body = Create'Frame'{ + Name = 'Body'; + Parent = Dev_Container; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 21); + Size = UDim2.new(1, 0, 1, -25); + } + + local Dev_OptionsHolder = Create'Frame'{ + Name = 'OptionsHolder'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 220, 0, 0); + Size = UDim2.new(1, -255, 0, 24); + ClipsDescendants = true + } + + local Dev_OptionsBar = Create'Frame'{ + Name = 'OptionsBar'; + Parent = Dev_OptionsHolder; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1.0; + Position = UDim2.new(0.0, -250, 0, 4); + Size = UDim2.new(0, 234, 0, 18); + } + + local Dev_ErrorToggleFilter = Create'TextButton'{ + Name = 'ErrorToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(1.0, 0, 0); + Position = UDim2.new(0, 115, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(1.0, 0, 0); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_ErrorToggleFilter; + BackgroundColor3 = Color3.new(1.0,0,0); + BorderColor3 = Color3.new(1.0, 0, 0); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_InfoToggleFilter = Create'TextButton'{ + Name = 'InfoToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(0.4, 0.5, 1.0); + Position = UDim2.new(0, 65, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(0.4, 0.5, 1.0); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_InfoToggleFilter; + BackgroundColor3 = Color3.new(0.4, 0.5, 1.0); + BorderColor3 = Color3.new(0.4, 0.5, 1.0); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_OutputToggleFilter = Create'TextButton'{ + Name = 'OutputToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(1.0, 1.0, 1.0); + Position = UDim2.new(0, 40, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(1.0, 1.0, 1.0); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_OutputToggleFilter; + BackgroundColor3 = Color3.new(1.0, 1.0, 1.0); + BorderColor3 = Color3.new(1.0, 1.0, 1.0); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_WarningToggleFilter = Create'TextButton'{ + Name = 'WarningToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(1.0, 0.6, 0.4); + Position = UDim2.new(0, 90, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(1.0, 0.6, 0.4); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_WarningToggleFilter; + BackgroundColor3 = Color3.new(1.0, 0.6, 0.4); + BorderColor3 = Color3.new(1.0, 0.6, 0.4); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_WordWrapToggle = Create'TextButton'{ + Name = 'WordWrapToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(0.8, 0.8, 0.8); + Position = UDim2.new(0, 215, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(0.8, 0.8, 0.8); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_WordWrapToggle; + BackgroundColor3 = Color3.new(0.8, 0.8, 0.8); + BorderColor3 = Color3.new(0.8, 0.8, 0.8); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + Visible = false + } + + Create'TextLabel'{ + Name = 'Filter'; + Parent = Dev_OptionsBar; + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(0, 40, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Filter"; + TextColor3 = Color3.new(1, 1, 1); + } + + Create'TextLabel'{ + Name = 'WordWrap'; + Parent = Dev_OptionsBar; + BackgroundTransparency = 1; + Position = UDim2.new(0, 150, 0, 0); + Size = UDim2.new(0, 50, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Word Wrap"; + TextColor3 = Color3.new(1, 1, 1); + } + + local Dev_ScrollBar = Create'Frame'{ + Name = 'ScrollBar'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.9; + Position = UDim2.new(1, -20, 0, 26); + Size = UDim2.new(0, 20, 1, -50); + Visible = false; + BackgroundTransparency = 0.9; + } + + local Dev_ScrollArea = Create'Frame'{ + Name = 'ScrollArea'; + Parent = Dev_ScrollBar; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0, 23); + Size = UDim2.new(1, 0, 1, -46); + BackgroundTransparency = 1; + } + + local Dev_Handle = Create'ImageButton'{ + Name = 'Handle'; + Parent = Dev_ScrollArea; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, .2, 0); + Size = UDim2.new(0, 20, 0, 40); + BackgroundTransparency = 0.5; + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_Handle; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0.5, -8); + Rotation = 180; + Size = UDim2.new(1, 0, 0, 16); + Image = "http://www.nexium.fit/asset/?id=151205881"; + } + + local Dev_DownButton = Create'ImageButton'{ + Name = 'Down'; + Parent = Dev_ScrollBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 1, -20); + Size = UDim2.new(0, 20, 0, 20); + BackgroundTransparency = 0.5; + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_DownButton; + BackgroundTransparency = 1; + Position = UDim2.new(0, 3, 0, 3); + Size = UDim2.new(0, 14, 0, 14); + Rotation = 180; + Image = "http://www.nexium.fit/asset/?id=151205813"; + } + + local Dev_UpButton = Create'ImageButton'{ + Name = 'Up'; + Parent = Dev_ScrollBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_UpButton; + BackgroundTransparency = 1; + Position = UDim2.new(0, 3, 0, 3); + Size = UDim2.new(0, 14, 0, 14); + Image = "http://www.nexium.fit/asset/?id=151205813"; + } + + local Dev_TextBox = Create'Frame'{ + Name = 'TextBox'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.6; + Position = UDim2.new(0, 2, 0, 26); + Size = UDim2.new(1, -4, 1, -28); + ClipsDescendants = true; + } + + local Dev_TextHolder = Create'Frame'{ + Name = 'TextHolder'; + Parent = Dev_TextBox; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, 0, 1, 0); + } + + local Dev_OptionsButton = Create'ImageButton'{ + Name = 'OptionsButton'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 200, 0, 2); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_OptionsButton; + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, 0, 1, 0); + Rotation = 0; + Image = "http://www.nexium.fit/asset/?id=152093917"; + } + + local Dev_ResizeButton = Create'ImageButton'{ + Name = 'ResizeButton'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(1, -20, 1, -20); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_ResizeButton; + BackgroundTransparency = 1; + Position = UDim2.new(0, 6, 0, 6); + Size = UDim2.new(0.8, 0, 0.8, 0); + Rotation = 135; + Image = "http://www.nexium.fit/asset/?id=151205813"; + } + + Create'TextButton'{ + Name = 'LocalConsole'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.6; + Position = UDim2.new(0, 7, 0, 5); + Size = UDim2.new(0, 90, 0, 20); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Local Console"; + TextColor3 = Color3.new(1, 1, 1); + TextYAlignment = Enum.TextYAlignment.Center; + } + + Create'TextButton'{ + Name = 'ServerConsole'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.8; + Position = UDim2.new(0, 102, 0, 5); + Size = UDim2.new(0, 90, 0, 17); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Server Console"; + TextColor3 = Color3.new(1, 1, 1); + TextYAlignment = Enum.TextYAlignment.Center; + } + + local Dev_TitleBar = Create'Frame'{ + Name = 'TitleBar'; + Parent = Dev_Container; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, 0, 0, 20); + } + + local Dev_CloseButton = Create'ImageButton'{ + Name = 'CloseButton'; + Parent = Dev_TitleBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(1, -20, 0, 0); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Parent = Dev_CloseButton; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1; + Position = UDim2.new(0, 3, 0, 3); + Size = UDim2.new(0, 14, 0, 14); + Image = "http://www.nexium.fit/asset/?id=151205852"; + } + + Create'TextButton'{ + Name = 'TextButton'; + Parent = Dev_TitleBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, -23, 1, 0); + Text = ""; + } + + Create'TextLabel'{ + Name = 'TitleText'; + Parent = Dev_TitleBar; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(0, 185, 0, 20); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size18; + Text = "Server Console"; + TextColor3 = Color3.new(1, 1, 1); + Text = "Roblox Developer Console"; + TextYAlignment = Enum.TextYAlignment.Top; + } + + ---Saved Mouse Information + local previousMousePos = nil + local pPos = nil + + local previousMousePosResize = nil + local pSize = nil + + local previousMousePosScroll = nil + local pScrollHandle = nil + local pOffset = nil + + local scrollUpIsDown = false + local scrollDownIsDown = false + + function clean() + previousMousePos = nil + pPos = nil + previousMousePosResize = nil + pSize = nil + previousMousePosScroll = nil + pScrollHandle = nil + pOffset = nil + scrollUpIsDown = false + scrollDownIsDown = false + end + + + ---Handle Dev-Console Position + function refreshConsolePosition(x, y) + if not previousMousePos then + return + end + + local delta = Vector2.new(x, y) - previousMousePos + Dev_Container.Position = UDim2.new(0, pPos.X + delta.X, 0, pPos.Y + delta.Y) + end + + Dev_TitleBar.TextButton.MouseButton1Down:connect(function(x, y) + previousMousePos = Vector2.new(x, y) + pPos = Dev_Container.AbsolutePosition + end) + + Dev_TitleBar.TextButton.MouseButton1Up:connect(function(x, y) + clean() + end) + + ---Handle Dev-Console Size + function refreshConsoleSize(x, y) + if not previousMousePosResize then + return + end + + local delta = Vector2.new(x, y) - previousMousePosResize + Dev_Container.Size = UDim2.new(0, math.max(pSize.X + delta.X, minimumSize.X), 0, math.max(pSize.Y + delta.Y, minimumSize.Y)) + end + Dev_Container.Body.ResizeButton.MouseButton1Down:connect(function(x, y) + previousMousePosResize = Vector2.new(x, y) + pSize = Dev_Container.AbsoluteSize + end) + + Dev_Container.Body.ResizeButton.MouseButton1Up:connect(function(x, y) + clean() + end) + + + ---Handle Dev-Console Close Button + Dev_TitleBar.CloseButton.MouseButton1Down:connect(function(x, y) + Dev_Container.Visible = false + end) + + Dev_Container.TitleBar.CloseButton.MouseButton1Up:connect(function() + clean() + end) + + local optionsHidden = true + local animating = false + --Options + function startAnimation() + if animating then return end + animating = true + + repeat + if optionsHidden then + frameNumber = frameNumber - 1 + else + frameNumber = frameNumber + 1 + end + + local x = frameNumber / 5 + local smoothStep = x * x * (3 - (2 * x)) + Dev_OptionsButton.ImageLabel.Rotation = smoothStep * 5 * 9 + Dev_OptionsBar.Position = UDim2.new(0, (smoothStep * 5 * 50) - 250, 0, 4) + + wait() + if (frameNumber <= 0 and optionsHidden) or (frameNumber >= 5 and not optionsHidden) then + animating = false + end + until not animating + end + + Dev_OptionsButton.MouseButton1Down:connect(function(x, y) + optionsHidden = not optionsHidden + startAnimation() + end) + + --Scroll Position + + function changeOffset(value) + if (currentConsole == LOCAL_CONSOLE) then + localOffset = localOffset + value + elseif (currentConsole == SERVER_CONSOLE) then + serverOffset = serverOffset + value + end + + repositionList() + end + + --Refresh Dev-Console Text + function refreshTextHolderForReal() + local childMessages = Dev_TextHolder:GetChildren() + + local messageList + + if (currentConsole == LOCAL_CONSOLE) then + messageList = localMessageList + elseif (currentConsole == SERVER_CONSOLE) then + messageList = serverMessageList + end + + local posOffset = 0 + + for i = 1, #childMessages do + childMessages[i].Visible = false + end + + for i = 1, #messageList do + local message + + local movePosition = false + + if i > #childMessages then + message = Create'TextLabel'{ + Name = 'Message'; + Parent = Dev_TextHolder; + BackgroundTransparency = 1; + TextXAlignment = 'Left'; + Size = UDim2.new(1, 0, 0, 14); + FontSize = 'Size10'; + ZIndex = 1; + } + movePosition = true + else + message = childMessages[i] + end + + if (outputToggleOn or messageList[i].Type ~= Enum.MessageType.MessageOutput) and + (infoToggleOn or messageList[i].Type ~= Enum.MessageType.MessageInfo) and + (warningToggleOn or messageList[i].Type ~= Enum.MessageType.MessageWarning) and + (errorToggleOn or messageList[i].Type ~= Enum.MessageType.MessageError) then + message.TextWrapped = wordWrapToggleOn + message.Size = UDim2.new(0.98, 0, 0, 2000) + message.Parent = Dev_Container + message.Text = messageList[i].Time.." -- "..messageList[i].Message + + message.Size = UDim2.new(0.98, 0, 0, message.TextBounds.Y) + message.Position = UDim2.new(0, 5, 0, posOffset) + message.Parent = Dev_TextHolder + posOffset = posOffset + message.TextBounds.Y + + if movePosition then + if (currentConsole == LOCAL_CONSOLE and localOffset > 0) or (currentConsole == SERVER_CONSOLE and serverOffset > 0) then + changeOffset(message.TextBounds.Y) + end + end + + message.Visible = true + + if messageList[i].Type == Enum.MessageType.MessageError then + message.TextColor3 = Color3.new(1, 0, 0) + elseif messageList[i].Type == Enum.MessageType.MessageInfo then + message.TextColor3 = Color3.new(0.4, 0.5, 1) + elseif messageList[i].Type == Enum.MessageType.MessageWarning then + message.TextColor3 = Color3.new(1, 0.6, 0.4) + else + message.TextColor3 = Color3.new(1, 1, 1) + end + end + + + end + + textHolderSize = posOffset + + end + + -- Refreshing the textholder every 0.1 (if needed) is good enough, surely fast enough + -- We don't want it to update 50x in a tick because there are 50 messages in that tick + -- (Whenever for one reason or another a lot of output comes in, it can lag + -- This will make it behave better in a situation of a lot of output comming in) + local refreshQueued = false + function refreshTextHolder() + if refreshQueued then return end + Delay(0.1,function() + refreshQueued = false + refreshTextHolderForReal() + end) refreshQueued = true + end + + --Handle Dev-Console Scrollbar + + local inside = 0 + function holdingUpButton() + if scrollUpIsDown then + return + end + scrollUpIsDown = true + wait(.6) + inside = inside + 1 + while scrollUpIsDown and inside < 2 do + wait() + changeOffset(12) + end + inside = inside - 1 + end + + function holdingDownButton() + if scrollDownIsDown then + return + end + scrollDownIsDown = true + wait(.6) + inside = inside + 1 + while scrollDownIsDown and inside < 2 do + wait() + changeOffset(-12) + end + inside = inside - 1 + end + + Dev_Container.Body.ScrollBar.Up.MouseButton1Click:connect(function() + changeOffset(10) + end) + + Dev_Container.Body.ScrollBar.Up.MouseButton1Down:connect(function() + changeOffset(10) + holdingUpButton() + end) + + Dev_Container.Body.ScrollBar.Up.MouseButton1Up:connect(function() + clean() + end) + + Dev_Container.Body.ScrollBar.Down.MouseButton1Down:connect(function() + changeOffset(-10) + holdingDownButton() + end) + + Dev_Container.Body.ScrollBar.Down.MouseButton1Up:connect(function() + clean() + end) + + function handleScroll(x, y) + if not previousMousePosScroll then + return + end + + local delta = (Vector2.new(x, y) - previousMousePosScroll).Y + + local backRatio = 1 - (Dev_Container.Body.TextBox.AbsoluteSize.Y / Dev_TextHolder.AbsoluteSize.Y) + + local movementSize = Dev_ScrollArea.AbsoluteSize.Y - Dev_ScrollArea.Handle.AbsoluteSize.Y + local normalDelta = math.max(math.min(delta, movementSize), 0 - movementSize) + local normalRatio = normalDelta / movementSize + + local textMovementSize = (backRatio * Dev_TextHolder.AbsoluteSize.Y) + local offsetChange = textMovementSize * normalRatio + + if (currentConsole == LOCAL_CONSOLE) then + localOffset = pOffset - offsetChange + elseif (currentConsole == SERVER_CONSOLE) then + serverOffset = pOffset - offsetChange + end + end + + Dev_ScrollArea.Handle.MouseButton1Down:connect(function(x, y) + previousMousePosScroll = Vector2.new(x, y) + pScrollHandle = Dev_ScrollArea.Handle.AbsolutePosition + if (currentConsole == LOCAL_CONSOLE) then + pOffset = localOffset + elseif (currentConsole == SERVER_CONSOLE) then + pOffset = serverOffset + end + + end) + + Dev_ScrollArea.Handle.MouseButton1Up:connect(function(x, y) + clean() + end) + + local function existsInsideContainer(container, x, y) + local pos = container.AbsolutePosition + local size = container.AbsoluteSize + if x < pos.X or x > pos.X + size.X or y < pos.y or y > pos.y + size.y then + return false + end + return true + end + + + + --Refresh Dev-Console Message Positions + function repositionList() + + if (currentConsole == LOCAL_CONSOLE) then + localOffset = math.min(math.max(localOffset, 0), textHolderSize - Dev_Container.Body.TextBox.AbsoluteSize.Y) + Dev_TextHolder.Size = UDim2.new(1, 0, 0, textHolderSize) + + elseif (currentConsole == SERVER_CONSOLE) then + serverOffset = math.min(math.max(serverOffset, 0), textHolderSize - Dev_Container.Body.TextBox.AbsoluteSize.Y) + Dev_TextHolder.Size = UDim2.new(1, 0, 0, textHolderSize) + end + + local ratio = Dev_Container.Body.TextBox.AbsoluteSize.Y / Dev_TextHolder.AbsoluteSize.Y + + if ratio >= 1 then + Dev_Container.Body.ScrollBar.Visible = false + Dev_Container.Body.TextBox.Size = UDim2.new(1, -4, 1, -28) + + if (currentConsole == LOCAL_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize) + elseif (currentConsole == SERVER_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize) + end + + + else + Dev_Container.Body.ScrollBar.Visible = true + Dev_Container.Body.TextBox.Size = UDim2.new(1, -25, 1, -28) + + local backRatio = 1 - ratio + local offsetRatio + + if (currentConsole == LOCAL_CONSOLE) then + offsetRatio = localOffset / Dev_TextHolder.AbsoluteSize.Y + elseif (currentConsole == SERVER_CONSOLE) then + offsetRatio = serverOffset / Dev_TextHolder.AbsoluteSize.Y + end + + local topRatio = math.max(0, backRatio - offsetRatio) + + local scrollHandleSize = math.max((Dev_ScrollArea.AbsoluteSize.Y) * ratio, 21) + + local scrollRatio = scrollHandleSize / Dev_ScrollArea.AbsoluteSize.Y + local ratioConversion = (1 - scrollRatio) / (1 - ratio) + + local topScrollRatio = topRatio * ratioConversion + + local sPos = math.min((Dev_ScrollArea.AbsoluteSize.Y) * topScrollRatio, Dev_ScrollArea.AbsoluteSize.Y - scrollHandleSize) + + Dev_ScrollArea.Handle.Size = UDim2.new(1, 0, 0, scrollHandleSize) + Dev_ScrollArea.Handle.Position = UDim2.new(0, 0, 0, sPos) + + if (currentConsole == LOCAL_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize + localOffset) + elseif (currentConsole == SERVER_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize + serverOffset) + end + + end + end + + -- Easy, fast, and working nicely + local function numberWithZero(num) + return (num < 10 and "0" or "")..num + end + + local str = "%s:%s:%s" + + function ConvertTimeStamp(timeStamp) + local localTime = timeStamp - os.time() + math.floor(tick()) + local dayTime = localTime % 86400 + + local hour = math.floor(dayTime/3600) + + dayTime = dayTime - (hour * 3600) + local minute = math.floor(dayTime/60) + + dayTime = dayTime - (minute * 60) + local second = dayTime + + local h = numberWithZero(hour) + local m = numberWithZero(minute) + local s = numberWithZero(dayTime) + + return str:format(h,m,s) + end + + --Filter + + Dev_OptionsBar.ErrorToggleButton.MouseButton1Down:connect(function(x, y) + errorToggleOn = not errorToggleOn + Dev_OptionsBar.ErrorToggleButton.CheckFrame.Visible = errorToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.WarningToggleButton.MouseButton1Down:connect(function(x, y) + warningToggleOn = not warningToggleOn + Dev_OptionsBar.WarningToggleButton.CheckFrame.Visible = warningToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.InfoToggleButton.MouseButton1Down:connect(function(x, y) + infoToggleOn = not infoToggleOn + Dev_OptionsBar.InfoToggleButton.CheckFrame.Visible = infoToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.OutputToggleButton.MouseButton1Down:connect(function(x, y) + outputToggleOn = not outputToggleOn + Dev_OptionsBar.OutputToggleButton.CheckFrame.Visible = outputToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.WordWrapToggleButton.MouseButton1Down:connect(function(x, y) + wordWrapToggleOn = not wordWrapToggleOn + Dev_OptionsBar.WordWrapToggleButton.CheckFrame.Visible = wordWrapToggleOn + refreshTextHolder() + repositionList() + end) + + ---Dev-Console Message Functionality + function AddLocalMessage(str, messageType, timeStamp) + localMessageList[#localMessageList+1] = {Message = str, Time = ConvertTimeStamp(timeStamp), Type = messageType} + while #localMessageList > MAX_LIST_SIZE do + table.remove(localMessageList, 1) + end + + refreshTextHolder() + + repositionList() + end + + function AddServerMessage(str, messageType, timeStamp) + serverMessageList[#serverMessageList+1] = {Message = str, Time = ConvertTimeStamp(timeStamp), Type = messageType} + while #serverMessageList > MAX_LIST_SIZE do + table.remove(serverMessageList, 1) + end + + refreshTextHolder() + + repositionList() + end + + + + --Handle Dev-Console Local/Server Buttons + Dev_Container.Body.LocalConsole.MouseButton1Click:connect(function(x, y) + if (currentConsole == SERVER_CONSOLE) then + currentConsole = LOCAL_CONSOLE + local localConsole = Dev_Container.Body.LocalConsole + local serverConsole = Dev_Container.Body.ServerConsole + + localConsole.Size = UDim2.new(0, 90, 0, 20) + serverConsole.Size = UDim2.new(0, 90, 0, 17) + localConsole.BackgroundTransparency = 0.6 + serverConsole.BackgroundTransparency = 0.8 + + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local mouse = game.Players.LocalPlayer:GetMouse() + local mousePos = Vector2.new(mouse.X, mouse.Y) + refreshConsolePosition(mouse.X, mouse.Y) + refreshConsoleSize(mouse.X, mouse.Y) + handleScroll(mouse.X, mouse.Y) + end + + refreshTextHolder() + repositionList() + + end + end) + + Dev_Container.Body.LocalConsole.MouseButton1Up:connect(function() + clean() + end) + + local serverHistoryRequested = false; + + Dev_Container.Body.ServerConsole.MouseButton1Click:connect(function(x, y) + + if not serverHistoryRequested then + serverHistoryRequested = true + game:GetService("LogService"):RequestServerOutput() + end + + if (currentConsole == LOCAL_CONSOLE) then + currentConsole = SERVER_CONSOLE + local localConsole = Dev_Container.Body.LocalConsole + local serverConsole = Dev_Container.Body.ServerConsole + + serverConsole.Size = UDim2.new(0, 90, 0, 20) + localConsole.Size = UDim2.new(0, 90, 0, 17) + serverConsole.BackgroundTransparency = 0.6 + localConsole.BackgroundTransparency = 0.8 + + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local mouse = game.Players.LocalPlayer:GetMouse() + local mousePos = Vector2.new(mouse.X, mouse.Y) + refreshConsolePosition(mouse.X, mouse.Y) + refreshConsoleSize(mouse.X, mouse.Y) + handleScroll(mouse.X, mouse.Y) + end + + refreshTextHolder() + repositionList() + end + end) + + ---Extra Mouse Handlers for Dev-Console + Dev_Container.Body.ServerConsole.MouseButton1Up:connect(function() + clean() + end) + + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local LocalMouse = game.Players.LocalPlayer:GetMouse() + LocalMouse.Move:connect(function() + if not Dev_Container.Visible then + return + end + local mouse = game.Players.LocalPlayer:GetMouse() + local mousePos = Vector2.new(mouse.X, mouse.Y) + refreshConsolePosition(mouse.X, mouse.Y) + refreshConsoleSize(mouse.X, mouse.Y) + handleScroll(mouse.X, mouse.Y) + + refreshTextHolder() + repositionList() + end) + + LocalMouse.Button1Up:connect(function() + clean() + end) + + LocalMouse.WheelForward:connect(function() + if not Dev_Container.Visible then + return + end + if existsInsideContainer(Dev_Container, LocalMouse.X, LocalMouse.Y) then + changeOffset(10) + end + end) + + LocalMouse.WheelBackward:connect(function() + if not Dev_Container.Visible then + return + end + if existsInsideContainer(Dev_Container, LocalMouse.X, LocalMouse.Y) then + changeOffset(-10) + end + end) + + end + + Dev_ScrollArea.Handle.MouseButton1Down:connect(function() + repositionList() + end) + + + ---Populate Dev-Console with dummy messages + + local history = game:GetService("LogService"):GetLogHistory() + + for i = 1, #history do + AddLocalMessage(history[i].message, history[i].messageType, history[i].timestamp) + end + + game:GetService("LogService").MessageOut:connect(function(message, messageType) + AddLocalMessage(message, messageType, os.time()) + end) + + game:GetService("LogService").ServerMessageOut:connect(AddServerMessage) + +end + +local currentlyToggling = false +function ToggleConsole.OnInvoke() + if currentlyToggling then + return + end + + currentlyToggling = true + initializeDeveloperConsole() + Dev_Container.Visible = not Dev_Container.Visible + currentlyToggling = false +end diff --git a/app/files/CoreGui/158948138 b/app/files/CoreGui/158948138 new file mode 100644 index 0000000..6cfbae1 --- /dev/null +++ b/app/files/CoreGui/158948138 @@ -0,0 +1,175 @@ +-- Creates the generic "ROBLOX" loading screen on startup +-- Written by Ben Tkacheff, 2014 + +local frame +local forceRemovalTime = 5 +local destroyed = false + +Game:GetService("ContentProvider"):Preload("rbxasset://textures/roblox-logo.png") + +-- get control functions set up immediately +function removeLoadingScreen() + if frame then frame:Destroy() end + if script then script:Destroy() end + destroyed = true +end + +function startForceLoadingDoneTimer() + wait(forceRemovalTime) + removeLoadingScreen() +end + +function gameIsLoaded() + if Game.ReplicatedFirst:IsDefaultLoadingGuiRemoved() then + removeLoadingScreen() + else + startForceLoadingDoneTimer() + end +end + +function makeDefaultLoadingScreen() + if not settings():GetFFlag("NewLoadingScreen") then return end + if destroyed then return end + + frame = Instance.new("Frame") + frame.ZIndex = 10 + frame.Active = true + frame.Size = UDim2.new(1,0,1,0) + frame.BackgroundColor3 = Color3.new(48/255,90/255,206/255) + + local robloxLogo = Instance.new("ImageLabel") + robloxLogo.BackgroundTransparency = 1 + robloxLogo.ZIndex = 10 + robloxLogo.Image = "rbxasset://textures/roblox-logo.png" + robloxLogo.Size = UDim2.new(0,1031,0,265) + robloxLogo.Position = UDim2.new(0.5,-515,0.5,-132) + robloxLogo.Name = "RobloxLogo" + robloxLogo.Parent = frame + + local poweredByText = Instance.new("TextLabel") + poweredByText.Font = Enum.Font.SourceSansBold + poweredByText.FontSize = Enum.FontSize.Size24 + poweredByText.TextWrap = true + poweredByText.TextColor3 = Color3.new(1,1,1) + poweredByText.BackgroundTransparency = 1 + poweredByText.ZIndex = 10 + poweredByText.Text = "This Game Powered By" + poweredByText.TextXAlignment = Enum.TextXAlignment.Left + poweredByText.Size = UDim2.new(1,0,0,40) + poweredByText.Position = UDim2.new(0,0,0,-50) + poweredByText.Name = "PoweredByText" + poweredByText.Parent = robloxLogo + + local exitButton = Instance.new("ImageButton") + exitButton.ZIndex = 10 + exitButton.BackgroundTransparency = 1 + exitButton.Image = "rbxasset://textures/ui/CloseButton.png" + exitButton.Size = UDim2.new(0,22,0,22) + exitButton.Position = UDim2.new(1,-23,0,1) + exitButton.Name = "ExitButton" + exitButton:SetVerb("Exit") + + UserSettings().GameSettings.FullscreenChanged:connect(function ( isFullScreen ) + if isFullScreen then + exitButton.Parent = frame + else + exitButton.Parent = nil + end + end) + if UserSettings().GameSettings:InFullScreen()then + exitButton.Parent = frame + end + + -- put something visible up asap + frame.Parent = Game.CoreGui.RobloxGui + + local instanceText = Instance.new("TextLabel") + instanceText.Font = Enum.Font.SourceSansBold + instanceText.FontSize = Enum.FontSize.Size18 + instanceText.TextWrap = true + instanceText.TextColor3 = Color3.new(1,1,1) + instanceText.BackgroundTransparency = 1 + instanceText.ZIndex = 10 + instanceText.Text = "" + instanceText.Size = UDim2.new(1,0,0,40) + instanceText.Position = UDim2.new(0,0,1,-60) + instanceText.Name = "InstanceText" + instanceText.Parent = frame + + local loadingText = Instance.new("TextLabel") + loadingText.Font = Enum.Font.SourceSansBold + loadingText.FontSize = Enum.FontSize.Size36 + loadingText.TextWrap = true + loadingText.TextColor3 = Color3.new(1,1,1) + loadingText.BackgroundTransparency = 1 + loadingText.ZIndex = 10 + loadingText.Text = "Loading" + loadingText.Size = UDim2.new(1,0,0,40) + loadingText.Position = UDim2.new(0,0,1,20) + loadingText.Name = "LoadingText" + loadingText.Parent = robloxLogo + + local howManyDots = 0 + local lastUpdateTime = tick() + local minUpdateTime = 0.3 + local aspectRatio = 1031/265 + + function ResolutionChanged( prop ) + if prop == "AbsoluteSize" then + local size = Game.CoreGui.RobloxGui.AbsoluteSize + if size.X >= 1031 then + robloxLogo.Size = UDim2.new(0,1031,0,265) + robloxLogo.Position = UDim2.new(0.5,-515,0.5,-132) + else + local sizeReducer = -0.05 + while size.X < robloxLogo.AbsoluteSize.X do + + robloxLogo.Size = UDim2.new(sizeReducer,1031,0,265) + local newY = robloxLogo.AbsoluteSize.X * 265/1031 + robloxLogo.Size = UDim2.new(sizeReducer,1031,0,newY) + robloxLogo.Position = UDim2.new(0.5 - (sizeReducer/2),-515,0.5,-132) + + sizeReducer = sizeReducer - 0.1 + end + end + end + end + + ResolutionChanged("AbsoluteSize") + Game.CoreGui.RobloxGui.Changed:connect(ResolutionChanged) + + Game:GetService("RunService").RenderStepped:connect(function() + instanceText.Text = Game:GetMessage() + + if tick() - lastUpdateTime >= minUpdateTime then + howManyDots = howManyDots + 1 + if howManyDots > 5 then + howManyDots = 0 + end + + loadingText.Text = "Loading" + for i = 1, howManyDots do + loadingText.Text = loadingText.Text .. "." + end + lastUpdateTime = tick() + end + end) +end + +makeDefaultLoadingScreen() + +Game.ReplicatedFirst.RemoveDefaultLoadingGuiSignal:connect(function() + removeLoadingScreen() +end) +if Game.ReplicatedFirst:IsDefaultLoadingGuiRemoved() then + removeLoadingScreen() + return +end + +Game.Loaded:connect(function() + gameIsLoaded() +end) + +if Game:IsLoaded() then + gameIsLoaded() +end \ No newline at end of file diff --git a/app/files/CoreGui/35914081 b/app/files/CoreGui/35914081 new file mode 100644 index 0000000..9d7b873 --- /dev/null +++ b/app/files/CoreGui/35914081 @@ -0,0 +1,290 @@ +-- creates the in-game gui sub menus for property tools +-- written 9/27/2010 by Ben (jeditkacheff) + +local gui = script.Parent +if gui:FindFirstChild("ControlFrame") then + gui = gui:FindFirstChild("ControlFrame") +end + +local currentlySelectedButton = nil + +local localAssetBase = "rbxasset://textures/ui/" + +local selectedButton = Instance.new("ObjectValue") +selectedButton.RobloxLocked = true +selectedButton.Name = "SelectedButton" +selectedButton.Parent = gui.BuildTools + +local closeButton = Instance.new("ImageButton") +closeButton.Name = "CloseButton" +closeButton.RobloxLocked = true +closeButton.BackgroundTransparency = 1 +closeButton.Image = localAssetBase .. "CloseButton.png" +closeButton.ZIndex = 2 +closeButton.Size = UDim2.new(0.2,0,0.05,0) +closeButton.AutoButtonColor = false +closeButton.Position = UDim2.new(0.75,0,0.01,0) + + + +function setUpCloseButtonState(button) + + button.MouseEnter:connect(function() + button.Image = localAssetBase .. "CloseButton_dn.png" + end) + button.MouseLeave:connect(function() + button.Image = localAssetBase .. "CloseButton.png" + end) + button.MouseButton1Click:connect(function() + button.ClosedState.Value = true + button.Image = localAssetBase .. "CloseButton.png" + end) + +end + +-- nice selection animation +function fadeInButton(button) + + if currentlySelectedButton ~= nil then + currentlySelectedButton.Selected = false + currentlySelectedButton.ZIndex = 2 + currentlySelectedButton.Frame.BackgroundTransparency = 1 + end + + local speed = 0.1 + button.ZIndex = 3 + while button.Frame.BackgroundTransparency > 0 do + button.Frame.BackgroundTransparency = button.Frame.BackgroundTransparency - speed + wait() + end + button.Selected = true + + currentlySelectedButton = button + selectedButton.Value = currentlySelectedButton +end + +------------------------------- create the color selection sub menu ----------------------------------- + +local paintMenu = Instance.new("ImageLabel") +local paintTool = gui.BuildTools.Frame.PropertyTools.PaintTool +paintMenu.Name = "PaintMenu" +paintMenu.RobloxLocked = true +paintMenu.Parent = paintTool +paintMenu.Position = UDim2.new(-2.7,0,-3,0) +paintMenu.Size = UDim2.new(2.5,0,10,0) +paintMenu.BackgroundTransparency = 1 +paintMenu.ZIndex = 2 +paintMenu.Image = localAssetBase .. "PaintMenu.png" + +local paintColorButton = Instance.new("ImageButton") +paintColorButton.RobloxLocked = true +paintColorButton.BorderSizePixel = 0 +paintColorButton.ZIndex = 2 +paintColorButton.Size = UDim2.new(0.200000003, 0,0.0500000007, 0) + +local selection = Instance.new("Frame") +selection.RobloxLocked = true +selection.BorderSizePixel = 0 +selection.BackgroundColor3 = Color3.new(1,1,1) +selection.BackgroundTransparency = 1 +selection.ZIndex = 2 +selection.Size = UDim2.new(1.1,0,1.1,0) +selection.Position = UDim2.new(-0.05,0,-0.05,0) +selection.Parent = paintColorButton + +local header = 0.08 +local spacing = 18 + +local count = 1 + +function findNextColor() + colorName = tostring(BrickColor.new(count)) + while colorName == "Medium stone grey" do + count = count + 1 + colorName = tostring(BrickColor.new(count)) + end + return count +end + +for i = 0,15 do + for j = 1, 4 do + newButton = paintColorButton:clone() + newButton.RobloxLocked = true + newButton.BackgroundColor3 = BrickColor.new(findNextColor()).Color + newButton.Name = tostring(BrickColor.new(count)) + count = count + 1 + if j == 1 then newButton.Position = UDim2.new(0.08,0,i/spacing + header,0) + elseif j == 2 then newButton.Position = UDim2.new(0.29,0,i/spacing + header,0) + elseif j == 3 then newButton.Position = UDim2.new(0.5,0,i/spacing + header,0) + elseif j == 4 then newButton.Position = UDim2.new(0.71,0,i/spacing + header,0) end + newButton.Parent = paintMenu + end +end + +local paintButtons = paintMenu:GetChildren() +for i = 1, #paintButtons do + paintButtons[i].MouseButton1Click:connect(function() + fadeInButton(paintButtons[i]) + end) +end + +local paintCloseButton = closeButton:clone() +paintCloseButton.RobloxLocked = true +paintCloseButton.Parent = paintMenu + +local closedState = Instance.new("BoolValue") +closedState.RobloxLocked = true +closedState.Name = "ClosedState" +closedState.Parent = paintCloseButton + +setUpCloseButtonState(paintCloseButton) + +------------------------------- create the material selection sub menu ----------------------------------- + +local materialMenu = Instance.new("ImageLabel") +local materialTool = gui.BuildTools.Frame.PropertyTools.MaterialSelector +materialMenu.RobloxLocked = true +materialMenu.Name = "MaterialMenu" +materialMenu.Position = UDim2.new(-4,0,-3,0) +materialMenu.Size = UDim2.new(2.5,0,6.5,0) +materialMenu.BackgroundTransparency = 1 +materialMenu.ZIndex = 2 +materialMenu.Image = localAssetBase .. "MaterialMenu.png" +materialMenu.Parent = materialTool + +local textures = {"Plastic","Wood","Slate","CorrodedMetal","Ice","Grass","Foil","DiamondPlate","Concrete"} + +local materialButtons = {} + +local materialButton = Instance.new("ImageButton") +materialButton.RobloxLocked = true +materialButton.BackgroundTransparency = 1 +materialButton.Size = UDim2.new(0.400000003, 0,0.16, 0) +materialButton.ZIndex = 2 + +selection.Parent = materialButton + +local current = 1 +function getTextureAndName(button) + + if current > #textures then + button:remove() + return false + end + button.Image = localAssetBase .. textures[current] .. ".png" + button.Name = textures[current] + current = current + 1 + return true + +end + +local ySpacing = 0.10 +local xSpacing = 0.07 +for i = 1,5 do + for j = 1,2 do + local button = materialButton:clone() + button.RobloxLocked = true + button.Position = UDim2.new((j -1)/2.2 + xSpacing,0,ySpacing + (i - 1)/5.5,0) + if getTextureAndName(button) then button.Parent = materialMenu else button:remove() end + table.insert(materialButtons,button) + end +end + + +for i = 1, #materialButtons do + materialButtons[i].MouseButton1Click:connect(function() + fadeInButton(materialButtons[i]) + end) +end + +local materialCloseButton = closeButton:clone() +materialCloseButton.RobloxLocked = true +materialCloseButton.Size = UDim2.new(0.2,0,0.08,0) +materialCloseButton.Parent = materialMenu + +local closedState = Instance.new("BoolValue") +closedState.RobloxLocked = true +closedState.Name = "ClosedState" +closedState.Parent = materialCloseButton + +setUpCloseButtonState(materialCloseButton) + + +------------------------------- create the surface selection sub menu ----------------------------------- + +local surfaceMenu = Instance.new("ImageLabel") +local surfaceTool = gui.BuildTools.Frame.PropertyTools.InputSelector +surfaceMenu.RobloxLocked = true +surfaceMenu.Name = "SurfaceMenu" +surfaceMenu.Position = UDim2.new(-2.6,0,-4,0) +surfaceMenu.Size = UDim2.new(2.5,0,5.5,0) +surfaceMenu.BackgroundTransparency = 1 +surfaceMenu.ZIndex = 2 +surfaceMenu.Image = localAssetBase .. "SurfaceMenu.png" +surfaceMenu.Parent = surfaceTool + +textures = {"Smooth", "Studs", "Inlets", "Universal", "Glue", "Weld", "Hinge", "Motor"} +current = 1 + +local surfaceButtons = {} + +local surfaceButton = Instance.new("ImageButton") +surfaceButton.RobloxLocked = true +surfaceButton.BackgroundTransparency = 1 +surfaceButton.Size = UDim2.new(0.400000003, 0,0.19, 0) +surfaceButton.ZIndex = 2 + +selection.Parent = surfaceButton + +local ySpacing = 0.14 +local xSpacing = 0.07 +for i = 1,4 do + for j = 1,2 do + local button = surfaceButton:clone() + button.RobloxLocked = true + button.Position = UDim2.new((j -1)/2.2 + xSpacing,0,ySpacing + (i - 1)/4.6,0) + getTextureAndName(button) + button.Parent = surfaceMenu + table.insert(surfaceButtons,button) + end +end + +for i = 1, #surfaceButtons do + surfaceButtons[i].MouseButton1Click:connect(function() + fadeInButton(surfaceButtons[i]) + end) +end + +local surfaceMenuCloseButton = closeButton:clone() +surfaceMenuCloseButton.RobloxLocked = true +surfaceMenuCloseButton.Size = UDim2.new(0.2,0,0.09,0) +surfaceMenuCloseButton.Parent = surfaceMenu + +local closedState = Instance.new("BoolValue") +closedState.RobloxLocked = true +closedState.Name = "ClosedState" +closedState.Parent = surfaceMenuCloseButton + +setUpCloseButtonState(surfaceMenuCloseButton) + +if game.CoreGui.Version >= 2 then + local function setupTweenTransition(button, menu, outXScale, inXScale) + button.Changed:connect( + function(property) + if property ~= "Selected" then + return + end + if button.Selected then + menu:TweenPosition(UDim2.new(inXScale, menu.Position.X.Offset, menu.Position.Y.Scale, menu.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true) + else + menu:TweenPosition(UDim2.new(outXScale, menu.Position.X.Offset, menu.Position.Y.Scale, menu.Position.Y.Offset), + Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.5, true) + end + end) + end + + setupTweenTransition(paintTool, paintMenu, -2.7, 2.6) + setupTweenTransition(surfaceTool, surfaceMenu, -2.6, 2.6) + setupTweenTransition(materialTool, materialMenu, -4, 1.4) +end diff --git a/app/files/CoreGui/35914620 b/app/files/CoreGui/35914620 new file mode 100644 index 0000000..4612587 --- /dev/null +++ b/app/files/CoreGui/35914620 @@ -0,0 +1,70 @@ +-- this script is responsible for keeping the gui proportions under control + +local screen = script.Parent + +local BottomLeftControl +local BottomRightControl +local TopLeftControl +local BuildTools + +local controlFrame = script.Parent:FindFirstChild("ControlFrame") +local loadoutPadding = 43 +local currentLoadout + +BottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl") +BottomRightControl = controlFrame:FindFirstChild("BottomRightControl") +TopLeftControl = controlFrame:FindFirstChild("TopLeftControl") +currentLoadout = script.Parent:FindFirstChild("CurrentLoadout") +BuildTools = controlFrame:FindFirstChild("BuildTools") + +function makeYRelative() + + BottomLeftControl.SizeConstraint = 2 + BottomRightControl.SizeConstraint = 2 + if TopLeftControl then TopLeftControl.SizeConstraint = 2 end + if currentLoadout then currentLoadout.SizeConstraint = 2 end + if BuildTools then BuildTools.Frame.SizeConstraint = 2 end + + BottomLeftControl.Position = UDim2.new(0,0,1,-BottomLeftControl.AbsoluteSize.Y) + BottomRightControl.Position = UDim2.new(1,-BottomRightControl.AbsoluteSize.X,1,-BottomRightControl.AbsoluteSize.Y) + +end + + + +function makeXRelative() + + BottomLeftControl.SizeConstraint = 1 + BottomRightControl.SizeConstraint = 1 + if TopLeftControl then TopLeftControl.SizeConstraint = 1 end + if currentLoadout then currentLoadout.SizeConstraint = 1 end + if BuildTools then BuildTools.Frame.SizeConstraint = 1 end + + BottomLeftControl.Position = UDim2.new(0,0,1,-BottomLeftControl.AbsoluteSize.Y) + BottomRightControl.Position = UDim2.new(1,-BottomRightControl.AbsoluteSize.X,1,-BottomRightControl.AbsoluteSize.Y) + +end + +local function resize() + if screen.AbsoluteSize.x > screen.AbsoluteSize.y then + makeYRelative() + else + makeXRelative() + end + if currentLoadout then + currentLoadout.Position = + UDim2.new(0,screen.AbsoluteSize.X/2 -currentLoadout.AbsoluteSize.X/2,currentLoadout.Position.Y.Scale,-currentLoadout.AbsoluteSize.Y - loadoutPadding) + end +end +screen.Changed:connect(function(property) + + if property == "AbsoluteSize" then + wait() + resize() + end + +end) + +wait() +resize() + diff --git a/app/files/CoreGui/36040464 b/app/files/CoreGui/36040464 new file mode 100644 index 0000000..1060c5c --- /dev/null +++ b/app/files/CoreGui/36040464 @@ -0,0 +1,35 @@ +-- this script is responsible for moving the material menu in and out when selected/deselected + +local button = script.Parent +local activated = false + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForChild(script.Parent,"PaintMenu") +local menu = script.Parent:FindFirstChild("PaintMenu") + +local moving = false +local speed = 0.35 + +button.Changed:connect(function(property) + + if property ~= "Selected" then return end + if moving then return end + moving = true activated = button.Selected + if activated then + while menu.Position.X.Scale < 2.6 do + menu.Position = UDim2.new(menu.Position.X.Scale + speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + else + while menu.Position.X.Scale > -2.7 do + menu.Position = UDim2.new(menu.Position.X.Scale - speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + end + moving = false +end) \ No newline at end of file diff --git a/app/files/CoreGui/36040483 b/app/files/CoreGui/36040483 new file mode 100644 index 0000000..d28a1aa --- /dev/null +++ b/app/files/CoreGui/36040483 @@ -0,0 +1,36 @@ +-- this script is responsible for moving the surface menu in and out when selected/deselected + +local button = script.Parent +local activated = false + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForChild(script.Parent,"SurfaceMenu") +local menu = script.Parent:FindFirstChild("SurfaceMenu") + +local speed = 0.35 +local moving = false + +button.Changed:connect(function(property) + + if property ~= "Selected" then return end + if moving then return end + moving = true + activated = button.Selected + if activated then + while menu.Position.X.Scale < 2.6 do + menu.Position = UDim2.new(menu.Position.X.Scale + speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + else + while menu.Position.X.Scale > -2.6 do + menu.Position = UDim2.new(menu.Position.X.Scale - speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + end + +moving = false end) \ No newline at end of file diff --git a/app/files/CoreGui/36040495 b/app/files/CoreGui/36040495 new file mode 100644 index 0000000..5b54f7c --- /dev/null +++ b/app/files/CoreGui/36040495 @@ -0,0 +1,36 @@ +-- this script is responsible for moving the material menu in and out when selected/deselected + +local button = script.Parent +local activated = false + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForChild(script.Parent,"MaterialMenu") +local menu = script.Parent:FindFirstChild("MaterialMenu") + +local moving = false +local speed = 0.35 + +button.Changed:connect(function(property) + if property ~= "Selected" then return end + if moving then return end + + moving = true + activated = button.Selected + if activated then + while menu.Position.X.Scale < 1.4 do + menu.Position = UDim2.new(menu.Position.X.Scale + speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + else + while menu.Position.X.Scale > -4 do + menu.Position = UDim2.new(menu.Position.X.Scale - speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + end + +moving = false end) \ No newline at end of file diff --git a/app/files/CoreGui/36051740 b/app/files/CoreGui/36051740 new file mode 100644 index 0000000..5fc93c3 --- /dev/null +++ b/app/files/CoreGui/36051740 @@ -0,0 +1,707 @@ +--[[if game.Players.LocalPlayer.Name == "Player" then + return +end]] + +-- Script Globals +local buildDeleteID = 36738185 +local buildStamperID = 87198196 +local buildGroupDraggerID = 36334760 +local buildConfigID = 87240571 +local buildRotateID = 0 + +local buildTools = {} + +local player = nil +local backpack = nil + + + + +-- Functions +local function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end +end + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +function getLatestPlayer() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer + waitForChild(player,"Backpack") + backpack = player.Backpack +end + +function backpackHasTool(tool) + local backpackChildren = backpack:GetChildren() + for i = 1, #backpackChildren do + if backpackChildren[i] == tool then + return true + end + end + return false +end + +function getToolAssetID(assetID,toolName) + local newTool = game:GetService("InsertService"):LoadAsset(assetID) + newTool = newTool:FindFirstChild(toolName) + return newTool +end + +function giveAssetId(assetID,toolName) + local theTool = getToolAssetID(assetID,toolName) + if theTool and not backpackHasTool(theTool) then + theTool.Parent = backpack + table.insert(buildTools,theTool) + end +end + +function givePlayerBuildTools() + getLatestPlayer() + + giveAssetId(buildStamperID,"StamperTool") + giveAssetId(buildDeleteID,"BuildDelete") + giveAssetId(buildGroupDraggerID,"BuildGroupDragger") + giveAssetId(buildRotateID,"BuildRotate") + giveAssetId(buildConfigID,"BuildConfiguration") +end + +function takePlayerBuildTools() + for k,v in ipairs(buildTools) do + v.Parent = nil + end + buildTools = {} +end + + + +print("start script") +-- Start Script +if game.CoreGui.RobloxGui.ControlFrame.BottomLeftControl:FindFirstChild("ToolButton") then -- we are still using old build tools (TODO: remove this when new tools are good enough) + print("old tools") + local localAssetBase = "rbxasset://textures/ui/" + + local control = script.Parent:FindFirstChild("ControlFrame") + local bottomLeftControls + local buildTools + + if control then + bottomLeftControls = control.BottomLeftControl + buildTools = control.BuildTools + else + bottomLeftControls = script.Parent.BottomLeftControl + buildTools = script.Parent.BuildTools + end + + buildToolsVisible = false + + -- used right now to push build tools down a bit (should change in client) + buildTools.Frame.Position = UDim2.new(-0.15,0,0.3,0) + + bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton.png" + + local prevObject = nil + + local tryCount = 0 + + local location = 0 + + local name + + local buttons = {} + local value + + local player + local backpack + + local resetCon + + local equippedTool + local selectedButton + + -- the build tools + local buildResize + local buildClone + local buildInsert + local buildDragger + local buildColor + local buildGroupDragger + local buildSurface + local buildMaterial + local buildConfiguration + local buildDelete + + -- the build tools asset ids + local buildResizeID = 36738142 + local buildCloneID = 36017373 + local buildInsertID = 36431591 + local buildDraggerID = 36068233 + local buildColorID = 35205409 + local buildGroupDraggerID = 36334760 + local buildSurfaceID = 35226945 + local buildMaterialID = 35223828 + local buildConfigurationID = 36270159 + local buildDeleteID = 36738185 + + + function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end + end + + function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + end + + function setPlayerAndBackpack() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer + backpack = player.Backpack + end + + setPlayerAndBackpack() + + function playerReset() + + loadTools() + local prevObject = nil + local equippedTool = nil + setPlayerAndBackpack() + resetCon:disconnect() + resetCon = game.Players.LocalPlayer.CharacterAdded:connect(playerReset) + + end + + resetCon = game.Players.LocalPlayer.CharacterAdded:connect(playerReset) + + function giveSelectedValue(tool) + + if tool:FindFirstChild("SelectedButton") == nil then + local selected = Instance.new("ObjectValue") + selected.Name = "SelectedButton" + selected.RobloxLocked = true + + if tool.Name == "BuildConfiguration" then + selected.Value = buildTools.Frame.MiscTools.PropertyTool + elseif tool.Name == "BuildInsert" then + selected.Value = buildTools.Frame + end + selected.Parent = tool + end + + end + + function loadTools() + -- load in all tools to decrease issues with loading, also don't have to keep reloading assets + buildResize = game:GetService("InsertService"):LoadAsset(buildResizeID) + buildResize = buildResize:FindFirstChild("BuildResize") + giveSelectedValue(buildResize) + buildResize.Parent = backpack + + buildClone = game:GetService("InsertService"):LoadAsset(buildCloneID) + buildClone = buildClone:FindFirstChild("BuildClone") + giveSelectedValue(buildClone) + buildClone.Parent = backpack + + buildInsert = game:GetService("InsertService"):LoadAsset(buildInsertID) + buildInsert = buildInsert:FindFirstChild("BuildInsert") + giveSelectedValue(buildInsert) + buildInsert.Parent = backpack + + buildDragger = game:GetService("InsertService"):LoadAsset(buildDraggerID) + buildDragger = buildDragger:FindFirstChild("BuildDragger") + giveSelectedValue(buildDragger) + buildDragger.Parent = backpack + + buildColor = game:GetService("InsertService"):LoadAsset(buildColorID) + buildColor = buildColor:FindFirstChild("BuildColorTester") + giveSelectedValue(buildColor) + buildColor.Parent = backpack + + buildGroupDragger = game:GetService("InsertService"):LoadAsset(buildGroupDraggerID) + buildGroupDragger = buildGroupDragger:FindFirstChild("BuildGroupDragger") + giveSelectedValue(buildGroupDragger) + buildGroupDragger.Parent = backpack + + buildSurface = game:GetService("InsertService"):LoadAsset(buildSurfaceID) + buildSurface = buildSurface:FindFirstChild("BuildSurfaceTest") + giveSelectedValue(buildSurface) + buildSurface.Parent = backpack + + buildMaterial = game:GetService("InsertService"):LoadAsset(buildMaterialID) + buildMaterial = buildMaterial:FindFirstChild("BuildMaterialTest") + giveSelectedValue(buildMaterial) + buildMaterial.Parent = backpack + + buildConfiguration = game:GetService("InsertService"):LoadAsset(buildConfigurationID) + buildConfiguration = buildConfiguration:FindFirstChild("BuildConfiguration") + giveSelectedValue(buildConfiguration) + buildConfiguration.Parent = backpack + + buildDelete = game:GetService("InsertService"):LoadAsset(buildDeleteID) + buildDelete = buildDelete:FindFirstChild("BuildDelete") + giveSelectedValue(buildDelete) + buildDelete.Parent = backpack + end + loadTools() + + waitForChild(buildTools,"SelectedButton") + + buildTools.SelectedButton.Changed:connect(function(property) + + if value == buildTools.SelectedButton.Value then return end + value = buildTools.SelectedButton.Value + + selectedButton = buildTools.SelectedButton.Value + + if equippedTool then + equippedTool.SelectedButton.Value = selectedButton + end + end) + + + + local frames = buildTools.Frame:GetChildren() + for i = 1, #frames do + if frames[i]:IsA("Frame") and frames[i].Name ~= "Divs" then + local buttonSubSet = frames[i]:GetChildren() + for j = 1, #buttonSubSet do + table.insert(buttons,buttonSubSet[j]) + end + end + end + + function unEquipAnyItems() + + playerItems = player.Character:GetChildren() + for i = 1, #playerItems do + if playerItems[i]:isA("Tool") or playerItems[i]:isA("HopperBin") then + playerItems[i].Parent = backpack + return + end + end + + end + unEquipAnyItems() + + --------------------- Build Bar Tool Tip Code ----------------------------- + + function setUpText(toolTip) + + local name = toolTip.Parent.Name + if name == "CloneObject" then toolTip.Text = "Copy Part" + elseif name == "DeleteObject" then toolTip.Text = "Delete Part" + elseif name == "InsertObject" then toolTip.Text = "Insert Part" + elseif name == "PropertyTool" then toolTip.Text = "Edit Part" + elseif name == "GroupMove" then toolTip.Text = "Move Models and Parts" + elseif name == "PartMove" then toolTip.Text = "Move Parts" + elseif name == "ScaleObject" then toolTip.Text = "Resize a part" + elseif name == "InputSelector" then toolTip.Text = "Change Surface" + elseif name == "MaterialSelector" then toolTip.Text = "Change Material" + elseif name == "PaintTool" then toolTip.Text = "Change Color" end + + end + + local fadeSpeed = 0.1 + function buildToolsTips() + + local frame = Instance.new("TextLabel") + frame.Name = "ToolTip" + frame.Text = "Hi! I'm a ToolTip!" + frame.ZIndex = 10 + frame.Size = UDim2.new(2,0,1,0) + frame.Position = UDim2.new(1,0,0,0) + frame.BackgroundColor3 = Color3.new(1,1,153/255) + frame.BackgroundTransparency = 1 + frame.TextTransparency = 1 + frame.TextWrap = true + + for i = 1, #buttons do + local tip = frame:Clone() + tip.RobloxLocked = true + tip.Parent = buttons[i] + setUpText(tip) + local inside = Instance.new("BoolValue") + inside.Value = false + inside.RobloxLocked = true + tip.Parent.MouseEnter:connect(function() + inside.Value = true + wait(1.2) + if inside.Value then + while inside.Value and tip.BackgroundTransparency > 0 do + tip.BackgroundTransparency = tip.BackgroundTransparency - fadeSpeed + tip.TextTransparency = tip.TextTransparency - fadeSpeed + wait() + end + end + end) + tip.Parent.MouseLeave:connect(function() + inside.Value = false + tip.BackgroundTransparency = 1 + tip.TextTransparency = 1 + end) + tip.Parent.MouseButton1Click:connect(function() + inside.Value = false + tip.BackgroundTransparency = 1 + tip.TextTransparency = 1 + end) + end + end + + --------------------- End Build Bar Tool Tip Code -------------------------- + + + + ----------------------------- Reset Button Code ---------------------------- + function reset(subset) + + local buttons = subset:GetChildren() + if subset.Name == "AddDeleteTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "CloneObject" then buttons[i].Image = localAssetBase .. "CloneButton.png" + elseif buttons[i].Name == "DeleteObject" then buttons[i].Image = localAssetBase .. "DeleteButton.png" + elseif buttons[i].Name == "InsertObject" then buttons[i].Image = localAssetBase .. "InsertButton.png" end + end + + + elseif subset.Name == "MiscTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "PropertyTool" then buttons[i].Image = localAssetBase .. "PropertyButton.png" end + end + + + elseif subset.Name == "PhysicalTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "GroupMove" then buttons[i].Image = localAssetBase .. "GroupMoveButton.png" + elseif buttons[i].Name == "PartMove" then buttons[i].Image = localAssetBase .."PartMoveButton.png" + elseif buttons[i].Name == "ScaleObject" then buttons[i].Image = localAssetBase .. "ScaleButton.png" end + end + + + elseif subset.Name == "PropertyTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "InputSelector" then buttons[i].Image = localAssetBase .. "SurfaceButton.png" + elseif buttons[i].Name == "MaterialSelector" then buttons[i].Image = localAssetBase .. "MaterialButton.png" + elseif buttons[i].Name == "PaintTool" then buttons[i].Image = localAssetBase .. "PaintButton.png" end + end + end + + end + + function resetAllButtons() + + local categories = buildTools.Frame:GetChildren() + for i = 1, #categories do + reset(categories[i]) + end + + end + + ----------------------------- End Reset Button Code ------------------------- + resetAllButtons() + + + + -- sets button to active image + function setButtonStateActive(Object, Name) + + if Name == "BuildInsert" then Object.Image = localAssetBase .. "InsertButton_dn.png" Object.Selected = true + elseif Name == "BuildDelete" then Object.Image = localAssetBase .. "DeleteButton_dn.png" Object.Selected = true + elseif Name == "BuildClone" then Object.Image = localAssetBase .. "CloneButton_dn.png" Object.Selected = true + elseif Name == "BuildConfiguration" then Object.Image = localAssetBase .. "PropertyButton_dn.png" Object.Selected = true + elseif Name == "BuildDragger" then Object.Image = localAssetBase .. "PartMoveButton_dn.png" Object.Selected = true + elseif Name == "BuildGroupDragger" then Object.Image = localAssetBase .. "GroupMoveButton_dn.png" Object.Selected = true + elseif Name == "BuildResize" then Object.Image = localAssetBase .. "ScaleButton_dn.png" Object.Selected = true + elseif Name == "BuildSurfaceTest" then Object.Image = localAssetBase .. "SurfaceButton_dn.png" Object.Selected = true + elseif Name == "BuildMaterialTest" then Object.Image = localAssetBase .. "MaterialButton_dn.png" Object.Selected = true + elseif Name == "BuildColorTester" then Object.Image = localAssetBase .. "PaintButton_dn.png" Object.Selected = true + end + + end + + + function removeTool(tool, Object) + + playerItems = player.Characer:GetChildren() + for i = 1, #playerItems do + if playerItems[i].Name == tool and playerItems[i]:isA("Tool") then + playerItems[i].Parent = backpack + playerItems[i]:remove() + return + end + end + + backpackStuff = backpack:GetChildren() + for i = 1, #backpackStuff do + if backpackStuff[i].Name == tool then + backpackStuff[i].Parent = nil + backpackStuff[i]:remove() + return + end + end + + end + + + + function getTool(tool) + playerItems = player.Character:GetChildren() + for i = 1, #playerItems do + if playerItems[i].Name == tool then + if playerItems[i]:isA("Tool") then return playerItems[i], true end + end + end + + backpackStuff = backpack:GetChildren() + for i = 1, #backpackStuff do + if backpackStuff[i].Name == tool then + return backpackStuff[i], false + end + end + end + + function toolDeselection(Name,Object,id) + + local hasTool, equipped = getTool(Name) + if equipped then + resetAllButtons() + unEquipAnyItems() + hasTool.Parent = nil + hasTool:remove() + + if equippedTool then + equippedTool.Parent = nil + equippedTool:remove() + equippedTool = nil + end + end + + end + + + -- Used to find allocated tool that we got at beginning of script + function getToolLocal(Name) + + if Name == "BuildInsert" then return buildInsert + elseif Name == "BuildDelete" then return buildDelete + elseif Name == "BuildClone" then return buildClone + elseif Name == "BuildConfiguration" then return buildConfiguration + elseif Name == "BuildDragger" then return buildDragger + elseif Name == "BuildGroupDragger" then return buildGroupDragger + elseif Name == "BuildResize" then return buildResize + elseif Name == "BuildSurfaceTest" then return buildSurface + elseif Name == "BuildMaterialTest" then return buildMaterial + elseif Name == "BuildColorTester" then return buildColor + end + + end + + function assureTool(tool, id, Name) + + if tool == nil or type(tool) ~= "userdata" or tool:FindFirstChild("Handle") == nil then + tool = game:GetService("InsertService"):LoadAsset(id) + + local instances = tool:GetChildren() + if #instances == 0 then + tool:Remove() + return nil + end + + tool = tool:FindFirstChild(Name) + tool.Parent = backpack + end + + end + + -- general function to get tool when button is clicked + function toolSelection(Name,Object,id) + local tool = nil + local hasTool, equipped = getTool(Name) + if equipped then + + if hasTool:FindFirstChild("SelectedButton") == false then + giveSelectedValue(hasTool) + end + + resetAllButtons() + unEquipAnyItems() + hasTool.Parent = nil + + if equippedTool ~= nil then + equippedTool.Parent = backpack + end + + elseif hasTool then + + -- failsafe to make sure we load in tool, no matter what + assureTool(hasTool,id, Name) + if hasTool == nil then return nil end + + unEquipAnyItems() + Object.Selected = true + hasTool.Parent = player.Character + equippedTool = hasTool + hasTool.Unequipped:connect(function() resetAllButtons() end) + setButtonStateActive(Object, Name) + + else + + -- first try to find tool we already loaded in + tool = getToolLocal(Name) + + -- failsafe to make sure we load in tool, no matter what + assureTool(tool,id, Name) + if tool == nil then return nil end + + if tool then + + if tool:FindFirstChild("SelectedButton") == nil then + local selected = Instance.new("ObjectValue") + selected.Name = "SelectedButton" + selected.RobloxLocked = true + + if Name == "BuildConfiguration" then + selected.Value = buildTools.Frame.MiscTools.PropertyTool + elseif Name == "BuildInsert" then + selected.Value = buildTools.Frame + end + + selected.Parent = tool + end + + unEquipAnyItems() + if equippedTool ~= nil then + if prevObject then resetAllButtons() end + equippedTool.Parent = backpack + end + + equippedTool = tool + equippedTool.Parent = player.Character + + Object.Selected = true + equippedTool.Unequipped:connect(function() resetAllButtons() end) + setButtonStateActive(Object, Name) + end + end + prevObject = Object + end + + + -- used to animate the tool bar open/close + local scrollSpeed = 0.01 + function openCloseTools() + buildToolsVisible = not buildToolsVisible + if buildToolsVisible then + bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton_dn.png" + buildTools.Frame.CloseButton.Image = localAssetBase .. "CloseButton.png" + buildTools.Frame.Size = UDim2.new(0.15,0,0.57,0) + buildTools.Frame.Position = UDim2.new(-0.1, 0,buildTools.Frame.Position.Y.Scale,0) + while buildTools.Frame.Position.X.Scale < -0.01 and buildToolsVisible do + buildTools.Frame.Position = UDim2.new(buildTools.Frame.Position.X.Scale + scrollSpeed, 0,buildTools.Frame.Position.Y.Scale,0) + wait() + end + buildTools.Frame.Position = UDim2.new(0, 0,buildTools.Frame.Position.Y.Scale,0) + else + bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton.png" + while buildTools.Frame.AbsolutePosition.X + buildTools.Frame.AbsoluteSize.X > 0 and not buildToolsVisible do + buildTools.Frame.Position = UDim2.new(buildTools.Frame.Position.X.Scale - scrollSpeed, 0,buildTools.Frame.Position.Y.Scale,0) + wait() + end + buildTools.Frame.Size = UDim2.new(0,buildTools.Frame.AbsoluteSize.X,buildTools.Frame.Size.Y.Scale,buildTools.Frame.Size.Y.Offset) + buildTools.Frame.Position = UDim2.new(0,-buildTools.Frame.AbsoluteSize.X,buildTools.Frame.Position.Y.Scale,buildTools.Frame.Position.Y.Offset) + end + end + + -- setup tool button listeners + bottomLeftControls.ToolButton.MouseButton1Click:connect(openCloseTools) + bottomLeftControls.ToolButton.MouseEnter:connect(function() if not buildToolsVisible then bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton_dn.png" end end) + bottomLeftControls.ToolButton.MouseLeave:connect(function() if not buildToolsVisible then bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton.png" end end) + + -- close button on build tools + buildTools.Frame.CloseButton.MouseButton1Click:connect(openCloseTools) + buildTools.Frame.CloseButton.MouseEnter:connect(function() buildTools.Frame.CloseButton.Image = localAssetBase .. "CloseButton_dn.png" end) + buildTools.Frame.CloseButton.MouseLeave:connect(function() buildTools.Frame.CloseButton.Image = localAssetBase .. "CloseButton.png" end) + + buildToolsTips() + + -- Add/Delete Tools + buildTools.Frame.AddDeleteTools.DeleteObject.MouseButton1Click:connect(function() + toolSelection("BuildDelete", buildTools.Frame.AddDeleteTools.DeleteObject,buildDeleteID) end) + buildTools.Frame.AddDeleteTools.CloneObject.MouseButton1Click:connect(function() + toolSelection("BuildClone",buildTools.Frame.AddDeleteTools.CloneObject,buildCloneID) end) + buildTools.Frame.AddDeleteTools.InsertObject.MouseButton1Click:connect(function() + toolSelection("BuildInsert",buildTools.Frame.AddDeleteTools.InsertObject,buildInsertID) + if(buildTools.Frame:FindFirstChild("InsertToolboxMain")) then + buildTools.Frame.InsertToolboxMain.InsertMainDialog.InsertTab.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildInsert",buildTools.Frame.AddDeleteTools.InsertObject,buildInsertID) + if(buildTools.Frame:FindFirstChild("InsertToolboxMain")) then + buildTools.Frame.InsertToolboxMain.InsertMainDialog.InsertTab.CloseButton.ClosedState.Value = false + end + end + end) + end + + end) + + -- Physical Tools + buildTools.Frame.PhysicalTools.ScaleObject.MouseButton1Click:connect(function() + toolSelection("BuildResize",buildTools.Frame.PhysicalTools.ScaleObject, buildResizeID) end) + --[[buildTools.Frame.PhysicalTools.PartMove.MouseButton1Click:connect(function() + toolSelection("BuildDragger",buildTools.Frame.PhysicalTools.PartMove,buildDraggerID) end)]] + buildTools.Frame.PhysicalTools.GroupMove.MouseButton1Click:connect(function() + toolSelection("BuildGroupDragger",buildTools.Frame.PhysicalTools.GroupMove,buildGroupDraggerID) end) + + -- Property Tools + buildTools.Frame.PropertyTools.MaterialSelector.MouseButton1Click:connect(function() + toolSelection("BuildMaterialTest",buildTools.Frame.PropertyTools.MaterialSelector,buildMaterialID) end) + buildTools.Frame.PropertyTools.MaterialSelector.MaterialMenu.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildMaterialTest",buildTools.Frame.PropertyTools.MaterialSelector,buildMaterialID) + buildTools.Frame.PropertyTools.MaterialSelector.MaterialMenu.CloseButton.ClosedState.Value = false + end + end) + buildTools.Frame.PropertyTools.PaintTool.MouseButton1Click:connect(function() + toolSelection("BuildColorTester",buildTools.Frame.PropertyTools.PaintTool, buildColorID) end) + buildTools.Frame.PropertyTools.PaintTool.PaintMenu.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildColorTester",buildTools.Frame.PropertyTools.PaintTool,buildColorID) + buildTools.Frame.PropertyTools.PaintTool.PaintMenu.CloseButton.ClosedState.Value = false + end + end) + buildTools.Frame.PropertyTools.InputSelector.MouseButton1Click:connect(function() + toolSelection("BuildSurfaceTest",buildTools.Frame.PropertyTools.InputSelector, buildSurfaceID) end) + buildTools.Frame.PropertyTools.InputSelector.SurfaceMenu.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildSurfaceTest",buildTools.Frame.PropertyTools.InputSelector,buildSurfaceID) + buildTools.Frame.PropertyTools.InputSelector.SurfaceMenu.CloseButton.ClosedState.Value = false + end + end) + + -- Misc Tools + buildTools.Frame.MiscTools.PropertyTool.MouseButton1Click:connect(function() + toolSelection("BuildConfiguration",buildTools.Frame.MiscTools.PropertyTool, buildConfigurationID) end) + +else -- we are using new build tools + getLatestPlayer() + + givePlayerBuildTools() + + -- If player dies, we make sure to give them build tools again + player.CharacterAdded:connect(function() + takePlayerBuildTools() + givePlayerBuildTools() + end) +end \ No newline at end of file diff --git a/app/files/CoreGui/36868950 b/app/files/CoreGui/36868950 new file mode 100644 index 0000000..f0fee74 --- /dev/null +++ b/app/files/CoreGui/36868950 @@ -0,0 +1,109 @@ +local controlFrame = script.Parent:FindFirstChild("ControlFrame") + +if not controlFrame then return end + +local topLeftControl = controlFrame:FindFirstChild("TopLeftControl") +local bottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl") +local bottomRightControl = controlFrame:FindFirstChild("BottomRightControl") + + +local frameTip = Instance.new("TextLabel") +frameTip.Name = "ToolTip" +frameTip.Text = "" +frameTip.Font = Enum.Font.ArialBold +frameTip.FontSize = Enum.FontSize.Size12 +frameTip.TextColor3 = Color3.new(1,1,1) +frameTip.BorderSizePixel = 0 +frameTip.ZIndex = 10 +frameTip.Size = UDim2.new(2,0,1,0) +frameTip.Position = UDim2.new(1,0,0,0) +frameTip.BackgroundColor3 = Color3.new(0,0,0) +frameTip.BackgroundTransparency = 1 +frameTip.TextTransparency = 1 +frameTip.TextWrap = true + +local inside = Instance.new("BoolValue") +inside.Name = "inside" +inside.Value = false +inside.Parent = frameTip + +function setUpListeners(frameToListen) + local fadeSpeed = 0.1 + frameToListen.Parent.MouseEnter:connect(function() + if frameToListen:FindFirstChild("inside") then + frameToListen.inside.Value = true + wait(1.2) + if frameToListen.inside.Value then + while frameToListen.inside.Value and frameToListen.BackgroundTransparency > 0 do + frameToListen.BackgroundTransparency = frameToListen.BackgroundTransparency - fadeSpeed + frameToListen.TextTransparency = frameToListen.TextTransparency - fadeSpeed + wait() + end + end + end + end) + function killTip(killFrame) + killFrame.inside.Value = false + killFrame.BackgroundTransparency = 1 + killFrame.TextTransparency = 1 + end + frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end) + frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) end) +end + +function createSettingsButtonTip(parent) + if parent == nil then + parent = bottomLeftControl:FindFirstChild("SettingsButton") + end + + local toolTip = frameTip:clone() + toolTip.RobloxLocked = true + toolTip.Text = "Settings/Leave Game" + toolTip.Position = UDim2.new(0,0,0,-18) + toolTip.Size = UDim2.new(0,120,0,20) + toolTip.Parent = parent + setUpListeners(toolTip) +end + +wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway + +---------------- set up Bottom Left Tool Tips ------------------------- + +local bottomLeftChildren = bottomLeftControl:GetChildren() +local hasSettingsTip = false + +for i = 1, #bottomLeftChildren do + + if bottomLeftChildren[i].Name == "Exit" then + local exitTip = frameTip:clone() + exitTip.RobloxLocked = true + exitTip.Text = "Leave Place" + exitTip.Position = UDim2.new(0,0,-1,0) + exitTip.Size = UDim2.new(1,0,1,0) + exitTip.Parent = bottomLeftChildren[i] + setUpListeners(exitTip) + elseif bottomLeftChildren[i].Name == "SettingsButton" then + hasSettingsTip = true + createSettingsButtonTip(bottomLeftChildren[i]) + end +end + +---------------- set up Bottom Right Tool Tips ------------------------- + +local bottomRightChildren = bottomRightControl:GetChildren() + +for i = 1, #bottomRightChildren do + if bottomRightChildren[i].Name:find("Camera") ~= nil then + local cameraTip = frameTip:clone() + cameraTip.RobloxLocked = true + cameraTip.Text = "Camera View" + if bottomRightChildren[i].Name:find("Zoom") then + cameraTip.Position = UDim2.new(-1,0,-1.5) + else + cameraTip.Position = UDim2.new(0,0,-1.5,0) + end + cameraTip.Size = UDim2.new(2,0,1.25,0) + cameraTip.Parent = bottomRightChildren[i] + setUpListeners(cameraTip) + end +end diff --git a/app/files/CoreGui/37801172 b/app/files/CoreGui/37801172 new file mode 100644 index 0000000..edbda6c --- /dev/null +++ b/app/files/CoreGui/37801172 @@ -0,0 +1,115 @@ +-- Creates all neccessary scripts for the gui on initial load, everything except build tools +-- Created by Ben T. 10/29/10 +-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user + +local scriptContext = game:GetService("ScriptContext") +local touchEnabled = false +pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end) + +-- library registration +scriptContext:AddCoreScript(60595695, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration") + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- Responsible for tracking logging items +local scriptContext = game:GetService("ScriptContext") +scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections") + +waitForChild(game:GetService("CoreGui"),"RobloxGui") +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +if not touchEnabled then + -- ToolTipper (creates tool tips for gui) + scriptContext:AddCoreScript(36868950,screenGui,"CoreScripts/ToolTip") + -- SettingsScript + scriptContext:AddCoreScript(46295863,screenGui,"CoreScripts/Settings") +else + scriptContext:AddCoreScript(153556783,screenGui,"CoreScripts/TouchControls") +end + +-- MainBotChatScript +scriptContext:AddCoreScript(39250920,screenGui,"CoreScripts/MainBotChatScript") + +-- Developer Console Script +scriptContext:AddCoreScript(157877000,screenGui,"CoreScripts/DeveloperConsole") + +-- Popup Script +scriptContext:AddCoreScript(48488451,screenGui,"CoreScripts/PopupScript") +-- Friend Notification Script (probably can use this script to expand out to other notifications) +scriptContext:AddCoreScript(48488398,screenGui,"CoreScripts/NotificationScript") +-- Chat script +scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript") +-- Purchase Prompt Script +scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript") +-- Health Script +scriptContext:AddCoreScript(153556822, screenGui, "CoreScripts/HealthScript") + +if not touchEnabled then + -- New Player List + scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") +elseif screenGui.AbsoluteSize.Y > 600 then + -- New Player List + scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") +else + delay(5, function() + if screenGui.AbsoluteSize.Y >= 600 then + -- New Player List + scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") + end + end) +end + +if game.CoreGui.Version >= 3 then + -- Backpack Builder, creates most of the backpack gui + scriptContext:AddCoreScript(53878047,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder") + + waitForChild(screenGui,"CurrentLoadout") + waitForChild(screenGui,"Backpack") + local Backpack = screenGui.Backpack + + -- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly + if game.CoreGui.Version >= 7 then + scriptContext:AddCoreScript(89449093,Backpack,"CoreScripts/BackpackScripts/BackpackManager") + end + + -- Backpack Gear (handles all backpack gear tab stuff) + game:GetService("ScriptContext"):AddCoreScript(89449008,Backpack,"CoreScripts/BackpackScripts/BackpackGear") + -- Loadout Script, used for gear hotkeys + scriptContext:AddCoreScript(53878057,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript") + if game.CoreGui.Version >= 8 then + -- Wardrobe script handles all character dressing operations + scriptContext:AddCoreScript(-1,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe") + end +end + +local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable") +if IsPersonalServer then + game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") +end +game.Workspace.ChildAdded:connect(function(nchild) + if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then + IsPersonalServer = true + game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") + end +end) + +if touchEnabled then -- touch devices don't use same control frame + -- only used for touch device button generation + scriptContext:AddCoreScript(152908679,screenGui,"CoreScripts/ContextActionTouch") + + waitForChild(screenGui, 'ControlFrame') + waitForChild(screenGui.ControlFrame, 'BottomLeftControl') + screenGui.ControlFrame.BottomLeftControl.Visible = false + + waitForChild(screenGui.ControlFrame, 'TopLeftControl') + screenGui.ControlFrame.TopLeftControl.Visible = false +end \ No newline at end of file diff --git a/app/files/CoreGui/37801173 b/app/files/CoreGui/37801173 new file mode 100644 index 0000000..9750d26 --- /dev/null +++ b/app/files/CoreGui/37801173 @@ -0,0 +1,74 @@ +-- Creates all neccessary scripts for the gui on initial load, everything except build tools +-- Created by Ben T. 10/29/10 +-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user +local scriptContext = game:GetService("ScriptContext") +local touchEnabled = false +pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end) + +-- library registration +scriptContext:AddCoreScript(60595696, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration") + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- Responsible for tracking logging items +local scriptContext = game:GetService("ScriptContext") +scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections") + +waitForChild(game:GetService("CoreGui"),"RobloxGui") +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +if not touchEnabled then + -- ToolTipper (creates tool tips for gui) + scriptContext:AddCoreScript(36868950,screenGui,"CoreScripts/ToolTip") + -- SettingsScript + scriptContext:AddCoreScript(46295864,screenGui,"CoreScripts/Settings") +end + +-- MainBotChatScript +scriptContext:AddCoreScript(39250920,screenGui,"CoreScripts/MainBotChatScript") +-- New Player List +scriptContext:AddCoreScript(48488236,screenGui,"CoreScripts/PlayerListScript") +-- Popup Script +scriptContext:AddCoreScript(48488451,screenGui,"CoreScripts/PopupScript") +-- Friend Notification Script (probably can use this script to expand out to other notifications) +scriptContext:AddCoreScript(48488398,screenGui,"CoreScripts/NotificationScript") +-- Chat script +scriptContext:AddCoreScript(97188757, screenGui, "CoreScripts/ChatScript") + + +if game.CoreGui.Version >= 3 then + -- Backpack Builder, creates most of the backpack gui + scriptContext:AddCoreScript(53878048,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder") + + waitForChild(screenGui,"CurrentLoadout") + waitForChild(screenGui,"Backpack") + local Backpack = screenGui.Backpack + + -- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly + if game.CoreGui.Version >= 7 then + scriptContext:AddCoreScript(89449094,Backpack,"CoreScripts/BackpackScripts/BackpackManager") + end + + -- Backpack Gear (handles all backpack gear tab stuff) + game:GetService("ScriptContext"):AddCoreScript(89449009,Backpack,"CoreScripts/BackpackScripts/BackpackGear") + -- Loadout Script, used for gear hotkeys + scriptContext:AddCoreScript(53878058,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript") + if game.CoreGui.Version >= 8 then + -- Wardrobe script handles all character dressing operations + scriptContext:AddCoreScript(-1,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe") + end +end + +if touchEnabled then -- touch devices don't use same control frame + waitForChild(screenGui, 'ControlFrame') + screenGui.ControlFrame.Visible = false +end diff --git a/app/files/CoreGui/39250920 b/app/files/CoreGui/39250920 new file mode 100644 index 0000000..5356cdf --- /dev/null +++ b/app/files/CoreGui/39250920 @@ -0,0 +1,560 @@ +function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end +end + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + + +local mainFrame +local choices = {} +local lastChoice +local choiceMap = {} +local currentConversationDialog +local currentConversationPartner +local currentAbortDialogScript + +local tooFarAwayMessage = "You are too far away to chat!" +local tooFarAwaySize = 300 +local characterWanderedOffMessage = "Chat ended because you walked away" +local characterWanderedOffSize = 350 +local conversationTimedOut = "Chat ended because you didn't reply" +local conversationTimedOutSize = 350 + +local player +local screenGui +local chatNotificationGui +local messageDialog +local timeoutScript +local reenableDialogScript +local dialogMap = {} +local dialogConnections = {} + +local gui = nil +waitForChild(game,"CoreGui") +waitForChild(game.CoreGui,"RobloxGui") +if game.CoreGui.RobloxGui:FindFirstChild("ControlFrame") then + gui = game.CoreGui.RobloxGui.ControlFrame +else + gui = game.CoreGui.RobloxGui +end + +function currentTone() + if currentConversationDialog then + return currentConversationDialog.Tone + else + return Enum.DialogTone.Neutral + end +end + + +function createChatNotificationGui() + chatNotificationGui = Instance.new("BillboardGui") + chatNotificationGui.Name = "ChatNotificationGui" + chatNotificationGui.ExtentsOffset = Vector3.new(0,1,0) + chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0) + chatNotificationGui.SizeOffset = Vector2.new(0,0) + chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0) + chatNotificationGui.Enabled = true + chatNotificationGui.RobloxLocked = true + chatNotificationGui.Active = true + + local image = Instance.new("ImageLabel") + image.Name = "Image" + image.Active = false + image.BackgroundTransparency = 1 + image.Position = UDim2.new(0,0,0,0) + image.Size = UDim2.new(1.0,0,1.0,0) + image.Image = "" + image.RobloxLocked = true + image.Parent = chatNotificationGui + + + local button = Instance.new("ImageButton") + button.Name = "Button" + button.AutoButtonColor = false + button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0) + button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0) + button.Image = "" + button.BackgroundTransparency = 1 + button.RobloxLocked = true + button.Parent = image +end + +function getChatColor(tone) + if tone == Enum.DialogTone.Neutral then + return Enum.ChatColor.Blue + elseif tone == Enum.DialogTone.Friendly then + return Enum.ChatColor.Green + elseif tone == Enum.DialogTone.Enemy then + return Enum.ChatColor.Red + end +end + +function styleChoices(tone) + for i, obj in pairs(choices) do + resetColor(obj, tone) + end + resetColor(lastChoice, tone) +end + +function styleMainFrame(tone) + if tone == Enum.DialogTone.Neutral then + mainFrame.Style = Enum.FrameStyle.ChatBlue + mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" + elseif tone == Enum.DialogTone.Friendly then + mainFrame.Style = Enum.FrameStyle.ChatGreen + mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botGreen_tailRight.png" + elseif tone == Enum.DialogTone.Enemy then + mainFrame.Style = Enum.FrameStyle.ChatRed + mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png" + end + + styleChoices(tone) +end +function setChatNotificationTone(gui, purpose, tone) + if tone == Enum.DialogTone.Neutral then + gui.Image.Image = "rbxasset://textures/chatBubble_botBlue_notify_bkg.png" + elseif tone == Enum.DialogTone.Friendly then + gui.Image.Image = "rbxasset://textures/chatBubble_botGreen_notify_bkg.png" + elseif tone == Enum.DialogTone.Enemy then + gui.Image.Image = "rbxasset://textures/chatBubble_botRed_notify_bkg.png" + end + if purpose == Enum.DialogPurpose.Quest then + gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_bang.png" + elseif purpose == Enum.DialogPurpose.Help then + gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_question.png" + elseif purpose == Enum.DialogPurpose.Shop then + gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_money.png" + end +end + +function createMessageDialog() + messageDialog = Instance.new("Frame"); + messageDialog.Name = "DialogScriptMessage" + messageDialog.Style = Enum.FrameStyle.RobloxRound + messageDialog.Visible = false + + local text = Instance.new("TextLabel") + text.Name = "Text" + text.Position = UDim2.new(0,0,0,-1) + text.Size = UDim2.new(1,0,1,0) + text.FontSize = Enum.FontSize.Size14 + text.BackgroundTransparency = 1 + text.TextColor3 = Color3.new(1,1,1) + text.RobloxLocked = true + text.Parent = messageDialog +end + +function showMessage(msg, size) + messageDialog.Text.Text = msg + messageDialog.Size = UDim2.new(0,size,0,40) + messageDialog.Position = UDim2.new(0.5, -size/2, 0.5, -40) + messageDialog.Visible = true + wait(2) + messageDialog.Visible = false +end + +function variableDelay(str) + local length = math.min(string.len(str), 100) + wait(0.75 + ((length/75) * 1.5)) +end + +function resetColor(frame, tone) + if tone == Enum.DialogTone.Neutral then + frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) + frame.Number.TextColor3 = Color3.new(45/255, 142/255, 245/255) + elseif tone == Enum.DialogTone.Friendly then + frame.BackgroundColor3 = Color3.new(0/255, 77/255, 0/255) + frame.Number.TextColor3 = Color3.new(0/255, 190/255, 0/255) + elseif tone == Enum.DialogTone.Enemy then + frame.BackgroundColor3 = Color3.new(140/255, 0/255, 0/255) + frame.Number.TextColor3 = Color3.new(255/255,88/255, 79/255) + end +end + +function highlightColor(frame, tone) + if tone == Enum.DialogTone.Neutral then + frame.BackgroundColor3 = Color3.new(2/255, 108/255, 255/255) + frame.Number.TextColor3 = Color3.new(1, 1, 1) + elseif tone == Enum.DialogTone.Friendly then + frame.BackgroundColor3 = Color3.new(0/255, 128/255, 0/255) + frame.Number.TextColor3 = Color3.new(1, 1, 1) + elseif tone == Enum.DialogTone.Enemy then + frame.BackgroundColor3 = Color3.new(204/255, 0/255, 0/255) + frame.Number.TextColor3 = Color3.new(1, 1, 1) + end +end + +function wanderDialog() + print("Wander") + mainFrame.Visible = false + endDialog() + showMessage(characterWanderedOffMessage, characterWanderedOffSize) +end + +function timeoutDialog() + print("Timeout") + mainFrame.Visible = false + endDialog() + showMessage(conversationTimedOut, conversationTimedOutSize) +end +function normalEndDialog() + print("Done") + endDialog() +end + +function endDialog() + if currentAbortDialogScript then + currentAbortDialogScript:Remove() + currentAbortDialogScript = nil + end + + local dialog = currentConversationDialog + currentConversationDialog = nil + if dialog and dialog.InUse then + local reenableScript = reenableDialogScript:Clone() + reenableScript.archivable = false + reenableScript.Disabled = false + reenableScript.Parent = dialog + end + + for dialog, gui in pairs(dialogMap) do + if dialog and gui then + gui.Enabled = not dialog.InUse + end + end + + currentConversationPartner = nil +end + +function sanitizeMessage(msg) + if string.len(msg) == 0 then + return "..." + else + return msg + end +end + +function selectChoice(choice) + renewKillswitch(currentConversationDialog) + + --First hide the Gui + mainFrame.Visible = false + if choice == lastChoice then + game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone())) + + normalEndDialog() + else + local dialogChoice = choiceMap[choice] + + game.Chat:Chat(game.Players.LocalPlayer.Character, sanitizeMessage(dialogChoice.UserDialog), getChatColor(currentTone())) + wait(1) + currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice) + game.Chat:Chat(currentConversationPartner, sanitizeMessage(dialogChoice.ResponseDialog), getChatColor(currentTone())) + + variableDelay(dialogChoice.ResponseDialog) + presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren()) + end +end + +function newChoice(numberText) + local frame = Instance.new("TextButton") + frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) + frame.AutoButtonColor = false + frame.BorderSizePixel = 0 + frame.Text = "" + frame.MouseEnter:connect(function() highlightColor(frame, currentTone()) end) + frame.MouseLeave:connect(function() resetColor(frame, currentTone()) end) + frame.MouseButton1Click:connect(function() selectChoice(frame) end) + frame.RobloxLocked = true + + local number = Instance.new("TextLabel") + number.Name = "Number" + number.TextColor3 = Color3.new(127/255, 212/255, 255/255) + number.Text = numberText + number.FontSize = Enum.FontSize.Size14 + number.BackgroundTransparency = 1 + number.Position = UDim2.new(0,4,0,2) + number.Size = UDim2.new(0,20,0,24) + number.TextXAlignment = Enum.TextXAlignment.Left + number.TextYAlignment = Enum.TextYAlignment.Top + number.RobloxLocked = true + number.Parent = frame + + local prompt = Instance.new("TextLabel") + prompt.Name = "UserPrompt" + prompt.BackgroundTransparency = 1 + prompt.TextColor3 = Color3.new(1,1,1) + prompt.FontSize = Enum.FontSize.Size14 + prompt.Position = UDim2.new(0,28, 0, 2) + prompt.Size = UDim2.new(1,-32, 1, -4) + prompt.TextXAlignment = Enum.TextXAlignment.Left + prompt.TextYAlignment = Enum.TextYAlignment.Top + prompt.TextWrap = true + prompt.RobloxLocked = true + prompt.Parent = frame + + return frame +end +function initialize(parent) + choices[1] = newChoice("1)") + choices[2] = newChoice("2)") + choices[3] = newChoice("3)") + choices[4] = newChoice("4)") + + lastChoice = newChoice("5)") + lastChoice.UserPrompt.Text = "Goodbye!" + lastChoice.Size = UDim2.new(1,0,0,28) + + mainFrame = Instance.new("Frame") + mainFrame.Name = "UserDialogArea" + mainFrame.Size = UDim2.new(0, 350, 0, 200) + mainFrame.Style = Enum.FrameStyle.ChatBlue + mainFrame.Visible = false + + imageLabel = Instance.new("ImageLabel") + imageLabel.Name = "Tail" + imageLabel.Size = UDim2.new(0,62,0,53) + imageLabel.Position = UDim2.new(1,8,0.25) + imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" + imageLabel.BackgroundTransparency = 1 + imageLabel.RobloxLocked = true + imageLabel.Parent = mainFrame + + for n, obj in pairs(choices) do + obj.RobloxLocked = true + obj.Parent = mainFrame + end + lastChoice.RobloxLocked = true + lastChoice.Parent = mainFrame + + mainFrame.RobloxLocked = true + mainFrame.Parent = parent +end + +function presentDialogChoices(talkingPart, dialogChoices) + if not currentConversationDialog then + return + end + + currentConversationPartner = talkingPart + sortedDialogChoices = {} + for n, obj in pairs(dialogChoices) do + if obj:IsA("DialogChoice") then + table.insert(sortedDialogChoices, obj) + end + end + table.sort(sortedDialogChoices, function(a,b) return a.Name < b.Name end) + + if #sortedDialogChoices == 0 then + normalEndDialog() + return + end + + local pos = 1 + local yPosition = 0 + choiceMap = {} + for n, obj in pairs(choices) do + obj.Visible = false + end + + for n, obj in pairs(sortedDialogChoices) do + if pos <= #choices then + --3 lines is the maximum, set it to that temporarily + choices[pos].Size = UDim2.new(1, 0, 0, 24*3) + choices[pos].UserPrompt.Text = obj.UserDialog + local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y/24)*24 + + choices[pos].Position = UDim2.new(0, 0, 0, yPosition) + choices[pos].Size = UDim2.new(1, 0, 0, height) + choices[pos].Visible = true + + choiceMap[choices[pos]] = obj + + yPosition = yPosition + height + pos = pos + 1 + end + end + + lastChoice.Position = UDim2.new(0,0,0,yPosition) + lastChoice.Number.Text = pos .. ")" + + mainFrame.Size = UDim2.new(0, 350, 0, yPosition+24+32) + mainFrame.Position = UDim2.new(0,20,0.0, -mainFrame.Size.Y.Offset-20) + styleMainFrame(currentTone()) + mainFrame.Visible = true +end + +function doDialog(dialog) + while not Instance.Lock(dialog, player) do + wait() + end + + if dialog.InUse then + Instance.Unlock(dialog) + return + else + dialog.InUse = true + Instance.Unlock(dialog) + end + + currentConversationDialog = dialog + game.Chat:Chat(dialog.Parent, dialog.InitialPrompt, getChatColor(dialog.Tone)) + variableDelay(dialog.InitialPrompt) + + presentDialogChoices(dialog.Parent, dialog:GetChildren()) +end + +function renewKillswitch(dialog) + if currentAbortDialogScript then + currentAbortDialogScript:Remove() + currentAbortDialogScript = nil + end + + currentAbortDialogScript = timeoutScript:Clone() + currentAbortDialogScript.archivable = false + currentAbortDialogScript.Disabled = false + currentAbortDialogScript.Parent = dialog +end + +function checkForLeaveArea() + while currentConversationDialog do + if currentConversationDialog.Parent and (player:DistanceFromCharacter(currentConversationDialog.Parent.Position) >= currentConversationDialog.ConversationDistance) then + wanderDialog() + end + wait(1) + end +end + +function startDialog(dialog) + if dialog.Parent and dialog.Parent:IsA("BasePart") then + if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then + showMessage(tooFarAwayMessage, tooFarAwaySize) + return + end + + for dialog, gui in pairs(dialogMap) do + if dialog and gui then + gui.Enabled = false + end + end + + renewKillswitch(dialog) + + delay(1, checkForLeaveArea) + doDialog(dialog) + end +end + +function removeDialog(dialog) + if dialogMap[dialog] then + dialogMap[dialog]:Remove() + dialogMap[dialog] = nil + end + if dialogConnections[dialog] then + dialogConnections[dialog]:disconnect() + dialogConnections[dialog] = nil + end +end + +function addDialog(dialog) + if dialog.Parent then + if dialog.Parent:IsA("BasePart") then + local chatGui = chatNotificationGui:clone() + chatGui.Enabled = not dialog.InUse + chatGui.Adornee = dialog.Parent + chatGui.RobloxLocked = true + chatGui.Parent = game.CoreGui + chatGui.Image.Button.MouseButton1Click:connect(function() startDialog(dialog) end) + setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) + + dialogMap[dialog] = chatGui + + dialogConnections[dialog] = dialog.Changed:connect(function(prop) + if prop == "Parent" and dialog.Parent then + --This handles the reparenting case, seperate from removal case + removeDialog(dialog) + addDialog(dialog) + elseif prop == "InUse" then + chatGui.Enabled = not currentConversationDialog and not dialog.InUse + if dialog == currentConversationDialog then + timeoutDialog() + end + elseif prop == "Tone" or prop == "Purpose" then + setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) + end + end) + else -- still need to listen to parent changes even if current parent is not a BasePart + dialogConnections[dialog] = dialog.Changed:connect(function(prop) + if prop == "Parent" and dialog.Parent then + --This handles the reparenting case, seperate from removal case + removeDialog(dialog) + addDialog(dialog) + end + end) + end + end +end + +function fetchScripts() + local model = game:GetService("InsertService"):LoadAsset(39226062) + if type(model) == "string" then -- load failed, lets try again + wait(0.1) + model = game:GetService("InsertService"):LoadAsset(39226062) + end + if type(model) == "string" then -- not going to work, lets bail + return + end + + waitForChild(model,"TimeoutScript") + timeoutScript = model.TimeoutScript + waitForChild(model,"ReenableDialogScript") + reenableDialogScript = model.ReenableDialogScript +end + +function onLoad() + waitForProperty(game.Players, "LocalPlayer") + player = game.Players.LocalPlayer + waitForProperty(player, "Character") + + --print("Fetching Scripts") + fetchScripts() + + --print("Creating Guis") + createChatNotificationGui() + + --print("Creating MessageDialog") + createMessageDialog() + messageDialog.RobloxLocked = true + messageDialog.Parent = gui + + --print("Waiting for BottomLeftControl") + waitForChild(gui, "BottomLeftControl") + + --print("Initializing Frame") + local frame = Instance.new("Frame") + frame.Name = "DialogFrame" + frame.Position = UDim2.new(0,0,0,0) + frame.Size = UDim2.new(0,0,0,0) + frame.BackgroundTransparency = 1 + frame.RobloxLocked = true + frame.Parent = gui.BottomLeftControl + initialize(frame) + + --print("Adding Dialogs") + game.CollectionService.ItemAdded:connect(function(obj) if obj:IsA("Dialog") then addDialog(obj) end end) + game.CollectionService.ItemRemoved:connect(function(obj) if obj:IsA("Dialog") then removeDialog(obj) end end) + for i, obj in pairs(game.CollectionService:GetCollection("Dialog")) do + if obj:IsA("Dialog") then + addDialog(obj) + end + end +end + +onLoad() \ No newline at end of file diff --git a/app/files/CoreGui/45284430 b/app/files/CoreGui/45284430 new file mode 100644 index 0000000..913241e --- /dev/null +++ b/app/files/CoreGui/45284430 @@ -0,0 +1,3844 @@ +local t = {} + +local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc) + local eventConnection = nil + + --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away) + local tryConnect = function() + if game:IsAncestorOf(parentInstance) then + --Entering the world, make sure we are connected/synced + if not eventConnection then + eventConnection = instance[event]:connect(signalFunc) + if syncFunc then syncFunc() end + end + else + --Probably leaving the world, so disconnect for now + if eventConnection then + eventConnection:disconnect() + if removeFunc then removeFunc() end + end + end + end + + --Hook it up to ancestryChanged signal + local connection = parentInstance.AncestryChanged:connect(tryConnect) + + --Now connect us if we're already in the world + tryConnect() + + return connection +end + +local function getScreenGuiAncestor(instance) + local localInstance = instance + while localInstance and not localInstance:IsA("ScreenGui") do + localInstance = localInstance.Parent + end + return localInstance +end + +local function CreateButtons(frame, buttons, yPos, ySize) + local buttonNum = 1 + local buttonObjs = {} + for i, obj in ipairs(buttons) do + local button = Instance.new("TextButton") + button.Name = "Button" .. buttonNum + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size18 + button.AutoButtonColor = true + button.Modal = true + if obj["Style"] then + button.Style = obj.Style + else + button.Style = Enum.ButtonStyle.RobloxButton + end + button.Text = obj.Text + button.TextColor3 = Color3.new(1,1,1) + button.MouseButton1Click:connect(obj.Function) + button.Parent = frame + buttonObjs[buttonNum] = button + + buttonNum = buttonNum + 1 + end + local numButtons = buttonNum-1 + + if numButtons == 1 then + frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) + elseif numButtons == 2 then + frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset) + + frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) + frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + elseif numButtons >= 3 then + local spacing = .1 / numButtons + local buttonSize = .9 / numButtons + + buttonNum = 1 + while buttonNum <= numButtons do + buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) + buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) + buttonNum = buttonNum + 1 + end + end +end + +local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps) + + local newStep = steps - 1 --otherwise we really get one more step than we want + local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X )) + local wholeNum, remainder = math.modf(relativePosX * newStep) + if remainder > 0.5 then + wholeNum = wholeNum + 1 + end + relativePosX = wholeNum/newStep + + local result = math.ceil(relativePosX * newStep) + if sliderPosition.Value ~= (result + 1) then --only update if we moved a step + sliderPosition.Value = result + 1 + slider.Position = UDim2.new(relativePosX,-slider.AbsoluteSize.X/2,slider.Position.Y.Scale,slider.Position.Y.Offset) + end + +end + +local function cancelSlide(areaSoak) + areaSoak.Visible = false + if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end +end + +t.CreateStyledMessageDialog = function(title, message, style, buttons) + local frame = Instance.new("Frame") + frame.Size = UDim2.new(0.5, 0, 0, 165) + frame.Position = UDim2.new(0.25, 0, 0.5, -72.5) + frame.Name = "MessageDialog" + frame.Active = true + frame.Style = Enum.FrameStyle.RobloxRound + + local styleImage = Instance.new("ImageLabel") + styleImage.Name = "StyleImage" + styleImage.BackgroundTransparency = 1 + styleImage.Position = UDim2.new(0,5,0,15) + if style == "error" or style == "Error" then + styleImage.Size = UDim2.new(0, 71, 0, 71) + styleImage.Image = "http://www.nexium.fit/asset?id=42565285" + elseif style == "notify" or style == "Notify" then + styleImage.Size = UDim2.new(0, 71, 0, 71) + styleImage.Image = "http://www.nexium.fit/asset?id=42604978" + elseif style == "confirm" or style == "Confirm" then + styleImage.Size = UDim2.new(0, 74, 0, 76) + styleImage.Image = "http://www.nexium.fit/asset?id=42557901" + else + return t.CreateMessageDialog(title,message,buttons) + end + styleImage.Parent = frame + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = title + titleLabel.TextStrokeTransparency = 0 + titleLabel.BackgroundTransparency = 1 + titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + titleLabel.Position = UDim2.new(0, 80, 0, 0) + titleLabel.Size = UDim2.new(1, -80, 0, 40) + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.TextXAlignment = Enum.TextXAlignment.Center + titleLabel.TextYAlignment = Enum.TextYAlignment.Center + titleLabel.Parent = frame + + local messageLabel = Instance.new("TextLabel") + messageLabel.Name = "Message" + messageLabel.Text = message + messageLabel.TextStrokeTransparency = 0 + messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + messageLabel.Position = UDim2.new(0.025, 80, 0, 45) + messageLabel.Size = UDim2.new(0.95, -80, 0, 55) + messageLabel.BackgroundTransparency = 1 + messageLabel.Font = Enum.Font.Arial + messageLabel.FontSize = Enum.FontSize.Size18 + messageLabel.TextWrap = true + messageLabel.TextXAlignment = Enum.TextXAlignment.Left + messageLabel.TextYAlignment = Enum.TextYAlignment.Top + messageLabel.Parent = frame + + CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) ) + + return frame +end + +t.CreateMessageDialog = function(title, message, buttons) + local frame = Instance.new("Frame") + frame.Size = UDim2.new(0.5, 0, 0.5, 0) + frame.Position = UDim2.new(0.25, 0, 0.25, 0) + frame.Name = "MessageDialog" + frame.Active = true + frame.Style = Enum.FrameStyle.RobloxRound + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = title + titleLabel.BackgroundTransparency = 1 + titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + titleLabel.Position = UDim2.new(0, 0, 0, 0) + titleLabel.Size = UDim2.new(1, 0, 0.15, 0) + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.TextXAlignment = Enum.TextXAlignment.Center + titleLabel.TextYAlignment = Enum.TextYAlignment.Center + titleLabel.Parent = frame + + local messageLabel = Instance.new("TextLabel") + messageLabel.Name = "Message" + messageLabel.Text = message + messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0) + messageLabel.Size = UDim2.new(0.95, 0, .55, 0) + messageLabel.BackgroundTransparency = 1 + messageLabel.Font = Enum.Font.Arial + messageLabel.FontSize = Enum.FontSize.Size18 + messageLabel.TextWrap = true + messageLabel.TextXAlignment = Enum.TextXAlignment.Left + messageLabel.TextYAlignment = Enum.TextYAlignment.Top + messageLabel.Parent = frame + + CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0)) + + return frame +end + +t.CreateDropDownMenu = function(items, onSelect, forRoblox) + local width = UDim.new(0, 100) + local height = UDim.new(0, 32) + + local xPos = 0.055 + local frame = Instance.new("Frame") + frame.Name = "DropDownMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(width, height) + + local dropDownMenu = Instance.new("TextButton") + dropDownMenu.Name = "DropDownMenuButton" + dropDownMenu.TextWrap = true + dropDownMenu.TextColor3 = Color3.new(1,1,1) + dropDownMenu.Text = "Choose One" + dropDownMenu.Font = Enum.Font.ArialBold + dropDownMenu.FontSize = Enum.FontSize.Size18 + dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left + dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center + dropDownMenu.BackgroundTransparency = 1 + dropDownMenu.AutoButtonColor = true + dropDownMenu.Style = Enum.ButtonStyle.RobloxButton + dropDownMenu.Size = UDim2.new(1,0,1,0) + dropDownMenu.Parent = frame + dropDownMenu.ZIndex = 2 + + local dropDownIcon = Instance.new("ImageLabel") + dropDownIcon.Name = "Icon" + dropDownIcon.Active = false + dropDownIcon.Image = "http://www.nexium.fit/asset/?id=45732894" + dropDownIcon.BackgroundTransparency = 1 + dropDownIcon.Size = UDim2.new(0,11,0,6) + dropDownIcon.Position = UDim2.new(1,-11,0.5, -2) + dropDownIcon.Parent = dropDownMenu + dropDownIcon.ZIndex = 2 + + local itemCount = #items + local dropDownItemCount = #items + local useScrollButtons = false + if dropDownItemCount > 6 then + useScrollButtons = true + dropDownItemCount = 6 + end + + local droppedDownMenu = Instance.new("TextButton") + droppedDownMenu.Name = "List" + droppedDownMenu.Text = "" + droppedDownMenu.BackgroundTransparency = 1 + --droppedDownMenu.AutoButtonColor = true + droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton + droppedDownMenu.Visible = false + droppedDownMenu.Active = true --Blocks clicks + droppedDownMenu.Position = UDim2.new(0,0,0,0) + droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0) + droppedDownMenu.Parent = frame + droppedDownMenu.ZIndex = 2 + + local choiceButton = Instance.new("TextButton") + choiceButton.Name = "ChoiceButton" + choiceButton.BackgroundTransparency = 1 + choiceButton.BorderSizePixel = 0 + choiceButton.Text = "ReplaceMe" + choiceButton.TextColor3 = Color3.new(1,1,1) + choiceButton.TextXAlignment = Enum.TextXAlignment.Left + choiceButton.TextYAlignment = Enum.TextYAlignment.Center + choiceButton.BackgroundColor3 = Color3.new(1, 1, 1) + choiceButton.Font = Enum.Font.Arial + choiceButton.FontSize = Enum.FontSize.Size18 + if useScrollButtons then + choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0) + else + choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0) + end + choiceButton.TextWrap = true + choiceButton.ZIndex = 2 + + local areaSoak = Instance.new("TextButton") + areaSoak.Name = "AreaSoak" + areaSoak.Text = "" + areaSoak.BackgroundTransparency = 1 + areaSoak.Active = true + areaSoak.Size = UDim2.new(1,0,1,0) + areaSoak.Visible = false + areaSoak.ZIndex = 3 + + local dropDownSelected = false + + local scrollUpButton + local scrollDownButton + local scrollMouseCount = 0 + + local setZIndex = function(baseZIndex) + droppedDownMenu.ZIndex = baseZIndex +1 + if scrollUpButton then + scrollUpButton.ZIndex = baseZIndex + 3 + end + if scrollDownButton then + scrollDownButton.ZIndex = baseZIndex + 3 + end + + local children = droppedDownMenu:GetChildren() + if children then + for i, child in ipairs(children) do + if child.Name == "ChoiceButton" then + child.ZIndex = baseZIndex + 2 + elseif child.Name == "ClickCaptureButton" then + child.ZIndex = baseZIndex + end + end + end + end + + local scrollBarPosition = 1 + local updateScroll = function() + if scrollUpButton then + scrollUpButton.Active = scrollBarPosition > 1 + end + if scrollDownButton then + scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount + end + + local children = droppedDownMenu:GetChildren() + if not children then return end + + local childNum = 1 + for i, obj in ipairs(children) do + if obj.Name == "ChoiceButton" then + if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then + obj.Visible = false + else + obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0) + obj.Visible = true + end + obj.TextColor3 = Color3.new(1,1,1) + obj.BackgroundTransparency = 1 + + childNum = childNum + 1 + end + end + end + local toggleVisibility = function() + dropDownSelected = not dropDownSelected + + areaSoak.Visible = not areaSoak.Visible + dropDownMenu.Visible = not dropDownSelected + droppedDownMenu.Visible = dropDownSelected + if dropDownSelected then + setZIndex(4) + else + setZIndex(2) + end + if useScrollButtons then + updateScroll() + end + end + droppedDownMenu.MouseButton1Click:connect(toggleVisibility) + + local updateSelection = function(text) + local foundItem = false + local children = droppedDownMenu:GetChildren() + local childNum = 1 + if children then + for i, obj in ipairs(children) do + if obj.Name == "ChoiceButton" then + if obj.Text == text then + obj.Font = Enum.Font.ArialBold + foundItem = true + scrollBarPosition = childNum + else + obj.Font = Enum.Font.Arial + end + childNum = childNum + 1 + end + end + end + if not text then + dropDownMenu.Text = "Choose One" + scrollBarPosition = 1 + else + if not foundItem then + error("Invalid Selection Update -- " .. text) + end + + if scrollBarPosition + dropDownItemCount > itemCount + 1 then + scrollBarPosition = itemCount - dropDownItemCount + 1 + end + + dropDownMenu.Text = text + end + end + + local function scrollDown() + if scrollBarPosition + dropDownItemCount <= itemCount then + scrollBarPosition = scrollBarPosition + 1 + updateScroll() + return true + end + return false + end + local function scrollUp() + if scrollBarPosition > 1 then + scrollBarPosition = scrollBarPosition - 1 + updateScroll() + return true + end + return false + end + + if useScrollButtons then + --Make some scroll buttons + scrollUpButton = Instance.new("ImageButton") + scrollUpButton.Name = "ScrollUpButton" + scrollUpButton.BackgroundTransparency = 1 + scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" + scrollUpButton.Size = UDim2.new(0,17,0,17) + scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0) + scrollUpButton.MouseButton1Click:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollUpButton.MouseLeave:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollUpButton.MouseButton1Down:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + + scrollUp() + local val = scrollMouseCount + wait(0.5) + while val == scrollMouseCount do + if scrollUp() == false then + break + end + wait(0.1) + end + end) + + scrollUpButton.Parent = droppedDownMenu + + scrollDownButton = Instance.new("ImageButton") + scrollDownButton.Name = "ScrollDownButton" + scrollDownButton.BackgroundTransparency = 1 + scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" + scrollDownButton.Size = UDim2.new(0,17,0,17) + scrollDownButton.Position = UDim2.new(1,-11,1,-11) + scrollDownButton.Parent = droppedDownMenu + scrollDownButton.MouseButton1Click:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollDownButton.MouseLeave:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollDownButton.MouseButton1Down:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + + scrollDown() + local val = scrollMouseCount + wait(0.5) + while val == scrollMouseCount do + if scrollDown() == false then + break + end + wait(0.1) + end + end) + + local scrollbar = Instance.new("ImageLabel") + scrollbar.Name = "ScrollBar" + scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" + scrollbar.BackgroundTransparency = 1 + scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4) + scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2) + scrollbar.Parent = droppedDownMenu + end + + for i,item in ipairs(items) do + -- needed to maintain local scope for items in event listeners below + local button = choiceButton:clone() + if forRoblox then + button.RobloxLocked = true + end + button.Text = item + button.Parent = droppedDownMenu + button.MouseButton1Click:connect(function() + --Remove Highlight + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundTransparency = 1 + + updateSelection(item) + onSelect(item) + + toggleVisibility() + end) + button.MouseEnter:connect(function() + --Add Highlight + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundTransparency = 0 + end) + + button.MouseLeave:connect(function() + --Remove Highlight + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundTransparency = 1 + end) + end + + --This does the initial layout of the buttons + updateScroll() + + frame.AncestryChanged:connect(function(child,parent) + if parent == nil then + areaSoak.Parent = nil + else + areaSoak.Parent = getScreenGuiAncestor(frame) + end + end) + + dropDownMenu.MouseButton1Click:connect(toggleVisibility) + areaSoak.MouseButton1Click:connect(toggleVisibility) + return frame, updateSelection +end + +t.CreatePropertyDropDownMenu = function(instance, property, enum) + + local items = enum:GetEnumItems() + local names = {} + local nameToItem = {} + for i,obj in ipairs(items) do + names[i] = obj.Name + nameToItem[obj.Name] = obj + end + + local frame + local updateSelection + frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end) + + ScopedConnect(frame, instance, "Changed", + function(prop) + if prop == property then + updateSelection(instance[property].Name) + end + end, + function() + updateSelection(instance[property].Name) + end) + + return frame +end + +t.GetFontHeight = function(font, fontSize) + if font == nil or fontSize == nil then + error("Font and FontSize must be non-nil") + end + + if font == Enum.Font.Legacy then + if fontSize == Enum.FontSize.Size8 then + return 12 + elseif fontSize == Enum.FontSize.Size9 then + return 14 + elseif fontSize == Enum.FontSize.Size10 then + return 15 + elseif fontSize == Enum.FontSize.Size11 then + return 17 + elseif fontSize == Enum.FontSize.Size12 then + return 18 + elseif fontSize == Enum.FontSize.Size14 then + return 21 + elseif fontSize == Enum.FontSize.Size18 then + return 27 + elseif fontSize == Enum.FontSize.Size24 then + return 36 + elseif fontSize == Enum.FontSize.Size36 then + return 54 + elseif fontSize == Enum.FontSize.Size48 then + return 72 + else + error("Unknown FontSize") + end + elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then + if fontSize == Enum.FontSize.Size8 then + return 8 + elseif fontSize == Enum.FontSize.Size9 then + return 9 + elseif fontSize == Enum.FontSize.Size10 then + return 10 + elseif fontSize == Enum.FontSize.Size11 then + return 11 + elseif fontSize == Enum.FontSize.Size12 then + return 12 + elseif fontSize == Enum.FontSize.Size14 then + return 14 + elseif fontSize == Enum.FontSize.Size18 then + return 18 + elseif fontSize == Enum.FontSize.Size24 then + return 24 + elseif fontSize == Enum.FontSize.Size36 then + return 36 + elseif fontSize == Enum.FontSize.Size48 then + return 48 + else + error("Unknown FontSize") + end + else + error("Unknown Font " .. font) + end +end + +local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable) + local totalPixels = frame.AbsoluteSize.Y + local pixelsRemaining = frame.AbsoluteSize.Y + for i, child in ipairs(guiObjects) do + if child:IsA("TextLabel") or child:IsA("TextButton") then + local isLabel = child:IsA("TextLabel") + if isLabel then + pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] + else + pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] + end + child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining) + + if child.TextFits and child.TextBounds.Y < pixelsRemaining then + child.Visible = true + if isLabel then + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"]) + else + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"]) + end + + while not child.TextFits do + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1) + end + pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y + + if isLabel then + pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] + else + pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] + end + else + child.Visible = false + pixelsRemaining = -1 + end + + else + --GuiObject + child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) + pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y + child.Visible = (pixelsRemaining >= 0) + end + end +end + +t.LayoutGuiObjects = function(frame, guiObjects, settingsTable) + if not frame:IsA("GuiObject") then + error("Frame must be a GuiObject") + end + for i, child in ipairs(guiObjects) do + if not child:IsA("GuiObject") then + error("All elements that are layed out must be of type GuiObject") + end + end + + if not settingsTable then + settingsTable = {} + end + + if not settingsTable["TextLabelSizePadY"] then + settingsTable["TextLabelSizePadY"] = 0 + end + if not settingsTable["TextLabelPositionPadY"] then + settingsTable["TextLabelPositionPadY"] = 0 + end + if not settingsTable["TextButtonSizePadY"] then + settingsTable["TextButtonSizePadY"] = 12 + end + if not settingsTable["TextButtonPositionPadY"] then + settingsTable["TextButtonPositionPadY"] = 2 + end + + --Wrapper frame takes care of styled objects + local wrapperFrame = Instance.new("Frame") + wrapperFrame.Name = "WrapperFrame" + wrapperFrame.BackgroundTransparency = 1 + wrapperFrame.Size = UDim2.new(1,0,1,0) + wrapperFrame.Parent = frame + + for i, child in ipairs(guiObjects) do + child.Parent = wrapperFrame + end + + local recalculate = function() + wait() + layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) + end + + frame.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + --Wait a heartbeat for it to sync in + recalculate(nil) + end + end) + frame.AncestryChanged:connect(recalculate) + + layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) +end + + +t.CreateSlider = function(steps,width,position) + local sliderGui = Instance.new("Frame") + sliderGui.Size = UDim2.new(1,0,1,0) + sliderGui.BackgroundTransparency = 1 + sliderGui.Name = "SliderGui" + + local sliderSteps = Instance.new("IntValue") + sliderSteps.Name = "SliderSteps" + sliderSteps.Value = steps + sliderSteps.Parent = sliderGui + + local areaSoak = Instance.new("TextButton") + areaSoak.Name = "AreaSoak" + areaSoak.Text = "" + areaSoak.BackgroundTransparency = 1 + areaSoak.Active = false + areaSoak.Size = UDim2.new(1,0,1,0) + areaSoak.Visible = false + areaSoak.ZIndex = 4 + + sliderGui.AncestryChanged:connect(function(child,parent) + if parent == nil then + areaSoak.Parent = nil + else + areaSoak.Parent = getScreenGuiAncestor(sliderGui) + end + end) + + local sliderPosition = Instance.new("IntValue") + sliderPosition.Name = "SliderPosition" + sliderPosition.Value = 0 + sliderPosition.Parent = sliderGui + + local id = math.random(1,100) + + local bar = Instance.new("TextButton") + bar.Text = "" + bar.AutoButtonColor = false + bar.Name = "Bar" + bar.BackgroundColor3 = Color3.new(0,0,0) + if type(width) == "number" then + bar.Size = UDim2.new(0,width,0,5) + else + bar.Size = UDim2.new(0,200,0,5) + end + bar.BorderColor3 = Color3.new(95/255,95/255,95/255) + bar.ZIndex = 2 + bar.Parent = sliderGui + + if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then + bar.Position = position + end + + local slider = Instance.new("ImageButton") + slider.Name = "Slider" + slider.BackgroundTransparency = 1 + slider.Image = "rbxasset://textures/ui/Slider.png" + slider.Position = UDim2.new(0,0,0.5,-10) + slider.Size = UDim2.new(0,20,0,20) + slider.ZIndex = 3 + slider.Parent = bar + + local areaSoakMouseMoveCon = nil + + areaSoak.MouseLeave:connect(function() + if areaSoak.Visible then + cancelSlide(areaSoak) + end + end) + areaSoak.MouseButton1Up:connect(function() + if areaSoak.Visible then + cancelSlide(areaSoak) + end + end) + + slider.MouseButton1Down:connect(function() + areaSoak.Visible = true + if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end + areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y) + setSliderPos(x,slider,sliderPosition,bar,steps) + end) + end) + + slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end) + + sliderPosition.Changed:connect(function(prop) + sliderPosition.Value = math.min(steps, math.max(1,sliderPosition.Value)) + local relativePosX = (sliderPosition.Value - 1) / (steps - 1) + slider.Position = UDim2.new(relativePosX,-slider.AbsoluteSize.X/2,slider.Position.Y.Scale,slider.Position.Y.Offset) + end) + + bar.MouseButton1Down:connect(function(x,y) + setSliderPos(x,slider,sliderPosition,bar,steps) + end) + + return sliderGui, sliderPosition, sliderSteps + +end + +t.CreateTrueScrollingFrame = function() + local lowY = nil + local highY = nil + + local dragCon = nil + local upCon = nil + + local internalChange = false + + local descendantsChangeConMap = {} + + local scrollingFrame = Instance.new("Frame") + scrollingFrame.Name = "ScrollingFrame" + scrollingFrame.Active = true + scrollingFrame.Size = UDim2.new(1,0,1,0) + scrollingFrame.ClipsDescendants = true + + local controlFrame = Instance.new("Frame") + controlFrame.Name = "ControlFrame" + controlFrame.BackgroundTransparency = 1 + controlFrame.Size = UDim2.new(0,18,1,0) + controlFrame.Position = UDim2.new(1,-20,0,0) + controlFrame.Parent = scrollingFrame + + local scrollBottom = Instance.new("BoolValue") + scrollBottom.Value = false + scrollBottom.Name = "ScrollBottom" + scrollBottom.Parent = controlFrame + + local scrollUp = Instance.new("BoolValue") + scrollUp.Value = false + scrollUp.Name = "scrollUp" + scrollUp.Parent = controlFrame + + local scrollUpButton = Instance.new("TextButton") + scrollUpButton.Name = "ScrollUpButton" + scrollUpButton.Text = "" + scrollUpButton.AutoButtonColor = false + scrollUpButton.BackgroundColor3 = Color3.new(0,0,0) + scrollUpButton.BorderColor3 = Color3.new(1,1,1) + scrollUpButton.BackgroundTransparency = 0.5 + scrollUpButton.Size = UDim2.new(0,18,0,18) + scrollUpButton.ZIndex = 2 + scrollUpButton.Parent = controlFrame + for i = 1, 6 do + local triFrame = Instance.new("Frame") + triFrame.BorderColor3 = Color3.new(1,1,1) + triFrame.Name = "tri" .. tostring(i) + triFrame.ZIndex = 3 + triFrame.BackgroundTransparency = 0.5 + triFrame.Size = UDim2.new(0,12 - ((i -1) * 2),0,0) + triFrame.Position = UDim2.new(0,3 + (i -1),0.5,2 - (i -1)) + triFrame.Parent = scrollUpButton + end + scrollUpButton.MouseEnter:connect(function() + scrollUpButton.BackgroundTransparency = 0.1 + local upChildren = scrollUpButton:GetChildren() + for i = 1, #upChildren do + upChildren[i].BackgroundTransparency = 0.1 + end + end) + scrollUpButton.MouseLeave:connect(function() + scrollUpButton.BackgroundTransparency = 0.5 + local upChildren = scrollUpButton:GetChildren() + for i = 1, #upChildren do + upChildren[i].BackgroundTransparency = 0.5 + end + end) + + local scrollDownButton = scrollUpButton:clone() + scrollDownButton.Name = "ScrollDownButton" + scrollDownButton.Position = UDim2.new(0,0,1,-18) + local downChildren = scrollDownButton:GetChildren() + for i = 1, #downChildren do + downChildren[i].Position = UDim2.new(0,3 + (i -1),0.5,-2 + (i - 1)) + end + scrollDownButton.MouseEnter:connect(function() + scrollDownButton.BackgroundTransparency = 0.1 + local downChildren = scrollDownButton:GetChildren() + for i = 1, #downChildren do + downChildren[i].BackgroundTransparency = 0.1 + end + end) + scrollDownButton.MouseLeave:connect(function() + scrollDownButton.BackgroundTransparency = 0.5 + local downChildren = scrollDownButton:GetChildren() + for i = 1, #downChildren do + downChildren[i].BackgroundTransparency = 0.5 + end + end) + scrollDownButton.Parent = controlFrame + + local scrollTrack = Instance.new("Frame") + scrollTrack.Name = "ScrollTrack" + scrollTrack.BackgroundTransparency = 1 + scrollTrack.Size = UDim2.new(0,18,1,-38) + scrollTrack.Position = UDim2.new(0,0,0,19) + scrollTrack.Parent = controlFrame + + local scrollbar = Instance.new("TextButton") + scrollbar.BackgroundColor3 = Color3.new(0,0,0) + scrollbar.BorderColor3 = Color3.new(1,1,1) + scrollbar.BackgroundTransparency = 0.5 + scrollbar.AutoButtonColor = false + scrollbar.Text = "" + scrollbar.Active = true + scrollbar.Name = "ScrollBar" + scrollbar.ZIndex = 2 + scrollbar.BackgroundTransparency = 0.5 + scrollbar.Size = UDim2.new(0, 18, 0.1, 0) + scrollbar.Position = UDim2.new(0,0,0,0) + scrollbar.Parent = scrollTrack + + local scrollNub = Instance.new("Frame") + scrollNub.Name = "ScrollNub" + scrollNub.BorderColor3 = Color3.new(1,1,1) + scrollNub.Size = UDim2.new(0,10,0,0) + scrollNub.Position = UDim2.new(0.5,-5,0.5,0) + scrollNub.ZIndex = 2 + scrollNub.BackgroundTransparency = 0.5 + scrollNub.Parent = scrollbar + + local newNub = scrollNub:clone() + newNub.Position = UDim2.new(0.5,-5,0.5,-2) + newNub.Parent = scrollbar + + local lastNub = scrollNub:clone() + lastNub.Position = UDim2.new(0.5,-5,0.5,2) + lastNub.Parent = scrollbar + + scrollbar.MouseEnter:connect(function() + scrollbar.BackgroundTransparency = 0.1 + scrollNub.BackgroundTransparency = 0.1 + newNub.BackgroundTransparency = 0.1 + lastNub.BackgroundTransparency = 0.1 + end) + scrollbar.MouseLeave:connect(function() + scrollbar.BackgroundTransparency = 0.5 + scrollNub.BackgroundTransparency = 0.5 + newNub.BackgroundTransparency = 0.5 + lastNub.BackgroundTransparency = 0.5 + end) + + local mouseDrag = Instance.new("ImageButton") + mouseDrag.Active = false + mouseDrag.Size = UDim2.new(1.5, 0, 1.5, 0) + mouseDrag.AutoButtonColor = false + mouseDrag.BackgroundTransparency = 1 + mouseDrag.Name = "mouseDrag" + mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0) + mouseDrag.ZIndex = 10 + + local function positionScrollBar(x,y,offset) + local oldPos = scrollbar.Position + + if y < scrollTrack.AbsolutePosition.y then + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,0,0) + return (oldPos ~= scrollbar.Position) + end + + local relativeSize = scrollbar.AbsoluteSize.Y/scrollTrack.AbsoluteSize.Y + + if y > (scrollTrack.AbsolutePosition.y + scrollTrack.AbsoluteSize.y) then + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,1 - relativeSize,0) + return (oldPos ~= scrollbar.Position) + end + local newScaleYPos = (y - scrollTrack.AbsolutePosition.y - offset)/scrollTrack.AbsoluteSize.y + if newScaleYPos + relativeSize > 1 then + newScaleYPos = 1 - relativeSize + scrollBottom.Value = true + scrollUp.Value = false + elseif newScaleYPos <= 0 then + newScaleYPos = 0 + scrollUp.Value = true + scrollBottom.Value = false + else + scrollUp.Value = false + scrollBottom.Value = false + end + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,newScaleYPos,0) + + return (oldPos ~= scrollbar.Position) + end + + local function drillDownSetHighLow(instance) + if not instance or not instance:IsA("GuiObject") then return end + if instance == controlFrame then return end + if instance:IsDescendantOf(controlFrame) then return end + if not instance.Visible then return end + + if lowY and lowY > instance.AbsolutePosition.Y then + lowY = instance.AbsolutePosition.Y + elseif not lowY then + lowY = instance.AbsolutePosition.Y + end + if highY and highY < (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + elseif not highY then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + end + local children = instance:GetChildren() + for i = 1, #children do + drillDownSetHighLow(children[i]) + end + end + + local function resetHighLow() + local firstChildren = scrollingFrame:GetChildren() + + for i = 1, #firstChildren do + drillDownSetHighLow(firstChildren[i]) + end + end + + local function recalculate() + internalChange = true + + local percentFrame = 0 + if scrollbar.Position.Y.Scale > 0 then + if scrollbar.Visible then + percentFrame = scrollbar.Position.Y.Scale/((scrollTrack.AbsoluteSize.Y - scrollbar.AbsoluteSize.Y)/scrollTrack.AbsoluteSize.Y) + else + percentFrame = 0 + end + end + if percentFrame > 0.99 then percentFrame = 1 end + + local hiddenYAmount = (scrollingFrame.AbsoluteSize.Y - (highY - lowY)) * percentFrame + + local guiChildren = scrollingFrame:GetChildren() + for i = 1, #guiChildren do + if guiChildren[i] ~= controlFrame then + guiChildren[i].Position = UDim2.new(guiChildren[i].Position.X.Scale,guiChildren[i].Position.X.Offset, + 0, math.ceil(guiChildren[i].AbsolutePosition.Y) - math.ceil(lowY) + hiddenYAmount) + end + end + + lowY = nil + highY = nil + resetHighLow() + internalChange = false + end + + local function setSliderSizeAndPosition() + if not highY or not lowY then return end + + local totalYSpan = math.abs(highY - lowY) + if totalYSpan == 0 then + scrollbar.Visible = false + scrollDownButton.Visible = false + scrollUpButton.Visible = false + + if dragCon then dragCon:disconnect() dragCon = nil end + if upCon then upCon:disconnect() upCon = nil end + return + end + + local percentShown = scrollingFrame.AbsoluteSize.Y/totalYSpan + if percentShown >= 1 then + scrollbar.Visible = false + scrollDownButton.Visible = false + scrollUpButton.Visible = false + recalculate() + else + scrollbar.Visible = true + scrollDownButton.Visible = true + scrollUpButton.Visible = true + + scrollbar.Size = UDim2.new(scrollbar.Size.X.Scale,scrollbar.Size.X.Offset,percentShown,0) + end + + local percentPosition = (scrollingFrame.AbsolutePosition.Y - lowY)/totalYSpan + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,percentPosition,-scrollbar.AbsoluteSize.X/2) + + if scrollbar.AbsolutePosition.y < scrollTrack.AbsolutePosition.y then + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,0,0) + end + + if (scrollbar.AbsolutePosition.y + scrollbar.AbsoluteSize.Y) > (scrollTrack.AbsolutePosition.y + scrollTrack.AbsoluteSize.y) then + local relativeSize = scrollbar.AbsoluteSize.Y/scrollTrack.AbsoluteSize.Y + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,1 - relativeSize,0) + end + end + + local buttonScrollAmountPixels = 7 + local reentrancyGuardScrollUp = false + local function doScrollUp() + if reentrancyGuardScrollUp then return end + + reentrancyGuardScrollUp = true + if positionScrollBar(0,scrollbar.AbsolutePosition.Y - buttonScrollAmountPixels,0) then + recalculate() + end + reentrancyGuardScrollUp = false + end + + local reentrancyGuardScrollDown = false + local function doScrollDown() + if reentrancyGuardScrollDown then return end + + reentrancyGuardScrollDown = true + if positionScrollBar(0,scrollbar.AbsolutePosition.Y + buttonScrollAmountPixels,0) then + recalculate() + end + reentrancyGuardScrollDown = false + end + + local function scrollUp(mouseYPos) + if scrollUpButton.Active then + scrollStamp = tick() + local current = scrollStamp + local upCon + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + upCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollUp() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollUp() + if mouseYPos and mouseYPos > scrollbar.AbsolutePosition.y then + break + end + if not scrollUpButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + local function scrollDown(mouseYPos) + if scrollDownButton.Active then + scrollStamp = tick() + local current = scrollStamp + local downCon + downCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + downCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollDown() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollDown() + if mouseYPos and mouseYPos < (scrollbar.AbsolutePosition.y + scrollbar.AbsoluteSize.x) then + break + end + if not scrollDownButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + scrollbar.MouseButton1Down:connect(function(x,y) + if scrollbar.Active then + scrollStamp = tick() + local mouseOffset = y - scrollbar.AbsolutePosition.y + if dragCon then dragCon:disconnect() dragCon = nil end + if upCon then upCon:disconnect() upCon = nil end + local prevY = y + local reentrancyGuardMouseScroll = false + dragCon = mouseDrag.MouseMoved:connect(function(x,y) + if reentrancyGuardMouseScroll then return end + + reentrancyGuardMouseScroll = true + if positionScrollBar(x,y,mouseOffset) then + recalculate() + end + reentrancyGuardMouseScroll = false + + end) + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + dragCon:disconnect(); dragCon = nil + upCon:disconnect(); drag = nil + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + end + end) + + local scrollMouseCount = 0 + + scrollUpButton.MouseButton1Down:connect(function() + scrollUp() + end) + scrollUpButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + + scrollDownButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + scrollDownButton.MouseButton1Down:connect(function() + scrollDown() + end) + + scrollbar.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + + local function heightCheck(instance) + if highY and (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) > highY then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + elseif not highY then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + end + setSliderSizeAndPosition() + end + + local function highLowRecheck() + local oldLowY = lowY + local oldHighY = highY + lowY = nil + highY = nil + resetHighLow() + + if (lowY ~= oldLowY) or (highY ~= oldHighY) then + setSliderSizeAndPosition() + end + end + + local function descendantChanged(this, prop) + if internalChange then return end + if not this.Visible then return end + + if prop == "Size" or prop == "Position" then + wait() + highLowRecheck() + end + end + + scrollingFrame.DescendantAdded:connect(function(instance) + if not instance:IsA("GuiObject") then return end + + if instance.Visible then + wait() -- wait a heartbeat for sizes to reconfig + highLowRecheck() + end + + descendantsChangeConMap[instance] = instance.Changed:connect(function(prop) descendantChanged(instance, prop) end) + end) + + scrollingFrame.DescendantRemoving:connect(function(instance) + if not instance:IsA("GuiObject") then return end + if descendantsChangeConMap[instance] then + descendantsChangeConMap[instance]:disconnect() + descendantsChangeConMap[instance] = nil + end + wait() -- wait a heartbeat for sizes to reconfig + highLowRecheck() + end) + + scrollingFrame.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + if not highY or not lowY then return end + + highLowRecheck() + setSliderSizeAndPosition() + end + end) + + return scrollingFrame, controlFrame +end + +t.CreateScrollingFrame = function(orderList,scrollStyle) + local frame = Instance.new("Frame") + frame.Name = "ScrollingFrame" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + + local scrollUpButton = Instance.new("ImageButton") + scrollUpButton.Name = "ScrollUpButton" + scrollUpButton.BackgroundTransparency = 1 + scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" + scrollUpButton.Size = UDim2.new(0,17,0,17) + + + local scrollDownButton = Instance.new("ImageButton") + scrollDownButton.Name = "ScrollDownButton" + scrollDownButton.BackgroundTransparency = 1 + scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" + scrollDownButton.Size = UDim2.new(0,17,0,17) + + local scrollbar = Instance.new("ImageButton") + scrollbar.Name = "ScrollBar" + scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" + scrollbar.BackgroundTransparency = 1 + scrollbar.Size = UDim2.new(0, 18, 0, 150) + + local scrollStamp = 0 + + local scrollDrag = Instance.new("ImageButton") + scrollDrag.Image = "http://www.nexium.fit/asset/?id=61367186" + scrollDrag.Size = UDim2.new(1, 0, 0, 16) + scrollDrag.BackgroundTransparency = 1 + scrollDrag.Name = "ScrollDrag" + scrollDrag.Active = true + scrollDrag.Parent = scrollbar + + local mouseDrag = Instance.new("ImageButton") + mouseDrag.Active = false + mouseDrag.Size = UDim2.new(1.5, 0, 1.5, 0) + mouseDrag.AutoButtonColor = false + mouseDrag.BackgroundTransparency = 1 + mouseDrag.Name = "mouseDrag" + mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0) + mouseDrag.ZIndex = 10 + + local style = "simple" + if scrollStyle and tostring(scrollStyle) then + style = scrollStyle + end + + local scrollPosition = 1 + local rowSize = 0 + local howManyDisplayed = 0 + + local layoutGridScrollBar = function() + howManyDisplayed = 0 + local guiObjects = {} + if orderList then + for i, child in ipairs(orderList) do + if child.Parent == frame then + table.insert(guiObjects, child) + end + end + else + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + table.insert(guiObjects, child) + end + end + end + end + if #guiObjects == 0 then + scrollUpButton.Active = false + scrollDownButton.Active = false + scrollDrag.Active = false + scrollPosition = 1 + return + end + + if scrollPosition > #guiObjects then + scrollPosition = #guiObjects + end + + if scrollPosition < 1 then scrollPosition = 1 end + + local totalPixelsY = frame.AbsoluteSize.Y + local pixelsRemainingY = frame.AbsoluteSize.Y + + local totalPixelsX = frame.AbsoluteSize.X + + local xCounter = 0 + local rowSizeCounter = 0 + local setRowSize = true + + local pixelsBelowScrollbar = 0 + local pos = #guiObjects + + local currentRowY = 0 + + pos = scrollPosition + --count up from current scroll position to fill out grid + while pos <= #guiObjects and pixelsBelowScrollbar < totalPixelsY do + xCounter = xCounter + guiObjects[pos].AbsoluteSize.X + --previous pos was the end of a row + if xCounter >= totalPixelsX then + pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY + currentRowY = 0 + xCounter = guiObjects[pos].AbsoluteSize.X + end + if guiObjects[pos].AbsoluteSize.Y > currentRowY then + currentRowY = guiObjects[pos].AbsoluteSize.Y + end + pos = pos + 1 + end + --Count wherever current row left off + pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY + currentRowY = 0 + + pos = scrollPosition - 1 + xCounter = 0 + + --objects with varying X,Y dimensions can rarely cause minor errors + --rechecking every new scrollPosition is necessary to avoid 100% of errors + + --count backwards from current scrollPosition to see if we can add more rows + while pixelsBelowScrollbar + currentRowY < totalPixelsY and pos >= 1 do + xCounter = xCounter + guiObjects[pos].AbsoluteSize.X + rowSizeCounter = rowSizeCounter + 1 + if xCounter >= totalPixelsX then + rowSize = rowSizeCounter - 1 + rowSizeCounter = 0 + xCounter = guiObjects[pos].AbsoluteSize.X + if pixelsBelowScrollbar + currentRowY <= totalPixelsY then + --It fits, so back up our scroll position + pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY + if scrollPosition <= rowSize then + scrollPosition = 1 + break + else + scrollPosition = scrollPosition - rowSize + end + currentRowY = 0 + else + break + end + end + + if guiObjects[pos].AbsoluteSize.Y > currentRowY then + currentRowY = guiObjects[pos].AbsoluteSize.Y + end + + pos = pos - 1 + end + + --Do check last time if pos = 0 + if (pos == 0) and (pixelsBelowScrollbar + currentRowY <= totalPixelsY) then + scrollPosition = 1 + end + + xCounter = 0 + --pos = scrollPosition + rowSizeCounter = 0 + setRowSize = true + local lastChildSize = 0 + + local xOffset,yOffset = 0 + if guiObjects[1] then + yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2) + xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2) + end + + for i, child in ipairs(guiObjects) do + if i < scrollPosition then + --print("Hiding " .. child.Name) + child.Visible = false + else + if pixelsRemainingY < 0 then + --print("Out of Space " .. child.Name) + child.Visible = false + else + --print("Laying out " .. child.Name) + --GuiObject + if setRowSize then rowSizeCounter = rowSizeCounter + 1 end + if xCounter + child.AbsoluteSize.X >= totalPixelsX then + if setRowSize then + rowSize = rowSizeCounter - 1 + setRowSize = false + end + xCounter = 0 + pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y + end + child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset) + xCounter = xCounter + child.AbsoluteSize.X + child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0) + if child.Visible then + howManyDisplayed = howManyDisplayed + 1 + end + lastChildSize = child.AbsoluteSize + end + end + end + + scrollUpButton.Active = (scrollPosition > 1) + if lastChildSize == 0 then + scrollDownButton.Active = false + else + scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0) + end + scrollDrag.Active = #guiObjects > howManyDisplayed + scrollDrag.Visible = scrollDrag.Active + end + + + + local layoutSimpleScrollBar = function() + local guiObjects = {} + howManyDisplayed = 0 + + if orderList then + for i, child in ipairs(orderList) do + if child.Parent == frame then + table.insert(guiObjects, child) + end + end + else + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + table.insert(guiObjects, child) + end + end + end + end + if #guiObjects == 0 then + scrollUpButton.Active = false + scrollDownButton.Active = false + scrollDrag.Active = false + scrollPosition = 1 + return + end + + if scrollPosition > #guiObjects then + scrollPosition = #guiObjects + end + + local totalPixels = frame.AbsoluteSize.Y + local pixelsRemaining = frame.AbsoluteSize.Y + + local pixelsBelowScrollbar = 0 + local pos = #guiObjects + while pixelsBelowScrollbar < totalPixels and pos >= 1 do + if pos >= scrollPosition then + pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y + else + if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then + --It fits, so back up our scroll position + pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y + if scrollPosition <= 1 then + scrollPosition = 1 + break + else + --local ("Backing up ScrollPosition from -- " ..scrollPosition) + scrollPosition = scrollPosition - 1 + end + else + break + end + end + pos = pos - 1 + end + + pos = scrollPosition + for i, child in ipairs(guiObjects) do + if i < scrollPosition then + --print("Hiding " .. child.Name) + child.Visible = false + else + if pixelsRemaining < 0 then + --print("Out of Space " .. child.Name) + child.Visible = false + else + --print("Laying out " .. child.Name) + --GuiObject + child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) + pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y + if (pixelsRemaining >= 0) then + child.Visible = true + howManyDisplayed = howManyDisplayed + 1 + else + child.Visible = false + end + end + end + end + scrollUpButton.Active = (scrollPosition > 1) + scrollDownButton.Active = (pixelsRemaining < 0) + scrollDrag.Active = #guiObjects > howManyDisplayed + scrollDrag.Visible = scrollDrag.Active + end + + + local moveDragger = function() + local guiObjects = 0 + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + guiObjects = guiObjects + 1 + end + end + end + + if not scrollDrag.Parent then return end + + local dragSizeY = scrollDrag.Parent.AbsoluteSize.y * (1/(guiObjects - howManyDisplayed + 1)) + if dragSizeY < 16 then dragSizeY = 16 end + scrollDrag.Size = UDim2.new(scrollDrag.Size.X.Scale,scrollDrag.Size.X.Offset,scrollDrag.Size.Y.Scale,dragSizeY) + + local relativeYPos = (scrollPosition - 1)/(guiObjects - (howManyDisplayed)) + if relativeYPos > 1 then relativeYPos = 1 + elseif relativeYPos < 0 then relativeYPos = 0 end + local absYPos = 0 + + if relativeYPos ~= 0 then + absYPos = (relativeYPos * scrollbar.AbsoluteSize.y) - (relativeYPos * scrollDrag.AbsoluteSize.y) + end + + scrollDrag.Position = UDim2.new(scrollDrag.Position.X.Scale,scrollDrag.Position.X.Offset,scrollDrag.Position.Y.Scale,absYPos) + end + + local reentrancyGuard = false + local recalculate = function() + if reentrancyGuard then + return + end + reentrancyGuard = true + wait() + local success, err = nil + if style == "grid" then + success, err = pcall(function() layoutGridScrollBar() end) + elseif style == "simple" then + success, err = pcall(function() layoutSimpleScrollBar() end) + end + if not success then print(err) end + moveDragger() + reentrancyGuard = false + end + + local doScrollUp = function() + scrollPosition = (scrollPosition) - rowSize + if scrollPosition < 1 then scrollPosition = 1 end + recalculate(nil) + end + + local doScrollDown = function() + scrollPosition = (scrollPosition) + rowSize + recalculate(nil) + end + + local scrollUp = function(mouseYPos) + if scrollUpButton.Active then + scrollStamp = tick() + local current = scrollStamp + local upCon + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + upCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollUp() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollUp() + if mouseYPos and mouseYPos > scrollDrag.AbsolutePosition.y then + break + end + if not scrollUpButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + local scrollDown = function(mouseYPos) + if scrollDownButton.Active then + scrollStamp = tick() + local current = scrollStamp + local downCon + downCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + downCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollDown() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollDown() + if mouseYPos and mouseYPos < (scrollDrag.AbsolutePosition.y + scrollDrag.AbsoluteSize.x) then + break + end + if not scrollDownButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + local y = 0 + scrollDrag.MouseButton1Down:connect(function(x,y) + if scrollDrag.Active then + scrollStamp = tick() + local mouseOffset = y - scrollDrag.AbsolutePosition.y + local dragCon + local upCon + dragCon = mouseDrag.MouseMoved:connect(function(x,y) + local barAbsPos = scrollbar.AbsolutePosition.y + local barAbsSize = scrollbar.AbsoluteSize.y + + local dragAbsSize = scrollDrag.AbsoluteSize.y + local barAbsOne = barAbsPos + barAbsSize - dragAbsSize + y = y - mouseOffset + y = y < barAbsPos and barAbsPos or y > barAbsOne and barAbsOne or y + y = y - barAbsPos + + local guiObjects = 0 + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + guiObjects = guiObjects + 1 + end + end + end + + local doublePercent = y/(barAbsSize-dragAbsSize) + local rowDiff = rowSize + local totalScrollCount = guiObjects - (howManyDisplayed - 1) + local newScrollPosition = math.floor((doublePercent * totalScrollCount) + 0.5) + rowDiff + if newScrollPosition < scrollPosition then + rowDiff = -rowDiff + end + + if newScrollPosition < 1 then + newScrollPosition = 1 + end + + scrollPosition = newScrollPosition + recalculate(nil) + end) + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + dragCon:disconnect(); dragCon = nil + upCon:disconnect(); drag = nil + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + end + end) + + local scrollMouseCount = 0 + + scrollUpButton.MouseButton1Down:connect( + function() + scrollUp() + end) + scrollUpButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + + + scrollDownButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + scrollDownButton.MouseButton1Down:connect( + function() + scrollDown() + end) + + scrollbar.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + scrollbar.MouseButton1Down:connect( + function(x,y) + if y > (scrollDrag.AbsoluteSize.y + scrollDrag.AbsolutePosition.y) then + scrollDown(y) + elseif y < (scrollDrag.AbsolutePosition.y) then + scrollUp(y) + end + end) + + + frame.ChildAdded:connect(function() + recalculate(nil) + end) + + frame.ChildRemoved:connect(function() + recalculate(nil) + end) + + frame.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + --Wait a heartbeat for it to sync in + recalculate(nil) + end + end) + frame.AncestryChanged:connect(function() recalculate(nil) end) + + return frame, scrollUpButton, scrollDownButton, recalculate, scrollbar +end +local function binaryGrow(min, max, fits) + if min > max then + return min + end + local biggestLegal = min + + while min <= max do + local mid = min + math.floor((max - min) / 2) + if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then + biggestLegal = mid + + --Try growing + min = mid + 1 + else + --Doesn't fit, shrink + max = mid - 1 + end + end + return biggestLegal +end + + +local function binaryShrink(min, max, fits) + if min > max then + return min + end + local smallestLegal = max + + while min <= max do + local mid = min + math.floor((max - min) / 2) + if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then + smallestLegal = mid + + --It fits, shrink + max = mid - 1 + else + --Doesn't fit, grow + min = mid + 1 + end + end + return smallestLegal +end + + +local function getGuiOwner(instance) + while instance ~= nil do + if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then + return instance + end + instance = instance.Parent + end + return nil +end + +t.AutoTruncateTextObject = function(textLabel) + local text = textLabel.Text + + local fullLabel = textLabel:Clone() + fullLabel.Name = "Full" .. textLabel.Name + fullLabel.BorderSizePixel = 0 + fullLabel.BackgroundTransparency = 0 + fullLabel.Text = text + fullLabel.TextXAlignment = Enum.TextXAlignment.Center + fullLabel.Position = UDim2.new(0,-3,0,0) + fullLabel.Size = UDim2.new(0,100,1,0) + fullLabel.Visible = false + fullLabel.Parent = textLabel + + local shortText = nil + local mouseEnterConnection = nil + local mouseLeaveConnection= nil + + local checkForResize = function() + if getGuiOwner(textLabel) == nil then + return + end + textLabel.Text = text + if textLabel.TextFits then + --Tear down the rollover if it is active + if mouseEnterConnection then + mouseEnterConnection:disconnect() + mouseEnterConnection = nil + end + if mouseLeaveConnection then + mouseLeaveConnection:disconnect() + mouseLeaveConnection = nil + end + else + local len = string.len(text) + textLabel.Text = text .. "~" + + --Shrink the text + local textSize = binaryGrow(0, len, + function(pos) + if pos == 0 then + textLabel.Text = "~" + else + textLabel.Text = string.sub(text, 1, pos) .. "~" + end + return textLabel.TextFits + end) + shortText = string.sub(text, 1, textSize) .. "~" + textLabel.Text = shortText + + --Make sure the fullLabel fits + if not fullLabel.TextFits then + --Already too small, grow it really bit to start + fullLabel.Size = UDim2.new(0, 10000, 1, 0) + end + + --Okay, now try to binary shrink it back down + local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X, + function(size) + fullLabel.Size = UDim2.new(0, size, 1, 0) + return fullLabel.TextFits + end) + fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0) + + --Now setup the rollover effects, if they are currently off + if mouseEnterConnection == nil then + mouseEnterConnection = textLabel.MouseEnter:connect( + function() + fullLabel.ZIndex = textLabel.ZIndex + 1 + fullLabel.Visible = true + --textLabel.Text = "" + end) + end + if mouseLeaveConnection == nil then + mouseLeaveConnection = textLabel.MouseLeave:connect( + function() + fullLabel.Visible = false + --textLabel.Text = shortText + end) + end + end + end + textLabel.AncestryChanged:connect(checkForResize) + textLabel.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + checkForResize() + end + end) + + checkForResize() + + local function changeText(newText) + text = newText + fullLabel.Text = text + checkForResize() + end + + return textLabel, changeText +end + +local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue) + if fromPage then + fromPage.Visible = false + if transitionFrame.Visible == false then + transitionFrame.Size = fromPage.Size + transitionFrame.Position = fromPage.Position + end + else + if transitionFrame.Visible == false then + transitionFrame.Size = UDim2.new(0.0,50,0.0,50) + transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25) + end + end + transitionFrame.Visible = true + currentPageValue.Value = nil + + local newsize, newPosition + if toPage then + --Make it visible so it resizes + toPage.Visible = true + + newSize = toPage.Size + newPosition = toPage.Position + + toPage.Visible = false + else + newSize = UDim2.new(0.0,50,0.0,50) + newPosition = UDim2.new(0.5,-25,0.5,-25) + end + transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true, + function(state) + if state == Enum.TweenStatus.Completed then + transitionFrame.Visible = false + if toPage then + toPage.Visible = true + currentPageValue.Value = toPage + end + end + end) +end + +t.CreateTutorial = function(name, tutorialKey, createButtons) + local frame = Instance.new("Frame") + frame.Name = "Tutorial-" .. name + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(0.6, 0, 0.6, 0) + frame.Position = UDim2.new(0.2, 0, 0.2, 0) + + local transitionFrame = Instance.new("Frame") + transitionFrame.Name = "TransitionFrame" + transitionFrame.Style = Enum.FrameStyle.RobloxRound + transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0) + transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0) + transitionFrame.Visible = false + transitionFrame.Parent = frame + + local currentPageValue = Instance.new("ObjectValue") + currentPageValue.Name = "CurrentTutorialPage" + currentPageValue.Value = nil + currentPageValue.Parent = frame + + local boolValue = Instance.new("BoolValue") + boolValue.Name = "Buttons" + boolValue.Value = createButtons + boolValue.Parent = frame + + local pages = Instance.new("Frame") + pages.Name = "Pages" + pages.BackgroundTransparency = 1 + pages.Size = UDim2.new(1,0,1,0) + pages.Parent = frame + + local function getVisiblePageAndHideOthers() + local visiblePage = nil + local children = pages:GetChildren() + if children then + for i,child in ipairs(children) do + if child.Visible then + if visiblePage then + child.Visible = false + else + visiblePage = child + end + end + end + end + return visiblePage + end + + local showTutorial = function(alwaysShow) + if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then + print("Showing tutorial-",tutorialKey) + local currentTutorialPage = getVisiblePageAndHideOthers() + + local firstPage = pages:FindFirstChild("TutorialPage1") + if firstPage then + TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue) + else + error("Could not find TutorialPage1") + end + end + end + + local dismissTutorial = function() + local currentTutorialPage = getVisiblePageAndHideOthers() + + if currentTutorialPage then + TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue) + end + + UserSettings().GameSettings:SetTutorialState(tutorialKey, true) + end + + local gotoPage = function(pageNum) + local page = pages:FindFirstChild("TutorialPage" .. pageNum) + local currentTutorialPage = getVisiblePageAndHideOthers() + TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue) + end + + return frame, showTutorial, dismissTutorial, gotoPage +end + +local function CreateBasicTutorialPage(name, handleResize, skipTutorial, giveDoneButton) + local frame = Instance.new("Frame") + frame.Name = "TutorialPage" + frame.Style = Enum.FrameStyle.RobloxRound + frame.Size = UDim2.new(0.6, 0, 0.6, 0) + frame.Position = UDim2.new(0.2, 0, 0.2, 0) + frame.Visible = false + + local frameHeader = Instance.new("TextLabel") + frameHeader.Name = "Header" + frameHeader.Text = name + frameHeader.BackgroundTransparency = 1 + frameHeader.FontSize = Enum.FontSize.Size24 + frameHeader.Font = Enum.Font.ArialBold + frameHeader.TextColor3 = Color3.new(1,1,1) + frameHeader.TextXAlignment = Enum.TextXAlignment.Center + frameHeader.TextWrap = true + frameHeader.Size = UDim2.new(1,-55, 0, 22) + frameHeader.Position = UDim2.new(0,0,0,0) + frameHeader.Parent = frame + + local skipButton = Instance.new("ImageButton") + skipButton.Name = "SkipButton" + skipButton.AutoButtonColor = false + skipButton.BackgroundTransparency = 1 + skipButton.Image = "rbxasset://textures/ui/closeButton.png" + skipButton.MouseButton1Click:connect(function() + skipTutorial() + end) + skipButton.MouseEnter:connect(function() + skipButton.Image = "rbxasset://textures/ui/closeButton_dn.png" + end) + skipButton.MouseLeave:connect(function() + skipButton.Image = "rbxasset://textures/ui/closeButton.png" + end) + skipButton.Size = UDim2.new(0, 25, 0, 25) + skipButton.Position = UDim2.new(1, -25, 0, 0) + skipButton.Parent = frame + + + if giveDoneButton then + local doneButton = Instance.new("TextButton") + doneButton.Name = "DoneButton" + doneButton.Style = Enum.ButtonStyle.RobloxButtonDefault + doneButton.Text = "Done" + doneButton.TextColor3 = Color3.new(1,1,1) + doneButton.Font = Enum.Font.ArialBold + doneButton.FontSize = Enum.FontSize.Size18 + doneButton.Size = UDim2.new(0,100,0,50) + doneButton.Position = UDim2.new(0.5,-50,1,-50) + + if skipTutorial then + doneButton.MouseButton1Click:connect(function() skipTutorial() end) + end + + doneButton.Parent = frame + end + + local innerFrame = Instance.new("Frame") + innerFrame.Name = "ContentFrame" + innerFrame.BackgroundTransparency = 1 + innerFrame.Position = UDim2.new(0,0,0,25) + innerFrame.Parent = frame + + local nextButton = Instance.new("TextButton") + nextButton.Name = "NextButton" + nextButton.Text = "Next" + nextButton.TextColor3 = Color3.new(1,1,1) + nextButton.Font = Enum.Font.Arial + nextButton.FontSize = Enum.FontSize.Size18 + nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault + nextButton.Size = UDim2.new(0,80, 0, 32) + nextButton.Position = UDim2.new(0.5, 5, 1, -32) + nextButton.Active = false + nextButton.Visible = false + nextButton.Parent = frame + + local prevButton = Instance.new("TextButton") + prevButton.Name = "PrevButton" + prevButton.Text = "Previous" + prevButton.TextColor3 = Color3.new(1,1,1) + prevButton.Font = Enum.Font.Arial + prevButton.FontSize = Enum.FontSize.Size18 + prevButton.Style = Enum.ButtonStyle.RobloxButton + prevButton.Size = UDim2.new(0,80, 0, 32) + prevButton.Position = UDim2.new(0.5, -85, 1, -32) + prevButton.Active = false + prevButton.Visible = false + prevButton.Parent = frame + + if giveDoneButton then + innerFrame.Size = UDim2.new(1,0,1,-75) + else + innerFrame.Size = UDim2.new(1,0,1,-22) + end + + local parentConnection = nil + + local function basicHandleResize() + if frame.Visible and frame.Parent then + local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y) + handleResize(200,maxSize) + end + end + + frame.Changed:connect( + function(prop) + if prop == "Parent" then + if parentConnection ~= nil then + parentConnection:disconnect() + parentConnection = nil + end + if frame.Parent and frame.Parent:IsA("GuiObject") then + parentConnection = frame.Parent.Changed:connect( + function(parentProp) + if parentProp == "AbsoluteSize" then + wait() + basicHandleResize() + end + end) + basicHandleResize() + end + end + + if prop == "Visible" then + basicHandleResize() + end + end) + + return frame, innerFrame +end + +t.CreateTextTutorialPage = function(name, text, skipTutorialFunc) + local frame = nil + local contentFrame = nil + + local textLabel = Instance.new("TextLabel") + textLabel.BackgroundTransparency = 1 + textLabel.TextColor3 = Color3.new(1,1,1) + textLabel.Text = text + textLabel.TextWrap = true + textLabel.TextXAlignment = Enum.TextXAlignment.Left + textLabel.TextYAlignment = Enum.TextYAlignment.Center + textLabel.Font = Enum.Font.Arial + textLabel.FontSize = Enum.FontSize.Size14 + textLabel.Size = UDim2.new(1,0,1,0) + + local function handleResize(minSize, maxSize) + size = binaryShrink(minSize, maxSize, + function(size) + frame.Size = UDim2.new(0, size, 0, size) + return textLabel.TextFits + end) + frame.Size = UDim2.new(0, size, 0, size) + frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) + end + + frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) + textLabel.Parent = contentFrame + + return frame +end + +t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc, giveDoneButton) + local frame = nil + local contentFrame = nil + + local imageLabel = Instance.new("ImageLabel") + imageLabel.BackgroundTransparency = 1 + imageLabel.Image = imageAsset + imageLabel.Size = UDim2.new(0,x,0,y) + imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2) + + local function handleResize(minSize, maxSize) + size = binaryShrink(minSize, maxSize, + function(size) + return size >= x and size >= y + end) + if size >= x and size >= y then + imageLabel.Size = UDim2.new(0,x, 0,y) + imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2) + else + if x > y then + --X is limiter, so + imageLabel.Size = UDim2.new(1,0,y/x,0) + imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0) + else + --Y is limiter + imageLabel.Size = UDim2.new(x/y,0,1, 0) + imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0) + end + end + size = size + 50 + frame.Size = UDim2.new(0, size, 0, size) + frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) + end + + frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc, giveDoneButton) + imageLabel.Parent = contentFrame + + return frame +end + +t.AddTutorialPage = function(tutorial, tutorialPage) + local transitionFrame = tutorial.TransitionFrame + local currentPageValue = tutorial.CurrentTutorialPage + + if not tutorial.Buttons.Value then + tutorialPage.NextButton.Parent = nil + tutorialPage.PrevButton.Parent = nil + end + + local children = tutorial.Pages:GetChildren() + if children and #children > 0 then + tutorialPage.Name = "TutorialPage" .. (#children+1) + local previousPage = children[#children] + if not previousPage:IsA("GuiObject") then + error("All elements under Pages must be GuiObjects") + end + + if tutorial.Buttons.Value then + if previousPage.NextButton.Active then + error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function") + end + previousPage.NextButton.MouseButton1Click:connect( + function() + TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue) + end) + previousPage.NextButton.Active = true + previousPage.NextButton.Visible = true + + if tutorialPage.PrevButton.Active then + error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function") + end + tutorialPage.PrevButton.MouseButton1Click:connect( + function() + TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue) + end) + tutorialPage.PrevButton.Active = true + tutorialPage.PrevButton.Visible = true + end + + tutorialPage.Parent = tutorial.Pages + else + --First child + tutorialPage.Name = "TutorialPage1" + tutorialPage.Parent = tutorial.Pages + end +end + +t.CreateSetPanel = function(userIdsForSets, objectSelected, dialogClosed, size, position, showAdminCategories, useAssetVersionId) + + if not userIdsForSets then + error("CreateSetPanel: userIdsForSets (first arg) is nil, should be a table of number ids") + end + if type(userIdsForSets) ~= "table" and type(userIdsForSets) ~= "userdata" then + error("CreateSetPanel: userIdsForSets (first arg) is of type " ..type(userIdsForSets) .. ", should be of type table or userdata") + end + if not objectSelected then + error("CreateSetPanel: objectSelected (second arg) is nil, should be a callback function!") + end + if type(objectSelected) ~= "function" then + error("CreateSetPanel: objectSelected (second arg) is of type " .. type(objectSelected) .. ", should be of type function!") + end + if dialogClosed and type(dialogClosed) ~= "function" then + error("CreateSetPanel: dialogClosed (third arg) is of type " .. type(dialogClosed) .. ", should be of type function!") + end + + if showAdminCategories == nil then -- by default, don't show beta sets + showAdminCategories = false + end + + local arrayPosition = 1 + local insertButtons = {} + local insertButtonCons = {} + local contents = nil + local setGui = nil + + -- used for water selections + local waterForceDirection = "NegX" + local waterForce = "None" + local waterGui, waterTypeChangedEvent = nil + + local Data = {} + Data.CurrentCategory = nil + Data.Category = {} + local SetCache = {} + + local userCategoryButtons = nil + + local buttonWidth = 64 + local buttonHeight = buttonWidth + + local SmallThumbnailUrl = nil + local LargeThumbnailUrl = nil + local BaseUrl = game:GetService("ContentProvider").BaseUrl:lower() + + if useAssetVersionId then + LargeThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&assetversionid=" + SmallThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&assetversionid=" + else + LargeThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&aid=" + SmallThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid=" + end + + local function drillDownSetZIndex(parent, index) + local children = parent:GetChildren() + for i = 1, #children do + if children[i]:IsA("GuiObject") then + children[i].ZIndex = index + end + drillDownSetZIndex(children[i], index) + end + end + + -- for terrain stamping + local currTerrainDropDownFrame = nil + local terrainShapes = {"Block","Vertical Ramp","Corner Wedge","Inverse Corner Wedge","Horizontal Ramp","Auto-Wedge"} + local terrainShapeMap = {} + for i = 1, #terrainShapes do + terrainShapeMap[terrainShapes[i]] = i - 1 + end + terrainShapeMap[terrainShapes[#terrainShapes]] = 6 + + local function createWaterGui() + local waterForceDirections = {"NegX","X","NegY","Y","NegZ","Z"} + local waterForces = {"None", "Small", "Medium", "Strong", "Max"} + + local waterFrame = Instance.new("Frame") + waterFrame.Name = "WaterFrame" + waterFrame.Style = Enum.FrameStyle.RobloxSquare + waterFrame.Size = UDim2.new(0,150,0,110) + waterFrame.Visible = false + + local waterForceLabel = Instance.new("TextLabel") + waterForceLabel.Name = "WaterForceLabel" + waterForceLabel.BackgroundTransparency = 1 + waterForceLabel.Size = UDim2.new(1,0,0,12) + waterForceLabel.Font = Enum.Font.ArialBold + waterForceLabel.FontSize = Enum.FontSize.Size12 + waterForceLabel.TextColor3 = Color3.new(1,1,1) + waterForceLabel.TextXAlignment = Enum.TextXAlignment.Left + waterForceLabel.Text = "Water Force" + waterForceLabel.Parent = waterFrame + + local waterForceDirLabel = waterForceLabel:Clone() + waterForceDirLabel.Name = "WaterForceDirectionLabel" + waterForceDirLabel.Text = "Water Force Direction" + waterForceDirLabel.Position = UDim2.new(0,0,0,50) + waterForceDirLabel.Parent = waterFrame + + local waterTypeChangedEvent = Instance.new("BindableEvent",waterFrame) + waterTypeChangedEvent.Name = "WaterTypeChangedEvent" + + local waterForceDirectionSelectedFunc = function(newForceDirection) + waterForceDirection = newForceDirection + waterTypeChangedEvent:Fire({waterForce, waterForceDirection}) + end + local waterForceSelectedFunc = function(newForce) + waterForce = newForce + waterTypeChangedEvent:Fire({waterForce, waterForceDirection}) + end + + local waterForceDirectionDropDown, forceWaterDirectionSelection = t.CreateDropDownMenu(waterForceDirections, waterForceDirectionSelectedFunc) + waterForceDirectionDropDown.Size = UDim2.new(1,0,0,25) + waterForceDirectionDropDown.Position = UDim2.new(0,0,1,3) + forceWaterDirectionSelection("NegX") + waterForceDirectionDropDown.Parent = waterForceDirLabel + + local waterForceDropDown, forceWaterForceSelection = t.CreateDropDownMenu(waterForces, waterForceSelectedFunc) + forceWaterForceSelection("None") + waterForceDropDown.Size = UDim2.new(1,0,0,25) + waterForceDropDown.Position = UDim2.new(0,0,1,3) + waterForceDropDown.Parent = waterForceLabel + + return waterFrame, waterTypeChangedEvent + end + + -- Helper Function that contructs gui elements + local function createSetGui() + + local setGui = Instance.new("ScreenGui") + setGui.Name = "SetGui" + + local setPanel = Instance.new("Frame") + setPanel.Name = "SetPanel" + setPanel.Active = true + setPanel.BackgroundTransparency = 1 + if position then + setPanel.Position = position + else + setPanel.Position = UDim2.new(0.2, 29, 0.1, 24) + end + if size then + setPanel.Size = size + else + setPanel.Size = UDim2.new(0.6, -58, 0.64, 0) + end + setPanel.Style = Enum.FrameStyle.RobloxRound + setPanel.ZIndex = 6 + setPanel.Parent = setGui + + -- Children of SetPanel + local itemPreview = Instance.new("Frame") + itemPreview.Name = "ItemPreview" + itemPreview.BackgroundTransparency = 1 + itemPreview.Position = UDim2.new(0.8,5,0.085,0) + itemPreview.Size = UDim2.new(0.21,0,0.9,0) + itemPreview.ZIndex = 6 + itemPreview.Parent = setPanel + + -- Children of ItemPreview + local textPanel = Instance.new("Frame") + textPanel.Name = "TextPanel" + textPanel.BackgroundTransparency = 1 + textPanel.Position = UDim2.new(0,0,0.45,0) + textPanel.Size = UDim2.new(1,0,0.55,0) + textPanel.ZIndex = 6 + textPanel.Parent = itemPreview + + -- Children of TextPanel + local rolloverText = Instance.new("TextLabel") + rolloverText.Name = "RolloverText" + rolloverText.BackgroundTransparency = 1 + rolloverText.Size = UDim2.new(1,0,0,48) + rolloverText.ZIndex = 6 + rolloverText.Font = Enum.Font.ArialBold + rolloverText.FontSize = Enum.FontSize.Size24 + rolloverText.Text = "" + rolloverText.TextColor3 = Color3.new(1,1,1) + rolloverText.TextWrap = true + rolloverText.TextXAlignment = Enum.TextXAlignment.Left + rolloverText.TextYAlignment = Enum.TextYAlignment.Top + rolloverText.Parent = textPanel + + local largePreview = Instance.new("ImageLabel") + largePreview.Name = "LargePreview" + largePreview.BackgroundTransparency = 1 + largePreview.Image = "" + largePreview.Size = UDim2.new(1,0,0,170) + largePreview.ZIndex = 6 + largePreview.Parent = itemPreview + + local sets = Instance.new("Frame") + sets.Name = "Sets" + sets.BackgroundTransparency = 1 + sets.Position = UDim2.new(0,0,0,5) + sets.Size = UDim2.new(0.23,0,1,-5) + sets.ZIndex = 6 + sets.Parent = setPanel + + -- Children of Sets + local line = Instance.new("Frame") + line.Name = "Line" + line.BackgroundColor3 = Color3.new(1,1,1) + line.BackgroundTransparency = 0.7 + line.BorderSizePixel = 0 + line.Position = UDim2.new(1,-3,0.06,0) + line.Size = UDim2.new(0,3,0.9,0) + line.ZIndex = 6 + line.Parent = sets + + local setsLists, controlFrame = t.CreateTrueScrollingFrame() + setsLists.Size = UDim2.new(1,-6,0.94,0) + setsLists.Position = UDim2.new(0,0,0.06,0) + setsLists.BackgroundTransparency = 1 + setsLists.Name = "SetsLists" + setsLists.ZIndex = 6 + setsLists.Parent = sets + drillDownSetZIndex(controlFrame, 7) + + local setsHeader = Instance.new("TextLabel") + setsHeader.Name = "SetsHeader" + setsHeader.BackgroundTransparency = 1 + setsHeader.Size = UDim2.new(0,47,0,24) + setsHeader.ZIndex = 6 + setsHeader.Font = Enum.Font.ArialBold + setsHeader.FontSize = Enum.FontSize.Size24 + setsHeader.Text = "Sets" + setsHeader.TextColor3 = Color3.new(1,1,1) + setsHeader.TextXAlignment = Enum.TextXAlignment.Left + setsHeader.TextYAlignment = Enum.TextYAlignment.Top + setsHeader.Parent = sets + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelButton" + cancelButton.Position = UDim2.new(1,-32,0,-2) + cancelButton.Size = UDim2.new(0,34,0,34) + cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault + cancelButton.ZIndex = 6 + cancelButton.Text = "" + cancelButton.Modal = true + cancelButton.Parent = setPanel + + -- Children of Cancel Button + local cancelImage = Instance.new("ImageLabel") + cancelImage.Name = "CancelImage" + cancelImage.BackgroundTransparency = 1 + cancelImage.Image = "http://www.nexium.fit/asset?id=54135717" + cancelImage.Position = UDim2.new(0,-2,0,-2) + cancelImage.Size = UDim2.new(0,16,0,16) + cancelImage.ZIndex = 6 + cancelImage.Parent = cancelButton + + return setGui + end + + local function createSetButton(text) + local setButton = Instance.new("TextButton") + + if text then setButton.Text = text + else setButton.Text = "" end + + setButton.AutoButtonColor = false + setButton.BackgroundTransparency = 1 + setButton.BackgroundColor3 = Color3.new(1,1,1) + setButton.BorderSizePixel = 0 + setButton.Size = UDim2.new(1,-5,0,18) + setButton.ZIndex = 6 + setButton.Visible = false + setButton.Font = Enum.Font.Arial + setButton.FontSize = Enum.FontSize.Size18 + setButton.TextColor3 = Color3.new(1,1,1) + setButton.TextXAlignment = Enum.TextXAlignment.Left + + return setButton + end + + local function buildSetButton(name, setId, setImageId, i, count) + local button = createSetButton(name) + button.Text = name + button.Name = "SetButton" + button.Visible = true + + local setValue = Instance.new("IntValue") + setValue.Name = "SetId" + setValue.Value = setId + setValue.Parent = button + + local setName = Instance.new("StringValue") + setName.Name = "SetName" + setName.Value = name + setName.Parent = button + + return button + end + + local function processCategory(sets) + local setButtons = {} + local numSkipped = 0 + for i = 1, #sets do + if not showAdminCategories and sets[i].Name == "Beta" then + numSkipped = numSkipped + 1 + else + setButtons[i - numSkipped] = buildSetButton(sets[i].Name, sets[i].CategoryId, sets[i].ImageAssetId, i - numSkipped, #sets) + end + end + return setButtons + end + + local function handleResize() + wait() -- neccessary to insure heartbeat happened + + local itemPreview = setGui.SetPanel.ItemPreview + + itemPreview.LargePreview.Size = UDim2.new(1,0,0,itemPreview.AbsoluteSize.X) + itemPreview.LargePreview.Position = UDim2.new(0.5,-itemPreview.LargePreview.AbsoluteSize.X/2,0,0) + itemPreview.TextPanel.Position = UDim2.new(0,0,0,itemPreview.LargePreview.AbsoluteSize.Y) + itemPreview.TextPanel.Size = UDim2.new(1,0,0,itemPreview.AbsoluteSize.Y - itemPreview.LargePreview.AbsoluteSize.Y) + end + + local function makeInsertAssetButton() + local insertAssetButtonExample = Instance.new("Frame") + insertAssetButtonExample.Name = "InsertAssetButtonExample" + insertAssetButtonExample.Position = UDim2.new(0,128,0,64) + insertAssetButtonExample.Size = UDim2.new(0,64,0,64) + insertAssetButtonExample.BackgroundTransparency = 1 + insertAssetButtonExample.ZIndex = 6 + insertAssetButtonExample.Visible = false + + local assetId = Instance.new("IntValue") + assetId.Name = "AssetId" + assetId.Value = 0 + assetId.Parent = insertAssetButtonExample + + local assetName = Instance.new("StringValue") + assetName.Name = "AssetName" + assetName.Value = "" + assetName.Parent = insertAssetButtonExample + + local button = Instance.new("TextButton") + button.Name = "Button" + button.Text = "" + button.Style = Enum.ButtonStyle.RobloxButton + button.Position = UDim2.new(0.025,0,0.025,0) + button.Size = UDim2.new(0.95,0,0.95,0) + button.ZIndex = 6 + button.Parent = insertAssetButtonExample + + local buttonImage = Instance.new("ImageLabel") + buttonImage.Name = "ButtonImage" + buttonImage.Image = "" + buttonImage.Position = UDim2.new(0,-7,0,-7) + buttonImage.Size = UDim2.new(1,14,1,14) + buttonImage.BackgroundTransparency = 1 + buttonImage.ZIndex = 7 + buttonImage.Parent = button + + local configIcon = buttonImage:clone() + configIcon.Name = "ConfigIcon" + configIcon.Visible = false + configIcon.Position = UDim2.new(1,-23,1,-24) + configIcon.Size = UDim2.new(0,16,0,16) + configIcon.Image = "" + configIcon.ZIndex = 6 + configIcon.Parent = insertAssetButtonExample + + return insertAssetButtonExample + end + + local function showLargePreview(insertButton) + if insertButton:FindFirstChild("AssetId") then + delay(0,function() + game:GetService("ContentProvider"):Preload(LargeThumbnailUrl .. tostring(insertButton.AssetId.Value)) + setGui.SetPanel.ItemPreview.LargePreview.Image = LargeThumbnailUrl .. tostring(insertButton.AssetId.Value) + end) + end + if insertButton:FindFirstChild("AssetName") then + setGui.SetPanel.ItemPreview.TextPanel.RolloverText.Text = insertButton.AssetName.Value + end + end + + local function selectTerrainShape(shape) + if currTerrainDropDownFrame then + objectSelected(tostring(currTerrainDropDownFrame.AssetName.Value), tonumber(currTerrainDropDownFrame.AssetId.Value), shape) + end + end + + local function createTerrainTypeButton(name, parent) + local dropDownTextButton = Instance.new("TextButton") + dropDownTextButton.Name = name .. "Button" + dropDownTextButton.Font = Enum.Font.ArialBold + dropDownTextButton.FontSize = Enum.FontSize.Size14 + dropDownTextButton.BorderSizePixel = 0 + dropDownTextButton.TextColor3 = Color3.new(1,1,1) + dropDownTextButton.Text = name + dropDownTextButton.TextXAlignment = Enum.TextXAlignment.Left + dropDownTextButton.BackgroundTransparency = 1 + dropDownTextButton.ZIndex = parent.ZIndex + 1 + dropDownTextButton.Size = UDim2.new(0,parent.Size.X.Offset - 2,0,16) + dropDownTextButton.Position = UDim2.new(0,1,0,0) + + dropDownTextButton.MouseEnter:connect(function() + dropDownTextButton.BackgroundTransparency = 0 + dropDownTextButton.TextColor3 = Color3.new(0,0,0) + end) + + dropDownTextButton.MouseLeave:connect(function() + dropDownTextButton.BackgroundTransparency = 1 + dropDownTextButton.TextColor3 = Color3.new(1,1,1) + end) + + dropDownTextButton.MouseButton1Click:connect(function() + dropDownTextButton.BackgroundTransparency = 1 + dropDownTextButton.TextColor3 = Color3.new(1,1,1) + if dropDownTextButton.Parent and dropDownTextButton.Parent:IsA("GuiObject") then + dropDownTextButton.Parent.Visible = false + end + selectTerrainShape(terrainShapeMap[dropDownTextButton.Text]) + end) + + return dropDownTextButton + end + + local function createTerrainDropDownMenu(zIndex) + local dropDown = Instance.new("Frame") + dropDown.Name = "TerrainDropDown" + dropDown.BackgroundColor3 = Color3.new(0,0,0) + dropDown.BorderColor3 = Color3.new(1,0,0) + dropDown.Size = UDim2.new(0,200,0,0) + dropDown.Visible = false + dropDown.ZIndex = zIndex + dropDown.Parent = setGui + + for i = 1, #terrainShapes do + local shapeButton = createTerrainTypeButton(terrainShapes[i],dropDown) + shapeButton.Position = UDim2.new(0,1,0,(i - 1) * (shapeButton.Size.Y.Offset)) + shapeButton.Parent = dropDown + dropDown.Size = UDim2.new(0,200,0,dropDown.Size.Y.Offset + (shapeButton.Size.Y.Offset)) + end + + dropDown.MouseLeave:connect(function() + dropDown.Visible = false + end) + end + + + local function createDropDownMenuButton(parent) + local dropDownButton = Instance.new("ImageButton") + dropDownButton.Name = "DropDownButton" + dropDownButton.Image = "http://www.nexium.fit/asset/?id=67581509" + dropDownButton.BackgroundTransparency = 1 + dropDownButton.Size = UDim2.new(0,16,0,16) + dropDownButton.Position = UDim2.new(1,-24,0,6) + dropDownButton.ZIndex = parent.ZIndex + 2 + dropDownButton.Parent = parent + + if not setGui:FindFirstChild("TerrainDropDown") then + createTerrainDropDownMenu(8) + end + + dropDownButton.MouseButton1Click:connect(function() + setGui.TerrainDropDown.Visible = true + setGui.TerrainDropDown.Position = UDim2.new(0,parent.AbsolutePosition.X,0,parent.AbsolutePosition.Y) + currTerrainDropDownFrame = parent + end) + end + + local function buildInsertButton() + local insertButton = makeInsertAssetButton() + insertButton.Name = "InsertAssetButton" + insertButton.Visible = true + + if Data.Category[Data.CurrentCategory].SetName == "High Scalability" then + createDropDownMenuButton(insertButton) + end + + local lastEnter = nil + local mouseEnterCon = insertButton.MouseEnter:connect(function() + lastEnter = insertButton + delay(0.1,function() + if lastEnter == insertButton then + showLargePreview(insertButton) + end + end) + end) + return insertButton, mouseEnterCon + end + + local function realignButtonGrid(columns) + local x = 0 + local y = 0 + for i = 1, #insertButtons do + insertButtons[i].Position = UDim2.new(0, buttonWidth * x, 0, buttonHeight * y) + x = x + 1 + if x >= columns then + x = 0 + y = y + 1 + end + end + end + + local function setInsertButtonImageBehavior(insertFrame, visible, name, assetId) + if visible then + insertFrame.AssetName.Value = name + insertFrame.AssetId.Value = assetId + local newImageUrl = SmallThumbnailUrl .. assetId + if newImageUrl ~= insertFrame.Button.ButtonImage.Image then + delay(0,function() + game:GetService("ContentProvider"):Preload(SmallThumbnailUrl .. assetId) + insertFrame.Button.ButtonImage.Image = SmallThumbnailUrl .. assetId + end) + end + table.insert(insertButtonCons, + insertFrame.Button.MouseButton1Click:connect(function() + -- special case for water, show water selection gui + local isWaterSelected = (name == "Water") and (Data.Category[Data.CurrentCategory].SetName == "High Scalability") + waterGui.Visible = isWaterSelected + if isWaterSelected then + objectSelected(name, tonumber(assetId), nil) + else + objectSelected(name, tonumber(assetId)) + end + end) + ) + insertFrame.Visible = true + else + insertFrame.Visible = false + end + end + + local function loadSectionOfItems(setGui, rows, columns) + local pageSize = rows * columns + + if arrayPosition > #contents then return end + + local origArrayPos = arrayPosition + + local yCopy = 0 + for i = 1, pageSize + 1 do + if arrayPosition >= #contents + 1 then + break + end + + local buttonCon + insertButtons[arrayPosition], buttonCon = buildInsertButton() + table.insert(insertButtonCons,buttonCon) + insertButtons[arrayPosition].Parent = setGui.SetPanel.ItemsFrame + arrayPosition = arrayPosition + 1 + end + realignButtonGrid(columns) + + local indexCopy = origArrayPos + for index = origArrayPos, arrayPosition do + if insertButtons[index] then + if contents[index] then + + -- we don't want water to have a drop down button + if contents[index].Name == "Water" then + if Data.Category[Data.CurrentCategory].SetName == "High Scalability" then + insertButtons[index]:FindFirstChild("DropDownButton",true):Destroy() + end + end + + local assetId + if useAssetVersionId then + assetId = contents[index].AssetVersionId + else + assetId = contents[index].AssetId + end + setInsertButtonImageBehavior(insertButtons[index], true, contents[index].Name, assetId) + else + break + end + else + break + end + indexCopy = index + end + end + + local function setSetIndex() + Data.Category[Data.CurrentCategory].Index = 0 + + rows = 7 + columns = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.X/buttonWidth) + + contents = Data.Category[Data.CurrentCategory].Contents + if contents then + -- remove our buttons and their connections + for i = 1, #insertButtons do + insertButtons[i]:remove() + end + for i = 1, #insertButtonCons do + if insertButtonCons[i] then insertButtonCons[i]:disconnect() end + end + insertButtonCons = {} + insertButtons = {} + + arrayPosition = 1 + loadSectionOfItems(setGui, rows, columns) + end + end + + local function selectSet(button, setName, setId, setIndex) + if button and Data.Category[Data.CurrentCategory] ~= nil then + if button ~= Data.Category[Data.CurrentCategory].Button then + Data.Category[Data.CurrentCategory].Button = button + + if SetCache[setId] == nil then + SetCache[setId] = game:GetService("InsertService"):GetCollection(setId) + end + Data.Category[Data.CurrentCategory].Contents = SetCache[setId] + + Data.Category[Data.CurrentCategory].SetName = setName + Data.Category[Data.CurrentCategory].SetId = setId + end + setSetIndex() + end + end + + local function selectCategoryPage(buttons, page) + if buttons ~= Data.CurrentCategory then + if Data.CurrentCategory then + for key, button in pairs(Data.CurrentCategory) do + button.Visible = false + end + end + + Data.CurrentCategory = buttons + if Data.Category[Data.CurrentCategory] == nil then + Data.Category[Data.CurrentCategory] = {} + if #buttons > 0 then + selectSet(buttons[1], buttons[1].SetName.Value, buttons[1].SetId.Value, 0) + end + else + Data.Category[Data.CurrentCategory].Button = nil + selectSet(Data.Category[Data.CurrentCategory].ButtonFrame, Data.Category[Data.CurrentCategory].SetName, Data.Category[Data.CurrentCategory].SetId, Data.Category[Data.CurrentCategory].Index) + end + end + end + + local function selectCategory(category) + selectCategoryPage(category, 0) + end + + local function resetAllSetButtonSelection() + local setButtons = setGui.SetPanel.Sets.SetsLists:GetChildren() + for i = 1, #setButtons do + if setButtons[i]:IsA("TextButton") then + setButtons[i].Selected = false + setButtons[i].BackgroundTransparency = 1 + setButtons[i].TextColor3 = Color3.new(1,1,1) + setButtons[i].BackgroundColor3 = Color3.new(1,1,1) + end + end + end + + local function populateSetsFrame() + local currRow = 0 + for i = 1, #userCategoryButtons do + local button = userCategoryButtons[i] + button.Visible = true + button.Position = UDim2.new(0,5,0,currRow * button.Size.Y.Offset) + button.Parent = setGui.SetPanel.Sets.SetsLists + + if i == 1 then -- we will have this selected by default, so show it + button.Selected = true + button.BackgroundColor3 = Color3.new(0,204/255,0) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundTransparency = 0 + end + + button.MouseEnter:connect(function() + if not button.Selected then + button.BackgroundTransparency = 0 + button.TextColor3 = Color3.new(0,0,0) + end + end) + button.MouseLeave:connect(function() + if not button.Selected then + button.BackgroundTransparency = 1 + button.TextColor3 = Color3.new(1,1,1) + end + end) + button.MouseButton1Click:connect(function() + resetAllSetButtonSelection() + button.Selected = not button.Selected + button.BackgroundColor3 = Color3.new(0,204/255,0) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundTransparency = 0 + selectSet(button, button.Text, userCategoryButtons[i].SetId.Value, 0) + end) + + currRow = currRow + 1 + end + + local buttons = setGui.SetPanel.Sets.SetsLists:GetChildren() + + -- set first category as loaded for default + if buttons then + for i = 1, #buttons do + if buttons[i]:IsA("TextButton") then + selectSet(buttons[i], buttons[i].Text, userCategoryButtons[i].SetId.Value, 0) + selectCategory(userCategoryButtons) + break + end + end + end + end + + setGui = createSetGui() + waterGui, waterTypeChangedEvent = createWaterGui() + waterGui.Position = UDim2.new(0,55,0,0) + waterGui.Parent = setGui + setGui.Changed:connect(function(prop) -- this resizes the preview image to always be the right size + if prop == "AbsoluteSize" then + handleResize() + setSetIndex() + end + end) + + local scrollFrame, controlFrame = t.CreateTrueScrollingFrame() + scrollFrame.Size = UDim2.new(0.54,0,0.85,0) + scrollFrame.Position = UDim2.new(0.24,0,0.085,0) + scrollFrame.Name = "ItemsFrame" + scrollFrame.ZIndex = 6 + scrollFrame.Parent = setGui.SetPanel + scrollFrame.BackgroundTransparency = 1 + + drillDownSetZIndex(controlFrame,7) + + controlFrame.Parent = setGui.SetPanel + controlFrame.Position = UDim2.new(0.76, 5, 0, 0) + + local debounce = false + controlFrame.ScrollBottom.Changed:connect(function(prop) + if controlFrame.ScrollBottom.Value == true then + if debounce then return end + debounce = true + loadSectionOfItems(setGui, rows, columns) + debounce = false + end + end) + + local userData = {} + for id = 1, #userIdsForSets do + local newUserData = game:GetService("InsertService"):GetUserSets(userIdsForSets[id]) + if newUserData and #newUserData > 2 then + -- start at #3 to skip over My Decals and My Models for each account + for category = 3, #newUserData do + if newUserData[category].Name == "High Scalability" then -- we want high scalability parts to show first + table.insert(userData,1,newUserData[category]) + else + table.insert(userData, newUserData[category]) + end + end + end + + end + if userData then + userCategoryButtons = processCategory(userData) + end + + rows = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.Y/buttonHeight) + columns = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.X/buttonWidth) + + populateSetsFrame() + + insertPanelCloseCon = setGui.SetPanel.CancelButton.MouseButton1Click:connect(function() + setGui.SetPanel.Visible = false + if dialogClosed then dialogClosed() end + end) + + local setVisibilityFunction = function(visible) + if visible then + setGui.SetPanel.Visible = true + else + setGui.SetPanel.Visible = false + end + end + + local getVisibilityFunction = function() + if setGui then + if setGui:FindFirstChild("SetPanel") then + return setGui.SetPanel.Visible + end + end + + return false + end + + return setGui, setVisibilityFunction, getVisibilityFunction, waterTypeChangedEvent +end + +t.CreateTerrainMaterialSelector = function(size,position) + local terrainMaterialSelectionChanged = Instance.new("BindableEvent") + terrainMaterialSelectionChanged.Name = "TerrainMaterialSelectionChanged" + + local selectedButton = nil + + local frame = Instance.new("Frame") + frame.Name = "TerrainMaterialSelector" + if size then + frame.Size = size + else + frame.Size = UDim2.new(0, 245, 0, 230) + end + if position then + frame.Position = position + end + frame.BorderSizePixel = 0 + frame.BackgroundColor3 = Color3.new(0,0,0) + frame.Active = true + + terrainMaterialSelectionChanged.Parent = frame + + local waterEnabled = true -- todo: turn this on when water is ready + + local materialToImageMap = {} + local materialNames = {"Grass", "Sand", "Brick", "Granite", "Asphalt", "Iron", "Aluminum", "Gold", "Plank", "Log", "Gravel", "Cinder Block", "Stone Wall", "Concrete", "Plastic (red)", "Plastic (blue)"} + if waterEnabled then + table.insert(materialNames,"Water") + end + local currentMaterial = 1 + + function getEnumFromName(choice) + if choice == "Grass" then return 1 end + if choice == "Sand" then return 2 end + if choice == "Erase" then return 0 end + if choice == "Brick" then return 3 end + if choice == "Granite" then return 4 end + if choice == "Asphalt" then return 5 end + if choice == "Iron" then return 6 end + if choice == "Aluminum" then return 7 end + if choice == "Gold" then return 8 end + if choice == "Plank" then return 9 end + if choice == "Log" then return 10 end + if choice == "Gravel" then return 11 end + if choice == "Cinder Block" then return 12 end + if choice == "Stone Wall" then return 13 end + if choice == "Concrete" then return 14 end + if choice == "Plastic (red)" then return 15 end + if choice == "Plastic (blue)" then return 16 end + if choice == "Water" then return 17 end + end + + function getNameFromEnum(choice) + if choice == Enum.CellMaterial.Grass or choice == 1 then return "Grass"end + if choice == Enum.CellMaterial.Sand or choice == 2 then return "Sand" end + if choice == Enum.CellMaterial.Empty or choice == 0 then return "Erase" end + if choice == Enum.CellMaterial.Brick or choice == 3 then return "Brick" end + if choice == Enum.CellMaterial.Granite or choice == 4 then return "Granite" end + if choice == Enum.CellMaterial.Asphalt or choice == 5 then return "Asphalt" end + if choice == Enum.CellMaterial.Iron or choice == 6 then return "Iron" end + if choice == Enum.CellMaterial.Aluminum or choice == 7 then return "Aluminum" end + if choice == Enum.CellMaterial.Gold or choice == 8 then return "Gold" end + if choice == Enum.CellMaterial.WoodPlank or choice == 9 then return "Plank" end + if choice == Enum.CellMaterial.WoodLog or choice == 10 then return "Log" end + if choice == Enum.CellMaterial.Gravel or choice == 11 then return "Gravel" end + if choice == Enum.CellMaterial.CinderBlock or choice == 12 then return "Cinder Block" end + if choice == Enum.CellMaterial.MossyStone or choice == 13 then return "Stone Wall" end + if choice == Enum.CellMaterial.Cement or choice == 14 then return "Concrete" end + if choice == Enum.CellMaterial.RedPlastic or choice == 15 then return "Plastic (red)" end + if choice == Enum.CellMaterial.BluePlastic or choice == 16 then return "Plastic (blue)" end + + if waterEnabled then + if choice == Enum.CellMaterial.Water or choice == 17 then return "Water" end + end + end + + + local function updateMaterialChoice(choice) + currentMaterial = getEnumFromName(choice) + terrainMaterialSelectionChanged:Fire(currentMaterial) + end + + -- we so need a better way to do this + for i,v in pairs(materialNames) do + materialToImageMap[v] = {} + if v == "Grass" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=56563112" + elseif v == "Sand" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=62356652" + elseif v == "Brick" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=65961537" + elseif v == "Granite" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532153" + elseif v == "Asphalt" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532038" + elseif v == "Iron" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532093" + elseif v == "Aluminum" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67531995" + elseif v == "Gold" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532118" + elseif v == "Plastic (red)" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67531848" + elseif v == "Plastic (blue)" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67531924" + elseif v == "Plank" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532015" + elseif v == "Log" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532051" + elseif v == "Gravel" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532206" + elseif v == "Cinder Block" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532103" + elseif v == "Stone Wall" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67531804" + elseif v == "Concrete" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=67532059" + elseif v == "Water" then materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=81407474" + else materialToImageMap[v].Regular = "http://www.nexium.fit/asset/?id=66887593" -- fill in the rest here!! + end + end + + local scrollFrame, scrollUp, scrollDown, recalculateScroll = t.CreateScrollingFrame(nil,"grid") + scrollFrame.Size = UDim2.new(0.85,0,1,0) + scrollFrame.Position = UDim2.new(0,0,0,0) + scrollFrame.Parent = frame + + scrollUp.Parent = frame + scrollUp.Visible = true + scrollUp.Position = UDim2.new(1,-19,0,0) + + scrollDown.Parent = frame + scrollDown.Visible = true + scrollDown.Position = UDim2.new(1,-19,1,-17) + + local function goToNewMaterial(buttonWrap, materialName) + updateMaterialChoice(materialName) + buttonWrap.BackgroundTransparency = 0 + selectedButton.BackgroundTransparency = 1 + selectedButton = buttonWrap + end + + local function createMaterialButton(name) + local buttonWrap = Instance.new("TextButton") + buttonWrap.Text = "" + buttonWrap.Size = UDim2.new(0,32,0,32) + buttonWrap.BackgroundColor3 = Color3.new(1,1,1) + buttonWrap.BorderSizePixel = 0 + buttonWrap.BackgroundTransparency = 1 + buttonWrap.AutoButtonColor = false + buttonWrap.Name = tostring(name) + + local imageButton = Instance.new("ImageButton") + imageButton.AutoButtonColor = false + imageButton.BackgroundTransparency = 1 + imageButton.Size = UDim2.new(0,30,0,30) + imageButton.Position = UDim2.new(0,1,0,1) + imageButton.Name = tostring(name) + imageButton.Parent = buttonWrap + imageButton.Image = materialToImageMap[name].Regular + + local enumType = Instance.new("NumberValue") + enumType.Name = "EnumType" + enumType.Parent = buttonWrap + enumType.Value = 0 + + imageButton.MouseEnter:connect(function() + buttonWrap.BackgroundTransparency = 0 + end) + imageButton.MouseLeave:connect(function() + if selectedButton ~= buttonWrap then + buttonWrap.BackgroundTransparency = 1 + end + end) + imageButton.MouseButton1Click:connect(function() + if selectedButton ~= buttonWrap then + goToNewMaterial(buttonWrap, tostring(name)) + end + end) + + return buttonWrap + end + + for i = 1, #materialNames do + local imageButton = createMaterialButton(materialNames[i]) + + if materialNames[i] == "Grass" then -- always start with grass as the default + selectedButton = imageButton + imageButton.BackgroundTransparency = 0 + end + + imageButton.Parent = scrollFrame + end + + local forceTerrainMaterialSelection = function(newMaterialType) + if not newMaterialType then return end + if currentMaterial == newMaterialType then return end + + local matName = getNameFromEnum(newMaterialType) + local buttons = scrollFrame:GetChildren() + for i = 1, #buttons do + if buttons[i].Name == "Plastic (blue)" and matName == "Plastic (blue)" then goToNewMaterial(buttons[i],matName) return end + if buttons[i].Name == "Plastic (red)" and matName == "Plastic (red)" then goToNewMaterial(buttons[i],matName) return end + if string.find(buttons[i].Name, matName) then + goToNewMaterial(buttons[i],matName) + return + end + end + end + + frame.Changed:connect(function ( prop ) + if prop == "AbsoluteSize" then + recalculateScroll() + end + end) + + recalculateScroll() + return frame, terrainMaterialSelectionChanged, forceTerrainMaterialSelection +end + +t.CreateLoadingFrame = function(name,size,position) + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=35238053") + + local loadingFrame = Instance.new("Frame") + loadingFrame.Name = "LoadingFrame" + loadingFrame.Style = Enum.FrameStyle.RobloxRound + + if size then loadingFrame.Size = size + else loadingFrame.Size = UDim2.new(0,300,0,160) end + if position then loadingFrame.Position = position + else loadingFrame.Position = UDim2.new(0.5, -150, 0.5,-80) end + + local loadingBar = Instance.new("Frame") + loadingBar.Name = "LoadingBar" + loadingBar.BackgroundColor3 = Color3.new(0,0,0) + loadingBar.BorderColor3 = Color3.new(79/255,79/255,79/255) + loadingBar.Position = UDim2.new(0,0,0,41) + loadingBar.Size = UDim2.new(1,0,0,30) + loadingBar.Parent = loadingFrame + + local loadingGreenBar = Instance.new("ImageLabel") + loadingGreenBar.Name = "LoadingGreenBar" + loadingGreenBar.Image = "http://www.nexium.fit/asset/?id=35238053" + loadingGreenBar.Position = UDim2.new(0,0,0,0) + loadingGreenBar.Size = UDim2.new(0,0,1,0) + loadingGreenBar.Visible = false + loadingGreenBar.Parent = loadingBar + + local loadingPercent = Instance.new("TextLabel") + loadingPercent.Name = "LoadingPercent" + loadingPercent.BackgroundTransparency = 1 + loadingPercent.Position = UDim2.new(0,0,1,0) + loadingPercent.Size = UDim2.new(1,0,0,14) + loadingPercent.Font = Enum.Font.Arial + loadingPercent.Text = "0%" + loadingPercent.FontSize = Enum.FontSize.Size14 + loadingPercent.TextColor3 = Color3.new(1,1,1) + loadingPercent.Parent = loadingBar + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelButton" + cancelButton.Position = UDim2.new(0.5,-60,1,-40) + cancelButton.Size = UDim2.new(0,120,0,40) + cancelButton.Font = Enum.Font.Arial + cancelButton.FontSize = Enum.FontSize.Size18 + cancelButton.TextColor3 = Color3.new(1,1,1) + cancelButton.Text = "Cancel" + cancelButton.Style = Enum.ButtonStyle.RobloxButton + cancelButton.Parent = loadingFrame + + local loadingName = Instance.new("TextLabel") + loadingName.Name = "loadingName" + loadingName.BackgroundTransparency = 1 + loadingName.Size = UDim2.new(1,0,0,18) + loadingName.Position = UDim2.new(0,0,0,2) + loadingName.Font = Enum.Font.Arial + loadingName.Text = name + loadingName.TextColor3 = Color3.new(1,1,1) + loadingName.TextStrokeTransparency = 1 + loadingName.FontSize = Enum.FontSize.Size18 + loadingName.Parent = loadingFrame + + local cancelButtonClicked = Instance.new("BindableEvent") + cancelButtonClicked.Name = "CancelButtonClicked" + cancelButtonClicked.Parent = cancelButton + cancelButton.MouseButton1Click:connect(function() + cancelButtonClicked:Fire() + end) + + local updateLoadingGuiPercent = function(percent, tweenAction, tweenLength) + if percent and type(percent) ~= "number" then + error("updateLoadingGuiPercent expects number as argument, got",type(percent),"instead") + end + + local newSize = nil + if percent < 0 then + newSize = UDim2.new(0,0,1,0) + elseif percent > 1 then + newSize = UDim2.new(1,0,1,0) + else + newSize = UDim2.new(percent,0,1,0) + end + + if tweenAction then + if not tweenLength then + error("updateLoadingGuiPercent is set to tween new percentage, but got no tween time length! Please pass this in as third argument") + end + + if (newSize.X.Scale > 0) then + loadingGreenBar.Visible = true + loadingGreenBar:TweenSize( newSize, + Enum.EasingDirection.Out, + Enum.EasingStyle.Quad, + tweenLength, + true) + else + loadingGreenBar:TweenSize( newSize, + Enum.EasingDirection.Out, + Enum.EasingStyle.Quad, + tweenLength, + true, + function() + if (newSize.X.Scale < 0) then + loadingGreenBar.Visible = false + end + end) + end + + else + loadingGreenBar.Size = newSize + loadingGreenBar.Visible = (newSize.X.Scale > 0) + end + end + + loadingGreenBar.Changed:connect(function(prop) + if prop == "Size" then + loadingPercent.Text = tostring( math.ceil(loadingGreenBar.Size.X.Scale * 100) ) .. "%" + end + end) + + return loadingFrame, updateLoadingGuiPercent, cancelButtonClicked +end + +t.CreatePluginFrame = function (name,size,position,scrollable,parent) + function createMenuButton(size,position,text,fontsize,name,parent) + local button = Instance.new("TextButton",parent) + button.AutoButtonColor = false + button.Name = name + button.BackgroundTransparency = 1 + button.Position = position + button.Size = size + button.Font = Enum.Font.ArialBold + button.FontSize = fontsize + button.Text = text + button.TextColor3 = Color3.new(1,1,1) + button.BorderSizePixel = 0 + button.BackgroundColor3 = Color3.new(20/255,20/255,20/255) + + button.MouseEnter:connect(function ( ) + if button.Selected then return end + button.BackgroundTransparency = 0 + end) + button.MouseLeave:connect(function ( ) + if button.Selected then return end + button.BackgroundTransparency = 1 + end) + + return button + + end + + local dragBar = Instance.new("Frame",parent) + dragBar.Name = tostring(name) .. "DragBar" + dragBar.BackgroundColor3 = Color3.new(39/255,39/255,39/255) + dragBar.BorderColor3 = Color3.new(0,0,0) + if size then + dragBar.Size = UDim2.new(size.X.Scale,size.X.Offset,0,20) + UDim2.new(0,20,0,0) + else + dragBar.Size = UDim2.new(0,183,0,20) + end + if position then + dragBar.Position = position + end + dragBar.Active = true + dragBar.Draggable = true + --dragBar.Visible = false + dragBar.MouseEnter:connect(function ( ) + dragBar.BackgroundColor3 = Color3.new(49/255,49/255,49/255) + end) + dragBar.MouseLeave:connect(function ( ) + dragBar.BackgroundColor3 = Color3.new(39/255,39/255,39/255) + end) + + -- plugin name label + local pluginNameLabel = Instance.new("TextLabel",dragBar) + pluginNameLabel.Name = "BarNameLabel" + pluginNameLabel.Text = " " .. tostring(name) + pluginNameLabel.TextColor3 = Color3.new(1,1,1) + pluginNameLabel.TextStrokeTransparency = 0 + pluginNameLabel.Size = UDim2.new(1,0,1,0) + pluginNameLabel.Font = Enum.Font.ArialBold + pluginNameLabel.FontSize = Enum.FontSize.Size18 + pluginNameLabel.TextXAlignment = Enum.TextXAlignment.Left + pluginNameLabel.BackgroundTransparency = 1 + + -- close button + local closeButton = createMenuButton(UDim2.new(0,15,0,17),UDim2.new(1,-16,0.5,-8),"X",Enum.FontSize.Size14,"CloseButton",dragBar) + local closeEvent = Instance.new("BindableEvent") + closeEvent.Name = "CloseEvent" + closeEvent.Parent = closeButton + closeButton.MouseButton1Click:connect(function () + closeEvent:Fire() + closeButton.BackgroundTransparency = 1 + end) + + -- help button + local helpButton = createMenuButton(UDim2.new(0,15,0,17),UDim2.new(1,-51,0.5,-8),"?",Enum.FontSize.Size14,"HelpButton",dragBar) + local helpFrame = Instance.new("Frame",dragBar) + helpFrame.Name = "HelpFrame" + helpFrame.BackgroundColor3 = Color3.new(0,0,0) + helpFrame.Size = UDim2.new(0,300,0,552) + helpFrame.Position = UDim2.new(1,5,0,0) + helpFrame.Active = true + helpFrame.BorderSizePixel = 0 + helpFrame.Visible = false + + helpButton.MouseButton1Click:connect(function( ) + helpFrame.Visible = not helpFrame.Visible + if helpFrame.Visible then + helpButton.Selected = true + helpButton.BackgroundTransparency = 0 + local screenGui = getScreenGuiAncestor(helpFrame) + if screenGui then + if helpFrame.AbsolutePosition.X + helpFrame.AbsoluteSize.X > screenGui.AbsoluteSize.X then --position on left hand side + helpFrame.Position = UDim2.new(0,-5 - helpFrame.AbsoluteSize.X,0,0) + else -- position on right hand side + helpFrame.Position = UDim2.new(1,5,0,0) + end + else + helpFrame.Position = UDim2.new(1,5,0,0) + end + else + helpButton.Selected = false + helpButton.BackgroundTransparency = 1 + end + end) + + local minimizeButton = createMenuButton(UDim2.new(0,16,0,17),UDim2.new(1,-34,0.5,-8),"-",Enum.FontSize.Size14,"MinimizeButton",dragBar) + minimizeButton.TextYAlignment = Enum.TextYAlignment.Top + + local minimizeFrame = Instance.new("Frame",dragBar) + minimizeFrame.Name = "MinimizeFrame" + minimizeFrame.BackgroundColor3 = Color3.new(73/255,73/255,73/255) + minimizeFrame.BorderColor3 = Color3.new(0,0,0) + minimizeFrame.Position = UDim2.new(0,0,1,0) + if size then + minimizeFrame.Size = UDim2.new(size.X.Scale,size.X.Offset,0,50) + UDim2.new(0,20,0,0) + else + minimizeFrame.Size = UDim2.new(0,183,0,50) + end + minimizeFrame.Visible = false + + local minimizeBigButton = Instance.new("TextButton",minimizeFrame) + minimizeBigButton.Position = UDim2.new(0.5,-50,0.5,-20) + minimizeBigButton.Name = "MinimizeButton" + minimizeBigButton.Size = UDim2.new(0,100,0,40) + minimizeBigButton.Style = Enum.ButtonStyle.RobloxButton + minimizeBigButton.Font = Enum.Font.ArialBold + minimizeBigButton.FontSize = Enum.FontSize.Size18 + minimizeBigButton.TextColor3 = Color3.new(1,1,1) + minimizeBigButton.Text = "Show" + + local separatingLine = Instance.new("Frame",dragBar) + separatingLine.Name = "SeparatingLine" + separatingLine.BackgroundColor3 = Color3.new(115/255,115/255,115/255) + separatingLine.BorderSizePixel = 0 + separatingLine.Position = UDim2.new(1,-18,0.5,-7) + separatingLine.Size = UDim2.new(0,1,0,14) + + local otherSeparatingLine = separatingLine:clone() + otherSeparatingLine.Position = UDim2.new(1,-35,0.5,-7) + otherSeparatingLine.Parent = dragBar + + local widgetContainer = Instance.new("Frame",dragBar) + widgetContainer.Name = "WidgetContainer" + widgetContainer.BackgroundTransparency = 1 + widgetContainer.Position = UDim2.new(0,0,1,0) + widgetContainer.BorderColor3 = Color3.new(0,0,0) + if not scrollable then + widgetContainer.BackgroundTransparency = 0 + widgetContainer.BackgroundColor3 = Color3.new(72/255,72/255,72/255) + end + + if size then + if scrollable then + widgetContainer.Size = size + else + widgetContainer.Size = UDim2.new(0,dragBar.AbsoluteSize.X,size.Y.Scale,size.Y.Offset) + end + else + if scrollable then + widgetContainer.Size = UDim2.new(0,163,0,400) + else + widgetContainer.Size = UDim2.new(0,dragBar.AbsoluteSize.X,0,400) + end + end + if position then + widgetContainer.Position = position + UDim2.new(0,0,0,20) + end + + local frame,control,verticalDragger = nil + if scrollable then + --frame for widgets + frame,control = t.CreateTrueScrollingFrame() + frame.Size = UDim2.new(1, 0, 1, 0) + frame.BackgroundColor3 = Color3.new(72/255,72/255,72/255) + frame.BorderColor3 = Color3.new(0,0,0) + frame.Active = true + frame.Parent = widgetContainer + control.Parent = dragBar + control.BackgroundColor3 = Color3.new(72/255,72/255,72/255) + control.BorderSizePixel = 0 + control.BackgroundTransparency = 0 + control.Position = UDim2.new(1,-21,1,1) + if size then + control.Size = UDim2.new(0,21,size.Y.Scale,size.Y.Offset) + else + control.Size = UDim2.new(0,21,0,400) + end + control:FindFirstChild("ScrollDownButton").Position = UDim2.new(0,0,1,-20) + + local fakeLine = Instance.new("Frame",control) + fakeLine.Name = "FakeLine" + fakeLine.BorderSizePixel = 0 + fakeLine.BackgroundColor3 = Color3.new(0,0,0) + fakeLine.Size = UDim2.new(0,1,1,1) + fakeLine.Position = UDim2.new(1,0,0,0) + + verticalDragger = Instance.new("TextButton",widgetContainer) + verticalDragger.ZIndex = 2 + verticalDragger.AutoButtonColor = false + verticalDragger.Name = "VerticalDragger" + verticalDragger.BackgroundColor3 = Color3.new(50/255,50/255,50/255) + verticalDragger.BorderColor3 = Color3.new(0,0,0) + verticalDragger.Size = UDim2.new(1,20,0,20) + verticalDragger.Position = UDim2.new(0,0,1,0) + verticalDragger.Active = true + verticalDragger.Text = "" + + local scrubFrame = Instance.new("Frame",verticalDragger) + scrubFrame.Name = "ScrubFrame" + scrubFrame.BackgroundColor3 = Color3.new(1,1,1) + scrubFrame.BorderSizePixel = 0 + scrubFrame.Position = UDim2.new(0.5,-5,0.5,0) + scrubFrame.Size = UDim2.new(0,10,0,1) + scrubFrame.ZIndex = 5 + local scrubTwo = scrubFrame:clone() + scrubTwo.Position = UDim2.new(0.5,-5,0.5,-2) + scrubTwo.Parent = verticalDragger + local scrubThree = scrubFrame:clone() + scrubThree.Position = UDim2.new(0.5,-5,0.5,2) + scrubThree.Parent = verticalDragger + + local areaSoak = Instance.new("TextButton",getScreenGuiAncestor(parent)) + areaSoak.Name = "AreaSoak" + areaSoak.Size = UDim2.new(1,0,1,0) + areaSoak.BackgroundTransparency = 1 + areaSoak.BorderSizePixel = 0 + areaSoak.Text = "" + areaSoak.ZIndex = 10 + areaSoak.Visible = false + areaSoak.Active = true + + local draggingVertical = false + local startYPos = nil + verticalDragger.MouseEnter:connect(function () + verticalDragger.BackgroundColor3 = Color3.new(60/255,60/255,60/255) + end) + verticalDragger.MouseLeave:connect(function () + verticalDragger.BackgroundColor3 = Color3.new(50/255,50/255,50/255) + end) + verticalDragger.MouseButton1Down:connect(function(x,y) + draggingVertical = true + areaSoak.Visible = true + startYPos = y + end) + areaSoak.MouseButton1Up:connect(function ( ) + draggingVertical = false + areaSoak.Visible = false + end) + areaSoak.MouseMoved:connect(function(x,y) + if not draggingVertical then return end + + local yDelta = y - startYPos + if not control.ScrollDownButton.Visible and yDelta > 0 then + return + end + + if (widgetContainer.Size.Y.Offset + yDelta) < 150 then + widgetContainer.Size = UDim2.new(widgetContainer.Size.X.Scale, widgetContainer.Size.X.Offset,widgetContainer.Size.Y.Scale,150) + control.Size = UDim2.new (0,21,0,150) + return + end + + startYPos = y + + if widgetContainer.Size.Y.Offset + yDelta >= 0 then + widgetContainer.Size = UDim2.new(widgetContainer.Size.X.Scale, widgetContainer.Size.X.Offset,widgetContainer.Size.Y.Scale,widgetContainer.Size.Y.Offset + yDelta) + control.Size = UDim2.new(0,21,0,control.Size.Y.Offset + yDelta ) + end + end) + end + + local function switchMinimize() + minimizeFrame.Visible = not minimizeFrame.Visible + if scrollable then + frame.Visible = not frame.Visible + verticalDragger.Visible = not verticalDragger.Visible + control.Visible = not control.Visible + else + widgetContainer.Visible = not widgetContainer.Visible + end + + if minimizeFrame.Visible then + minimizeButton.Text = "+" + else + minimizeButton.Text = "-" + end + end + + minimizeBigButton.MouseButton1Click:connect(function ( ) + switchMinimize() + end) + + minimizeButton.MouseButton1Click:connect(function( ) + switchMinimize() + end) + + if scrollable then + return dragBar, frame, helpFrame, closeEvent + else + return dragBar, widgetContainer, helpFrame, closeEvent + end +end + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then + return "Function CreatePropertyDropDownMenu. " .. + "Arguments: (instance, propertyName, enumType). " .. + "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'" + end + if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then + return "Function CreateDropDownMenu. " .. + "Arguments: (items, onItemSelected). " .. + "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items" + end + if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then + return "Function CreateMessageDialog. " .. + "Arguments: (title, message, buttons). " .. + "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button" + end + if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then + return "Function CreateStyledMessageDialog. " .. + "Arguments: (title, message, style, buttons). " .. + "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm" + end + if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then + return "Function GetFontHeight. " .. + "Arguments: (font, fontSize). " .. + "Side effect: returns the size in pixels of the given font + fontSize" + end + if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then + + end + if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then + return "Function CreateScrollingFrame. " .. + "Arguments: (orderList, style) " .. + "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)" + end + if funcNameOrFunc == "CreateTrueScrollingFrame" or funcNameOrFunc == t.CreateTrueScrollingFrame then + return "Function CreateTrueScrollingFrame. " .. + "Arguments: (nil) " .. + "Side effect: returns 2 objects, (scrollFrame, controlFrame). 'scrollFrame' can be filled with GuiObjects, and they will be clipped if not inside the frame's bounds. controlFrame has children scrollup and scrolldown, as well as a slider. controlFrame can be parented to any guiobject and it will readjust itself to fit." + end + if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then + return "Function AutoTruncateTextObject. " .. + "Arguments: (textLabel) " .. + "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument" + end + if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then + return "Function CreateSlider. " .. + "Arguments: (steps, width, position) " .. + "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on." + end + if funcNameOrFunc == "CreateLoadingFrame" or funcNameOrFunc == t.CreateLoadingFrame then + return "Function CreateLoadingFrame. " .. + "Arguments: (name, size, position) " .. + "Side effect: Creates a gui that can be manipulated to show progress for a particular action. Name appears above the loading bar, and size and position are udim2 values (both size and position are optional arguments). Returns 3 arguments, the first being the gui created. The second being updateLoadingGuiPercent, which is a bindable function. This function takes one argument (two optionally), which should be a number between 0 and 1, representing the percentage the loading gui should be at. The second argument to this function is a boolean value that if set to true will tween the current percentage value to the new percentage value, therefore our third argument is how long this tween should take. Our third returned argument is a BindableEvent, that when fired means that someone clicked the cancel button on the dialog." + end + if funcNameOrFunc == "CreateTerrainMaterialSelector" or funcNameOrFunc == t.CreateTerrainMaterialSelector then + return "Function CreateTerrainMaterialSelector. " .. + "Arguments: (size, position) " .. + "Side effect: Size and position are UDim2 values that specifies the selector's size and position. Both size and position are optional arguments. This method returns 3 objects (terrainSelectorGui, terrainSelected, forceTerrainSelection). terrainSelectorGui is just the gui object that we generate with this function, parent it as you like. TerrainSelected is a BindableEvent that is fired whenever a new terrain type is selected in the gui. ForceTerrainSelection is a function that takes an argument of Enum.CellMaterial and will force the gui to show that material as currently selected." + end + end + +return t \ No newline at end of file diff --git a/app/files/CoreGui/45374389 b/app/files/CoreGui/45374389 new file mode 100644 index 0000000..51592b8 --- /dev/null +++ b/app/files/CoreGui/45374389 @@ -0,0 +1,23 @@ +local t = {} + +t.Foo = + function() + print("foo") + end + +t.Bar = + function() + print("bar") + end + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "Foo" or funcNameOrFunc == t.Foo then + return "Function Foo. Arguments: None. Side effect: prints foo" + elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then + return "Function Bar. Arguments: None. Side effect: prints bar" + end + end + +return t \ No newline at end of file diff --git a/app/files/CoreGui/46295863 b/app/files/CoreGui/46295863 new file mode 100644 index 0000000..c5a70c7 --- /dev/null +++ b/app/files/CoreGui/46295863 @@ -0,0 +1,2153 @@ +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +--Include +local Create = assert(LoadLibrary("RbxUtility")).Create + +--FFlags +local FFlagExists, FFlagValue = pcall(function () return settings():GetFFlag("LoggingConsoleEnabled") end) +local FFlagLogginConsoleEnabled = FFlagExists and FFlagValue + +-- A Few Script Globals +local gui +if script.Parent:FindFirstChild("ControlFrame") then + gui = script.Parent:FindFirstChild("ControlFrame") +else + gui = script.Parent +end + +local helpButton = nil +local updateCameraDropDownSelection = nil +local updateVideoCaptureDropDownSelection = nil +local tweenTime = 0.2 + +local mouseLockLookScreenUrl = "http://www.nexium.fit/asset?id=54071825" +local classicLookScreenUrl = "http://www.nexium.fit/Asset?id=45915798" + +local hasGraphicsSlider = (game:GetService("CoreGui").Version >= 5) +local GraphicsQualityLevels = 10 -- how many levels we allow on graphics slider +local recordingVideo = false + +local currentMenuSelection = nil +local lastMenuSelection = {} + +local defaultPosition = UDim2.new(0,0,0,0) +local newGuiPlaces = {0,41324860} + +local centerDialogs = {} +local mainShield = nil + +local inStudioMode = UserSettings().GameSettings:InStudioMode() + +local macClient = false +local success, isMac = pcall(function() return not game.GuiService.IsWindows end) +macClient = success and isMac + +local function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +local function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resumeGameFunction(shield) + shield.Settings:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + delay(tweenTime,function() + shield.Visible = false + for i = 1, #centerDialogs do + centerDialogs[i].Visible = false + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + end + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true + currentMenuSelection = nil + lastMenuSelection = {} + end) +end + +function goToMenu(container,menuName, moveDirection,size,position) + if type(menuName) ~= "string" then return end + + table.insert(lastMenuSelection,currentMenuSelection) + if menuName == "GameMainMenu" then + lastMenuSelection = {} + end + + local containerChildren = container:GetChildren() + local selectedMenu = false + for i = 1, #containerChildren do + if containerChildren[i].Name == menuName then + containerChildren[i].Visible = true + currentMenuSelection = {container = container,name = menuName, direction = moveDirection, lastSize = size} + selectedMenu = true + if size and position then + containerChildren[i]:TweenSizeAndPosition(size,position,Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif size then + containerChildren[i]:TweenSizeAndPosition(size,UDim2.new(0.5,-size.X.Offset/2,0.5,-size.Y.Offset/2),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + else + containerChildren[i]:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + else + if moveDirection == "left" then + containerChildren[i]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "right" then + containerChildren[i]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "up" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "down" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + delay(tweenTime,function() + containerChildren[i].Visible = false + end) + end + end +end + +function resetLocalCharacter() + local player = game.Players.LocalPlayer + if player then + if player.Character and player.Character:FindFirstChild("Humanoid") then + player.Character.Humanoid.Health = 0 + end + end +end + +local function createTextButton(text,style,fontSize,buttonSize,buttonPosition) + local newTextButton = Instance.new("TextButton") + newTextButton.Font = Enum.Font.Arial + newTextButton.FontSize = fontSize + newTextButton.Size = buttonSize + newTextButton.Position = buttonPosition + newTextButton.Style = style + newTextButton.TextColor3 = Color3.new(1,1,1) + newTextButton.Text = text + return newTextButton +end + +local function CreateTextButtons(frame, buttons, yPos, ySize) + if #buttons < 1 then + error("Must have more than one button") + end + + local buttonNum = 1 + local buttonObjs = {} + + local function toggleSelection(button) + for i, obj in ipairs(buttonObjs) do + if obj == button then + obj.Style = Enum.ButtonStyle.RobloxButtonDefault + else + obj.Style = Enum.ButtonStyle.RobloxButton + end + end + end + + for i, obj in ipairs(buttons) do + local button = Instance.new("TextButton") + button.Name = "Button" .. buttonNum + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size18 + button.AutoButtonColor = true + button.Style = Enum.ButtonStyle.RobloxButton + button.Text = obj.Text + button.TextColor3 = Color3.new(1,1,1) + button.MouseButton1Click:connect(function() toggleSelection(button) obj.Function() end) + button.Parent = frame + button.ZIndex = 4 + buttonObjs[buttonNum] = button + + buttonNum = buttonNum + 1 + end + + toggleSelection(buttonObjs[1]) + + local numButtons = buttonNum-1 + + if numButtons == 1 then + frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) + elseif numButtons == 2 then + frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + + frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) + frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + elseif numButtons >= 3 then + local spacing = .1 / numButtons + local buttonSize = .9 / numButtons + + buttonNum = 1 + while buttonNum <= numButtons do + buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) + buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) + buttonNum = buttonNum + 1 + end + end +end + +function setRecordGui(recording, stopRecordButton, recordVideoButton) + if recording then + stopRecordButton.Visible = true + recordVideoButton.Text = "Stop Recording" + else + stopRecordButton.Visible = false + recordVideoButton.Text = "Record Video" + end +end + +function recordVideoClick(recordVideoButton, stopRecordButton) + recordingVideo = not recordingVideo + setRecordGui(recordingVideo, stopRecordButton, recordVideoButton) +end + +local currentlyToggling = false; +local DevConsoleToggle = nil; + +delay(0, function() + DevConsoleToggle = gui:WaitForChild("ToggleDevConsole") +end) + +function toggleDeveloperConsole() + if not DevConsoleToggle then + return + end + + DevConsoleToggle:Invoke() +end + +function backToGame(buttonClicked, shield, settingsButton) + buttonClicked.Parent.Parent.Parent.Parent.Visible = false + shield.Visible = false + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true +end + +function setDisabledState(guiObject) + if not guiObject then return end + + if guiObject:IsA("TextLabel") then + guiObject.TextTransparency = 0.9 + elseif guiObject:IsA("TextButton") then + guiObject.TextTransparency = 0.9 + guiObject.Active = false + else + if guiObject["ClassName"] then + print("setDisabledState() got object of unsupported type. object type is ",guiObject.ClassName) + end + end +end + +local function createHelpDialog(baseZIndex) + + if helpButton == nil then + if gui:FindFirstChild("TopLeftControl") and gui.TopLeftControl:FindFirstChild("Help") then + helpButton = gui.TopLeftControl.Help + elseif gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("Help") then + helpButton = gui.BottomRightControl.Help + end + end + + local shield = Instance.new("Frame") + shield.Name = "HelpDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 2 + + local helpDialog = Instance.new("Frame") + helpDialog.Name = "HelpDialog" + helpDialog.Style = Enum.FrameStyle.RobloxRound + helpDialog.Position = UDim2.new(.2, 0, .2, 0) + helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0) + helpDialog.Active = true + helpDialog.Parent = shield + helpDialog.ZIndex = baseZIndex + 2 + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = "Keyboard & Mouse Controls" + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.Position = UDim2.new(0, 0, 0.025, 0) + titleLabel.Size = UDim2.new(1, 0, 0, 40) + titleLabel.TextColor3 = Color3.new(1,1,1) + titleLabel.BackgroundTransparency = 1 + titleLabel.Parent = helpDialog + titleLabel.ZIndex = baseZIndex + 2 + + local buttonRow = Instance.new("Frame") + buttonRow.Name = "Buttons" + buttonRow.Position = UDim2.new(0.1, 0, .07, 40) + buttonRow.Size = UDim2.new(0.8, 0, 0, 45) + buttonRow.BackgroundTransparency = 1 + buttonRow.Parent = helpDialog + buttonRow.ZIndex = baseZIndex + 2 + + local imageFrame = Instance.new("Frame") + imageFrame.Name = "ImageFrame" + imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80) + imageFrame.Size = UDim2.new(0.9, 0, .9, -120) + imageFrame.BackgroundTransparency = 1 + imageFrame.Parent = helpDialog + imageFrame.ZIndex = baseZIndex + 2 + + local layoutFrame = Instance.new("Frame") + layoutFrame.Name = "LayoutFrame" + layoutFrame.Position = UDim2.new(0.5, 0, 0, 0) + layoutFrame.Size = UDim2.new(1.5, 0, 1, 0) + layoutFrame.BackgroundTransparency = 1 + layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY + layoutFrame.Parent = imageFrame + layoutFrame.ZIndex = baseZIndex + 2 + + local image = Instance.new("ImageLabel") + image.Name = "Image" + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + image.Position = UDim2.new(-0.5, 0, 0, 0) + image.Size = UDim2.new(1, 0, 1, 0) + image.BackgroundTransparency = 1 + image.Parent = layoutFrame + image.ZIndex = baseZIndex + 2 + + local buttons = {} + buttons[1] = {} + buttons[1].Text = "Look" + buttons[1].Function = function() + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + end + buttons[2] = {} + buttons[2].Text = "Move" + buttons[2].Function = function() + image.Image = "http://www.nexium.fit/Asset?id=45915811" + end + buttons[3] = {} + buttons[3].Text = "Gear" + buttons[3].Function = function() + image.Image = "http://www.nexium.fit/Asset?id=45917596" + end + buttons[4] = {} + buttons[4].Text = "Zoom" + buttons[4].Function = function() + image.Image = "http://www.nexium.fit/Asset?id=45915825" + end + + CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1,0)) + + if FFlagLogginConsoleEnabled then + local devConsoleButton = Create'TextButton'{ + Name = "DeveloperConsoleButton"; + Text = "Log"; + Size = UDim2.new(0,60,0,30); + Style = Enum.ButtonStyle.RobloxButton; + Position = UDim2.new(1,-65,1,-35); + Font = Enum.Font.Arial; + FontSize = Enum.FontSize.Size18; + TextColor3 = Color3.new(1,1,1); + ZIndex = baseZIndex + 4; + BackgroundTransparency = 1; + Parent = helpDialog; + } + + Create'TextLabel'{ + Name = "DeveloperConsoleButton"; + Text = "F9"; + Size = UDim2.new(0,14,0,14); + Position = UDim2.new(1,-6,0, 0); + Font = Enum.Font.Arial; + FontSize = Enum.FontSize.Size12; + TextColor3 = Color3.new(0,1,0); + ZIndex = baseZIndex + 4; + BackgroundTransparency = 1; + Parent = devConsoleButton; + } + + waitForProperty(game.Players, "LocalPlayer") + game.Players.LocalPlayer:GetMouse().KeyDown:connect(function(key) + if string.byte(key) == 34 then --F9 + toggleDeveloperConsole() + end + end) + + devConsoleButton.MouseButton1Click:connect(function() + toggleDeveloperConsole() + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end) + end + + + + -- set up listeners for type of mouse mode, but keep constructing gui at same time + delay(0, function() + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield,"Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop) + if prop ~= "Text" then return end + if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then -- only change if this is the currently selected panel + if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then + image.Image = classicLookScreenUrl + else + image.Image = mouseLockLookScreenUrl + end + end + end) + end) + + + local okBtn = Instance.new("TextButton") + okBtn.Name = "OkBtn" + okBtn.Text = "OK" + okBtn.Modal = true + okBtn.Size = UDim2.new(0.3, 0, 0, 45) + okBtn.Position = UDim2.new(0.35, 0, .975, -50) + okBtn.Font = Enum.Font.Arial + okBtn.FontSize = Enum.FontSize.Size18 + okBtn.BackgroundTransparency = 1 + okBtn.TextColor3 = Color3.new(1,1,1) + okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault + okBtn.ZIndex = baseZIndex + 2 + okBtn.MouseButton1Click:connect( + function() + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end) + okBtn.Parent = helpDialog + + robloxLock(shield) + return shield +end + +local function createLeaveConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "LeaveConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Leave",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0.8,0)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton:SetVerb("Exit") + + local noButton = createTextButton("Stay",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0.8,0)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local leaveText = Instance.new("TextLabel") + leaveText.Name = "LeaveText" + leaveText.Text = "Leave this game?" + leaveText.Size = UDim2.new(1,0,0.8,0) + leaveText.TextWrap = true + leaveText.TextColor3 = Color3.new(1,1,1) + leaveText.Font = Enum.Font.ArialBold + leaveText.FontSize = Enum.FontSize.Size36 + leaveText.BackgroundTransparency = 1 + leaveText.ZIndex = baseZIndex + 4 + leaveText.Parent = frame + + return frame +end + +local function createResetConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "ResetConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Reset",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0,299)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton.MouseButton1Click:connect(function() + resumeGameFunction(shield) + resetLocalCharacter() + end) + + local noButton = createTextButton("Cancel",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0,299)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local resetCharacterText = Instance.new("TextLabel") + resetCharacterText.Name = "ResetCharacterText" + resetCharacterText.Text = "Are you sure you want to reset your character?" + resetCharacterText.Size = UDim2.new(1,0,0.8,0) + resetCharacterText.TextWrap = true + resetCharacterText.TextColor3 = Color3.new(1,1,1) + resetCharacterText.Font = Enum.Font.ArialBold + resetCharacterText.FontSize = Enum.FontSize.Size36 + resetCharacterText.BackgroundTransparency = 1 + resetCharacterText.ZIndex = baseZIndex + 4 + resetCharacterText.Parent = frame + + local fineResetCharacterText = resetCharacterText:Clone() + fineResetCharacterText.Name = "FineResetCharacterText" + fineResetCharacterText.Text = "You will be put back on a spawn point" + fineResetCharacterText.Size = UDim2.new(0,303,0,18) + fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215) + fineResetCharacterText.FontSize = Enum.FontSize.Size18 + fineResetCharacterText.Parent = frame + + return frame +end + +local function createGameMainMenu(baseZIndex, shield) + local gameMainMenuFrame = Instance.new("Frame") + gameMainMenuFrame.Name = "GameMainMenu" + gameMainMenuFrame.BackgroundTransparency = 1 + gameMainMenuFrame.Size = UDim2.new(1,0,1,0) + gameMainMenuFrame.ZIndex = baseZIndex + 4 + gameMainMenuFrame.Parent = settingsFrame + + -- GameMainMenu Children + + local gameMainMenuTitle = Instance.new("TextLabel") + gameMainMenuTitle.Name = "Title" + gameMainMenuTitle.Text = "Game Menu" + gameMainMenuTitle.BackgroundTransparency = 1 + gameMainMenuTitle.TextStrokeTransparency = 0 + gameMainMenuTitle.Font = Enum.Font.ArialBold + gameMainMenuTitle.FontSize = Enum.FontSize.Size36 + gameMainMenuTitle.Size = UDim2.new(1,0,0,36) + gameMainMenuTitle.Position = UDim2.new(0,0,0,4) + gameMainMenuTitle.TextColor3 = Color3.new(1,1,1) + gameMainMenuTitle.ZIndex = baseZIndex + 4 + gameMainMenuTitle.Parent = gameMainMenuFrame + + local robloxHelpButton = createTextButton("Help",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,256)) + robloxHelpButton.Name = "HelpButton" + robloxHelpButton.ZIndex = baseZIndex + 4 + robloxHelpButton.Parent = gameMainMenuFrame + helpButton = robloxHelpButton + + local helpDialog = createHelpDialog(baseZIndex) + helpDialog.Parent = gui + + helpButton.MouseButton1Click:connect( + function() + table.insert(centerDialogs,helpDialog) + game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + helpDialog.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + helpDialog.Visible = false + end) + end) + helpButton.Active = true + + local helpShortcut = Instance.new("TextLabel") + helpShortcut.Name = "HelpShortcutText" + helpShortcut.Text = "F1" + helpShortcut.Visible = false + helpShortcut.BackgroundTransparency = 1 + helpShortcut.Font = Enum.Font.Arial + helpShortcut.FontSize = Enum.FontSize.Size12 + helpShortcut.Position = UDim2.new(0,85,0,0) + helpShortcut.Size = UDim2.new(0,30,0,30) + helpShortcut.TextColor3 = Color3.new(0,1,0) + helpShortcut.ZIndex = baseZIndex + 4 + helpShortcut.Parent = robloxHelpButton + + local screenshotButton = createTextButton("Screenshot",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,256)) + screenshotButton.Name = "ScreenshotButton" + screenshotButton.ZIndex = baseZIndex + 4 + screenshotButton.Parent = gameMainMenuFrame + screenshotButton.Visible = not macClient + screenshotButton:SetVerb("Screenshot") + + local screenshotShortcut = helpShortcut:clone() + screenshotShortcut.Name = "ScreenshotShortcutText" + screenshotShortcut.Text = "PrintSc" + screenshotShortcut.Position = UDim2.new(0,118,0,0) + screenshotShortcut.Visible = true + screenshotShortcut.Parent = screenshotButton + + + local recordVideoButton = createTextButton("Record Video",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,306)) + recordVideoButton.Name = "RecordVideoButton" + recordVideoButton.ZIndex = baseZIndex + 4 + recordVideoButton.Parent = gameMainMenuFrame + recordVideoButton.Visible = not macClient + recordVideoButton:SetVerb("RecordToggle") + + local recordVideoShortcut = helpShortcut:clone() + recordVideoShortcut.Visible = hasGraphicsSlider + recordVideoShortcut.Name = "RecordVideoShortcutText" + recordVideoShortcut.Text = "F12" + recordVideoShortcut.Position = UDim2.new(0,120,0,0) + recordVideoShortcut.Parent = recordVideoButton + + local stopRecordButton = Instance.new("ImageButton") + stopRecordButton.Name = "StopRecordButton" + stopRecordButton.BackgroundTransparency = 1 + stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png" + stopRecordButton.Size = UDim2.new(0,59,0,27) + stopRecordButton:SetVerb("RecordToggle") + + stopRecordButton.MouseButton1Click:connect(function() recordVideoClick(recordVideoButton, stopRecordButton) end) + stopRecordButton.Visible = false + stopRecordButton.Parent = gui + + local reportAbuseButton = createTextButton("Report Abuse",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,306)) + reportAbuseButton.Name = "ReportAbuseButton" + reportAbuseButton.ZIndex = baseZIndex + 4 + reportAbuseButton.Parent = gameMainMenuFrame + + local leaveGameButton = createTextButton("Leave Game",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,358)) + leaveGameButton.Name = "LeaveGameButton" + leaveGameButton.ZIndex = baseZIndex + 4 + leaveGameButton.Parent = gameMainMenuFrame + + local resumeGameButton = createTextButton("Resume Game",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,54)) + resumeGameButton.Name = "resumeGameButton" + resumeGameButton.ZIndex = baseZIndex + 4 + resumeGameButton.Parent = gameMainMenuFrame + resumeGameButton.Modal = true + resumeGameButton.MouseButton1Click:connect(function() resumeGameFunction(shield) end) + + local gameSettingsButton = createTextButton("Game Settings",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,156)) + gameSettingsButton.Name = "SettingsButton" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + + if game:FindFirstChild("LoadingGuiService") and #game.LoadingGuiService:GetChildren() > 0 then + local gameSettingsButton = createTextButton("Game Instructions",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,207)) + gameSettingsButton.Name = "GameInstructions" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + gameSettingsButton.MouseButton1Click:connect(function() + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local loadingGui = game.Players.LocalPlayer:FindFirstChild("PlayerLoadingGui") + if loadingGui then + loadingGui.Visible = true + end + end + end) + end + + local resetButton = createTextButton("Reset Character",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,105)) + resetButton.Name = "ResetButton" + resetButton.ZIndex = baseZIndex + 4 + resetButton.Parent = gameMainMenuFrame + + return gameMainMenuFrame +end + +local function createGameSettingsMenu(baseZIndex, shield) + local gameSettingsMenuFrame = Instance.new("Frame") + gameSettingsMenuFrame.Name = "GameSettingsMenu" + gameSettingsMenuFrame.BackgroundTransparency = 1 + gameSettingsMenuFrame.Size = UDim2.new(1,0,1,0) + gameSettingsMenuFrame.ZIndex = baseZIndex + 4 + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Settings" + title.Size = UDim2.new(1,0,0,48) + title.Position = UDim2.new(0,9,0,-9) + title.Font = Enum.Font.ArialBold + title.FontSize = Enum.FontSize.Size36 + title.TextColor3 = Color3.new(1,1,1) + title.ZIndex = baseZIndex + 4 + title.BackgroundTransparency = 1 + title.Parent = gameSettingsMenuFrame + + local fullscreenText = Instance.new("TextLabel") + fullscreenText.Name = "FullscreenText" + fullscreenText.Text = "Fullscreen Mode" + fullscreenText.Size = UDim2.new(0,124,0,18) + fullscreenText.Position = UDim2.new(0,62,0,145) + fullscreenText.Font = Enum.Font.Arial + fullscreenText.FontSize = Enum.FontSize.Size18 + fullscreenText.TextColor3 = Color3.new(1,1,1) + fullscreenText.ZIndex = baseZIndex + 4 + fullscreenText.BackgroundTransparency = 1 + fullscreenText.Parent = gameSettingsMenuFrame + + local fullscreenShortcut = Instance.new("TextLabel") + fullscreenShortcut.Visible = hasGraphicsSlider + fullscreenShortcut.Name = "FullscreenShortcutText" + fullscreenShortcut.Text = "F11" + fullscreenShortcut.BackgroundTransparency = 1 + fullscreenShortcut.Font = Enum.Font.Arial + fullscreenShortcut.FontSize = Enum.FontSize.Size12 + fullscreenShortcut.Position = UDim2.new(0,186,0,141) + fullscreenShortcut.Size = UDim2.new(0,30,0,30) + fullscreenShortcut.TextColor3 = Color3.new(0,1,0) + fullscreenShortcut.ZIndex = baseZIndex + 4 + fullscreenShortcut.Parent = gameSettingsMenuFrame + + local studioText = Instance.new("TextLabel") + studioText.Visible = false + studioText.Name = "StudioText" + studioText.Text = "Studio Mode" + studioText.Size = UDim2.new(0,95,0,18) + studioText.Position = UDim2.new(0,62,0,179) + studioText.Font = Enum.Font.Arial + studioText.FontSize = Enum.FontSize.Size18 + studioText.TextColor3 = Color3.new(1,1,1) + studioText.ZIndex = baseZIndex + 4 + studioText.BackgroundTransparency = 1 + studioText.Parent = gameSettingsMenuFrame + + local studioShortcut = fullscreenShortcut:clone() + studioShortcut.Name = "StudioShortcutText" + studioShortcut.Visible = false -- TODO: turn back on when f2 hack is fixed + studioShortcut.Text = "F2" + studioShortcut.Position = UDim2.new(0,154,0,175) + studioShortcut.Parent = gameSettingsMenuFrame + + local studioCheckbox = nil + + if hasGraphicsSlider then + local qualityText = Instance.new("TextLabel") + qualityText.Name = "QualityText" + qualityText.Text = "Graphics Quality" + qualityText.Size = UDim2.new(0,128,0,18) + qualityText.Position = UDim2.new(0,30,0,239) + qualityText.Font = Enum.Font.Arial + qualityText.FontSize = Enum.FontSize.Size18 + qualityText.TextColor3 = Color3.new(1,1,1) + qualityText.ZIndex = baseZIndex + 4 + qualityText.BackgroundTransparency = 1 + qualityText.Parent = gameSettingsMenuFrame + qualityText.Visible = not inStudioMode + + local autoText = qualityText:clone() + autoText.Name = "AutoText" + autoText.Text = "Auto" + autoText.Position = UDim2.new(0,183,0,214) + autoText.TextColor3 = Color3.new(128/255,128/255,128/255) + autoText.Size = UDim2.new(0,34,0,18) + autoText.Parent = gameSettingsMenuFrame + autoText.Visible = not inStudioMode + + local fasterText = autoText:clone() + fasterText.Name = "FasterText" + fasterText.Text = "Faster" + fasterText.Position = UDim2.new(0,185,0,274) + fasterText.TextColor3 = Color3.new(95,95,95) + fasterText.FontSize = Enum.FontSize.Size14 + fasterText.Parent = gameSettingsMenuFrame + fasterText.Visible = not inStudioMode + + local fasterShortcut = fullscreenShortcut:clone() + fasterShortcut.Name = "FasterShortcutText" + fasterShortcut.Text = "F10 + Shift" + fasterShortcut.Position = UDim2.new(0,185,0,283) + fasterShortcut.Parent = gameSettingsMenuFrame + fasterShortcut.Visible = not inStudioMode + + local betterQualityText = autoText:clone() + betterQualityText.Name = "BetterQualityText" + betterQualityText.Text = "Better Quality" + betterQualityText.TextWrap = true + betterQualityText.Size = UDim2.new(0,41,0,28) + betterQualityText.Position = UDim2.new(0,390,0,269) + betterQualityText.TextColor3 = Color3.new(95,95,95) + betterQualityText.FontSize = Enum.FontSize.Size14 + betterQualityText.Parent = gameSettingsMenuFrame + betterQualityText.Visible = not inStudioMode + + local betterQualityShortcut = fullscreenShortcut:clone() + betterQualityShortcut.Name = "BetterQualityShortcut" + betterQualityShortcut.Text = "F10" + betterQualityShortcut.Position = UDim2.new(0,394,0,288) + betterQualityShortcut.Parent = gameSettingsMenuFrame + betterQualityShortcut.Visible = not inStudioMode + + local autoGraphicsButton = createTextButton("X",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,187,0,239)) + autoGraphicsButton.Name = "AutoGraphicsButton" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoGraphicsButton.Parent = gameSettingsMenuFrame + autoGraphicsButton.Visible = not inStudioMode + + local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(GraphicsQualityLevels,150,UDim2.new(0, 230, 0, 280)) -- graphics - 1 because slider starts at 1 instead of 0 + graphicsSlider.Parent = gameSettingsMenuFrame + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + graphicsSlider.Visible = not inStudioMode + graphicsLevel.Value = math.floor((settings().Rendering:GetMaxQualityLevel() - 1)/2) + + local graphicsSetter = Instance.new("TextBox") + graphicsSetter.Name = "GraphicsSetter" + graphicsSetter.BackgroundColor3 = Color3.new(0,0,0) + graphicsSetter.BorderColor3 = Color3.new(128/255,128/255,128/255) + graphicsSetter.Size = UDim2.new(0,50,0,25) + graphicsSetter.Position = UDim2.new(0,450,0,269) + graphicsSetter.TextColor3 = Color3.new(1,1,1) + graphicsSetter.Font = Enum.Font.Arial + graphicsSetter.FontSize = Enum.FontSize.Size18 + graphicsSetter.Text = "Auto" + graphicsSetter.ZIndex = 1 + graphicsSetter.TextWrap = true + graphicsSetter.Parent = gameSettingsMenuFrame + graphicsSetter.Visible = not inStudioMode + + local isAutoGraphics = true + if not inStudioMode then + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + else + settings().Rendering.EnableFRM = false + end + + local listenToGraphicsLevelChange = true + + local function setAutoGraphicsGui(active) + isAutoGraphics = active + if active then + autoGraphicsButton.Text = "X" + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + graphicsSetter.Text = "Auto" + else + autoGraphicsButton.Text = "" + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + end + + local function goToAutoGraphics() + setAutoGraphicsGui(true) + + UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic + + settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic + end + + local function setGraphicsQualityLevel(newLevel) + local percentage = newLevel/GraphicsQualityLevels + local newSetting = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) * percentage) + if newSetting == 20 then -- Level 20 is the same as level 21, except it doesn't render ambient occlusion + newSetting = 21 + elseif newLevel == 1 then -- make sure we can go to lowest settings (for terrible computers) + newSetting = 1 + elseif newSetting > settings().Rendering:GetMaxQualityLevel() then + newSetting = settings().Rendering:GetMaxQualityLevel() - 1 + end + + UserSettings().GameSettings.SavedQualityLevel = newLevel + settings().Rendering.QualityLevel = newSetting + end + + local function goToManualGraphics(explicitLevel) + setAutoGraphicsGui(false) + + if explicitLevel then + graphicsLevel.Value = explicitLevel + else + graphicsLevel.Value = math.floor((settings().Rendering.AutoFRMLevel/(settings().Rendering:GetMaxQualityLevel() - 1)) * GraphicsQualityLevels) + end + + if explicitLevel == graphicsLevel.Value then -- make sure we are actually in right graphics mode + setGraphicsQualityLevel(graphicsLevel.Value) + end + + if not explicitLevel then + UserSettings().GameSettings.SavedQualityLevel = graphicsLevel.Value + end + graphicsSetter.Text = tostring(graphicsLevel.Value) + end + + local function showAutoGraphics() + autoText.ZIndex = baseZIndex + 4 + autoGraphicsButton.ZIndex = baseZIndex + 4 + end + + local function hideAutoGraphics() + autoText.ZIndex = 1 + autoGraphicsButton.ZIndex = 1 + end + + local function showManualGraphics() + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + + local function hideManualGraphics() + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + end + + local function translateSavedQualityLevelToInt(savedQualityLevel) + if savedQualityLevel == Enum.SavedQualitySetting.Automatic then + return 0 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel1 then + return 1 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel2 then + return 2 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel3 then + return 3 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel4 then + return 4 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel5 then + return 5 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel6 then + return 6 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel7 then + return 7 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel8 then + return 8 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel9 then + return 9 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel10 then + return 10 + end + end + + local function enableGraphicsWidget() + settings().Rendering.EnableFRM = true + + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + if isAutoGraphics then + showAutoGraphics() + goToAutoGraphics() + else + showAutoGraphics() + showManualGraphics() + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + end + + local function disableGraphicsWidget() + hideManualGraphics() + hideAutoGraphics() + settings().Rendering.EnableFRM = false + end + + graphicsSetter.FocusLost:connect(function() + if isAutoGraphics then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + local newGraphicsValue = tonumber(graphicsSetter.Text) + if newGraphicsValue == nil then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + if newGraphicsValue < 1 then newGraphicsValue = 1 + elseif newGraphicsValue >= settings().Rendering:GetMaxQualityLevel() then + newGraphicsValue = settings().Rendering:GetMaxQualityLevel() - 1 + end + + graphicsLevel.Value = newGraphicsValue + setGraphicsQualityLevel(graphicsLevel.Value) + graphicsSetter.Text = tostring(graphicsLevel.Value) + end) + + graphicsLevel.Changed:connect(function(prop) + if isAutoGraphics then return end + if not listenToGraphicsLevelChange then return end + + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + end) + + -- setup our graphic mode on load + if inStudioMode or UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic then + if inStudioMode then + settings().Rendering.EnableFRM = false + disableGraphicsWidget() + else + settings().Rendering.EnableFRM = true + goToAutoGraphics() + end + else + settings().Rendering.EnableFRM = true + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + + autoGraphicsButton.MouseButton1Click:connect(function() + if inStudioMode and not game.Players.LocalPlayer then return end + + if not isAutoGraphics then + goToAutoGraphics() + else + goToManualGraphics(graphicsLevel.Value) + end + end) + + local lastUpdate = nil + game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease) + if isAutoGraphics then return end -- only can set graphics in manual mode + + if graphicsIncrease then + if (graphicsLevel.Value + 1) > GraphicsQualityLevels then return end + graphicsLevel.Value = graphicsLevel.Value + 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Increased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + else + if (graphicsLevel.Value - 1) <= 0 then return end + graphicsLevel.Value = graphicsLevel.Value - 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Decreased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + end + end) + + game.Players.PlayerAdded:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + enableGraphicsWidget() + end + end) + game.Players.PlayerRemoving:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + disableGraphicsWidget() + end + end) + + studioCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176)) + studioCheckbox.Name = "StudioCheckbox" + studioCheckbox.ZIndex = baseZIndex + 4 + --studioCheckbox.Parent = gameSettingsMenuFrame -- todo: enable when studio h4x aren't an issue anymore + studioCheckbox:SetVerb("TogglePlayMode") + studioCheckbox.Visible = false -- todo: enabled when studio h4x aren't an issue anymore + + local wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + if inStudioMode and not game.Players.LocalPlayer then + studioCheckbox.Text = "X" + disableGraphicsWidget() + elseif inStudioMode then + studioCheckbox.Text = "X" + enableGraphicsWidget() + end + if hasGraphicsSlider then + UserSettings().GameSettings.StudioModeChanged:connect(function(isStudioMode) + inStudioMode = isStudioMode + if isStudioMode then + wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + goToAutoGraphics() + studioCheckbox.Text = "X" + autoGraphicsButton.ZIndex = 1 + autoText.ZIndex = 1 + else + if wasManualGraphics then + goToManualGraphics() + end + studioCheckbox.Text = "" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoText.ZIndex = baseZIndex + 4 + end + end) + else + studioCheckbox.MouseButton1Click:connect(function() + if not studioCheckbox.Active then return end + + if studioCheckbox.Text == "" then + studioCheckbox.Text = "X" + else + studioCheckbox.Text = "" + end + end) + end + end + + local fullscreenCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,144)) + fullscreenCheckbox.Name = "FullscreenCheckbox" + fullscreenCheckbox.ZIndex = baseZIndex + 4 + fullscreenCheckbox.Parent = gameSettingsMenuFrame + fullscreenCheckbox:SetVerb("ToggleFullScreen") + if UserSettings().GameSettings:InFullScreen() then fullscreenCheckbox.Text = "X" end + if hasGraphicsSlider then + UserSettings().GameSettings.FullscreenChanged:connect(function(isFullscreen) + if isFullscreen then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + else + fullscreenCheckbox.MouseButton1Click:connect(function() + if fullscreenCheckbox.Text == "" then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + end + + if game:FindFirstChild("NetworkClient") then -- we are playing online + setDisabledState(studioText) + setDisabledState(studioShortcut) + setDisabledState(studioCheckbox) + end + + local backButton + if hasGraphicsSlider then + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,330)) + backButton.Modal = true + else + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,270)) + backButton.Modal = true + end + + backButton.Name = "BackButton" + backButton.ZIndex = baseZIndex + 4 + backButton.Parent = gameSettingsMenuFrame + + local syncVideoCaptureSetting = nil + + if not macClient then + local videoCaptureLabel = Instance.new("TextLabel") + videoCaptureLabel.Name = "VideoCaptureLabel" + videoCaptureLabel.Text = "After Capturing Video" + videoCaptureLabel.Font = Enum.Font.Arial + videoCaptureLabel.FontSize = Enum.FontSize.Size18 + videoCaptureLabel.Position = UDim2.new(0,32,0,100) + videoCaptureLabel.Size = UDim2.new(0,164,0,18) + videoCaptureLabel.BackgroundTransparency = 1 + videoCaptureLabel.TextColor3 = Color3I(255,255,255) + videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left + videoCaptureLabel.ZIndex = baseZIndex + 4 + videoCaptureLabel.Parent = gameSettingsMenuFrame + + local videoNames = {} + local videoNameToItem = {} + videoNames[1] = "Just Save to Disk" + videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"] + videoNames[2] = "Upload to YouTube" + videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"] + + local videoCaptureDropDown = nil + videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames, + function(text) + UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text] + end) + videoCaptureDropDown.Name = "VideoCaptureField" + videoCaptureDropDown.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94) + videoCaptureDropDown.Size = UDim2.new(0,200,0,32) + videoCaptureDropDown.Parent = gameSettingsMenuFrame + + syncVideoCaptureSetting = function() + if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then + updateVideoCaptureDropDownSelection(videoNames[1]) + elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then + updateVideoCaptureDropDownSelection(videoNames[2]) + else + UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"] + updateVideoCaptureDropDownSelection(videoNames[2]) + end + end + end + + local cameraLabel = Instance.new("TextLabel") + cameraLabel.Name = "CameraLabel" + cameraLabel.Text = "Character & Camera Controls" + cameraLabel.Font = Enum.Font.Arial + cameraLabel.FontSize = Enum.FontSize.Size18 + cameraLabel.Position = UDim2.new(0,31,0,58) + cameraLabel.Size = UDim2.new(0,224,0,18) + cameraLabel.TextColor3 = Color3I(255,255,255) + cameraLabel.TextXAlignment = Enum.TextXAlignment.Left + cameraLabel.BackgroundTransparency = 1 + cameraLabel.ZIndex = baseZIndex + 4 + cameraLabel.Parent = gameSettingsMenuFrame + + local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true) + + local enumItems = Enum.ControlMode:GetEnumItems() + local enumNames = {} + local enumNameToItem = {} + for i,obj in ipairs(enumItems) do + enumNames[i] = obj.Name + enumNameToItem[obj.Name] = obj + end + + local cameraDropDown + cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames, + function(text) + UserSettings().GameSettings.ControlMode = enumNameToItem[text] + + pcall(function() + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + end) + end) + cameraDropDown.Name = "CameraField" + cameraDropDown.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + cameraDropDown.Position = UDim2.new(0, 270, 0, 52) + cameraDropDown.Size = UDim2.new(0,200,0,32) + cameraDropDown.Parent = gameSettingsMenuFrame + + return gameSettingsMenuFrame +end + +if LoadLibrary then + RbxGui = LoadLibrary("RbxGui") + local baseZIndex = 0 +if UserSettings then + + local createSettingsDialog = function() + waitForChild(gui,"BottomLeftControl") + settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton") + + if settingsButton == nil then + settingsButton = Instance.new("ImageButton") + settingsButton.Name = "SettingsButton" + settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png" + settingsButton.BackgroundTransparency = 1 + settingsButton.Active = false + settingsButton.Size = UDim2.new(0,54,0,46) + settingsButton.Position = UDim2.new(0,2,0,50) + settingsButton.Parent = gui.BottomLeftControl + end + + local shield = Instance.new("TextButton") + shield.Text = "" + shield.Name = "UserSettingsShield" + shield.Active = true + shield.AutoButtonColor = false + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 2 + mainShield = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -262, -0.5, -200) + frame.Size = UDim2.new(0, 525, 0, 430) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "SettingsStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 3 + settingsFrame.Parent = frame + + local gameMainMenu = createGameMainMenu(baseZIndex, shield) + gameMainMenu.Parent = settingsFrame + + gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function() + backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton) + end) + + gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function() + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton) + end) + + if settings():FindFirstChild("Game Options") then + pcall(function() + settings():FindFirstChild("Game Options").VideoRecordingChangeRequest:connect(function(recording) + recordingVideo = recording + setRecordGui(recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton) + end) + end) + end + + game.CoreGui.RobloxGui.Changed:connect(function(prop) -- We have stopped recording when we resize + if prop == "AbsoluteSize" and recordingVideo then + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + end + end) + + function localPlayerChange() + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer then + settings().Rendering.EnableFRM = true + elseif inStudioMode then + settings().Rendering.EnableFRM = false + end + end + + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer ~= nil then + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + else + delay(0,function() + waitForProperty(game.Players,"LocalPlayer") + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + end) + end + + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + if not gameMainMenu.ReportAbuseButton.Visible then + game.ChildAdded:connect(function(child) + if child:IsA("NetworkClient") then + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + end + end) + end + + gameMainMenu.ResetButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"ResetConfirmationMenu","up",UDim2.new(0,525,0,370)) + end) + + gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"LeaveConfirmationMenu","down",UDim2.new(0,525,0,300)) + end) + + if game.CoreGui.Version >= 4 then -- we can use escape! + game:GetService("GuiService").EscapeKeyPressed:connect(function() + if currentMenuSelection == nil then + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + shield.Active = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + elseif #lastMenuSelection > 0 then + if #centerDialogs > 0 then + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + end + + goToMenu(lastMenuSelection[#lastMenuSelection]["container"],lastMenuSelection[#lastMenuSelection]["name"], + lastMenuSelection[#lastMenuSelection]["direction"],lastMenuSelection[#lastMenuSelection]["lastSize"]) + + table.remove(lastMenuSelection,#lastMenuSelection) + if #lastMenuSelection == 1 then -- apparently lua can't reduce count to 0... T_T + lastMenuSelection = {} + end + else + resumeGameFunction(shield) + end + end) + end + + local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield) + gameSettingsMenu.Visible = false + gameSettingsMenu.Parent = settingsFrame + + gameMainMenu.SettingsButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameSettingsMenu","left",UDim2.new(0,525,0,350)) + end) + + gameSettingsMenu.BackButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + end) + + local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield) + resetConfirmationWindow.Visible = false + resetConfirmationWindow.Parent = settingsFrame + + local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex,shield) + leaveConfirmationWindow.Visible = false + leaveConfirmationWindow.Parent = settingsFrame + + robloxLock(shield) + + settingsButton.MouseButton1Click:connect( + function() + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + end) + + return shield + end + + delay(0, function() + createSettingsDialog().Parent = gui + + gui.BottomLeftControl.SettingsButton.Active = true + gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0,2,0,-2) + + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + + -- our script has loaded, get rid of older buttons now + local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit") + if leaveGameButton then leaveGameButton:Remove() end + + local topLeft = gui:FindFirstChild("TopLeftControl") + if topLeft then + leaveGameButton = topLeft:FindFirstChild("Exit") + if leaveGameButton then leaveGameButton:Remove() end + + topLeft:Remove() + end + end) + +end --UserSettings call + +local createSaveDialogs = function() + local shield = Instance.new("TextButton") + shield.Text = "" + shield.AutoButtonColor = false + shield.Name = "SaveDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex+1 + + local clearAndResetDialog + local save + local saveLocal + local dontSave + local cancel + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Save" + messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault + messageBoxButtons[1].Function = function() save() end + messageBoxButtons[2] = {} + messageBoxButtons[2].Text = "Cancel" + messageBoxButtons[2].Function = function() cancel() end + messageBoxButtons[3] = {} + messageBoxButtons[3].Text = "Don't Save" + messageBoxButtons[3].Function = function() dontSave() end + + local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to ROBLOX before leaving?", "Confirm", messageBoxButtons) + saveDialogMessageBox.Visible = true + saveDialogMessageBox.Parent = shield + + + local errorBoxButtons = {} + + local buttonOffset = 1 + if game.LocalSaveEnabled then + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Save to Disk" + errorBoxButtons[buttonOffset].Function = function() saveLocal() end + buttonOffset = buttonOffset + 1 + end + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Keep Playing" + errorBoxButtons[buttonOffset].Function = function() cancel() end + errorBoxButtons[buttonOffset+1] = {} + errorBoxButtons[buttonOffset+1].Text = "Don't Save" + errorBoxButtons[buttonOffset+1].Function = function() dontSave() end + + local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to ROBLOX. If this problem continues to occur, please make sure your Roblox account has a verified email address.", "Error", errorBoxButtons) + errorDialogMessageBox.Visible = false + errorDialogMessageBox.Parent = shield + + local spinnerDialog = Instance.new("Frame") + spinnerDialog.Name = "SpinnerDialog" + spinnerDialog.Style = Enum.FrameStyle.RobloxRound + spinnerDialog.Size = UDim2.new(0, 350, 0, 150) + spinnerDialog.Position = UDim2.new(.5, -175, .5, -75) + spinnerDialog.Visible = false + spinnerDialog.Active = true + spinnerDialog.Parent = shield + + local waitingLabel = Instance.new("TextLabel") + waitingLabel.Name = "WaitingLabel" + waitingLabel.Text = "Saving to ROBLOX..." + waitingLabel.Font = Enum.Font.ArialBold + waitingLabel.FontSize = Enum.FontSize.Size18 + waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0) + waitingLabel.TextColor3 = Color3.new(1,1,1) + waitingLabel.Parent = spinnerDialog + + local spinnerFrame = Instance.new("Frame") + spinnerFrame.Name = "Spinner" + spinnerFrame.Size = UDim2.new(0, 80, 0, 80) + spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40) + spinnerFrame.BackgroundTransparency = 1 + spinnerFrame.Parent = spinnerDialog + + local spinnerIcons = {} + local spinnerNum = 1 + while spinnerNum <= 8 do + local spinnerImage = Instance.new("ImageLabel") + spinnerImage.Name = "Spinner"..spinnerNum + spinnerImage.Size = UDim2.new(0, 16, 0, 16) + spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8) + spinnerImage.BackgroundTransparency = 1 + spinnerImage.Image = "http://www.nexium.fit/Asset?id=45880710" + spinnerImage.Parent = spinnerFrame + + spinnerIcons[spinnerNum] = spinnerImage + spinnerNum = spinnerNum + 1 + end + + save = function() + saveDialogMessageBox.Visible = false + + --Show the spinner dialog + spinnerDialog.Visible = true + local spin = true + --Make it spin + delay(0, function() + local spinPos = 0 + while spin do + local pos = 0 + + while pos < 8 do + if pos == spinPos or pos == ((spinPos+1)%8) then + spinnerIcons[pos+1].Image = "http://www.nexium.fit/Asset?id=45880668" + else + spinnerIcons[pos+1].Image = "http://www.nexium.fit/Asset?id=45880710" + end + + pos = pos + 1 + end + spinPos = (spinPos + 1) % 8 + wait(0.2) + end + end) + + --Do the save while the spinner is going, function will wait + local result = game:SaveToRoblox() + if not result then + --Try once more + result = game:SaveToRoblox() + end + + --Hide the spinner dialog + spinnerDialog.Visible = false + --And cause the delay thread to stop + spin = false + + --Now process the result + if result then + --Success, close + game:FinishShutdown(false) + clearAndResetDialog() + else + --Failure, show the second dialog prompt + errorDialogMessageBox.Visible = true + end + end + + saveLocal = function() + errorDialogMessageBox.Visible = false + game:FinishShutdown(true) + clearAndResetDialog() + end + + dontSave = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + game:FinishShutdown(false) + clearAndResetDialog() + end + cancel = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + clearAndResetDialog() + end + + clearAndResetDialog = function() + saveDialogMessageBox.Visible = true + errorDialogMessageBox.Visible = false + spinnerDialog.Visible = false + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end + + robloxLock(shield) + shield.Visible = false + return shield +end + +local createReportAbuseDialog = function() + --Only show things if we are a NetworkClient + waitForChild(game,"NetworkClient") + + waitForChild(game,"Players") + waitForProperty(game.Players, "LocalPlayer") + local localPlayer = game.Players.LocalPlayer + + local reportAbuseButton + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton + + local shield = Instance.new("TextButton") + shield.Name = "ReportAbuseShield" + shield.Text = "" + shield.AutoButtonColor = false + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 1 + + local closeAndResetDialgo + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Ok" + messageBoxButtons[1].Modal = true + messageBoxButtons[1].Function = function() closeAndResetDialog() end + local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons) + calmingMessageBox.Visible = false + calmingMessageBox.Parent = shield + + local recordedMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!","We've recorded your report for evaluation.", messageBoxButtons) + recordedMessageBox.Visible = false + recordedMessageBox.Parent = shield + + local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons) + normalMessageBox.Visible = false + normalMessageBox.Parent = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -250, 0.5, -200) + frame.Size = UDim2.new(0.0, 500, 0.0, 400) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "ReportAbuseStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 1 + settingsFrame.Parent = frame + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Report Abuse" + title.TextColor3 = Color3I(221,221,221) + title.Position = UDim2.new(0.5, 0, 0, 25) + title.Font = Enum.Font.SourceSansBold + title.FontSize = Enum.FontSize.Size48 + title.ZIndex = baseZIndex + 2 + title.Parent = settingsFrame + + local description = Instance.new("TextLabel") + description.Name = "Description" + description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action." + description.TextColor3 = Color3I(221,221,221) + description.Position = UDim2.new(0, 0, 0, 55) + description.Size = UDim2.new(1, 0, 0, 40) + description.BackgroundTransparency = 1 + description.Font = Enum.Font.SourceSans + description.FontSize = Enum.FontSize.Size18 + description.TextWrap = true + description.ZIndex = baseZIndex + 2 + description.TextXAlignment = Enum.TextXAlignment.Left + description.TextYAlignment = Enum.TextYAlignment.Top + description.Parent = settingsFrame + + local playerLabel = Instance.new("TextLabel") + playerLabel.Name = "PlayerLabel" + playerLabel.Text = "Which player?" + playerLabel.BackgroundTransparency = 1 + playerLabel.Font = Enum.Font.SourceSans + playerLabel.FontSize = Enum.FontSize.Size18 + playerLabel.Position = UDim2.new(0.025,20,0,137) + playerLabel.Size = UDim2.new(0.4,0,0,36) + playerLabel.TextColor3 = Color3I(255,255,255) + playerLabel.TextXAlignment = Enum.TextXAlignment.Left + playerLabel.ZIndex = baseZIndex + 2 + playerLabel.Parent = settingsFrame + + local gameOrPlayerLabel = Instance.new("TextLabel") + gameOrPlayerLabel.Name = "TypeLabel" + gameOrPlayerLabel.Text = "Game or Player:" + gameOrPlayerLabel.BackgroundTransparency = 1 + gameOrPlayerLabel.Font = Enum.Font.SourceSans + gameOrPlayerLabel.FontSize = Enum.FontSize.Size18 + gameOrPlayerLabel.Position = UDim2.new(0.025,20,0,100) + gameOrPlayerLabel.Size = UDim2.new(0.4,0,0,36) + gameOrPlayerLabel.TextColor3 = Color3I(255,255,255) + gameOrPlayerLabel.TextXAlignment = Enum.TextXAlignment.Left + gameOrPlayerLabel.ZIndex = baseZIndex + 2 + gameOrPlayerLabel.Parent = settingsFrame + + local abuseLabel = Instance.new("TextLabel") + abuseLabel.Name = "AbuseLabel" + abuseLabel.Text = "Type of Abuse:" + abuseLabel.Font = Enum.Font.SourceSans + abuseLabel.BackgroundTransparency = 1 + abuseLabel.FontSize = Enum.FontSize.Size18 + abuseLabel.Position = UDim2.new(0.025,20,0,176) + abuseLabel.Size = UDim2.new(0.4,0,0,36) + abuseLabel.TextColor3 = Color3I(255,255,255) + abuseLabel.TextXAlignment = Enum.TextXAlignment.Left + abuseLabel.ZIndex = baseZIndex + 2 + abuseLabel.Parent = settingsFrame + + local abusingPlayer = nil + local abuse = nil + local submitReportButton = nil + local gameOrPlayer = nil + + local updatePlayerSelection = nil + local createPlayersDropDown = function() + local players = game:GetService("Players") + local playerNames = {} + local nameToPlayer = {} + local children = players:GetChildren() + local pos = 1 + if children then + for i, player in ipairs(children) do + if player:IsA("Player") and player ~= localPlayer then + playerNames[pos] = player.Name + nameToPlayer[player.Name] = player + pos = pos + 1 + end + end + end + local playerDropDown = nil + playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames, + function(playerName) + abusingPlayer = nameToPlayer[playerName] + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end) + playerDropDown.Name = "PlayersComboBox" + playerDropDown.ZIndex = baseZIndex + 2 + playerDropDown.Position = UDim2.new(.425, 0, 0, 139) + playerDropDown.Size = UDim2.new(.55,0,0,32) + + return playerDropDown + end + + local gameOrPlayerTable = {"Game","Player"} + local gameOrPlayerDropDown = nil + gameOrPlayerDropDown = RbxGui.CreateDropDownMenu(gameOrPlayerTable, + function(gameOrPlayerText) + gameOrPlayer = gameOrPlayerText + if gameOrPlayer == "Game" then + submitReportButton.Active = true + playerLabel.Visible = false + local playerDropDown = gameOrPlayerDropDown.Parent:FindFirstChild("PlayersComboBox") + if playerDropDown then + playerDropDown.Visible = false + end + else + playerLabel.Visible = true + local playerDropDown = gameOrPlayerDropDown.Parent:FindFirstChild("PlayersComboBox") + if playerDropDown then + playerDropDown.Visible = true + end + end + end, true) + gameOrPlayerDropDown.Name = "TypeComboBox" + gameOrPlayerDropDown.ZIndex = baseZIndex + 2 + gameOrPlayerDropDown.Position = UDim2.new(0.425, 0, 0, 100) + gameOrPlayerDropDown.Size = UDim2.new(0.55,0,0,32) + gameOrPlayerDropDown.Parent = settingsFrame + + local abuses = {"Swearing","Bullying","Scamming","Dating","Cheating/Exploiting","Personal Questions","Offsite Links","Bad Model or Script","Bad Username"} + local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, + function(abuseText) + abuse = abuseText + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end, true) + abuseDropDown.Name = "AbuseComboBox" + abuseDropDown.ZIndex = baseZIndex + 2 + abuseDropDown.Position = UDim2.new(0.425, 0, 0, 178) + abuseDropDown.Size = UDim2.new(0.55,0,0,32) + abuseDropDown.Parent = settingsFrame + + local shortDescriptionLabel = Instance.new("TextLabel") + shortDescriptionLabel.Name = "ShortDescriptionLabel" + shortDescriptionLabel.Text = "Short Description: (optional)" + shortDescriptionLabel.Font = Enum.Font.SourceSans + shortDescriptionLabel.FontSize = Enum.FontSize.Size18 + shortDescriptionLabel.Position = UDim2.new(0.025,0,0,215) + shortDescriptionLabel.Size = UDim2.new(0.95,0,0,36) + shortDescriptionLabel.TextColor3 = Color3I(255,255,255) + shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionLabel.BackgroundTransparency = 1 + shortDescriptionLabel.ZIndex = baseZIndex + 2 + shortDescriptionLabel.Parent = settingsFrame + + local shortDescriptionWrapper = Instance.new("Frame") + shortDescriptionWrapper.Name = "ShortDescriptionWrapper" + shortDescriptionWrapper.Position = UDim2.new(0.025,0,0,245) + shortDescriptionWrapper.Size = UDim2.new(0.95,0,1,-310) + shortDescriptionWrapper.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionWrapper.BorderSizePixel = 1 + shortDescriptionWrapper.ZIndex = baseZIndex + 2 + shortDescriptionWrapper.Parent = settingsFrame + + local shortDescriptionBox = Instance.new("TextBox") + shortDescriptionBox.Name = "TextBox" + shortDescriptionBox.Text = "" + shortDescriptionBox.ClearTextOnFocus = false + shortDescriptionBox.Font = Enum.Font.SourceSans + shortDescriptionBox.FontSize = Enum.FontSize.Size18 + shortDescriptionBox.Position = UDim2.new(0,3,0,3) + shortDescriptionBox.Size = UDim2.new(1,-6,1,-6) + shortDescriptionBox.TextColor3 = Color3I(255,255,255) + shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top + shortDescriptionBox.TextWrap = true + shortDescriptionBox.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionBox.BorderColor3 = Color3I(206,206,206) + shortDescriptionBox.ZIndex = baseZIndex + 2 + shortDescriptionBox.Parent = shortDescriptionWrapper + + submitReportButton = Instance.new("TextButton") + submitReportButton.Name = "SubmitReportBtn" + submitReportButton.Active = false + submitReportButton.Modal = true + submitReportButton.Font = Enum.Font.SourceSans + submitReportButton.FontSize = Enum.FontSize.Size18 + submitReportButton.Position = UDim2.new(0.1, 0, 1, -55) + submitReportButton.Size = UDim2.new(0.35,0,0,50) + submitReportButton.AutoButtonColor = true + submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault + submitReportButton.Text = "Submit Report" + submitReportButton.TextColor3 = Color3I(255,255,255) + submitReportButton.ZIndex = baseZIndex + 2 + submitReportButton.Parent = settingsFrame + + submitReportButton.MouseButton1Click:connect(function() + if submitReportButton.Active then + if abuse and abusingPlayer then + frame.Visible = false + if gameOrPlayer == "Player" then + game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text) + else + game.Players:ReportAbuse(nil, abuse, shortDescriptionBox.Text) + end + if abuse == "Cheating/Exploiting" then + recordedMessageBox.Visible = true + elseif abuse == "Bullying" or abuse == "Swearing" then + calmingMessageBox.Visible = true + else + normalMessageBox.Visible = true + end + else + closeAndResetDialog() + end + end + end) + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelBtn" + cancelButton.Font = Enum.Font.SourceSans + cancelButton.FontSize = Enum.FontSize.Size18 + cancelButton.Position = UDim2.new(0.55, 0, 1, -55) + cancelButton.Size = UDim2.new(0.35,0,0,50) + cancelButton.AutoButtonColor = true + cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault + cancelButton.Text = "Cancel" + cancelButton.TextColor3 = Color3I(255,255,255) + cancelButton.ZIndex = baseZIndex + 2 + cancelButton.Parent = settingsFrame + + closeAndResetDialog = function() + --Delete old player combo box + local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox") + if oldComboBox then + oldComboBox.Parent = nil + end + + abusingPlayer = nil updatePlayerSelection(nil) + abuse = nil updateAbuseSelection(nil) + submitReportButton.Active = false + shortDescriptionBox.Text = "" + frame.Visible = true + calmingMessageBox.Visible = false + recordedMessageBox.Visible = false + normalMessageBox.Visible = false + shield.Visible = false + reportAbuseButton.Active = true + game.GuiService:RemoveCenterDialog(shield) + end + + cancelButton.MouseButton1Click:connect(closeAndResetDialog) + + reportAbuseButton.MouseButton1Click:connect( + function() + createPlayersDropDown().Parent = settingsFrame + table.insert(centerDialogs,shield) + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + reportAbuseButton.Active = false + shield.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + reportAbuseButton.Active = true + shield.Visible = false + end) + end) + + robloxLock(shield) + return shield +end + +local createChatBar = function() + --Only show a chat bar if we are a NetworkClient + waitForChild(game, "NetworkClient") + + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local chatBar = Instance.new("Frame") + chatBar.Name = "ChatBar" + chatBar.Size = UDim2.new(1, 0, 0, 22) + chatBar.Position = UDim2.new(0, 0, 1, 0) + chatBar.BackgroundColor3 = Color3.new(0,0,0) + chatBar.BorderSizePixel = 0 + + local chatBox = Instance.new("TextBox") + chatBox.Text = "" + chatBox.Visible = false + chatBox.Size = UDim2.new(1,-4,1,0) + chatBox.Position = UDim2.new(0,2,0,0) + chatBox.TextXAlignment = Enum.TextXAlignment.Left + chatBox.Font = Enum.Font.Arial + chatBox.ClearTextOnFocus = false + chatBox.FontSize = Enum.FontSize.Size14 + chatBox.TextColor3 = Color3.new(1,1,1) + chatBox.BackgroundTransparency = 1 + --chatBox.Parent = chatBar + + local chatButton = Instance.new("TextButton") + chatButton.Size = UDim2.new(1,-4,1,0) + chatButton.Position = UDim2.new(0,2,0,0) + chatButton.AutoButtonColor = false + chatButton.Text = "To chat click here or press \"/\" key" + chatButton.TextXAlignment = Enum.TextXAlignment.Left + chatButton.Font = Enum.Font.Arial + chatButton.FontSize = Enum.FontSize.Size14 + chatButton.TextColor3 = Color3.new(1,1,1) + chatButton.BackgroundTransparency = 1 + --chatButton.Parent = chatBar + + local activateChat = function() + if chatBox.Visible then + return + end + chatButton.Visible = false + chatBox.Text = "" + chatBox.Visible = true + chatBox:CaptureFocus() + end + + chatButton.MouseButton1Click:connect(activateChat) + + local hotKeyEnabled = true + local toggleHotKey = function(value) + hotKeyEnabled = value + end + + local guiService = game:GetService("GuiService") + local newChatMode = pcall(function() + --guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + --guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end) + end) + if not newChatMode then + --guiService:AddKey("/") + --guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end) + end + + chatBox.FocusLost:connect( + function(enterPressed) + if enterPressed then + if chatBox.Text ~= "" then + local str = chatBox.Text + if string.sub(str, 1, 1) == '%' then + game.Players:TeamChat(string.sub(str, 2)) + else + game.Players:Chat(str) + end + end + end + chatBox.Text = "" + chatBox.Visible = false + chatButton.Visible = true + end) + robloxLock(chatBar) + return chatBar, toggleHotKey +end + +--Spawn a thread for the Save dialogs +local isSaveDialogSupported = pcall(function() local var = game.LocalSaveEnabled end) +if isSaveDialogSupported then + delay(0, + function() + local saveDialogs = createSaveDialogs() + saveDialogs.Parent = gui + + game.RequestShutdown = function() + table.insert(centerDialogs,saveDialogs) + game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + saveDialogs.Visible = true + end, + --HideFunction + function() + saveDialogs.Visible = false + end) + + return true + end + end) +end + +--Spawn a thread for the Report Abuse dialogs +delay(0, + function() + createReportAbuseDialog().Parent = gui + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true + end) + +end --LoadLibrary if diff --git a/app/files/CoreGui/46295864 b/app/files/CoreGui/46295864 new file mode 100644 index 0000000..e5f52a5 --- /dev/null +++ b/app/files/CoreGui/46295864 @@ -0,0 +1,2098 @@ +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- A Few Script Globals +local gui +if script.Parent:FindFirstChild("ControlFrame") then + gui = script.Parent:FindFirstChild("ControlFrame") +else + gui = script.Parent +end + +local helpButton = nil +local updateCameraDropDownSelection = nil +local updateVideoCaptureDropDownSelection = nil +local tweenTime = 0.2 + +local mouseLockLookScreenUrl = "http://www.roblox.com/asset?id=54071825" +local classicLookScreenUrl = "http://www.roblox.com/Asset?id=45915798" + +local hasGraphicsSlider = (game:GetService("CoreGui").Version >= 5) +local GraphicsQualityLevels = 10 -- how many levels we allow on graphics slider +local recordingVideo = false + +local currentMenuSelection = nil +local lastMenuSelection = {} + +local defaultPosition = UDim2.new(0,0,0,0) +local newGuiPlaces = {0,41324860} + +local centerDialogs = {} +local mainShield = nil + +local inStudioMode = UserSettings().GameSettings:InStudioMode() + +local macClient = false +local success, isMac = pcall(function() return not game.GuiService.IsWindows end) +macClient = success and isMac + +local function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +local function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resumeGameFunction(shield) + shield.Settings:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + delay(tweenTime,function() + shield.Visible = false + for i = 1, #centerDialogs do + centerDialogs[i].Visible = false + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + end + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true + currentMenuSelection = nil + lastMenuSelection = {} + end) +end + +function goToMenu(container,menuName, moveDirection,size,position) + if type(menuName) ~= "string" then return end + + table.insert(lastMenuSelection,currentMenuSelection) + if menuName == "GameMainMenu" then + lastMenuSelection = {} + end + + local containerChildren = container:GetChildren() + local selectedMenu = false + for i = 1, #containerChildren do + if containerChildren[i].Name == menuName then + containerChildren[i].Visible = true + currentMenuSelection = {container = container,name = menuName, direction = moveDirection, lastSize = size} + selectedMenu = true + if size and position then + containerChildren[i]:TweenSizeAndPosition(size,position,Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif size then + containerChildren[i]:TweenSizeAndPosition(size,UDim2.new(0.5,-size.X.Offset/2,0.5,-size.Y.Offset/2),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + else + containerChildren[i]:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + else + if moveDirection == "left" then + containerChildren[i]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "right" then + containerChildren[i]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "up" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "down" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + delay(tweenTime,function() + containerChildren[i].Visible = false + end) + end + end +end + +function resetLocalCharacter() + local player = game.Players.LocalPlayer + if player then + if player.Character and player.Character:FindFirstChild("Humanoid") then + player.Character.Humanoid.Health = 0 + end + end +end + +local function createTextButton(text,style,fontSize,buttonSize,buttonPosition) + local newTextButton = Instance.new("TextButton") + newTextButton.Font = Enum.Font.Arial + newTextButton.FontSize = fontSize + newTextButton.Size = buttonSize + newTextButton.Position = buttonPosition + newTextButton.Style = style + newTextButton.TextColor3 = Color3.new(1,1,1) + newTextButton.Text = text + return newTextButton +end + +local function CreateTextButtons(frame, buttons, yPos, ySize) + if #buttons < 1 then + error("Must have more than one button") + end + + local buttonNum = 1 + local buttonObjs = {} + + local function toggleSelection(button) + for i, obj in ipairs(buttonObjs) do + if obj == button then + obj.Style = Enum.ButtonStyle.RobloxButtonDefault + else + obj.Style = Enum.ButtonStyle.RobloxButton + end + end + end + + for i, obj in ipairs(buttons) do + local button = Instance.new("TextButton") + button.Name = "Button" .. buttonNum + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size18 + button.AutoButtonColor = true + button.Style = Enum.ButtonStyle.RobloxButton + button.Text = obj.Text + button.TextColor3 = Color3.new(1,1,1) + button.MouseButton1Click:connect(function() toggleSelection(button) obj.Function() end) + button.Parent = frame + buttonObjs[buttonNum] = button + + buttonNum = buttonNum + 1 + end + + toggleSelection(buttonObjs[1]) + + local numButtons = buttonNum-1 + + if numButtons == 1 then + frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) + elseif numButtons == 2 then + frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + + frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) + frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + elseif numButtons >= 3 then + local spacing = .1 / numButtons + local buttonSize = .9 / numButtons + + buttonNum = 1 + while buttonNum <= numButtons do + buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) + buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) + buttonNum = buttonNum + 1 + end + end +end + +function setRecordGui(recording, stopRecordButton, recordVideoButton) + if recording then + stopRecordButton.Visible = true + recordVideoButton.Text = "Stop Recording" + else + stopRecordButton.Visible = false + recordVideoButton.Text = "Record Video" + end +end + +function recordVideoClick(recordVideoButton, stopRecordButton) + recordingVideo = not recordingVideo + setRecordGui(recordingVideo, stopRecordButton, recordVideoButton) +end + +function backToGame(buttonClicked, shield, settingsButton) + buttonClicked.Parent.Parent.Parent.Parent.Visible = false + shield.Visible = false + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true +end + +function setDisabledState(guiObject) + if not guiObject then return end + + if guiObject:IsA("TextLabel") then + guiObject.TextTransparency = 0.9 + elseif guiObject:IsA("TextButton") then + guiObject.TextTransparency = 0.9 + guiObject.Active = false + else + if guiObject["ClassName"] then + print("setDisabledState() got object of unsupported type. object type is ",guiObject.ClassName) + end + end +end + +local function createHelpDialog(baseZIndex) + + if helpButton == nil then + if gui:FindFirstChild("TopLeftControl") and gui.TopLeftControl:FindFirstChild("Help") then + helpButton = gui.TopLeftControl.Help + elseif gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("Help") then + helpButton = gui.BottomRightControl.Help + end + end + + local shield = Instance.new("Frame") + shield.Name = "HelpDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 1 + + local helpDialog = Instance.new("Frame") + helpDialog.Name = "HelpDialog" + helpDialog.Style = Enum.FrameStyle.RobloxRound + helpDialog.Position = UDim2.new(.2, 0, .2, 0) + helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0) + helpDialog.Active = true + helpDialog.Parent = shield + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = "Keyboard & Mouse Controls" + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.Position = UDim2.new(0, 0, 0.025, 0) + titleLabel.Size = UDim2.new(1, 0, 0, 40) + titleLabel.TextColor3 = Color3.new(1,1,1) + titleLabel.BackgroundTransparency = 1 + titleLabel.Parent = helpDialog + + local buttonRow = Instance.new("Frame") + buttonRow.Name = "Buttons" + buttonRow.Position = UDim2.new(0.1, 0, .07, 40) + buttonRow.Size = UDim2.new(0.8, 0, 0, 45) + buttonRow.BackgroundTransparency = 1 + buttonRow.Parent = helpDialog + + local imageFrame = Instance.new("Frame") + imageFrame.Name = "ImageFrame" + imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80) + imageFrame.Size = UDim2.new(0.9, 0, .9, -120) + imageFrame.BackgroundTransparency = 1 + imageFrame.Parent = helpDialog + + local layoutFrame = Instance.new("Frame") + layoutFrame.Name = "LayoutFrame" + layoutFrame.Position = UDim2.new(0.5, 0, 0, 0) + layoutFrame.Size = UDim2.new(1.5, 0, 1, 0) + layoutFrame.BackgroundTransparency = 1 + layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY + layoutFrame.Parent = imageFrame + + local image = Instance.new("ImageLabel") + image.Name = "Image" + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + image.Position = UDim2.new(-0.5, 0, 0, 0) + image.Size = UDim2.new(1, 0, 1, 0) + image.BackgroundTransparency = 1 + image.Parent = layoutFrame + + local buttons = {} + buttons[1] = {} + buttons[1].Text = "Look" + buttons[1].Function = function() + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + end + buttons[2] = {} + buttons[2].Text = "Move" + buttons[2].Function = function() + image.Image = "http://www.roblox.com/Asset?id=45915811" + end + buttons[3] = {} + buttons[3].Text = "Gear" + buttons[3].Function = function() + image.Image = "http://www.roblox.com/Asset?id=45917596" + end + buttons[4] = {} + buttons[4].Text = "Zoom" + buttons[4].Function = function() + image.Image = "http://www.roblox.com/Asset?id=45915825" + end + + CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1,0)) + + + -- set up listeners for type of mouse mode, but keep constructing gui at same time + delay(0, function() + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield,"Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop) + if prop ~= "Text" then return end + if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then -- only change if this is the currently selected panel + if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then + image.Image = classicLookScreenUrl + else + image.Image = mouseLockLookScreenUrl + end + end + end) + end) + + + local okBtn = Instance.new("TextButton") + okBtn.Name = "OkBtn" + okBtn.Text = "OK" + okBtn.Modal = true + okBtn.Size = UDim2.new(0.3, 0, 0, 45) + okBtn.Position = UDim2.new(0.35, 0, .975, -50) + okBtn.Font = Enum.Font.Arial + okBtn.FontSize = Enum.FontSize.Size18 + okBtn.BackgroundTransparency = 1 + okBtn.TextColor3 = Color3.new(1,1,1) + okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault + okBtn.MouseButton1Click:connect( + function() + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end) + okBtn.Parent = helpDialog + + robloxLock(shield) + return shield +end + +local function createLeaveConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "LeaveConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Leave",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0.8,0)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton:SetVerb("Exit") + + local noButton = createTextButton("Stay",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0.8,0)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local leaveText = Instance.new("TextLabel") + leaveText.Name = "LeaveText" + leaveText.Text = "Leave this game?" + leaveText.Size = UDim2.new(1,0,0.8,0) + leaveText.TextWrap = true + leaveText.TextColor3 = Color3.new(1,1,1) + leaveText.Font = Enum.Font.ArialBold + leaveText.FontSize = Enum.FontSize.Size36 + leaveText.BackgroundTransparency = 1 + leaveText.ZIndex = baseZIndex + 4 + leaveText.Parent = frame + + return frame +end + +local function createResetConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "ResetConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Reset",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0,299)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton.MouseButton1Click:connect(function() + resumeGameFunction(shield) + resetLocalCharacter() + end) + + local noButton = createTextButton("Cancel",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0,299)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local resetCharacterText = Instance.new("TextLabel") + resetCharacterText.Name = "ResetCharacterText" + resetCharacterText.Text = "Are you sure you want to reset your character?" + resetCharacterText.Size = UDim2.new(1,0,0.8,0) + resetCharacterText.TextWrap = true + resetCharacterText.TextColor3 = Color3.new(1,1,1) + resetCharacterText.Font = Enum.Font.ArialBold + resetCharacterText.FontSize = Enum.FontSize.Size36 + resetCharacterText.BackgroundTransparency = 1 + resetCharacterText.ZIndex = baseZIndex + 4 + resetCharacterText.Parent = frame + + local fineResetCharacterText = resetCharacterText:Clone() + fineResetCharacterText.Name = "FineResetCharacterText" + fineResetCharacterText.Text = "You will be put back on a spawn point" + fineResetCharacterText.Size = UDim2.new(0,303,0,18) + fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215) + fineResetCharacterText.FontSize = Enum.FontSize.Size18 + fineResetCharacterText.Parent = frame + + return frame +end + +local function createGameMainMenu(baseZIndex, shield) + local gameMainMenuFrame = Instance.new("Frame") + gameMainMenuFrame.Name = "GameMainMenu" + gameMainMenuFrame.BackgroundTransparency = 1 + gameMainMenuFrame.Size = UDim2.new(1,0,1,0) + gameMainMenuFrame.ZIndex = baseZIndex + 4 + gameMainMenuFrame.Parent = settingsFrame + + -- GameMainMenu Children + + local gameMainMenuTitle = Instance.new("TextLabel") + gameMainMenuTitle.Name = "Title" + gameMainMenuTitle.Text = "Game Menu" + gameMainMenuTitle.BackgroundTransparency = 1 + gameMainMenuTitle.TextStrokeTransparency = 0 + gameMainMenuTitle.Font = Enum.Font.ArialBold + gameMainMenuTitle.FontSize = Enum.FontSize.Size36 + gameMainMenuTitle.Size = UDim2.new(1,0,0,36) + gameMainMenuTitle.Position = UDim2.new(0,0,0,4) + gameMainMenuTitle.TextColor3 = Color3.new(1,1,1) + gameMainMenuTitle.ZIndex = baseZIndex + 4 + gameMainMenuTitle.Parent = gameMainMenuFrame + + local robloxHelpButton = createTextButton("Help",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,256)) + robloxHelpButton.Name = "HelpButton" + robloxHelpButton.ZIndex = baseZIndex + 4 + robloxHelpButton.Parent = gameMainMenuFrame + helpButton = robloxHelpButton + + local helpDialog = createHelpDialog(baseZIndex) + helpDialog.Parent = gui + + helpButton.MouseButton1Click:connect( + function() + table.insert(centerDialogs,helpDialog) + game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + helpDialog.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + helpDialog.Visible = false + end) + end) + helpButton.Active = true + + local helpShortcut = Instance.new("TextLabel") + helpShortcut.Name = "HelpShortcutText" + helpShortcut.Text = "F1" + helpShortcut.Visible = false + helpShortcut.BackgroundTransparency = 1 + helpShortcut.Font = Enum.Font.Arial + helpShortcut.FontSize = Enum.FontSize.Size12 + helpShortcut.Position = UDim2.new(0,85,0,0) + helpShortcut.Size = UDim2.new(0,30,0,30) + helpShortcut.TextColor3 = Color3.new(0,1,0) + helpShortcut.ZIndex = baseZIndex + 4 + helpShortcut.Parent = robloxHelpButton + + local screenshotButton = createTextButton("Screenshot",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,256)) + screenshotButton.Name = "ScreenshotButton" + screenshotButton.ZIndex = baseZIndex + 4 + screenshotButton.Parent = gameMainMenuFrame + screenshotButton.Visible = not macClient + screenshotButton:SetVerb("Screenshot") + + local screenshotShortcut = helpShortcut:clone() + screenshotShortcut.Name = "ScreenshotShortcutText" + screenshotShortcut.Text = "PrintSc" + screenshotShortcut.Position = UDim2.new(0,118,0,0) + screenshotShortcut.Visible = true + screenshotShortcut.Parent = screenshotButton + + + local recordVideoButton = createTextButton("Record Video",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,306)) + recordVideoButton.Name = "RecordVideoButton" + recordVideoButton.ZIndex = baseZIndex + 4 + recordVideoButton.Parent = gameMainMenuFrame + recordVideoButton.Visible = not macClient + recordVideoButton:SetVerb("RecordToggle") + + local recordVideoShortcut = helpShortcut:clone() + recordVideoShortcut.Visible = hasGraphicsSlider + recordVideoShortcut.Name = "RecordVideoShortcutText" + recordVideoShortcut.Text = "F12" + recordVideoShortcut.Position = UDim2.new(0,120,0,0) + recordVideoShortcut.Parent = recordVideoButton + + local stopRecordButton = Instance.new("ImageButton") + stopRecordButton.Name = "StopRecordButton" + stopRecordButton.BackgroundTransparency = 1 + stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png" + stopRecordButton.Size = UDim2.new(0,59,0,27) + stopRecordButton:SetVerb("RecordToggle") + + stopRecordButton.MouseButton1Click:connect(function() recordVideoClick(recordVideoButton, stopRecordButton) end) + stopRecordButton.Visible = false + stopRecordButton.Parent = gui + + local reportAbuseButton = createTextButton("Report Abuse",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,306)) + reportAbuseButton.Name = "ReportAbuseButton" + reportAbuseButton.ZIndex = baseZIndex + 4 + reportAbuseButton.Parent = gameMainMenuFrame + + local leaveGameButton = createTextButton("Leave Game",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,358)) + leaveGameButton.Name = "LeaveGameButton" + leaveGameButton.ZIndex = baseZIndex + 4 + leaveGameButton.Parent = gameMainMenuFrame + + local resumeGameButton = createTextButton("Resume Game",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,54)) + resumeGameButton.Name = "resumeGameButton" + resumeGameButton.ZIndex = baseZIndex + 4 + resumeGameButton.Parent = gameMainMenuFrame + resumeGameButton.Modal = true + resumeGameButton.MouseButton1Click:connect(function() resumeGameFunction(shield) end) + + local gameSettingsButton = createTextButton("Game Settings",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,156)) + gameSettingsButton.Name = "SettingsButton" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + + if game:FindFirstChild("LoadingGuiService") and #game.LoadingGuiService:GetChildren() > 0 then + local gameSettingsButton = createTextButton("Game Instructions",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,207)) + gameSettingsButton.Name = "GameInstructions" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + gameSettingsButton.MouseButton1Click:connect(function() + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local loadingGui = game.Players.LocalPlayer:FindFirstChild("PlayerLoadingGui") + if loadingGui then + loadingGui.Visible = true + end + end + end) + end + + local resetButton = createTextButton("Reset Character",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,105)) + resetButton.Name = "ResetButton" + resetButton.ZIndex = baseZIndex + 4 + resetButton.Parent = gameMainMenuFrame + + return gameMainMenuFrame +end + +local function createGameSettingsMenu(baseZIndex, shield) + local gameSettingsMenuFrame = Instance.new("Frame") + gameSettingsMenuFrame.Name = "GameSettingsMenu" + gameSettingsMenuFrame.BackgroundTransparency = 1 + gameSettingsMenuFrame.Size = UDim2.new(1,0,1,0) + gameSettingsMenuFrame.ZIndex = baseZIndex + 4 + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Settings" + title.Size = UDim2.new(1,0,0,48) + title.Position = UDim2.new(0,9,0,-9) + title.Font = Enum.Font.ArialBold + title.FontSize = Enum.FontSize.Size36 + title.TextColor3 = Color3.new(1,1,1) + title.ZIndex = baseZIndex + 4 + title.BackgroundTransparency = 1 + title.Parent = gameSettingsMenuFrame + + local fullscreenText = Instance.new("TextLabel") + fullscreenText.Name = "FullscreenText" + fullscreenText.Text = "Fullscreen Mode" + fullscreenText.Size = UDim2.new(0,124,0,18) + fullscreenText.Position = UDim2.new(0,62,0,145) + fullscreenText.Font = Enum.Font.Arial + fullscreenText.FontSize = Enum.FontSize.Size18 + fullscreenText.TextColor3 = Color3.new(1,1,1) + fullscreenText.ZIndex = baseZIndex + 4 + fullscreenText.BackgroundTransparency = 1 + fullscreenText.Parent = gameSettingsMenuFrame + + local fullscreenShortcut = Instance.new("TextLabel") + fullscreenShortcut.Visible = hasGraphicsSlider + fullscreenShortcut.Name = "FullscreenShortcutText" + fullscreenShortcut.Text = "F11" + fullscreenShortcut.BackgroundTransparency = 1 + fullscreenShortcut.Font = Enum.Font.Arial + fullscreenShortcut.FontSize = Enum.FontSize.Size12 + fullscreenShortcut.Position = UDim2.new(0,186,0,141) + fullscreenShortcut.Size = UDim2.new(0,30,0,30) + fullscreenShortcut.TextColor3 = Color3.new(0,1,0) + fullscreenShortcut.ZIndex = baseZIndex + 4 + fullscreenShortcut.Parent = gameSettingsMenuFrame + + local studioText = Instance.new("TextLabel") + studioText.Visible = false + studioText.Name = "StudioText" + studioText.Text = "Studio Mode" + studioText.Size = UDim2.new(0,95,0,18) + studioText.Position = UDim2.new(0,62,0,179) + studioText.Font = Enum.Font.Arial + studioText.FontSize = Enum.FontSize.Size18 + studioText.TextColor3 = Color3.new(1,1,1) + studioText.ZIndex = baseZIndex + 4 + studioText.BackgroundTransparency = 1 + studioText.Parent = gameSettingsMenuFrame + + local studioShortcut = fullscreenShortcut:clone() + studioShortcut.Name = "StudioShortcutText" + studioShortcut.Visible = false -- TODO: turn back on when f2 hack is fixed + studioShortcut.Text = "F2" + studioShortcut.Position = UDim2.new(0,154,0,175) + studioShortcut.Parent = gameSettingsMenuFrame + + local studioCheckbox = nil + + if hasGraphicsSlider then + local qualityText = Instance.new("TextLabel") + qualityText.Name = "QualityText" + qualityText.Text = "Graphics Quality" + qualityText.Size = UDim2.new(0,128,0,18) + qualityText.Position = UDim2.new(0,30,0,239) + qualityText.Font = Enum.Font.Arial + qualityText.FontSize = Enum.FontSize.Size18 + qualityText.TextColor3 = Color3.new(1,1,1) + qualityText.ZIndex = baseZIndex + 4 + qualityText.BackgroundTransparency = 1 + qualityText.Parent = gameSettingsMenuFrame + qualityText.Visible = not inStudioMode + + local autoText = qualityText:clone() + autoText.Name = "AutoText" + autoText.Text = "Auto" + autoText.Position = UDim2.new(0,183,0,214) + autoText.TextColor3 = Color3.new(128/255,128/255,128/255) + autoText.Size = UDim2.new(0,34,0,18) + autoText.Parent = gameSettingsMenuFrame + autoText.Visible = not inStudioMode + + local fasterText = autoText:clone() + fasterText.Name = "FasterText" + fasterText.Text = "Faster" + fasterText.Position = UDim2.new(0,185,0,274) + fasterText.TextColor3 = Color3.new(95,95,95) + fasterText.FontSize = Enum.FontSize.Size14 + fasterText.Parent = gameSettingsMenuFrame + fasterText.Visible = not inStudioMode + + local fasterShortcut = fullscreenShortcut:clone() + fasterShortcut.Name = "FasterShortcutText" + fasterShortcut.Text = "F10 + Shift" + fasterShortcut.Position = UDim2.new(0,185,0,283) + fasterShortcut.Parent = gameSettingsMenuFrame + fasterShortcut.Visible = not inStudioMode + + local betterQualityText = autoText:clone() + betterQualityText.Name = "BetterQualityText" + betterQualityText.Text = "Better Quality" + betterQualityText.TextWrap = true + betterQualityText.Size = UDim2.new(0,41,0,28) + betterQualityText.Position = UDim2.new(0,390,0,269) + betterQualityText.TextColor3 = Color3.new(95,95,95) + betterQualityText.FontSize = Enum.FontSize.Size14 + betterQualityText.Parent = gameSettingsMenuFrame + betterQualityText.Visible = not inStudioMode + + local betterQualityShortcut = fullscreenShortcut:clone() + betterQualityShortcut.Name = "BetterQualityShortcut" + betterQualityShortcut.Text = "F10" + betterQualityShortcut.Position = UDim2.new(0,394,0,288) + betterQualityShortcut.Parent = gameSettingsMenuFrame + betterQualityShortcut.Visible = not inStudioMode + + local autoGraphicsButton = createTextButton("X",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,187,0,239)) + autoGraphicsButton.Name = "AutoGraphicsButton" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoGraphicsButton.Parent = gameSettingsMenuFrame + autoGraphicsButton.Visible = not inStudioMode + + local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(GraphicsQualityLevels,150,UDim2.new(0, 230, 0, 280)) -- graphics - 1 because slider starts at 1 instead of 0 + graphicsSlider.Parent = gameSettingsMenuFrame + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + graphicsSlider.Visible = not inStudioMode + graphicsLevel.Value = math.floor((settings().Rendering:GetMaxQualityLevel() - 1)/2) + + local graphicsSetter = Instance.new("TextBox") + graphicsSetter.Name = "GraphicsSetter" + graphicsSetter.BackgroundColor3 = Color3.new(0,0,0) + graphicsSetter.BorderColor3 = Color3.new(128/255,128/255,128/255) + graphicsSetter.Size = UDim2.new(0,50,0,25) + graphicsSetter.Position = UDim2.new(0,450,0,269) + graphicsSetter.TextColor3 = Color3.new(1,1,1) + graphicsSetter.Font = Enum.Font.Arial + graphicsSetter.FontSize = Enum.FontSize.Size18 + graphicsSetter.Text = "Auto" + graphicsSetter.ZIndex = 1 + graphicsSetter.TextWrap = true + graphicsSetter.Parent = gameSettingsMenuFrame + graphicsSetter.Visible = not inStudioMode + + local isAutoGraphics = true + if not inStudioMode then + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + else + settings().Rendering.EnableFRM = false + end + + local listenToGraphicsLevelChange = true + + local function setAutoGraphicsGui(active) + isAutoGraphics = active + if active then + autoGraphicsButton.Text = "X" + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + graphicsSetter.Text = "Auto" + else + autoGraphicsButton.Text = "" + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + end + + local function goToAutoGraphics() + setAutoGraphicsGui(true) + + UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic + + settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic + end + + local function setGraphicsQualityLevel(newLevel) + local percentage = newLevel/GraphicsQualityLevels + local newSetting = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) * percentage) + if newSetting == 20 then -- Level 20 is the same as level 21, except it doesn't render ambient occlusion + newSetting = 21 + elseif newLevel == 1 then -- make sure we can go to lowest settings (for terrible computers) + newSetting = 1 + elseif newSetting > settings().Rendering:GetMaxQualityLevel() then + newSetting = settings().Rendering:GetMaxQualityLevel() - 1 + end + + UserSettings().GameSettings.SavedQualityLevel = newLevel + settings().Rendering.QualityLevel = newSetting + end + + local function goToManualGraphics(explicitLevel) + setAutoGraphicsGui(false) + + if explicitLevel then + graphicsLevel.Value = explicitLevel + else + graphicsLevel.Value = math.floor((settings().Rendering.AutoFRMLevel/(settings().Rendering:GetMaxQualityLevel() - 1)) * GraphicsQualityLevels) + end + + if explicitLevel == graphicsLevel.Value then -- make sure we are actually in right graphics mode + setGraphicsQualityLevel(graphicsLevel.Value) + end + + if not explicitLevel then + UserSettings().GameSettings.SavedQualityLevel = graphicsLevel.Value + end + graphicsSetter.Text = tostring(graphicsLevel.Value) + end + + local function showAutoGraphics() + autoText.ZIndex = baseZIndex + 4 + autoGraphicsButton.ZIndex = baseZIndex + 4 + end + + local function hideAutoGraphics() + autoText.ZIndex = 1 + autoGraphicsButton.ZIndex = 1 + end + + local function showManualGraphics() + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + + local function hideManualGraphics() + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + end + + local function translateSavedQualityLevelToInt(savedQualityLevel) + if savedQualityLevel == Enum.SavedQualitySetting.Automatic then + return 0 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel1 then + return 1 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel2 then + return 2 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel3 then + return 3 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel4 then + return 4 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel5 then + return 5 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel6 then + return 6 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel7 then + return 7 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel8 then + return 8 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel9 then + return 9 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel10 then + return 10 + end + end + + local function enableGraphicsWidget() + settings().Rendering.EnableFRM = true + + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + if isAutoGraphics then + showAutoGraphics() + goToAutoGraphics() + else + showAutoGraphics() + showManualGraphics() + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + end + + local function disableGraphicsWidget() + hideManualGraphics() + hideAutoGraphics() + settings().Rendering.EnableFRM = false + end + + graphicsSetter.FocusLost:connect(function() + if isAutoGraphics then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + local newGraphicsValue = tonumber(graphicsSetter.Text) + if newGraphicsValue == nil then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + if newGraphicsValue < 1 then newGraphicsValue = 1 + elseif newGraphicsValue >= settings().Rendering:GetMaxQualityLevel() then + newGraphicsValue = settings().Rendering:GetMaxQualityLevel() - 1 + end + + graphicsLevel.Value = newGraphicsValue + setGraphicsQualityLevel(graphicsLevel.Value) + graphicsSetter.Text = tostring(graphicsLevel.Value) + end) + + graphicsLevel.Changed:connect(function(prop) + if isAutoGraphics then return end + if not listenToGraphicsLevelChange then return end + + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + end) + + -- setup our graphic mode on load + if inStudioMode or UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic then + if inStudioMode then + settings().Rendering.EnableFRM = false + disableGraphicsWidget() + else + settings().Rendering.EnableFRM = true + goToAutoGraphics() + end + else + settings().Rendering.EnableFRM = true + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + + autoGraphicsButton.MouseButton1Click:connect(function() + if inStudioMode and not game.Players.LocalPlayer then return end + + if not isAutoGraphics then + goToAutoGraphics() + else + goToManualGraphics(graphicsLevel.Value) + end + end) + + local lastUpdate = nil + game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease) + if isAutoGraphics then return end -- only can set graphics in manual mode + + if graphicsIncrease then + if (graphicsLevel.Value + 1) > GraphicsQualityLevels then return end + graphicsLevel.Value = graphicsLevel.Value + 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Increased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + else + if (graphicsLevel.Value - 1) <= 0 then return end + graphicsLevel.Value = graphicsLevel.Value - 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Decreased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + end + end) + + game.Players.PlayerAdded:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + enableGraphicsWidget() + end + end) + game.Players.PlayerRemoving:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + disableGraphicsWidget() + end + end) + + studioCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176)) + studioCheckbox.Name = "StudioCheckbox" + studioCheckbox.ZIndex = baseZIndex + 4 + --studioCheckbox.Parent = gameSettingsMenuFrame -- todo: enable when studio h4x aren't an issue anymore + studioCheckbox:SetVerb("TogglePlayMode") + studioCheckbox.Visible = false -- todo: enabled when studio h4x aren't an issue anymore + + local wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + if inStudioMode and not game.Players.LocalPlayer then + studioCheckbox.Text = "X" + disableGraphicsWidget() + elseif inStudioMode then + studioCheckbox.Text = "X" + enableGraphicsWidget() + end + if hasGraphicsSlider then + UserSettings().GameSettings.StudioModeChanged:connect(function(isStudioMode) + inStudioMode = isStudioMode + if isStudioMode then + wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + goToAutoGraphics() + studioCheckbox.Text = "X" + autoGraphicsButton.ZIndex = 1 + autoText.ZIndex = 1 + else + if wasManualGraphics then + goToManualGraphics() + end + studioCheckbox.Text = "" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoText.ZIndex = baseZIndex + 4 + end + end) + else + studioCheckbox.MouseButton1Click:connect(function() + if not studioCheckbox.Active then return end + + if studioCheckbox.Text == "" then + studioCheckbox.Text = "X" + else + studioCheckbox.Text = "" + end + end) + end + end + + local fullscreenCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,144)) + fullscreenCheckbox.Name = "FullscreenCheckbox" + fullscreenCheckbox.ZIndex = baseZIndex + 4 + fullscreenCheckbox.Parent = gameSettingsMenuFrame + fullscreenCheckbox:SetVerb("ToggleFullScreen") + if UserSettings().GameSettings:InFullScreen() then fullscreenCheckbox.Text = "X" end + if hasGraphicsSlider then + UserSettings().GameSettings.FullscreenChanged:connect(function(isFullscreen) + if isFullscreen then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + else + fullscreenCheckbox.MouseButton1Click:connect(function() + if fullscreenCheckbox.Text == "" then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + end + + if game:FindFirstChild("NetworkClient") then -- we are playing online + setDisabledState(studioText) + setDisabledState(studioShortcut) + setDisabledState(studioCheckbox) + end + + local backButton + if hasGraphicsSlider then + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,330)) + backButton.Modal = true + else + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,270)) + backButton.Modal = true + end + + backButton.Name = "BackButton" + backButton.ZIndex = baseZIndex + 4 + backButton.Parent = gameSettingsMenuFrame + + local syncVideoCaptureSetting = nil + + if not macClient then + local videoCaptureLabel = Instance.new("TextLabel") + videoCaptureLabel.Name = "VideoCaptureLabel" + videoCaptureLabel.Text = "After Capturing Video" + videoCaptureLabel.Font = Enum.Font.Arial + videoCaptureLabel.FontSize = Enum.FontSize.Size18 + videoCaptureLabel.Position = UDim2.new(0,32,0,100) + videoCaptureLabel.Size = UDim2.new(0,164,0,18) + videoCaptureLabel.BackgroundTransparency = 1 + videoCaptureLabel.TextColor3 = Color3I(255,255,255) + videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left + videoCaptureLabel.ZIndex = baseZIndex + 4 + videoCaptureLabel.Parent = gameSettingsMenuFrame + + local videoNames = {} + local videoNameToItem = {} + videoNames[1] = "Just Save to Disk" + videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"] + videoNames[2] = "Upload to YouTube" + videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"] + + local videoCaptureDropDown = nil + videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames, + function(text) + UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text] + end) + videoCaptureDropDown.Name = "VideoCaptureField" + videoCaptureDropDown.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94) + videoCaptureDropDown.Size = UDim2.new(0,200,0,32) + videoCaptureDropDown.Parent = gameSettingsMenuFrame + + syncVideoCaptureSetting = function() + if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then + updateVideoCaptureDropDownSelection(videoNames[1]) + elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then + updateVideoCaptureDropDownSelection(videoNames[2]) + else + UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"] + updateVideoCaptureDropDownSelection(videoNames[2]) + end + end + end + + local cameraLabel = Instance.new("TextLabel") + cameraLabel.Name = "CameraLabel" + cameraLabel.Text = "Character & Camera Controls" + cameraLabel.Font = Enum.Font.Arial + cameraLabel.FontSize = Enum.FontSize.Size18 + cameraLabel.Position = UDim2.new(0,31,0,58) + cameraLabel.Size = UDim2.new(0,224,0,18) + cameraLabel.TextColor3 = Color3I(255,255,255) + cameraLabel.TextXAlignment = Enum.TextXAlignment.Left + cameraLabel.BackgroundTransparency = 1 + cameraLabel.ZIndex = baseZIndex + 4 + cameraLabel.Parent = gameSettingsMenuFrame + + local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true) + + local enumItems = Enum.ControlMode:GetEnumItems() + local enumNames = {} + local enumNameToItem = {} + for i,obj in ipairs(enumItems) do + enumNames[i] = obj.Name + enumNameToItem[obj.Name] = obj + end + + local cameraDropDown + cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames, + function(text) + UserSettings().GameSettings.ControlMode = enumNameToItem[text] + + pcall(function() + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + end) + end) + cameraDropDown.Name = "CameraField" + cameraDropDown.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + cameraDropDown.Position = UDim2.new(0, 270, 0, 52) + cameraDropDown.Size = UDim2.new(0,200,0,32) + cameraDropDown.Parent = gameSettingsMenuFrame + + return gameSettingsMenuFrame +end + +if LoadLibrary then + RbxGui = LoadLibrary("RbxGui") + local baseZIndex = 0 +if UserSettings then + + local createSettingsDialog = function() + waitForChild(gui,"BottomLeftControl") + settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton") + + if settingsButton == nil then + settingsButton = Instance.new("ImageButton") + settingsButton.Name = "SettingsButton" + settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png" + settingsButton.BackgroundTransparency = 1 + settingsButton.Active = false + settingsButton.Size = UDim2.new(0,54,0,46) + settingsButton.Position = UDim2.new(0,2,0,50) + settingsButton.Parent = gui.BottomLeftControl + end + + local shield = Instance.new("TextButton") + shield.Text = "" + shield.Name = "UserSettingsShield" + shield.Active = true + shield.AutoButtonColor = false + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 2 + mainShield = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -262, -0.5, -200) + frame.Size = UDim2.new(0, 525, 0, 430) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "SettingsStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 3 + settingsFrame.Parent = frame + + local gameMainMenu = createGameMainMenu(baseZIndex, shield) + gameMainMenu.Parent = settingsFrame + + gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function() + backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton) + end) + + gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function() + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton) + end) + + if settings():FindFirstChild("Game Options") then + pcall(function() + settings():FindFirstChild("Game Options").VideoRecordingChangeRequest:connect(function(recording) + recordingVideo = recording + setRecordGui(recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton) + end) + end) + end + + game.CoreGui.RobloxGui.Changed:connect(function(prop) -- We have stopped recording when we resize + if prop == "AbsoluteSize" and recordingVideo then + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + end + end) + + function localPlayerChange() + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer then + settings().Rendering.EnableFRM = true + elseif inStudioMode then + settings().Rendering.EnableFRM = false + end + end + + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer ~= nil then + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + else + delay(0,function() + waitForProperty(game.Players,"LocalPlayer") + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + end) + end + + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + if not gameMainMenu.ReportAbuseButton.Visible then + game.ChildAdded:connect(function(child) + if child:IsA("NetworkClient") then + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + end + end) + end + + gameMainMenu.ResetButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"ResetConfirmationMenu","up",UDim2.new(0,525,0,370)) + end) + + gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"LeaveConfirmationMenu","down",UDim2.new(0,525,0,300)) + end) + + if game.CoreGui.Version >= 4 then -- we can use escape! + game:GetService("GuiService").EscapeKeyPressed:connect(function() + if currentMenuSelection == nil then + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + shield.Active = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + elseif #lastMenuSelection > 0 then + if #centerDialogs > 0 then + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + end + + goToMenu(lastMenuSelection[#lastMenuSelection]["container"],lastMenuSelection[#lastMenuSelection]["name"], + lastMenuSelection[#lastMenuSelection]["direction"],lastMenuSelection[#lastMenuSelection]["lastSize"]) + + table.remove(lastMenuSelection,#lastMenuSelection) + if #lastMenuSelection == 1 then -- apparently lua can't reduce count to 0... T_T + lastMenuSelection = {} + end + else + resumeGameFunction(shield) + end + end) + end + + local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield) + gameSettingsMenu.Visible = false + gameSettingsMenu.Parent = settingsFrame + + gameMainMenu.SettingsButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameSettingsMenu","left",UDim2.new(0,525,0,350)) + end) + + gameSettingsMenu.BackButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + end) + + local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield) + resetConfirmationWindow.Visible = false + resetConfirmationWindow.Parent = settingsFrame + + local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex,shield) + leaveConfirmationWindow.Visible = false + leaveConfirmationWindow.Parent = settingsFrame + + robloxLock(shield) + + settingsButton.MouseButton1Click:connect( + function() + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + end) + + return shield + end + + delay(0, function() + createSettingsDialog().Parent = gui + + gui.BottomLeftControl.SettingsButton.Active = true + gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0,2,0,-2) + + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + + -- our script has loaded, get rid of older buttons now + local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit") + if leaveGameButton then leaveGameButton:Remove() end + + local toolButton = gui.BottomLeftControl:FindFirstChild("ToolButton") + if toolButton then toolButton:Remove() end + + local topLeft = gui:FindFirstChild("TopLeftControl") + if topLeft then topLeft:Remove() end + + local toggle = gui.BottomLeftControl:FindFirstChild("TogglePlayMode") + if toggle then toggle:Remove() end + + local bottomRightChildren = gui.BottomRightControl:GetChildren() + for i = 1, #bottomRightChildren do + if not string.find(bottomRightChildren[i].Name,"Camera") then + bottomRightChildren[i]:Remove() + end + end + end) + +end --UserSettings call + +local createSaveDialogs = function() + local shield = Instance.new("TextButton") + shield.Text = "" + shield.AutoButtonColor = false + shield.Name = "SaveDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex+1 + + local clearAndResetDialog + local save + local saveLocal + local dontSave + local cancel + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Save" + messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault + messageBoxButtons[1].Function = function() save() end + messageBoxButtons[2] = {} + messageBoxButtons[2].Text = "Cancel" + messageBoxButtons[2].Function = function() cancel() end + messageBoxButtons[3] = {} + messageBoxButtons[3].Text = "Don't Save" + messageBoxButtons[3].Function = function() dontSave() end + + local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to ROBLOX before leaving?", "Confirm", messageBoxButtons) + saveDialogMessageBox.Visible = true + saveDialogMessageBox.Parent = shield + + + local errorBoxButtons = {} + + local buttonOffset = 1 + if game.LocalSaveEnabled then + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Save to Disk" + errorBoxButtons[buttonOffset].Function = function() saveLocal() end + buttonOffset = buttonOffset + 1 + end + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Keep Playing" + errorBoxButtons[buttonOffset].Function = function() cancel() end + errorBoxButtons[buttonOffset+1] = {} + errorBoxButtons[buttonOffset+1].Text = "Don't Save" + errorBoxButtons[buttonOffset+1].Function = function() dontSave() end + + local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to ROBLOX.", "Error", errorBoxButtons) + errorDialogMessageBox.Visible = false + errorDialogMessageBox.Parent = shield + + local spinnerDialog = Instance.new("Frame") + spinnerDialog.Name = "SpinnerDialog" + spinnerDialog.Style = Enum.FrameStyle.RobloxRound + spinnerDialog.Size = UDim2.new(0, 350, 0, 150) + spinnerDialog.Position = UDim2.new(.5, -175, .5, -75) + spinnerDialog.Visible = false + spinnerDialog.Active = true + spinnerDialog.Parent = shield + + local waitingLabel = Instance.new("TextLabel") + waitingLabel.Name = "WaitingLabel" + waitingLabel.Text = "Saving to ROBLOX..." + waitingLabel.Font = Enum.Font.ArialBold + waitingLabel.FontSize = Enum.FontSize.Size18 + waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0) + waitingLabel.TextColor3 = Color3.new(1,1,1) + waitingLabel.Parent = spinnerDialog + + local spinnerFrame = Instance.new("Frame") + spinnerFrame.Name = "Spinner" + spinnerFrame.Size = UDim2.new(0, 80, 0, 80) + spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40) + spinnerFrame.BackgroundTransparency = 1 + spinnerFrame.Parent = spinnerDialog + + local spinnerIcons = {} + local spinnerNum = 1 + while spinnerNum <= 8 do + local spinnerImage = Instance.new("ImageLabel") + spinnerImage.Name = "Spinner"..spinnerNum + spinnerImage.Size = UDim2.new(0, 16, 0, 16) + spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8) + spinnerImage.BackgroundTransparency = 1 + spinnerImage.Image = "http://www.roblox.com/Asset?id=45880710" + spinnerImage.Parent = spinnerFrame + + spinnerIcons[spinnerNum] = spinnerImage + spinnerNum = spinnerNum + 1 + end + + save = function() + saveDialogMessageBox.Visible = false + + --Show the spinner dialog + spinnerDialog.Visible = true + local spin = true + --Make it spin + delay(0, function() + local spinPos = 0 + while spin do + local pos = 0 + + while pos < 8 do + if pos == spinPos or pos == ((spinPos+1)%8) then + spinnerIcons[pos+1].Image = "http://www.roblox.com/Asset?id=45880668" + else + spinnerIcons[pos+1].Image = "http://www.roblox.com/Asset?id=45880710" + end + + pos = pos + 1 + end + spinPos = (spinPos + 1) % 8 + wait(0.2) + end + end) + + --Do the save while the spinner is going, function will wait + local result = game:SaveToRoblox() + if not result then + --Try once more + result = game:SaveToRoblox() + end + + --Hide the spinner dialog + spinnerDialog.Visible = false + --And cause the delay thread to stop + spin = false + + --Now process the result + if result then + --Success, close + game:FinishShutdown(false) + clearAndResetDialog() + else + --Failure, show the second dialog prompt + errorDialogMessageBox.Visible = true + end + end + + saveLocal = function() + errorDialogMessageBox.Visible = false + game:FinishShutdown(true) + clearAndResetDialog() + end + + dontSave = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + game:FinishShutdown(false) + clearAndResetDialog() + end + cancel = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + clearAndResetDialog() + end + + clearAndResetDialog = function() + saveDialogMessageBox.Visible = true + errorDialogMessageBox.Visible = false + spinnerDialog.Visible = false + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end + + robloxLock(shield) + shield.Visible = false + return shield +end + +local createReportAbuseDialog = function() + --Only show things if we are a NetworkClient + waitForChild(game,"NetworkClient") + + waitForChild(game,"Players") + waitForProperty(game.Players, "LocalPlayer") + local localPlayer = game.Players.LocalPlayer + + local reportAbuseButton + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton + + local shield = Instance.new("TextButton") + shield.Name = "ReportAbuseShield" + shield.Text = "" + shield.AutoButtonColor = false + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 1 + + local closeAndResetDialgo + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Ok" + messageBoxButtons[1].Modal = true + messageBoxButtons[1].Function = function() closeAndResetDialog() end + local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons) + calmingMessageBox.Visible = false + calmingMessageBox.Parent = shield + + local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons) + normalMessageBox.Visible = false + normalMessageBox.Parent = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -250, 0.5, -200) + frame.Size = UDim2.new(0.0, 500, 0.0, 400) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "ReportAbuseStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 1 + settingsFrame.Parent = frame + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Report Abuse" + title.TextColor3 = Color3I(221,221,221) + title.Position = UDim2.new(0.5, 0, 0, 30) + title.Font = Enum.Font.ArialBold + title.FontSize = Enum.FontSize.Size36 + title.ZIndex = baseZIndex + 2 + title.Parent = settingsFrame + + local description = Instance.new("TextLabel") + description.Name = "Description" + description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action." + description.TextColor3 = Color3I(221,221,221) + description.Position = UDim2.new(0, 0, 0, 55) + description.Size = UDim2.new(1, 0, 0, 40) + description.BackgroundTransparency = 1 + description.Font = Enum.Font.Arial + description.FontSize = Enum.FontSize.Size18 + description.TextWrap = true + description.ZIndex = baseZIndex + 2 + description.TextXAlignment = Enum.TextXAlignment.Left + description.TextYAlignment = Enum.TextYAlignment.Top + description.Parent = settingsFrame + + local playerLabel = Instance.new("TextLabel") + playerLabel.Name = "PlayerLabel" + playerLabel.Text = "Which player?" + playerLabel.BackgroundTransparency = 1 + playerLabel.Font = Enum.Font.Arial + playerLabel.FontSize = Enum.FontSize.Size18 + playerLabel.Position = UDim2.new(0.025,0,0,100) + playerLabel.Size = UDim2.new(0.4,0,0,36) + playerLabel.TextColor3 = Color3I(255,255,255) + playerLabel.TextXAlignment = Enum.TextXAlignment.Left + playerLabel.ZIndex = baseZIndex + 2 + playerLabel.Parent = settingsFrame + + local abusingPlayer = nil + local abuse = nil + local submitReportButton = nil + + local updatePlayerSelection = nil + local createPlayersDropDown = function() + local players = game:GetService("Players") + local playerNames = {} + local nameToPlayer = {} + local children = players:GetChildren() + local pos = 1 + if children then + for i, player in ipairs(children) do + if player:IsA("Player") and player ~= localPlayer then + playerNames[pos] = player.Name + nameToPlayer[player.Name] = player + pos = pos + 1 + end + end + end + local playerDropDown = nil + playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames, + function(playerName) + abusingPlayer = nameToPlayer[playerName] + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end) + playerDropDown.Name = "PlayersComboBox" + playerDropDown.ZIndex = baseZIndex + 2 + playerDropDown.Position = UDim2.new(.425, 0, 0, 102) + playerDropDown.Size = UDim2.new(.55,0,0,32) + + return playerDropDown + end + + local abuseLabel = Instance.new("TextLabel") + abuseLabel.Name = "AbuseLabel" + abuseLabel.Text = "What did they do?" + abuseLabel.Font = Enum.Font.Arial + abuseLabel.BackgroundTransparency = 1 + abuseLabel.FontSize = Enum.FontSize.Size18 + abuseLabel.Position = UDim2.new(0.025,0,0,140) + abuseLabel.Size = UDim2.new(0.4,0,0,36) + abuseLabel.TextColor3 = Color3I(255,255,255) + abuseLabel.TextXAlignment = Enum.TextXAlignment.Left + abuseLabel.ZIndex = baseZIndex + 2 + abuseLabel.Parent = settingsFrame + + local abuses = {"Bad Words or Threats","Bad Username","Talking about Dating","Account Trading or Sharing","Asking Personal Questions","Rude or Mean Behavior","False Reporting Me"} + local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, + function(abuseText) + abuse = abuseText + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end, true) + abuseDropDown.Name = "AbuseComboBox" + abuseDropDown.ZIndex = baseZIndex + 2 + abuseDropDown.Position = UDim2.new(0.425, 0, 0, 142) + abuseDropDown.Size = UDim2.new(0.55,0,0,32) + abuseDropDown.Parent = settingsFrame + + local shortDescriptionLabel = Instance.new("TextLabel") + shortDescriptionLabel.Name = "ShortDescriptionLabel" + shortDescriptionLabel.Text = "Short Description: (optional)" + shortDescriptionLabel.Font = Enum.Font.Arial + shortDescriptionLabel.FontSize = Enum.FontSize.Size18 + shortDescriptionLabel.Position = UDim2.new(0.025,0,0,180) + shortDescriptionLabel.Size = UDim2.new(0.95,0,0,36) + shortDescriptionLabel.TextColor3 = Color3I(255,255,255) + shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionLabel.BackgroundTransparency = 1 + shortDescriptionLabel.ZIndex = baseZIndex + 2 + shortDescriptionLabel.Parent = settingsFrame + + local shortDescriptionWrapper = Instance.new("Frame") + shortDescriptionWrapper.Name = "ShortDescriptionWrapper" + shortDescriptionWrapper.Position = UDim2.new(0.025,0,0,220) + shortDescriptionWrapper.Size = UDim2.new(0.95,0,1,-310) + shortDescriptionWrapper.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionWrapper.BorderSizePixel = 0 + shortDescriptionWrapper.ZIndex = baseZIndex + 2 + shortDescriptionWrapper.Parent = settingsFrame + + local shortDescriptionBox = Instance.new("TextBox") + shortDescriptionBox.Name = "TextBox" + shortDescriptionBox.Text = "" + shortDescriptionBox.ClearTextOnFocus = false + shortDescriptionBox.Font = Enum.Font.Arial + shortDescriptionBox.FontSize = Enum.FontSize.Size18 + shortDescriptionBox.Position = UDim2.new(0,3,0,3) + shortDescriptionBox.Size = UDim2.new(1,-6,1,-6) + shortDescriptionBox.TextColor3 = Color3I(255,255,255) + shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top + shortDescriptionBox.TextWrap = true + shortDescriptionBox.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionBox.BorderSizePixel = 0 + shortDescriptionBox.ZIndex = baseZIndex + 2 + shortDescriptionBox.Parent = shortDescriptionWrapper + + submitReportButton = Instance.new("TextButton") + submitReportButton.Name = "SubmitReportBtn" + submitReportButton.Active = false + submitReportButton.Modal = true + submitReportButton.Font = Enum.Font.Arial + submitReportButton.FontSize = Enum.FontSize.Size18 + submitReportButton.Position = UDim2.new(0.1, 0, 1, -80) + submitReportButton.Size = UDim2.new(0.35,0,0,50) + submitReportButton.AutoButtonColor = true + submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault + submitReportButton.Text = "Submit Report" + submitReportButton.TextColor3 = Color3I(255,255,255) + submitReportButton.ZIndex = baseZIndex + 2 + submitReportButton.Parent = settingsFrame + + submitReportButton.MouseButton1Click:connect(function() + if submitReportButton.Active then + if abuse and abusingPlayer then + frame.Visible = false + game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text) + if abuse == "Rude or Mean Behavior" or abuse == "False Reporting Me" then + calmingMessageBox.Visible = true + else + normalMessageBox.Visible = true + end + else + closeAndResetDialog() + end + end + end) + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelBtn" + cancelButton.Font = Enum.Font.Arial + cancelButton.FontSize = Enum.FontSize.Size18 + cancelButton.Position = UDim2.new(0.55, 0, 1, -80) + cancelButton.Size = UDim2.new(0.35,0,0,50) + cancelButton.AutoButtonColor = true + cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault + cancelButton.Text = "Cancel" + cancelButton.TextColor3 = Color3I(255,255,255) + cancelButton.ZIndex = baseZIndex + 2 + cancelButton.Parent = settingsFrame + + closeAndResetDialog = function() + --Delete old player combo box + local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox") + if oldComboBox then + oldComboBox.Parent = nil + end + + abusingPlayer = nil updatePlayerSelection(nil) + abuse = nil updateAbuseSelection(nil) + submitReportButton.Active = false + shortDescriptionBox.Text = "" + frame.Visible = true + calmingMessageBox.Visible = false + normalMessageBox.Visible = false + shield.Visible = false + reportAbuseButton.Active = true + game.GuiService:RemoveCenterDialog(shield) + end + + cancelButton.MouseButton1Click:connect(closeAndResetDialog) + + reportAbuseButton.MouseButton1Click:connect( + function() + createPlayersDropDown().Parent = settingsFrame + table.insert(centerDialogs,shield) + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + reportAbuseButton.Active = false + shield.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + reportAbuseButton.Active = true + shield.Visible = false + end) + end) + + robloxLock(shield) + return shield +end + +local createChatBar = function() + --Only show a chat bar if we are a NetworkClient + waitForChild(game, "NetworkClient") + + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local chatBar = Instance.new("Frame") + chatBar.Name = "ChatBar" + chatBar.Size = UDim2.new(1, 0, 0, 22) + chatBar.Position = UDim2.new(0, 0, 1, 0) + chatBar.BackgroundColor3 = Color3.new(0,0,0) + chatBar.BorderSizePixel = 0 + + local chatBox = Instance.new("TextBox") + chatBox.Text = "" + chatBox.Visible = false + chatBox.Size = UDim2.new(1,-4,1,0) + chatBox.Position = UDim2.new(0,2,0,0) + chatBox.TextXAlignment = Enum.TextXAlignment.Left + chatBox.Font = Enum.Font.Arial + chatBox.ClearTextOnFocus = false + chatBox.FontSize = Enum.FontSize.Size14 + chatBox.TextColor3 = Color3.new(1,1,1) + chatBox.BackgroundTransparency = 1 + --chatBox.Parent = chatBar + + local chatButton = Instance.new("TextButton") + chatButton.Size = UDim2.new(1,-4,1,0) + chatButton.Position = UDim2.new(0,2,0,0) + chatButton.AutoButtonColor = false + chatButton.Text = "To chat click here or press \"/\" key" + chatButton.TextXAlignment = Enum.TextXAlignment.Left + chatButton.Font = Enum.Font.Arial + chatButton.FontSize = Enum.FontSize.Size14 + chatButton.TextColor3 = Color3.new(1,1,1) + chatButton.BackgroundTransparency = 1 + --chatButton.Parent = chatBar + + local activateChat = function() + if chatBox.Visible then + return + end + chatButton.Visible = false + chatBox.Text = "" + chatBox.Visible = true + chatBox:CaptureFocus() + end + + chatButton.MouseButton1Click:connect(activateChat) + + local hotKeyEnabled = true + local toggleHotKey = function(value) + hotKeyEnabled = value + end + + local guiService = game:GetService("GuiService") + local newChatMode = pcall(function() + --guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + --guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end) + end) + if not newChatMode then + --guiService:AddKey("/") + --guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end) + end + + chatBox.FocusLost:connect( + function(enterPressed) + if enterPressed then + if chatBox.Text ~= "" then + local str = chatBox.Text + if string.sub(str, 1, 1) == '%' then + game.Players:TeamChat(string.sub(str, 2)) + else + game.Players:Chat(str) + end + end + end + chatBox.Text = "" + chatBox.Visible = false + chatButton.Visible = true + end) + robloxLock(chatBar) + return chatBar, toggleHotKey +end + +--Spawn a thread for the Save dialogs +local isSaveDialogSupported = pcall(function() local var = game.LocalSaveEnabled end) +if isSaveDialogSupported then + delay(0, + function() + local saveDialogs = createSaveDialogs() + saveDialogs.Parent = gui + + game.RequestShutdown = function() + table.insert(centerDialogs,saveDialogs) + game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + saveDialogs.Visible = true + end, + --HideFunction + function() + saveDialogs.Visible = false + end) + + return true + end + end) +end + +--Spawn a thread for the Report Abuse dialogs +delay(0, + function() + createReportAbuseDialog().Parent = gui + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true + end) + +--Spawn a thread for Chat Bar +local coreGuiVersion = game.CoreGui.Version +local success, luaChat = pcall(function() return game.GuiService.UseLuaChat end) +if success and luaChat then + + --[[delay(0, + function() + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local advancedChatBarSupported = game.Players.LocalPlayer.ChatMode + local chatBar, toggleHotKey = createChatBar() + + [if advancedChatBarSupported then + local function toggleChatBar(chatMode) + if chatMode == Enum.ChatMode.Menu then + chatBar.Parent = nil + game.GuiService:SetGlobalSizeOffsetPixel(0,0) + toggleHotKey(false) + elseif chatMode == Enum.ChatMode.TextAndMenu then + --chatBar.Parent = gui + --game.GuiService:SetGlobalSizeOffsetPixel(0,-22) + toggleHotKey(true) + end + end + game.Players.LocalPlayer.Changed:connect( + function(prop) + if prop == "ChatMode" then + toggleChatBar(game.Players.LocalPlayer.ChatMode) + end + end) + toggleChatBar(game.Players.LocalPlayer.ChatMode) + else + --chatBar.Parent = gui + --game.GuiService:SetGlobalSizeOffsetPixel(0,-22) + end + end)]] +end + + +local BurningManPlaceID = 41324860 +-- TODO: remove click to walk completely if testing shows we don't need it +-- Removes click to walk option from Burning Man +delay(0, + function() + waitForChild(game,"NetworkClient") + waitForChild(game,"Players") + waitForProperty(game.Players, "LocalPlayer") + waitForProperty(game.Players.LocalPlayer, "Character") + waitForChild(game.Players.LocalPlayer.Character, "Humanoid") + waitForProperty(game, "PlaceId") + + if game.PlaceId == BurningManPlaceID then + game.Players.LocalPlayer.Character.Humanoid:SetClickToWalkEnabled(false) + game.Players.LocalPlayer.CharacterAdded:connect(function(character) + waitForChild(character, "Humanoid") + character.Humanoid:SetClickToWalkEnabled(false) + end) + end + end) + +end --LoadLibrary if diff --git a/app/files/CoreGui/48488235 b/app/files/CoreGui/48488235 new file mode 100644 index 0000000..06925d8 --- /dev/null +++ b/app/files/CoreGui/48488235 @@ -0,0 +1,3074 @@ +-------------------- +-- Super Util +-------------------- + +local ADMINS = +{ + rbadam = 1, + adamintygum = 1, + androidtest = 1, + robloxfrenchie = 1, + jackssmirkingrevenge = 1, + lindapepita = 1, + vaiobot = 1, + goddessnoob = 1, + effward = 1, + blockhaak = 1, + drewbda = 1, + ['659223'] = 1, + tone = 1, + fasterbuilder19 = 1, + zeuxcg = 1, + concol2 = 1, + reesemcblox = 1, + jeditkacheff = 'http://www.nexium.fit/asset/?id=134032333', + whkm1980 = 1, + chiefjustus = 1, + ellissar = 1, + arbolito = 1, + noob007 = 1, + limon = 1, + cmed = 1, + hawkington = 1, + tabemono = 1, + autoconfig = 1, + brighteyes = 1, + monsterinc3d = 1, + mrdoombringer = 1, + isolatedevent = 1, + countonconnor = 1, + scubasomething = 1, + onlytwentycharacters = 1, + lordrugdumph = 1, + bellavour = 1, + ['david.baszucki'] = 1, + ibanez2189 = 1, + sorcus = 'http://www.nexium.fit/asset/?id=113059239', + deeana00 = 1, + thelorekt = 1, + niquemonster = 1, + thorasaur = 1, + ['mse6'] = 1, + corgiparade = 1, + varia = 1, + ['4runningwolves'] = 1, + pulmoesflor = 1, + olive71 = 1, + groundcontroll2 = 1, + gurukrish = 1, + countvelcro = 1, + iltalumi = 1, + juanjuan23 = 1, + ostrichsized = 1, + jackintheblox = 1, + slingshotjunkie = 1, + gordonrox24 = 1, + sharpnine = 1, + motornerve = 1, + motornerve = 1, + watchmedogood = 1, + jmargh = 1, + jaykorean = 1, + foyle = 1, + majortom4321 = 1, + shedletsky = 'http://www.nexium.fit/asset/?id=105897927', + supernovacaine = 1, + ffjosh = 1, + sickenedmonkey = 1, + doughtless = 1, + kbux = 1, + totallynothere = 1, + erzastar = 1, + keith = 1, + chro = 1, + solarcrane = 1, + glorioussalt = 1, + uristmcsparks = 1, + itolauren = 1, + malcomso = 1, + stickmasterluke = 1, + windlight13 = 1, + yumyumcheerios = 1, + stravant = 1, + byteme = 1, + imaginationsensation = 1, + ['matt.dusek'] = 1, + mcrtest = 1, + seranok = 1, + maxvee = 1, + coatp0cketninja = 1, + screenme = 1, + b1tsh1ft = 1, + totbl = 1, + aquabot8 = 1, + grossinger = 1, + merely = 1, + cdakkar = 1, + siekiera = 1, + robloxkidsaccount = 1, + flotsamthespork = 1, + soggoth = 1, + phil = 1, + orcasparkles = 1, + skullgoblin = 1, + rickrosstheb0ss = 1, + argonpirate = 1, + nobledragon = 1, + squidcod = 1, + raeglyn = 1, + robloxsai = 'http://www.nexium.fit/asset/?id=161078086', + briarroze = 1, + hawkeyebandit = 1, + dapperbuffalo = 1, + vukota = 1, + swiftstone = 1, + gemlocker = 1, + loopylens = 1, + tarabyte = 1, + timobius = 1, + tobotrobot = 1, + foster008 = 1, + twberg = 1, + darthvaden = 1, + khanovich = 1, + codewriter = 1, + vladthefirst = 1, + phaedre = 1, + gorroth = 1, + sphinxshen = 1, + jynj1984 = 1, + roboyz = 1, + zodiaczak = 1, +} + + + +local Images = { + bottomDark = '94691904', + bottomLight = '94691940', + midDark = '94691980', + midLight = '94692025', + LargeDark = '96098866', + LargeLight = '96098920', + LargeHeader = '96097470', + NormalHeader = '94692054', + LargeBottom = '96397271', + NormalBottom = '94754966', + DarkBluePopupMid = '97114905', + LightBluePopupMid = '97114905', + DarkPopupMid = '97112126', + LightPopupMid = '97109338', + DarkBluePopupTop = '97114838', + DarkBluePopupBottom = '97114758', + DarkPopupBottom = '100869219', + LightPopupBottom = '97109175', +} + +local BASE_TWEEN = .25 + +local MOUSE_HOLD_TIME = .15 +local MOUSE_DRAG_DISTANCE = 15 + +--[[ + Generic object Create function, which I am using to create Gui's + Thanks to Stravant! +--]] +local Obj = {} +function Obj.Create(guiType) + return function(data) + local obj = Instance.new(guiType) + for k, v in pairs(data) do + if type(k) == 'number' then + v.Parent = obj + else + obj[k] = v + end + end + return obj + end +end + +--[[ + makes a full sized background for a guiobject + @Args: + imgName asset name of image to fill background + @Return: background gui object +--]] +function MakeBackgroundGuiObj(imgName) + return Obj.Create'ImageLabel' + { + Name = 'Background', + BackgroundTransparency = 1, + Image = imgName, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1,0), + } +end +--[[ turns 255 integer color value to a color3 --]] +function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +--[[ + Gets correct icon for builder's club status to display by name + @Args: + membershipType Enum of membership status + @Return: string of image asset +--]] +function getMembershipTypeIcon(membershipType,player) + if player:IsInGroup(1200769) then + return "http://www.nexium.fit/asset/?id=99727663" + elseif membershipType == Enum.MembershipType.None then + return "" + elseif membershipType == Enum.MembershipType.BuildersClub then + return "rbxasset://textures/ui/TinyBcIcon.png" + elseif membershipType == Enum.MembershipType.TurboBuildersClub then + return "rbxasset://textures/ui/TinyTbcIcon.png" + elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then + return "rbxasset://textures/ui/TinyObcIcon.png" + else + error("Unknown membershipType" .. membershipType) + end +end + +local function getFriendStatusIcon(friendStatus) + if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then + return "" + elseif friendStatus == Enum.FriendStatus.Friend then + return "http://www.nexium.fit/asset/?id=99749771" + elseif friendStatus == Enum.FriendStatus.FriendRequestSent then + return "http://www.nexium.fit/asset/?id=99776888" + elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then + return "http://www.nexium.fit/asset/?id=99776838" + else + error("Unknown FriendStatus: " .. friendStatus) + end +end + + +--[[ + Utility function to create buttons for the popup menus + @Args: + nparent what to parent this button to + ntext text to put on this button + index number index of this entry in menu + last is this the last element of the popup menu + @Return: a popup menu button +--]] +function MakePopupButton(nparent,ntext,index,last) + local tobj = Obj.Create"ImageButton" + { + Name = 'ReportButton', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,1*index,0), + Size = UDim2.new(1, 0, 1, 0), + ZIndex=7, + Obj.Create'TextLabel' + { + Name = 'ButtonText', + BackgroundTransparency = 1, + Position = UDim2.new(.07, 0, .07, 0), + Size = UDim2.new(.86,0,.86,0), + Parent = HeaderFrame, + Font = 'ArialBold', + Text = ntext, + FontSize = 'Size14', + TextScaled = true, + TextColor3 = Color3.new(1,1,1), + TextStrokeTransparency = 1, + ZIndex=7, + }, + Parent = nparent, + } + if index==0 then + tobj.Image = 'http://www.nexium.fit/asset/?id=97108784' + elseif last then + if index%2==1 then + tobj.Image = 'http://www.nexium.fit/asset/?id='.. Images['LightPopupBottom'] + else + tobj.Image = 'http://www.nexium.fit/asset/?id='.. Images['DarkPopupBottom'] + end + else + if index%2==1 then + tobj.Image = 'http://www.nexium.fit/asset/?id=97112126' + else + tobj.Image = 'http://www.nexium.fit/asset/?id=97109338' + end + end + return tobj +end + + +--[[ + obligatory wait for child function + @Args: + parent Parent object to look for child in + child name of child object to look for + @Return: object waited for +--]] +function WaitForChild(parent,child) + while not parent:FindFirstChild(child) do + wait() debugprint(" child "..parent.Name.." waiting for "..child) + end + return parent[child] +end + + --------------------------- + -- Workspace Objects + --------------------------- + +-- might want to move all this to an init function, wait for localplayer elsewhere +local Players = game:GetService('Players') +-- make sure this doesn't run on the server(it will if you dont do this) +while not Players.LocalPlayer do + Players.Changed:wait() +end + +local LocalPlayer = Players.LocalPlayer +local Mouse = LocalPlayer:GetMouse() + +local ScreenGui = Obj.Create"Frame" +{ + Name = 'PlayerListScreen', + Size = UDim2.new(1, 0, 1, 0), + BackgroundTransparency = 1, + Parent = script.Parent +} +local MainFrame = Obj.Create"Frame" +{ + Name = 'LeaderBoardFrame', + Position = UDim2.new(1, -150, 0.005, 0), + Size = UDim2.new(0, 150, 0, 800), + BackgroundTransparency = 1, + Parent = ScreenGui, +} + +--frame used for expanding leaderstats when frame is 'focused' +local FocusFrame = Obj.Create"Frame" +{ + Name = 'FocusFrame', + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1, 0, 0, 100), + BackgroundTransparency = 1, + Active = true, + Parent = MainFrame, +} + +local TemplateFrameYSize = 0.670000017 + + -- HEADER +local HeaderFrame = Obj.Create"Frame" +{ + Name = 'Header', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,0,0), + Size = UDim2.new(1, 0, .07, 0), + Parent = MainFrame, + MakeBackgroundGuiObj('http://www.nexium.fit/asset/?id=94692054'), +} + local HeaderFrameHeight = HeaderFrame.Size.Y.Scale + local MaximizeButton = Obj.Create"ImageButton" + { + Name = 'MaximizeButton', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1,0), + Parent = HeaderFrame, + } + local HeaderName = Obj.Create"TextLabel" + { + Name = 'PlayerName', + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, .01, 0), + Size = UDim2.new(.98,0,.38,0), + Parent = HeaderFrame, + Font = 'ArialBold', + Text = LocalPlayer.Name, + FontSize='Size24', + --TextScaled = true, + TextColor3 = Color3.new(1,1,1), + TextStrokeColor3 = Color3.new(0,0,0), + TextStrokeTransparency = 0, + TextXAlignment = 'Right', + TextYAlignment = 'Center', + } + local HeaderScore = Obj.Create"TextLabel" + { + Name = 'PlayerScore', + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, .4, 0), + Size = UDim2.new(.98,0,0,30), + Parent = HeaderFrame, + Font = 'ArialBold', + Text = '', + FontSize='Size24', + TextYAlignment = 'Top', + --TextScaled = true, + TextColor3 = Color3.new(1,1,1), + TextStrokeTransparency = 1, + TextXAlignment = 'Right', + TextYAlignment = 'Top', + } + -- BOTTOM + --used for shifting bottom frame for mouse over effects +local BottomShiftFrame = Obj.Create"Frame" +{ + Name= 'BottomShiftFrame', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,HeaderFrameHeight,0), + Size = UDim2.new(1,0,1,0), + Parent=MainFrame, +} + local BottomFrame = Obj.Create"Frame" + { + Name = 'Bottom', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,.07,0), + Size = UDim2.new(1, 0, .03, 0), + Parent = BottomShiftFrame, + MakeBackgroundGuiObj('http://www.nexium.fit/asset/?id=94754966'), + } + local ExtendButton = Obj.Create"ImageButton" + { + Name = 'bigbutton', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1.5,0), + ZIndex = 3, + Parent = BottomFrame, + } + local ExtendTab = Obj.Create"ImageButton" + { + Name = 'extendTab', + Active = true, + BackgroundTransparency = 1, + Image = 'http://www.nexium.fit/asset/?id=94692731', + Position = UDim2.new(.608, 0, .3, 0), + Size = UDim2.new(.3,0,.7,0), + Parent = BottomFrame, + } +local TopClipFrame = Obj.Create"Frame" +{ + Name = 'ListFrame', + BackgroundTransparency = 1, + Position = UDim2.new(-1,0,.07,0), + Size = UDim2.new(2, 0, 1, 0), + Parent = MainFrame, + ClipsDescendants = true, +} + local BottomClipFrame = Obj.Create"Frame" + { + Name = 'BottomFrame', + BackgroundTransparency = 1, + Position = UDim2.new(0,0, - .8,0), + Size = UDim2.new(1, 0, 1, 0), + Parent = TopClipFrame, + ClipsDescendants = true, + } + local ScrollBarFrame = Obj.Create"Frame" + { + Name = 'ScrollBarFrame', + BackgroundTransparency = 1, + Position = UDim2.new(.987,0,.8,0), + Size = UDim2.new(.01, 0, .2, 0), + Parent = BottomClipFrame, + } + local ScrollBar = Obj.Create"Frame" + { + Name = 'ScrollBar', + BackgroundTransparency = 0, + BackgroundColor3 = Color3.new(.2,.2,.2), + Position = UDim2.new(0,0,0,0), + Size = UDim2.new(1, 0, .5, 0), + ZIndex = 5, + Parent = ScrollBarFrame, + + } + local ListFrame = Obj.Create"Frame" + { + Name = 'SubFrame', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,.8,0), + Size = UDim2.new(1, 0, 1, 0), + Parent = BottomClipFrame, + } +local PopUpClipFrame = Obj.Create"Frame" +{ + Name = 'PopUpFrame', + BackgroundTransparency = 1, + SizeConstraint='RelativeXX', + Position = MainFrame.Position + UDim2.new( 0,-150,0,0), + Size = UDim2.new(0,150,0,800), + Parent = MainFrame, + ClipsDescendants = true, + ZIndex=7, +} +local PopUpPanel = nil + local PopUpPanelTemplate = Obj.Create"Frame" + { + Name = 'Panel', + BackgroundTransparency = 1, + Position = UDim2.new(1,0,0,0), + Size = UDim2.new(1,0,.032,0), + Parent = PopUpClipFrame, + } + +local StatTitles = Obj.Create"Frame" +{ + Name = 'StatTitles', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,1,-10), + Size = UDim2.new(1, 0, 0, 0), + Parent = HeaderFrame, +} + +local IsMinimized = Instance.new('BoolValue') +local IsMaximized = Instance.new('BoolValue') +local IsTabified = Instance.new('BoolValue') +local AreNamesExpanded = Instance.new('BoolValue') + + +local MiddleTemplate = Obj.Create"Frame" +{ + Name = 'MidTemplate', + BackgroundTransparency = 1, + Position = UDim2.new(100,0,.07,0), + Size = UDim2.new(.5, 0, .025, 0),--UDim2.new(1, 0, .03, 0), + Obj.Create'ImageLabel' + { + Name = 'BCLabel', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(.005, 5, .20, 0), + Size = UDim2.new(0,16,0,16), + SizeConstraint = 'RelativeYY', + Image = "", + ZIndex = 3, + }, + Obj.Create'ImageLabel' + { + Name = 'FriendLabel', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(.005, 5, .15, 0), + Size = UDim2.new(0,16,0,16), + SizeConstraint = 'RelativeYY', + Image = "", + ZIndex = 3, + }, + Obj.Create"ImageButton" + { + Name = 'ClickListener', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(.005, 1, 0, 0), + Size = UDim2.new(.96,0,1,0), + ZIndex = 3, + }, + Obj.Create"Frame" + { + Name = 'TitleFrame', + BackgroundTransparency = 1, + Position = UDim2.new(.01, 0, 0, 0), + Size = UDim2.new(0,140,1,0), + ClipsDescendants=true, + Obj.Create"TextLabel" + { + Name = 'Title', + BackgroundTransparency = 1, + Position = UDim2.new(0, 5, 0, 0), + Size = UDim2.new(100,0,1,0), + Font = 'Arial', + FontSize='Size14', + TextColor3 = Color3.new(1,1,1), + TextXAlignment = 'Left', + TextYAlignment = 'Center', + ZIndex = 3, + }, + }, + + Obj.Create"TextLabel" + { + Name = 'PlayerScore', + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1,0), + Font = 'ArialBold', + Text = '', + FontSize='Size14', + TextColor3 = Color3.new(1,1,1), + TextXAlignment = 'Right', + TextYAlignment = 'Center', + ZIndex = 3, + }, + --Obj.Create'IntValue'{Name = 'ID'}, + --Obj.Create'ObjectValue'{Name = 'Player'}, + --Obj.Create'IntValue'{Name = 'Score'}, + ZIndex = 3, +} +local MiddleBGTemplate = Obj.Create"Frame" +{ + Name = 'MidBGTemplate', + BackgroundTransparency = 1, + Position = UDim2.new(100,0,.07,0), + Size = UDim2.new(.5, 0, .025, 0),--UDim2.new(1, 0, .03, 0), + MakeBackgroundGuiObj('http://www.nexium.fit/asset/?id=94692025'), + +} + + -- REPORT ABUSE OBJECTS + +local ReportAbuseShield = Obj.Create"TextButton" +{ + Name = "ReportAbuseShield", + Text = "", + AutoButtonColor = false, + Active = true, + Visible = true, + Size = UDim2.new(1,0,1,0), + BackgroundColor3 = Color3I(51,51,51), + BorderColor3 = Color3I(27,42,53), + BackgroundTransparency = 1, +} + +local ReportAbuseFrame = Obj.Create "Frame" +{ + Name = "Settings", + Position = UDim2.new(0.5, - 250, 0.5, - 200), + Size = UDim2.new(0.0, 500, 0.0, 400), + BackgroundTransparency = 1, + Active = true, + Parent = ReportAbuseShield, +} + +local AbuseSettingsFrame = Obj.Create"Frame" +{ + Name = "ReportAbuseStyle", + Size = UDim2.new(1, 0, 1, 0), + Active = true, + BackgroundTransparency = 1, + MakeBackgroundGuiObj('http://www.nexium.fit/asset/?id=96488767'), -- 96480351'), + Obj.Create"TextLabel" + { + Name = "Title", + Text = "Report Abuse", + TextColor3 = Color3I(221,221,221), + Position = UDim2.new(0.5, 0, 0, 30), + Font = Enum.Font.ArialBold, + FontSize = Enum.FontSize.Size36, + }, + Obj.Create"TextLabel" + { + Name = "Description", + Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action.", + TextColor3 = Color3I(221,221,221), + Position = UDim2.new(.01, 0, 0, 55), + Size = UDim2.new(.99, 0, 0, 40), + BackgroundTransparency = 1, + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + TextWrap = true, + TextXAlignment = Enum.TextXAlignment.Left, + TextYAlignment = Enum.TextYAlignment.Top, + }, + Obj.Create"TextLabel" + { + Name = "AbuseLabel", + Text = "What did they do?", + Font = Enum.Font.Arial, + BackgroundTransparency = 1, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,140), + Size = UDim2.new(0.4,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + }, + Obj.Create"TextLabel" + { + Name = "ShortDescriptionLabel", + Text = "Short Description: (optional)", + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,180), + Size = UDim2.new(0.95,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + BackgroundTransparency = 1, + }, + Obj.Create"TextLabel" + { + Name = "ReportingPlayerLabel", + Text = "Reporting Player", + BackgroundTransparency = 1, + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,100), + Size = UDim2.new(0.95,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + Parent = AbuseSettingsFrame + }, + + Parent = ReportAbuseFrame, +} + +local AbusePlayerLabel = Obj.Create"TextLabel" +{ + Name = "PlayerLabel", + Text = "", + BackgroundTransparency = 1, + Font = Enum.Font.ArialBold, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,100), + Size = UDim2.new(0.95,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Right, + Parent = AbuseSettingsFrame +} + +local SubmitReportButton = Obj.Create"ImageButton" +{ + Name = "SubmitReportBtn", + Active = false, + BackgroundTransparency = 1, + Position = UDim2.new(.5, - 200, 1, - 80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = false, + Image = 'http://www.nexium.fit/asset/?id=96502438', -- 96501119', + Parent = AbuseSettingsFrame, +} + +local CancelReportButton = Obj.Create"ImageButton" +{ + Name = "CancelBtn", + BackgroundTransparency = 1, + Position = UDim2.new(0.5, 50, 1, - 80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = true, + Image = 'http://www.nexium.fit/asset/?id=96500683', + Parent = AbuseSettingsFrame, +} + +local AbuseDescriptionWrapper = Obj.Create"Frame" +{ + Name = "AbuseDescriptionWrapper", + Position = UDim2.new(0.025,0,0,220), + Size = UDim2.new(0.95,0,1, - 310), + BackgroundColor3 = Color3I(0,0,0), + BorderSizePixel = 0, + Parent = AbuseSettingsFrame, +} + +local AbuseDescriptionBox + +local OriginalAbuseDescriptionBox = Obj.Create"TextBox" +{ + Name = "TextBox", + Text = "", + ClearTextOnFocus = false, + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0,3,0,3), + Size = UDim2.new(1, - 6,1, - 6), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + TextYAlignment = Enum.TextYAlignment.Top, + TextWrap = true, + BackgroundColor3 = Color3I(0,0,0), + BorderSizePixel = 0, +} + +local CalmingAbuseBox = Obj.Create'Frame' +{ + Name = 'AbuseFeedbackBox', + BackgroundTransparency = 1, + Position=UDim2.new(0.25, 0, 0.300000012, 0), + Size=UDim2.new(0.5, 0, 0.370000005, 0), + MakeBackgroundGuiObj('http://www.nexium.fit/asset/?id=96506233'), + Obj.Create'TextLabel' + { + Name = 'Header', + Position=UDim2.new(0,10,.05,0), + Size=UDim2.new(1, -30, .15, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextXAlignment = Enum.TextXAlignment.Center, + TextYAlignment = Enum.TextYAlignment.Top, + Text = 'Thanks for your report!', + TextColor3 = Color3.new(1,1,1), + FontSize = Enum.FontSize.Size48, + Font = 'ArialBold', + }, + Obj.Create'TextLabel' + { + Name = 'content', + Position = UDim2.new(0,10,.20,0), + Size = UDim2.new(1, -30, .40, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextColor3 = Color3.new(1,1,1), + Text = 'Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats', + TextWrapped = true, + TextYAlignment = Enum.TextYAlignment.Top, + FontSize = Enum.FontSize.Size24, + Font = 'Arial', + }, + Obj.Create'ImageButton' + { + Name = "OkButton", + BackgroundTransparency = 1, + Position = UDim2.new(0.5, -75, 1, -80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = true, + Image = 'http://www.nexium.fit/asset/?id=96507959', + } +} +local NormalAbuseBox = Obj.Create'Frame' +{ + Name = 'AbuseFeedbackBox', + BackgroundTransparency = 1, + Position = UDim2.new(0.25, 0, 0.300000012, 0), + Size = UDim2.new(0.5, 0, 0.370000005, 0), + MakeBackgroundGuiObj('http://www.nexium.fit/asset/?id=96506233'), + Obj.Create'TextLabel' + { + Name = 'Header', + Position = UDim2.new(0,10,.05,0), + Size = UDim2.new(1, -30, .15, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextColor3 = Color3.new(1,1,1), + TextXAlignment = Enum.TextXAlignment.Center, + TextYAlignment = Enum.TextYAlignment.Top, + Text = 'Thanks for your report!', + FontSize = Enum.FontSize.Size48, + Font ='ArialBold' + }, + Obj.Create'TextLabel' + { + Name = 'content', + Position = UDim2.new(0,10,.20,0), + Size = UDim2.new(1, -30, .15, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextColor3 = Color3.new(1,1,1), + Text = "Our moderators will review the chat logs and determine what happened.", + TextWrapped = true, + TextYAlignment = Enum.TextYAlignment.Top, + FontSize = Enum.FontSize.Size24, + Font = 'Arial', + }, + Obj.Create'ImageButton' + { + Name = "OkButton", + BackgroundTransparency = 1, + Position = UDim2.new(0.5, -75, 1, -80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = true, + Image = 'http://www.nexium.fit/asset/?id=96507959', + }, +} + +local BigButton=Instance.new('ImageButton') + BigButton.Size=UDim2.new(1,0,1,0) + BigButton.BackgroundTransparency=1 + BigButton.ZIndex=8 + BigButton.Visible=false + --BigButton.Active=false + BigButton.Parent=ScreenGui + + + local debugFrame = Obj.Create"Frame" + { + Name = 'debugframe', + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(0, 150, 0, 800),--0.99000001 + BackgroundTransparency = 1, + + } + local debugplayers = Obj.Create"TextLabel" + { + BackgroundTransparency = .8, + Position = UDim2.new(0, 0, .01, 0), + Size = UDim2.new(1,0,.5,0), + Parent = debugFrame, + Font = 'ArialBold', + Text = '--', + FontSize='Size14', + TextWrapped=true, + TextColor3 = Color3.new(1,1,1), + TextStrokeColor3 = Color3.new(0,0,0), + TextStrokeTransparency = 0, + TextXAlignment = 'Right', + TextYAlignment = 'Center', + } + local debugOutput = Obj.Create"TextLabel" + { + BackgroundTransparency = .8, + Position = UDim2.new(0, 0, .5, 0), + Size = UDim2.new(1,0,.5,0), + Parent = debugFrame, + Font = 'ArialBold', + Text = '--', + FontSize='Size14', + TextWrapped=true, + TextColor3 = Color3.new(1,1,1), + TextStrokeColor3 = Color3.new(0,0,0), + TextStrokeTransparency = 0, + TextXAlignment = 'Right', + TextYAlignment = 'Center', + } + + +--[[ + simple function to toggle the display of debug output +--]] +local DebugPrintEnabled=true +function debugprint(str) + --print(str) + if DebugPrintEnabled then + debugOutput.Text=str + end +end + + + ------------------------- + -- Script objects + ------------------------- +local RbxGui = assert(LoadLibrary('RbxGui')) + + -- number of entries to show if you click minimize +local DefaultEntriesOnScreen = 8 + + + + + +for _,i in pairs(Images) do + Game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id="..i) +end + + -- ordered array of 'score data', each entry has: + -- Name(String) + -- Priority(number) + -- IsPrimary (bool, should it be shown in upper right) + -- MaxLength (integer, of the length of the longest element for this column) +local ScoreNames = {} + -- prevents flipping in playerlist panels +local AddId = 0 + -- intermediate table form of all player entries in format of: + -- Frame + -- Player + -- Score + -- ID + -- MyTeam (team ENRTY(not actual team) I am currently on) +local PlayerFrames = {} + -- intermediate ordered frame array, composed of Entrys of + -- Frame + -- MyTeam (my team object) + -- MyPlayers ( an ordered array of all player frames in team ) + -- AutoHide (bool saying whether it should be hidden) + -- IsHidden (bool) + -- ID (int to prevent flipping out of leaderboard, fun times) +local TeamFrames = {} + -- one special entry from teamFrames, for unaffiliated players, only shown if players non - empty +local NeutralTeam = nil + + -- final 'to be displayed' list of frames +local MiddleFrames = {} +local MiddleFrameBackgrounds = {} +local MiddleFrameHeight = .03 + -- time of last click +local LastClick = 0 +local ButtonCooldown = .25 + +local OnIos = false +pcall(function() OnIos = Game:GetService('UserInputService').TouchEnabled end) + + + -- you get 200 of x screen space per stat added, start width 16% +local BaseScreenXSize = 150 +local SpacingPerStat = 10 --spacing between stats + + +local MaximizedBounds = UDim2.new(.5,0,1,0) +local MaximizedPosition = UDim2.new(.25,0,.1,0) +local NormalBounds = UDim2.new(0,BaseScreenXSize, 0, 800) +local NormalPosition = UDim2.new(1 , - BaseScreenXSize, 0.005, 0) + +local MinimizedBounds = UDim2.new(0, BaseScreenXSize, 0.99000001, 0) + +--free space to give last stat on the right +local RightEdgeSpace = -.04 + + -- where the scroll par currently is positioned +local ScrollPosition = 0.75999999 +local IsDragging = false -- am I dragging the player list + +local DefaultBottomClipPos = BottomClipFrame.Position.Y.Scale + +local LastSelectedPlayerEntry = nil +local SelectedPlayerEntry = nil +local SelectedPlayer = nil + + -- locks(semaphores) for stopping race conditions +local AddingFrameLock = false +local ChangingOrderLock = false +local AddingStatLock = false +local BaseUpdateLock = false +local WaitForClickLock = false +local InPopupWaitForClick=false +local PlayerChangedLock = false +local NeutralTeamLock = false + +local ScrollWheelConnections = {} + + +local DefaultListSize = 15 +if not OnIos then DefaultListSize = 24 end +local DidMinimizeDrag = false + +--local PlaceCreatorId=game.CreatorId + + -- report abuse objects +local AbuseName +local Abuses = { + "Bad Words or Threats", + "Bad Username", + "Talking about Dating", + "Account Trading or Sharing", + "Asking Personal Questions", + "Rude or Mean Behavior", + "False Reporting Me" +} +local UpdateAbuseFunction +local AbuseDropDown, UpdateAbuseSelection + +local PrivilegeLevel = +{ + Owner = 255, + Admin = 240, + Member = 128, + Visitor = 10, + Banned = 0, +} + + +local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable") + +game.Workspace.ChildAdded:connect(function(nchild) + if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then + IsPersonalServer=true + end +end) + ------------------------------- + -- Static Functions + ------------------------------- +function GetTotalEntries() + return math.min(#MiddleFrameBackgrounds,DefaultEntriesOnScreen) +end + +function GetEntryListLength() + local numEnts=#PlayerFrames+#TeamFrames + if NeutralTeam then + numEnts=numEnts+1 + end + return numEnts +end + +function AreAllEntriesOnScreen() + return #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale <= 1 + DefaultBottomClipPos +end + +function GetLengthOfVisbleScroll() + return 1 + DefaultBottomClipPos +end + +function GetMaxScroll() + return DefaultBottomClipPos * - 1 +end + -- can be optimized by caching when this varible changes +function GetMinScroll() + if AreAllEntriesOnScreen() then + return GetMaxScroll() + else + return (GetMaxScroll() - (#MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale)) + (1 + DefaultBottomClipPos) + end +end + +function AbsoluteToPercent(x,y) + return Vector2.new(x,y)/ScreenGui.AbsoluteSize +end +--[[ + tweens property of element from starta to enda over length of time + Warning: should be put in a Spawn call + @Args: + element textobject to tween transparency on + propName + starta alpha to start tweening + enda alpha to end tweening on + length how many seconds to spend tweening +--]] +function TweenProperty(obj, propName, inita, enda, length) + local startTime = tick() + while tick()-startTimenrank do + game:GetService("PersonalServerService"):Demote(player) + end +end +--[[ + called when player selects new privilege level from popup menu + @Args: + player player to set privileges on + nlevel new privilege level for this player +--]] +function OnPrivilegeLevelSelect(player,nlevel,BanPlayerButton,VisitorButton,MemberButton,AdminButton) + debugprint('setting privilege level') + SetPrivilegeRank(player,nlevel) + HighlightMyRank(player,BanPlayerButton,VisitorButton,MemberButton,AdminButton) +end + +--[[ + Highlights current rank of this player in the popup menu + @Args: + player Player to check for rank on +--]] +function HighlightMyRank(player,BanPlayerButton,VisitorButton,MemberButton,AdminButton) + BanPlayerButton.Image= 'http://www.nexium.fit/asset/?id='..Images['LightPopupMid'] + VisitorButton.Image= 'http://www.nexium.fit/asset/?id='..Images['DarkPopupMid'] + MemberButton.Image= 'http://www.nexium.fit/asset/?id='..Images['LightPopupMid'] + AdminButton.Image= 'http://www.nexium.fit/asset/?id='..Images['DarkPopupBottom'] + + local rank=player.PersonalServerRank + if rank <= PrivilegeLevel['Banned'] then + BanPlayerButton.Image='http://www.nexium.fit/asset/?id='..Images['LightBluePopupMid'] + elseif rank <= PrivilegeLevel['Visitor'] then + VisitorButton.Image='http://www.nexium.fit/asset/?id='..Images['DarkBluePopupMid'] + elseif rank <= PrivilegeLevel['Member'] then + MemberButton.Image='http://www.nexium.fit/asset/?id='..Images['LightBluePopupMid'] + elseif rank <= PrivilegeLevel['Admin'] then + AdminButton.Image= 'http://www.nexium.fit/asset/?id='..Images['DarkBluePopupBottom'] + end +end + + -------------------------- + -- Report abuse handling + -------------------------- +--[[ + does final reporting of abuse on selected player, calls closeAbuseDialog +--]] +function OnSubmitAbuse() + if SubmitReportButton.Active then + if AbuseName and SelectedPlayer then + AbuseSettingsFrame.Visible = false + game.Players:ReportAbuse(SelectedPlayer, AbuseName, AbuseDescriptionBox.Text) + if AbuseName == "Rude or Mean Behavior" or AbuseName == "False Reporting Me" then + CalmingAbuseBox.Parent = ReportAbuseShield + else + debugprint('opening abuse box') + NormalAbuseBox.Parent = ReportAbuseShield + end + else + CloseAbuseDialog() + end + end +end + +--[[ + opens the abuse dialog, initialises text to display selectedplayer +--]] +function OpenAbuseDialog() + debugprint('adding report dialog') + AbusePlayerLabel.Text = SelectedPlayer.Name + --AbuseDescriptionBox.Text = "" + PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) + AbuseDescriptionBox=OriginalAbuseDescriptionBox:Clone() + AbuseDescriptionBox.Parent = AbuseDescriptionWrapper + ReportAbuseShield.Parent = ScreenGui + ClosePopUpPanel() +end +--[[ + resets and closes abuse dialog +--]] +function CloseAbuseDialog() + AbuseName = nil + SubmitReportButton.Active = false + SubmitReportButton.Image = 'http://www.nexium.fit/asset/?id=96502438' -- 96501119', + AbuseDescriptionBox:Destroy() + CalmingAbuseBox.Parent = nil + NormalAbuseBox.Parent = nil + ReportAbuseShield.Parent = nil + AbuseSettingsFrame.Visible = true +end + +--[[ + creates dropdownbox, registers all listeners for abuse dialog +--]] +function InitReportAbuse() + + UpdateAbuseFunction = function(abuseText) + AbuseName = abuseText + if AbuseName and SelectedPlayer then + SubmitReportButton.Active = true + SubmitReportButton.Image = 'http://www.nexium.fit/asset/?id=96501119' + end + end + + AbuseDropDown, UpdateAbuseSelection = RbxGui.CreateDropDownMenu(Abuses, UpdateAbuseFunction, true) + AbuseDropDown.Name = "AbuseComboBox" + AbuseDropDown.Position = UDim2.new(0.425, 0, 0, 142) + AbuseDropDown.Size = UDim2.new(0.55,0,0,32) + AbuseDropDown.Parent = AbuseSettingsFrame + + + CancelReportButton.MouseButton1Click:connect(CloseAbuseDialog) + SubmitReportButton.MouseButton1Click:connect(OnSubmitAbuse) + + CalmingAbuseBox:FindFirstChild('OkButton').MouseButton1Down:connect(CloseAbuseDialog) + NormalAbuseBox:FindFirstChild('OkButton').MouseButton1Down:connect(CloseAbuseDialog) +end + +------------------------------------- +-- Friend/unfriending +------------------------------------- +--[[ + gets enum val of friend status, uses pcall for some reason?(from old playerlist) + @Args: + player player object to check if friends with + @Return: enum of friend status +--]] +local function GetFriendStatus(player) + if player == game.Players.LocalPlayer then + return Enum.FriendStatus.NotFriend + else + local success, result = pcall(function() return game.Players.LocalPlayer:GetFriendStatus(player) end) + if success then + return result + else + return Enum.FriendStatus.NotFriend + end + end +end + +--[[ + when friend button is clicked, tries to take appropriate action, + based on current friend status with SelectedPlayer +--]] +function OnFriendButtonSelect() + + local friendStatus=GetFriendStatus(SelectedPlayer) + if friendStatus==Enum.FriendStatus.Friend then + LocalPlayer:RevokeFriendship(SelectedPlayer) + elseif friendStatus==Enum.FriendStatus.Unknown or friendStatus==Enum.FriendStatus.NotFriend then + LocalPlayer:RequestFriendship(SelectedPlayer) + elseif friendStatus==Enum.FriendStatus.FriendRequestSent then + LocalPlayer:RevokeFriendship(SelectedPlayer) + elseif friendStatus==Enum.FriendStatus.FriendRequestReceived then + LocalPlayer:RequestFriendship(SelectedPlayer) + end + --PersonalServerPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) + ClosePopUpPanel() + --PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) +end + +function OnFriendRefuseButtonSelect() + + + LocalPlayer:RevokeFriendship(SelectedPlayer) + ClosePopUpPanel() + PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) +end +------------------------------------ +-- Player Entry Handling +------------------------------------ +--[[ + used by lua's table.sort to sort player entries +--]] +function PlayerSortFunction(a,b) + -- prevents flipping out leaderboard + if a['Score'] == b['Score'] then + return a['Player'].Name:upper() < b['Player'].Name:upper() + end + if not a['Score'] then return false end + if not b['Score'] then return true end + return a['Score'] < b['Score'] +end + + --------------------------------- + -- Stat Handling + --------------------------------- + -- removes and closes all leaderboard stuffs +function BlowThisPopsicleStand() + --ScreenGui:Destroy() + --script:Destroy() + --time to make the fanboys rage... + Tabify() +end +--[[ + used by lua's table.sort to prioritize score entries +--]] +function StatSort(a,b) + -- primary stats should be shown before all others + if a.IsPrimary ~= b.IsPrimary then + return a.IsPrimary + end + -- if priorities are equal, then return the first added one + if a.Priority == b.Priority then + return a.AddId < b.AddId + end + return a.Priority < b.Priority +end +--[[ + doing WAAY too much here, for optimization update only your team + @Args: + playerEntry Entry of player who had a stat change + property Name of stat changed +--]] +function StatChanged(playerEntry,property) + + -- if(playerEntry['MyTeam']) then + -- UpdateSingleTeam(playerEntry['MyTeam']) + -- else + BaseUpdate() + -- end +end +--[[ + Called when stat is added + if playerEntry is localplayer, will add to score names and re-sort the stats, and resize the width of the leaderboard + for all players, will add a listener for if this stat changes + if stat is a string value, crashes the leaderboard + Note:change crash to a 'tabify' leaderboard later + @Args: + nchild new child value to leaderstats + playerEntry entry this stat was added to +--]] +function StatAdded(nchild,playerEntry) + -- dont re - add a leaderstat I alreday have + while AddingStatLock do debugprint('in stat added function lock') wait(1/30) end + AddingStatLock = true + if not (nchild:IsA('StringValue') or nchild:IsA('IntValue') or nchild:IsA('BoolValue') or nchild:IsA('NumberValue') or nchild:IsA('DoubleConstrainedValue') or nchild:IsA('IntConstrainedValue')) then + BlowThisPopsicleStand() + else + local haveScore = false + for _,i in pairs(ScoreNames) do + if i['Name']==nchild.Name then haveScore=true end + end + if not haveScore then + local nstat = {} + nstat['Name'] = nchild.Name + nstat['Priority'] = 0 + if(nchild:FindFirstChild('Priority')) then + nstat['Priority'] = nchild.Priority + end + nstat['IsPrimary'] = false + if(nchild:FindFirstChild('IsPrimary')) then + nstat['IsPrimary'] = true + end + nstat.AddId = AddId + AddId = AddId + 1 + table.insert(ScoreNames,nstat) + table.sort(ScoreNames,StatSort) + if not StatTitles:FindFirstChild(nstat['Name']) then + CreateStatTitle(nstat['Name']) + end + UpdateMaximize() + + end + end + AddingStatLock = false + StatChanged(playerEntry) + nchild.Changed:connect(function(property) StatChanged(playerEntry,property) end) + + +end +--returns whether any of the existing players has this stat +function DoesStatExist(statName, exception) + for _,playerf in pairs(PlayerFrames) do + if playerf['Player'] ~= exception and playerf['Player']:FindFirstChild('leaderstats') and playerf['Player'].leaderstats:FindFirstChild(statName) then + --print('player:' .. playerf['Player'].Name ..' has stat') + return true + end + end + return false +end + + + +--[[ + Called when stat is removed from player + for all players, destroys the stat frame associated with this value, + then calls statchanged(to resize frame) + if playerEntry==localplayer, will remove from scorenames + @Args: + nchild ___value to be removed + playerEntry entry of player value is being removed from +--]] +function StatRemoved(nchild,playerEntry) + while AddingStatLock do debugprint('In Adding Stat Lock1') wait(1/30) end + AddingStatLock = true + if playerEntry['Frame']:FindFirstChild(nchild.Name) then + debugprint('Destroyed frame!') + playerEntry['Frame'][nchild.Name].Parent = nil + end + if not DoesStatExist(nchild.Name, playerEntry['Player']) then + for i,val in ipairs(ScoreNames) do + if val['Name'] == nchild.Name then + table.remove(ScoreNames,i) + if StatTitles:FindFirstChild(nchild.Name) then + StatTitles[nchild.Name]:Destroy() + end + for _,teamf in pairs(TeamFrames) do + if teamf['Frame']:FindFirstChild(nchild.Name) then + teamf['Frame'][nchild.Name]:Destroy() + end + end + end + end + end + AddingStatLock = false + StatChanged(playerEntry) +end +--[[ + clears all stats from a given playerEntry + used when leaderstats are removed, or when new leaderstats are added(for weird edge case)+ +--]] +function RemoveAllStats(playerEntry) + for i,val in ipairs(ScoreNames) do + StatRemoved(val,playerEntry) + end + +end + + +function GetScoreValue(score) + if score:IsA('DoubleConstrainedValue') or score:IsA('IntConstrainedValue') then + return score.ConstrainedValue + elseif score:IsA('BoolValue') then + if score.Value then return 1 else return 0 end + else + return score.Value + end +end +--[[ + +--]] +function MakeScoreEntry(entry,scoreval,panel) + if not panel:FindFirstChild('PlayerScore') then return end + local nscoretxt = panel:FindFirstChild('PlayerScore'):Clone() + local thisScore = nil + --here lies the resting place of a once great and terrible bug + --may its treachery never be forgoten, lest its survivors fall for it again + --RIP the leaderstat bug, oct 2012-nov 2012 + wait() + if entry['Player']:FindFirstChild('leaderstats') and entry['Player'].leaderstats:FindFirstChild(scoreval['Name']) then + thisScore = entry['Player']:FindFirstChild('leaderstats'):FindFirstChild(scoreval['Name']) + else + return + end + + if not entry['Player'].Parent then return end + + nscoretxt.Name = scoreval['Name'] + nscoretxt.Text = tostring(GetScoreValue(thisScore)) + if scoreval['Name'] == ScoreNames[1]['Name'] then + debugprint('changing score') + entry['Score'] = GetScoreValue(thisScore) + if entry['Player'] == LocalPlayer then HeaderScore.Text = tostring(GetScoreValue(thisScore)) end + end + + thisScore.Changed:connect(function() + if not thisScore.Parent then return end + if scoreval['Name'] == ScoreNames[1]['Name'] then + + entry['Score'] = GetScoreValue(thisScore) + if entry['Player'] == LocalPlayer then HeaderScore.Text = tostring(GetScoreValue(thisScore)) end + end + nscoretxt.Text = tostring(GetScoreValue(thisScore)) + BaseUpdate() + end) + return nscoretxt + +end + +function CreateStatTitle(statName) + + local ntitle = MiddleTemplate:FindFirstChild('PlayerScore'):Clone() + ntitle.Name = statName + ntitle.Text = statName + -- ntitle + if IsMaximized.Value then + ntitle.TextTransparency = 0 + else + ntitle.TextTransparency = 1 + end + ntitle.Parent = StatTitles +end + +function RecreateScoreColumns(ptable) + while AddingStatLock do debugprint ('In Adding Stat Lock2') wait(1/30) end + AddingStatLock = true + local Xoffset=5--15 --current offset from Right + local maxXOffset=Xoffset + local MaxSizeColumn=0 --max size for this column + + -- foreach known leaderstat + for j = #ScoreNames, 1,-1 do + local scoreval = ScoreNames[j] + + MaxSizeColumn=0 + -- for each entry in this player table + for i,entry in ipairs(ptable) do + local panel = entry['Frame'] + local tplayer = entry['Player'] + -- if this panel does not have an element named after this stat + if not panel:FindFirstChild(scoreval['Name']) then + -- make an entry for this object + local nentry = MakeScoreEntry(entry,scoreval,panel) + if nentry then + debugprint('adding '..nentry.Name..' to '..entry['Player'].Name ) + nentry.Parent = panel + -- add score to team + if entry['MyTeam'] and entry['MyTeam'] ~= NeutralTeam and not entry['MyTeam']['Frame']:FindFirstChild(scoreval['Name']) then + local ntitle = nentry:Clone() + --ntitle.TextXAlignment = 'Right' + ntitle.Parent = entry['MyTeam']['Frame'] + end + + end + end + scoreval['XOffset']=Xoffset + + if panel:FindFirstChild(scoreval['Name']) then + MaxSizeColumn=math.max(MaxSizeColumn,panel[scoreval['Name']].TextBounds.X) + end + end + + if AreNamesExpanded.Value then + MaxSizeColumn=math.max(MaxSizeColumn,StatTitles[scoreval['Name'] ].TextBounds.X) + StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(RightEdgeSpace,-Xoffset,0,0),'Out','Linear',BASE_TWEEN,true) + else + StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new((.4+((.6/#ScoreNames)*(j-1)))-1,0,0,0),'Out','Linear',BASE_TWEEN,true) + end + scoreval['ColumnSize']=MaxSizeColumn + Xoffset= Xoffset+SpacingPerStat+MaxSizeColumn + maxXOffset=math.max(Xoffset,maxXOffset) + end + NormalBounds = UDim2.new(0, BaseScreenXSize+maxXOffset-SpacingPerStat,0,800) + NormalPosition = UDim2.new(1 , -NormalBounds.X.Offset, NormalPosition.Y.Scale, 0) + UpdateHeaderNameSize() + UpdateMaximize() + + AddingStatLock = false +end + --------------------------- + -- Minimizing and maximizing + --------------------------- + +function ToggleMinimize() + IsMinimized.Value = not IsMinimized.Value + UpdateStatNames() +end + +function ToggleMaximize() + IsMaximized.Value = not IsMaximized.Value + RecreateScoreColumns(PlayerFrames) --done to re-position stat names NOTE: optimize-able +end + +function Tabify() + IsTabified.Value= true + IsMaximized.Value=false + IsMinimized.Value=true + UpdateMinimize() + IsTabified.Value= true + ScreenGui:TweenPosition(UDim2.new(NormalBounds.X.Scale, NormalBounds.X.Offset-10, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) +end + +function UnTabify() + if IsTabified.Value then + IsTabified.Value= false + ScreenGui:TweenPosition(UDim2.new(0, 0, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) + end +end + +--[[ + Does more than it looks like + monitors positions of the clipping frames and bottom frames + called from EVERYWHERE, too much probably +--]] +function UpdateMinimize() + + if IsMinimized.Value then + if IsMaximized.Value then + ToggleMaximize() + end + if not IsTabified.Value then + MainFrame.Size = UDim2.new(0.010, HeaderName.TextBounds.X, NormalBounds.Y.Scale,NormalBounds.Y.Offset) + MainFrame.Position = UDim2.new(.990, -HeaderName.TextBounds.X, NormalPosition.Y.Scale,0) + else + MainFrame.Size = NormalBounds + MainFrame.Position = NormalPosition + end + --(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale) + BottomClipFrame.Position = UDim2.new(0,0,-1,0) + BottomFrame.Position = UDim2.new(0,0,0,0) + FocusFrame.Size=UDim2.new(1,0,HeaderFrameHeight,0) + ExtendTab.Image = 'http://www.nexium.fit/asset/?id=94692731' + else + if not IsMaximized.Value then + MainFrame.Size = NormalBounds + MainFrame.Position = NormalPosition + end + --do limiting + DefaultBottomClipPos = math.min(math.max(DefaultBottomClipPos,-1),-1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) + UpdateScrollPosition() + + BottomClipFrame.Position=UDim2.new(0,0,DefaultBottomClipPos,0) + local bottomPositon = (DefaultBottomClipPos+BottomClipFrame.Size.Y.Scale) + BottomFrame.Position=UDim2.new(0,0,bottomPositon,0) + FocusFrame.Size=UDim2.new(1,0,bottomPositon + HeaderFrameHeight,0) + ExtendTab.Image = 'http://www.nexium.fit/asset/?id=94825585' + end +end + +--[[ + Manages the position/size of the mainFrame, swaps out different resolution images for the frame + fades in and out the stat names, moves position of headername and header score +--]] +function UpdateMaximize() + if IsMaximized.Value then + for j = 1, #ScoreNames,1 do + local scoreval = ScoreNames[j] + StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1))-1,0,0,0),'Out','Linear',BASE_TWEEN,true) + end + + if IsMinimized.Value then + ToggleMinimize() + else + UpdateMinimize() + end + + + MainFrame:TweenSizeAndPosition(MaximizedBounds,MaximizedPosition,'Out','Linear',BASE_TWEEN*1.2,true) + HeaderScore:TweenPosition(UDim2.new(0,0,HeaderName.Position.Y.Scale,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderName:TweenPosition(UDim2.new( - .1, - HeaderScore.TextBounds.x,HeaderName.Position.Y.Scale,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['LargeHeader'] + BottomFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['LargeBottom'] + for index, i in ipairs(MiddleFrameBackgrounds) do + if (index%2) ~= 1 then + i.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['LargeDark'] + else + i.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['LargeLight'] + end + end + for index, i in ipairs(MiddleFrames) do + if i:FindFirstChild('ClickListener') then + i.ClickListener.Size = UDim2.new(.974,0,i.ClickListener.Size.Y.Scale,0) + end + for j=1, #ScoreNames,1 do + local scoreval = ScoreNames[j] + if i:FindFirstChild(scoreval['Name']) then + i[scoreval['Name']]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1))-1,0,0,0), "Out", "Linear", BASE_TWEEN,true) + end + end + end + for i,entry in ipairs(PlayerFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(.38,0,entry['Frame'].TitleFrame.Size.Y.Scale,0) + end + + for i,entry in ipairs(TeamFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(.38,0,entry['Frame'].TitleFrame.Size.Y.Scale,0) + end + + else + if not IsMinimized.Value then + MainFrame:TweenSizeAndPosition(NormalBounds,NormalPosition,'Out','Linear',BASE_TWEEN*1.2,true) + end + HeaderScore:TweenPosition(UDim2.new(0,0,.4,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderName:TweenPosition(UDim2.new(0,0,HeaderName.Position.Y.Scale,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['NormalHeader'] + BottomFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['NormalBottom'] + for index, i in ipairs(MiddleFrameBackgrounds) do + if index%2 ~= 1 then + i.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['midDark'] + else + i.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['midLight'] + end + end + for index, i in ipairs(MiddleFrames) do + if i:FindFirstChild('ClickListener') then + i.ClickListener.Size = UDim2.new(.96,0,i.ClickListener.Size.Y.Scale,0) + for j=1, #ScoreNames,1 do + local scoreval = ScoreNames[j] + if i:FindFirstChild(scoreval['Name']) and scoreval['XOffset'] then + --print('updateing stat position: ' .. scoreval['Name']) + i[scoreval['Name']]:TweenPosition(UDim2.new(RightEdgeSpace,-scoreval['XOffset'],0,0), "Out", "Linear", BASE_TWEEN,true) + end + end + end + end + + for i,entry in ipairs(TeamFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(0,BaseScreenXSize*.9,entry['Frame'].TitleFrame.Size.Y.Scale,0) + + end + for i,entry in ipairs(PlayerFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(0,BaseScreenXSize*.9,entry['Frame'].TitleFrame.Size.Y.Scale,0) + end + end +end + +function UpdateStatNames() + if not AreNamesExpanded.Value or IsMinimized.Value then + CloseNames() + else + ExpandNames() + end +end + +function ExpandNames() + if #ScoreNames ~= 0 then + for _,i in pairs(StatTitles:GetChildren()) do + Spawn(function()TweenProperty(i,'TextTransparency',i.TextTransparency,0,BASE_TWEEN) end) + end + HeaderFrameHeight=.09 + --as of writing, this and 'CloseNames' are the only places headerframe is resized + HeaderFrame:TweenSizeAndPosition(UDim2.new(HeaderFrame.Size.X.Scale, HeaderFrame.Size.X.Offset, HeaderFrameHeight,0), + HeaderFrame.Position,'Out','Linear',BASE_TWEEN*1.2,true) + TopClipFrame:TweenPosition(UDim2.new(TopClipFrame.Position.X.Scale,0,HeaderFrameHeight,0),'Out','Linear',BASE_TWEEN*1.2,true) + BottomShiftFrame:TweenPosition(UDim2.new(0,0,HeaderFrameHeight,0), "Out", 'Linear', BASE_TWEEN*1.2,true) + + end + +end + +function CloseNames() + if #ScoreNames ~= 0 then + HeaderFrameHeight=.07 + if not (IsMaximized.Value) then + for _,i in pairs(StatTitles:GetChildren()) do + Spawn(function()TweenProperty(i,'TextTransparency',i.TextTransparency,1,BASE_TWEEN) end) + end + end + BottomShiftFrame:TweenPosition(UDim2.new(0,0,HeaderFrameHeight,0), "Out", 'Linear', BASE_TWEEN*1.2,true) + HeaderFrame:TweenSizeAndPosition(UDim2.new(HeaderFrame.Size.X.Scale, HeaderFrame.Size.X.Offset, HeaderFrameHeight,0), + HeaderFrame.Position,'Out','Linear',BASE_TWEEN*1.2,true) + TopClipFrame:TweenPosition(UDim2.new(TopClipFrame.Position.X.Scale,0,HeaderFrameHeight,0),'Out','Linear',BASE_TWEEN*1.2,true) + end +end + +function OnScrollWheelMove(direction) + if not (IsTabified.Value or IsMinimized.Value or InPopupWaitForClick) then + local StartFrame = ListFrame.Position + local newFrameY = math.max(math.min(StartFrame.Y.Scale + (direction),GetMaxScroll()),GetMinScroll()) + + ListFrame.Position = UDim2.new(StartFrame.X.Scale,StartFrame.X.Offset,newFrameY,StartFrame.Y.Offset) + UpdateScrollPosition() + end +end + +function AttachScrollWheel() + if ScrollWheelConnections then return end + ScrollWheelConnections = {} + table.insert(ScrollWheelConnections,Mouse.WheelForward:connect(function() + OnScrollWheelMove(.05) + end)) + table.insert(ScrollWheelConnections,Mouse.WheelBackward:connect(function() + OnScrollWheelMove(-.05) + end)) +end + +function DetachScrollWheel() + if ScrollWheelConnections then + for _,i in pairs(ScrollWheelConnections) do + i:disconnect() + end + end + ScrollWheelConnections=nil +end + +FocusFrame.MouseEnter:connect(function() + if not (IsMinimized.Value or IsTabified.Value) then + AttachScrollWheel() + end +end) +FocusFrame.MouseLeave:connect(function() + --if not (IsMaximized.Value or IsMinimized.Value) then + DetachScrollWheel() + --end +end) + + ------------------------ + -- Scroll Bar functions + ------------------------ +--[[ + updates whether the scroll bar should be showing, if it is showing, updates + the size of it +--]] +function UpdateScrollBarVisibility() + if AreAllEntriesOnScreen() then + ScrollBar.BackgroundTransparency = 1 + else + ScrollBar.BackgroundTransparency = 0 + UpdateScrollBarSize() + end +end +--[[ + updates size of scrollbar depending on how many entries exist +--]] +function UpdateScrollBarSize() + local entryListSize = #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale + local shownAreaSize = ((BottomClipFrame.Position.Y.Scale) + 1) + ScrollBar.Size = UDim2.new(1,0,shownAreaSize/entryListSize,0) + +end +--[[ + updates position of listframe so that no gaps at the bottom or top of the list are visible + updates position of scrollbar to match what parts of the list are visible +--]] +function UpdateScrollPosition() + local minPos = GetMinScroll() + local maxPos = GetMaxScroll() + local scrollLength = maxPos - minPos + + local yscrollpos=math.max(math.min(ListFrame.Position.Y.Scale,maxPos),minPos) + ListFrame.Position=UDim2.new(ListFrame.Position.X.Scale,ListFrame.Position.X.Offset,yscrollpos,ListFrame.Position.Y.Offset) + + local adjustedLength = 1 - ScrollBar.Size.Y.Scale + ScrollBar.Position = UDim2.new(0,0,adjustedLength - (adjustedLength * ((ListFrame.Position.Y.Scale - minPos)/scrollLength)),0) +end + +--[[ + WARNING:this is in a working state, but uses massive hacks + revize when global input is available + Manages scrolling of the playerlist on mouse drag +--]] +function StartDrag(entry,startx,starty) + local startDragTime = tick() + local stopDrag = false + local openPanel = true + local draggedFrame = WaitForChild(entry['Frame'],'ClickListener') + local function dragExit() + stopDrag = true + + if entry['Player'] and SelectedPlayer and openPanel + and entry['Player']~=LocalPlayer and SelectedPlayer.userId>1 and LocalPlayer.userId>1 then + ActivatePlayerEntryPanel(entry) + end + end + local startY = nil + local StartFrame = ListFrame.Position + local function dragpoll(nx,ny) + if not startY then + startY = AbsoluteToPercent(nx,ny).Y + end + local nowY = AbsoluteToPercent(nx,ny).Y + debugprint('drag dist:'..Vector2.new(startx-nx,starty-ny).magnitude) + if Vector2.new(startx-nx,starty-ny).magnitude>MOUSE_DRAG_DISTANCE then + openPanel=false + end + + local newFrameY = math.max(math.min(StartFrame.Y.Scale + (nowY - startY),GetMaxScroll()),GetMinScroll()) + ListFrame.Position = UDim2.new(StartFrame.X.Scale,StartFrame.X.Offset,newFrameY,StartFrame.Y.Offset) + UpdateScrollPosition() + end + WaitForClick(ScreenGui,dragpoll,dragExit) +end + + +function StartMinimizeDrag() + Delay(0,function() + local startTime=tick() + debugprint('Got Click2') + local stopDrag = false + local function dragExit() + --debugprint('undone click2') + if tick()-startTime<.25 then --was click + ToggleMinimize() + else --was drag + if (DefaultBottomClipPos >= -1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) then + DidMinimizeDrag = false + else + DidMinimizeDrag = true + end + if IsMinimized.Value then + ToggleMinimize() + end + end + stopDrag = true + end + local startY = nil + local StartFrame = DefaultBottomClipPos + local function dragpoll(nx,ny) + if not IsMinimized.Value then + + if not startY then + startY = AbsoluteToPercent(nx,ny).Y + end + local nowY = AbsoluteToPercent(nx,ny).Y + local newFrameY + newFrameY = math.min(math.max(StartFrame + (nowY - startY),-1),-1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) + DefaultBottomClipPos = newFrameY + UpdateMinimize() + ScrollBarFrame.Size= UDim2.new(ScrollBarFrame.Size.X.Scale,0,(DefaultBottomClipPos+BottomClipFrame.Size.Y.Scale),0) + ScrollBarFrame.Position= UDim2.new(ScrollBarFrame.Position.X.Scale,0,1-ScrollBarFrame.Size.Y.Scale,0) + UpdateScrollBarSize() + UpdateScrollPosition() + UpdateScrollBarVisibility() + + end + end + Spawn(function() WaitForClick(ScreenGui,dragpoll,dragExit) end) + end) + +end + + ------------------------------- + -- Input Callback functions + ------------------------------- +IsMaximized.Value=false +IsMinimized.Value=false +IsMaximized.Changed:connect(UpdateMaximize) +IsMinimized.Changed:connect(UpdateMinimize) + +ExtendButton.MouseButton1Down:connect(function() + if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end + LastClick = time() + if IsTabified.Value then + UnTabify() + else + StartMinimizeDrag() + end +end) + +MaximizeButton.MouseButton1Click:connect(function() + if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end + LastClick = time() + if IsTabified.Value then + UnTabify() + elseif not AreNamesExpanded.Value then + AreNamesExpanded.Value = true + BaseUpdate() + else + ToggleMaximize() + end +end) + +MaximizeButton.MouseButton2Click:connect(function() + if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end + LastClick = time() + if IsTabified.Value then + UnTabify() + elseif IsMaximized.Value then + ToggleMaximize() + elseif AreNamesExpanded.Value then + AreNamesExpanded.Value = false + BaseUpdate() + else + Tabify() + end +end) + + +------------------------------- +-- MiddleFrames management +------------------------------- +--[[ + adds a background frame to the listframe +--]] +function AddMiddleBGFrame() + local nBGFrame = MiddleBGTemplate:Clone() + nBGFrame.Position = UDim2.new(.5,0,((#MiddleFrameBackgrounds) * nBGFrame.Size.Y.Scale),0) + if (#MiddleFrameBackgrounds+1)%2 ~= 1 then + if IsMaximized.Value then + nBGFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['LargeDark'] + else + nBGFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['midDark'] + end + else + if IsMaximized.Value then + nBGFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['LargeLight'] + else + nBGFrame.Background.Image = 'http://www.nexium.fit/asset/?id='..Images['midLight'] + end + end + nBGFrame.Parent = ListFrame + table.insert(MiddleFrameBackgrounds,nBGFrame) + + if #MiddleFrameBackgrounds 1 do + fSize=fSize-1 + tHeader.FontSize=FONT_SIZES[fSize] + wait(.2) + end + HeaderName.FontSize=tHeader.FontSize + tHeader:Destroy() + end) +end +ScreenGui.Changed:connect(UpdateHeaderNameSize) + +--[[ + called only when the leaderstats object is added to a given player entry + removes old stats, adds any existing stats, and sets up listeners for new stats + @Args: + playerEntry A reference to the ENTRY(table) of the player who had leaderstats added +--]] +function LeaderstatsAdded(playerEntry) + --RemoveAllStats(playerEntry) + local nplayer = playerEntry['Player'] + for _,i in pairs(nplayer.leaderstats:GetChildren()) do + StatAdded(i,playerEntry) + end + nplayer.leaderstats.ChildAdded:connect(function(nchild) StatAdded(nchild,playerEntry) end) + nplayer.leaderstats.ChildRemoved:connect(function(nchild) StatRemoved(nchild,playerEntry) end) +end +--[[ + called when leaderstats object is removed from play in player entry + Note: may not be needed, might be able to just rely on leaderstats added + @Args: + oldLeaderstats leaderstats object to be removed + playerEntry A reference to the ENTRY(table) of the player +--]] +function LeaderstatsRemoved(oldLeaderstats,playerEntry) + while AddingFrameLock do debugprint('waiting to insert '..playerEntry['Player'].Name) wait(1/30) end + AddingFrameLock = true + RemoveAllStats(playerEntry) + AddingFrameLock = false +end + +function ClosePopUpPanel() + if SelectedPlayerEntry then + local tframe = SelectedPlayerEntry['Frame'] + Spawn(function() TweenProperty(tframe,'BackgroundTransparency',.5,1,BASE_TWEEN) end) + end + PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) + wait(.1) + InPopupWaitForClick= false + SelectedPlayerEntry = nil +end + +--[[ + prepares the needed popup to be tweened on screen, and updates the position of the popup clip + frame to match the selected player frame's position +--]] +function InitMovingPanel( entry, player) + PopUpClipFrame.Parent= ScreenGui + + if PopUpPanel then + PopUpPanel:Destroy() + end + PopUpPanel= PopUpPanelTemplate:Clone() + PopUpPanel.Parent= PopUpClipFrame + + local nextIndex = 2 + local friendStatus = GetFriendStatus(player) + debugprint (tostring(friendStatus)) + local showRankMenu = IsPersonalServer and LocalPlayer.PersonalServerRank >= PrivilegeLevel['Admin'] and LocalPlayer.PersonalServerRank > SelectedPlayer.PersonalServerRank + + + local ReportPlayerButton = MakePopupButton(PopUpPanel,'Report Player',0) + ReportPlayerButton.MouseButton1Click:connect(function() OpenAbuseDialog() end) + + local enableFriendRequests = true + + if enableFriendRequests then + local FriendPlayerButton = MakePopupButton(PopUpPanel,'Friend',1, not showRankMenu and friendStatus~=Enum.FriendStatus.FriendRequestReceived) + FriendPlayerButton.MouseButton1Click:connect(OnFriendButtonSelect) + + + if friendStatus==Enum.FriendStatus.Friend then + FriendPlayerButton:FindFirstChild('ButtonText').Text='UnFriend Player' + elseif friendStatus==Enum.FriendStatus.Unknown or friendStatus==Enum.FriendStatus.NotFriend then + FriendPlayerButton:FindFirstChild('ButtonText').Text='Send Request' + elseif friendStatus==Enum.FriendStatus.FriendRequestSent then + FriendPlayerButton:FindFirstChild('ButtonText').Text='Revoke Request' + elseif friendStatus==Enum.FriendStatus.FriendRequestReceived then + FriendPlayerButton:FindFirstChild('ButtonText').Text='Accept Friend' + local FriendRefuseButton = MakePopupButton(PopUpPanel,'Decline Friend',2,not showRankMenu) + FriendRefuseButton.MouseButton1Click:connect(OnFriendRefuseButtonSelect) + nextIndex=nextIndex+1 + end + end + + if showRankMenu then + local BanPlayerButton = MakePopupButton(PopUpPanel,'Ban',nextIndex) + local VisitorButton = MakePopupButton(PopUpPanel,'Visitor',nextIndex+1) + local MemberButton = MakePopupButton(PopUpPanel,'Member',nextIndex+2) + local AdminButton = MakePopupButton(PopUpPanel,'Admin',nextIndex+3,true) + + BanPlayerButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Banned'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + VisitorButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Visitor'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + MemberButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Member'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + AdminButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Admin'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + + HighlightMyRank(SelectedPlayer,BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end + + PopUpPanel:TweenPosition(UDim2.new(0,0,0,0), "Out", "Linear", BASE_TWEEN,true) + Delay(0, function() + local tconnection + tconnection = Mouse.Button1Down:connect(function() + tconnection:disconnect() + ClosePopUpPanel() + end) + end) + + local myFrame = entry['Frame'] + -- THIS IS GARBAGE. + -- if I parent to frame to auto update position, it gets clipped + -- sometimes garbage is the only option. + Spawn(function() + while InPopupWaitForClick do + PopUpClipFrame.Position=UDim2.new( 0,myFrame.AbsolutePosition.X-PopUpClipFrame.Size.X.Offset,0,myFrame.AbsolutePosition.Y) + wait() + end + end) + +end + +--[[ + Called when a player entry in the leaderboard is clicked + either will highlight entry and start the drag event, or open a popup menu + @Args: + entry the player entry clicked +--]] +function OnPlayerEntrySelect(entry,startx,starty) + + if not InPopupWaitForClick then + + SelectedPlayerEntry = entry + SelectedPlayer = entry['Player'] + + StartDrag(entry,startx,starty) + end + + +end + +function ActivatePlayerEntryPanel(entry) + entry['Frame'].BackgroundColor3 = Color3.new(0,1,1) + Spawn(function() TweenProperty(entry['Frame'],'BackgroundTransparency',1,.5,.5) end) + InPopupWaitForClick=true + InitMovingPanel(entry,entry['Player']) +end + +--[[ + the basic update for the playerlist mode's state, + assures the order and length of the player frames +--]] +function PlayerListModeUpdate() + RecreateScoreColumns(PlayerFrames) + table.sort(PlayerFrames,PlayerSortFunction) + for i,val in ipairs(PlayerFrames) do + MiddleFrames[i] = val['Frame'] + end + for i = #PlayerFrames + 1,#MiddleFrames,1 do + MiddleFrames[i] = nil + end + UpdateMinimize() +end +--[[ + this one's a doozie, happens when a player is added to the game + inits their player frame and player entry, assigns them to a team if possible, + and hooks up their leaderstats + @Args: + nplayer new player object to insert +--]] +function InsertPlayerFrame(nplayer) + while AddingFrameLock do debugprint('waiting to insert '..nplayer.Name) wait(1/30) end + AddingFrameLock = true + + local nFrame = MiddleTemplate:Clone() + + local playerName = nplayer.Name + local clansEnabled, clanTag = pcall(function() nplayer:GetClanTag() end) + if clansEnabled and clanTag and clanTag ~= "" then + playerName = "[" .. tostring(clanTag) .. "] " .. playerName + end + + WaitForChild(WaitForChild(nFrame,'TitleFrame'),'Title').Text = playerName + + nFrame.Position = UDim2.new(1,0,((#MiddleFrames) * nFrame.Size.Y.Scale),0) + + local nfriendstatus = GetFriendStatus(nplayer) + + nFrame:FindFirstChild('BCLabel').Image = getMembershipTypeIcon(nplayer.MembershipType,nplayer) + nFrame:FindFirstChild('FriendLabel').Image = getFriendStatusIcon(nfriendstatus) + nFrame.Name = nplayer.Name + WaitForChild(WaitForChild(nFrame,'TitleFrame'),'Title').Text = playerName + + --move for bc label + nFrame.FriendLabel.Position=nFrame.FriendLabel.Position+UDim2.new(0,17,0,0) + nFrame.TitleFrame.Title.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,17,0,0) + + if(nFrame:FindFirstChild('FriendLabel').Image ~= '') then + nFrame.TitleFrame.Title.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,17,0,0) + end + + if nplayer.Name == LocalPlayer.Name then + nFrame.TitleFrame.Title.Font = 'ArialBold' + nFrame.PlayerScore.Font = 'ArialBold' + ChangeHeaderName(playerName) + local dropShadow = nFrame.TitleFrame.Title:Clone() + dropShadow.TextColor3 = Color3.new(0,0,0) + dropShadow.TextTransparency=0 + dropShadow.ZIndex=2 + dropShadow.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,1,0,1) + dropShadow.Name='DropShadow' + dropShadow.Parent= nFrame.TitleFrame + else + --Delay(2, function () OnFriendshipChanged(nplayer,LocalPlayer:GetFriendStatus(nplayer)) end) + end + nFrame.TitleFrame.Title.Font = 'ArialBold' + + + nFrame.Parent = ListFrame + nFrame.Position = UDim2.new(.5,0,((#MiddleFrames) * nFrame.Size.Y.Scale),0) + UpdateMinimize() + local nentry = {} + nentry['Frame'] = nFrame + nentry['Player'] = nplayer + nentry['ID'] = AddId + AddId = AddId + 1 + table.insert(PlayerFrames,nentry) + if #TeamFrames~=0 then + + if nplayer.Neutral then + nentry['MyTeam'] = nil + if not NeutralTeam then + AddNeutralTeam() + else + AddPlayerToTeam(NeutralTeam,nentry) + end + + else + local addedToTeam=false + for i,tval in ipairs(TeamFrames) do + if tval['MyTeam'].TeamColor == nplayer.TeamColor then + AddPlayerToTeam(tval,nentry) + nentry['MyTeam'] = tval + addedToTeam=true + end + end + if not addedToTeam then + nentry['MyTeam']=nil + if not NeutralTeam then + AddNeutralTeam() + else + AddPlayerToTeam(NeutralTeam,nentry) + end + nentry['MyTeam'] = NeutralTeam + end + end + + end + + if nplayer:FindFirstChild('leaderstats') then + LeaderstatsAdded(nentry) + end + + nplayer.ChildAdded:connect(function(nchild) + if nchild.Name == 'leaderstats' then + while AddingFrameLock do debugprint('in adding leaderstats lock') wait(1/30) end + AddingFrameLock = true + LeaderstatsAdded(nentry) + AddingFrameLock = false + end + end) + + nplayer.ChildRemoved:connect(function (nchild) + if nplayer==LocalPlayer and nchild.Name == 'leaderstats' then + LeaderstatsRemoved(nchild,nentry) + end + end) + nplayer.Changed:connect(function(prop)PlayerChanged(nentry,prop) end) + + local listener = WaitForChild(nFrame,'ClickListener') + listener.Active = true + listener.MouseButton1Down:connect(function(nx,ny) OnPlayerEntrySelect(nentry, nx,ny) end) + + AddMiddleBGFrame() + BaseUpdate() + AddingFrameLock = false +end + +--[[ + Note:major optimization can be done here + removes this player's frame if it exists, calls base update +--]] +function RemovePlayerFrame(tplayer) + while AddingFrameLock do debugprint('in removing player frame lock') wait(1/30) end + AddingFrameLock = true + + local tteam + for i,key in ipairs(PlayerFrames) do + if tplayer == key['Player'] then + if PopUpClipFrame.Parent == key['Frame'] then + PopUpClipFrame.Parent = nil + end + key['Frame']:Destroy() + tteam=key['MyTeam'] + table.remove(PlayerFrames,i) + end + end + if tteam then + for j,tentry in ipairs(tteam['MyPlayers']) do + if tentry['Player'] == tplayer then + RemovePlayerFromTeam(tteam,j) + end + end + end + + RemoveMiddleBGFrame() + UpdateMinimize() + BaseUpdate() + AddingFrameLock = false +end + +Players.ChildRemoved:connect(RemovePlayerFrame) + +---------------------------- +-- Team Callback Functions +---------------------------- +--[[ + turns a list of team entries with sub lists of players into a single ordered + list, in the correct order,and of the correct length + @Args: + tframes the team entries to unroll + outframes the list to unroll these entries into +--]] +function UnrollTeams(tframes,outframes) + local numEntries = 0 + if NeutralTeam and not NeutralTeam['IsHidden'] then + for i,val in ipairs(NeutralTeam['MyPlayers']) do + numEntries = numEntries + 1 + outframes[numEntries] = val['Frame'] + end + numEntries = numEntries + 1 + outframes[numEntries] = NeutralTeam['Frame'] + end + for i,val in ipairs(tframes) do + if not val['IsHidden'] then + for j,pval in ipairs(val.MyPlayers) do + numEntries = numEntries + 1 + outframes[numEntries] = pval['Frame'] + end + numEntries = numEntries + 1 + outframes[numEntries] = val['Frame'] + end + end + -- clear any additional entries from outframes + for i = numEntries + 1,#outframes,1 do + outframes[i] = nil + end +end +--[[ + uses lua's table.sort to sort the teams +--]] +function TeamSortFunc(a,b) + if a['TeamScore'] == b['TeamScore'] then + return a['ID'] < b['ID'] + end + if not a['TeamScore'] then return false end + if not b['TeamScore'] then return true end + return a['TeamScore'] < b['TeamScore'] + +end +--[[ + consider adding lock with wait for performance + sorts each of the team's player lists induvidually, adds up the team scores. + @Args: + tentries table of team entries +--]] +function SortTeams(tentries) + + for i,val in ipairs(tentries) do + + table.sort(val['MyPlayers'],PlayerSortFunction) + AddTeamScores(val) + end + table.sort(tentries,TeamSortFunc) +end +--[[ + base update for team mode, adds up the scores of all teams, sorts them, + then unrolls them into middleframes +--]] +function TeamListModeUpdate() + RecreateScoreColumns(PlayerFrames) + SortTeams(TeamFrames) + if NeutralTeam then + AddTeamScores(NeutralTeam) + --RecreateScoreColumns(NeutralTeam['MyPlayers']) + end + UnrollTeams(TeamFrames,MiddleFrames) +end +--[[ + adds up all the score of this team's players to form the team score + @Args: + team team entry to sum the scores of +--]] +function AddTeamScores(team) + + for j = 1, #ScoreNames,1 do + local i = ScoreNames[j] + local tscore = 0 + for _,j in ipairs(team['MyPlayers']) do + local tval = j['Player']:FindFirstChild('leaderstats') and j['Player'].leaderstats:FindFirstChild(i['Name']) + if tval and not tval:IsA('StringValue') then + tscore = tscore + GetScoreValue((j['Player'].leaderstats)[i['Name'] ]) + end + end + if team['Frame']:FindFirstChild(i['Name']) then + --team['Frame'][i['Name'] ].Size = UDim2.new(1 - (ScrollBarFrame.Size.X.Scale * 2),- ((j-1) * SpacingPerStat),1,0) + team['Frame'][i['Name'] ].Text = tostring(tscore) + end + end + UpdateMinimize() + +end + +--[[ + finds previous team this player was on, and if it exists calls removeplayerfromteam + @Args + entry Player entry +--]] +function FindRemovePlayerFromTeam(entry) + if entry['MyTeam'] then + for j,oldEntry in ipairs(entry['MyTeam']['MyPlayers']) do + if oldEntry['Player'] == entry['Player'] then + RemovePlayerFromTeam(entry['MyTeam'],j) + return + end + end + elseif NeutralTeam then + for j,oldEntry in ipairs(NeutralTeam['MyPlayers']) do + if oldEntry['Player'] == entry['Player'] then + RemovePlayerFromTeam(NeutralTeam,j) + return + end + end + end +end +--[[ + removes a single player from a given team (not usually called directly) + @Args: + teamEntry team entry to remove player from + index index of player in 'MyPlayers' list to remove +--]] +function RemovePlayerFromTeam(teamEntry,index) + table.remove(teamEntry['MyPlayers'],index) + --if teamEntry['AutoHide'] and #teamEntry['MyPlayers'] == 0 then + if teamEntry==NeutralTeam and #teamEntry['MyPlayers']==0 then + RemoveNeutralTeam() + end +end +--[[ + adds player entry entry to teamentry + removes them from any previous team + @Args: + teamEntry entry of team to add player to + entry player entry to add to this team +--]] +function AddPlayerToTeam(teamEntry,entry) + FindRemovePlayerFromTeam(entry) + table.insert(teamEntry['MyPlayers'],entry) + entry['MyTeam'] = teamEntry + if teamEntry['IsHidden'] then + teamEntry['Frame'].Parent = ListFrame + AddMiddleBGFrame() + end + teamEntry['IsHidden'] = false +end + + +function SetPlayerToTeam(entry) + FindRemovePlayerFromTeam(entry) + -- check to see if team exists, if it does add to that team + local setToTeam = false + for i,tframe in ipairs(TeamFrames) do + -- add my entry on the new team + if tframe['MyTeam'].TeamColor == entry['Player'].TeamColor then + AddPlayerToTeam(tframe,entry) + setToTeam = true + end + end + -- if player was set to an invalid team, then set it back to neutral + if not setToTeam and #(game.Teams:GetTeams())>0 then + debugprint(entry['Player'].Name..'could not find team') + entry['MyTeam']=nil + if not NeutralTeam then + AddNeutralTeam() + else AddPlayerToTeam(NeutralTeam,entry) end + end +end + +--[[ + Note:another big one, consiter breaking up + called when any children of player changes + handles 'Neutral', teamColor, Name and MembershipType changes + @Args + entry Player entry changed + property name of property changed +--]] +function PlayerChanged(entry, property) + while PlayerChangedLock do + debugprint('in playerchanged lock') + wait(1/30) + end + PlayerChangedLock=true + if property == 'Neutral' then + -- if player changing to neutral + if entry['Player'].Neutral and #(game.Teams:GetTeams())>0 then + debugprint(entry['Player'].Name..'setting to neutral') + FindRemovePlayerFromTeam(entry) + entry['MyTeam']=nil + if not NeutralTeam then + debugprint(entry['Player'].Name..'creating neutral team') + AddNeutralTeam() + else + debugprint(entry['Player'].Name..'adding to neutral team') + AddPlayerToTeam(NeutralTeam,entry) + end + elseif #(game.Teams:GetTeams())>0 then -- else player switching to a team, or a weird edgecase + debugprint(entry['Player'].Name..'has been set non-neutral') + SetPlayerToTeam(entry) + end + BaseUpdate() + elseif property == 'TeamColor' and not entry['Player'].Neutral and entry['Player'] ~= entry['MyTeam'] then + debugprint(entry['Player'].Name..'setting to new team') + SetPlayerToTeam(entry) + BaseUpdate() + elseif property == 'Name' or property == 'MembershipType' then + entry['Frame']:FindFirstChild('BCLabel').Image = getMembershipTypeIcon(entry['Player'].MembershipType,entry['Player']) + entry['Frame'].Name = entry['Player'].Name + entry['Frame'].TitleFrame.Title.Text = entry['Player'].Name + if(entry['Frame'].BCLabel.Image ~= '') then + entry['Frame'].TitleFrame.Title.Position=UDim2.new(.01, 30, .1, 0) + end + if entry['Player'] == LocalPlayer then + entry['Frame'].TitleFrame.DropShadow.Text= entry['Player'].Name + ChangeHeaderName(entry['Player'].Name) + end + BaseUpdate() + end + PlayerChangedLock=false +end + +function OnFriendshipChanged(player,friendStatus) + + Delay(.5,function() + debugprint('friend status changed for:'..player.Name .." ".. tostring(friendStatus) .. " vs " .. tostring(GetFriendStatus(player)) ) + for _, entry in ipairs(PlayerFrames) do + if entry['Player']==player then + local nicon = getFriendStatusIcon(friendStatus) + if nicon == '' and entry['Frame'].FriendLabel.Image ~= '' then + entry['Frame'].TitleFrame.Title.Position=entry['Frame'].TitleFrame.Title.Position-UDim2.new(0,17,0,0) + elseif nicon ~= '' and entry['Frame'].FriendLabel.Image == '' then + entry['Frame'].TitleFrame.Title.Position=entry['Frame'].TitleFrame.Title.Position+UDim2.new(0,17,0,0) + debugprint('confirmed status:'..player.Name) + end + entry['Frame'].FriendLabel.Image = nicon + return + end + end + end) +end + +LocalPlayer.FriendStatusChanged:connect(OnFriendshipChanged) + +--[[ + adds a neutral team if nessisary + Note: a lot of redundant code here, might want to refactor to share a function with insertteamframe +--]] +function AddNeutralTeam() + while NeutralTeamLock do debugprint('in neutral team 2 lock') wait() end + NeutralTeamLock = true + + local defaultTeam = Instance.new('Team') + defaultTeam.TeamColor = BrickColor.new('White') + defaultTeam.Name = 'Neutral' + local nentry = {} + nentry['MyTeam'] = defaultTeam + nentry['MyPlayers'] = {} + nentry['Frame'] = MiddleTemplate:Clone() + WaitForChild(WaitForChild(nentry['Frame'],'TitleFrame'),'Title').Text = defaultTeam.Name + nentry['Frame'].TitleFrame.Position=UDim2.new(nentry['Frame'].TitleFrame.Position.X.Scale,nentry['Frame'].TitleFrame.Position.X.Offset,.1,0) + nentry['Frame'].TitleFrame.Size=UDim2.new(nentry['Frame'].TitleFrame.Size.X.Scale,nentry['Frame'].TitleFrame.Size.X.Offset,.8,0) + nentry['Frame'].TitleFrame.Title.Font = 'ArialBold' + nentry['Frame'].Position = UDim2.new(1,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0) + WaitForChild(nentry['Frame'],'ClickListener').MouseButton1Down:connect(function(nx,ny) StartDrag(nentry,nx,ny) end) + nentry['Frame'].ClickListener.BackgroundColor3 = Color3.new(1,1,1) + nentry['Frame'].ClickListener.BackgroundTransparency = .7 + nentry['Frame'].ClickListener.AutoButtonColor=false + nentry['AutoHide'] = true + nentry['IsHidden'] = true + for _,i in pairs(PlayerFrames) do + if i['Player'].Neutral or not i['MyTeam'] then + AddPlayerToTeam(nentry,i) + end + end + if #nentry['MyPlayers'] > 0 then + NeutralTeam = nentry + UpdateMinimize() + BaseUpdate() + end + NeutralTeamLock = false +end + +function RemoveNeutralTeam() + while NeutralTeamLock do debugprint('in neutral team lock') wait() end + NeutralTeamLock = true + NeutralTeam['Frame']:Destroy() + NeutralTeam=nil + RemoveMiddleBGFrame() + NeutralTeamLock = false +end + +--[[ + +--]] +function TeamScoreChanged(entry,nscore) + WaitForChild(entry['Frame'],'PlayerScore').Text = tostring(nscore) + entry['TeamScore'] = nscore +end +--[[ + called when child added to a team, used for autohide functionality + Note: still has teamscore, consiter removing +--]] +function TeamChildAdded(entry,nchild) + if nchild.Name == 'AutoHide' then + entry['AutoHide'] = true + elseif nchild.Name == 'TeamScore' then + WaitForChild(entry['Frame'],'PlayerScore').Text = tostring(nchild.Value) + entry['TeamScore'] = nchild.Value + nchild.Changed:connect(function() TeamScoreChanged(entry,nchild.Value) end) + end +end +--[[ + called when child added to a team, used for autohide functionality + Note: still has teamscore, consiter removing +--]] +function TeamChildRemoved(entry,nchild) + if nchild.Name == 'AutoHide' then + entry['AutoHide'] = false + elseif nchild.Name == 'TeamScore' then + WaitForChild(entry['Frame'],'PlayerScore').Text = "" + entry['TeamScore'] = nil + end +end + +function TeamChanged(entry, property) + if property=='Name' then + WaitForChild(WaitForChild(entry['Frame'],'TitleFrame'),'Title').Text = entry['MyTeam'].Name + + elseif property=='TeamColor' then + entry['Frame'].ClickListener.BackgroundColor3 = entry['MyTeam'].TeamColor.Color + + for _,i in pairs(TeamFrames) do + if i['MyTeam'].TeamColor == entry['MyTeam'] then + RemoveTeamFrame(entry['MyTeam']) --NO DUPLICATE TEAMS! + end + end + + entry['MyPlayers']={} + + for _,i in pairs(PlayerFrames) do + SetPlayerToTeam(i) + end + BaseUpdate() + end +end + +--[[ + creates team entry and frame for this team, sets up listeners for this team + adds any players intended for this team,Creates neutral team if this is the first team added + Note:might be best to break this into multiple functions to simplify + @Args: + nteam new team object added +--]] +function InsertTeamFrame(nteam) + while AddingFrameLock do debugprint('in adding team frame lock') wait(1/30) end + AddingFrameLock = true + --for _,i in pairs(TeamFrames) do + local nentry = {} + nentry['MyTeam'] = nteam + nentry['MyPlayers'] = {} + nentry['Frame'] = MiddleTemplate:Clone() + WaitForChild(WaitForChild(nentry['Frame'],'TitleFrame'),'Title').Text = nteam.Name + nentry['Frame'].TitleFrame.Title.Font = 'ArialBold' + nentry['Frame'].TitleFrame.Title.FontSize = 'Size18' + nentry['Frame'].TitleFrame.Position=UDim2.new(nentry['Frame'].TitleFrame.Position.X.Scale,nentry['Frame'].TitleFrame.Position.X.Offset,.1,0) + nentry['Frame'].TitleFrame.Size=UDim2.new(nentry['Frame'].TitleFrame.Size.X.Scale,nentry['Frame'].TitleFrame.Size.X.Offset,.8,0) + nentry['Frame'].Position = UDim2.new(0.5,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0) + WaitForChild(nentry['Frame'],'ClickListener').MouseButton1Down:connect(function(nx,ny) StartDrag(nentry,nx,ny) end) + nentry['Frame'].ClickListener.BackgroundColor3 = nteam.TeamColor.Color + nentry['Frame'].ClickListener.BackgroundTransparency = .7 + nentry['Frame'].ClickListener.AutoButtonColor=false + AddId = AddId + 1 + nentry['ID'] = AddId + nentry['AutoHide'] = false + if nteam:FindFirstChild('AutoHide') then + nentry['AutoHide'] = true + end + if nteam:FindFirstChild('TeamScore') then + TeamChildAdded(nentry,nteam.TeamScore) + + end + + nteam.ChildAdded:connect(function(nchild) TeamChildAdded(nentry,nchild) end) + nteam.ChildRemoved:connect(function(nchild) TeamChildRemoved(nentry,nchild) end) + nteam.Changed:connect(function(prop) TeamChanged(nentry,prop) end) + + for _,i in pairs(PlayerFrames) do + if not i['Player'].Neutral and i['Player'].TeamColor == nteam.TeamColor then + AddPlayerToTeam(nentry,i) + end + end + nentry['IsHidden'] = false + if not nentry['AutoHide'] or #nentry['MyPlayers'] > 0 then + nentry['Frame'].Parent = ListFrame + AddMiddleBGFrame() + else + nentry['IsHidden'] = true + nentry['Frame'].Parent = nil + end + + table.insert(TeamFrames,nentry) + UpdateMinimize() + BaseUpdate() + if #TeamFrames == 1 and not NeutralTeam then + AddNeutralTeam() + end + AddingFrameLock = false +end +--[[ + removes team from team list + @Args: + nteam Teamobject to remove +--]] +function RemoveTeamFrame(nteam) + while AddingFrameLock do debugprint('in removing team frame lock') wait(1/30) end + AddingFrameLock = true + if IsMinimized.Value then + end + local myEntry + for i,key in ipairs(TeamFrames) do + if nteam == key['MyTeam'] then + myEntry = key + key['Frame']:Destroy() + table.remove(TeamFrames,i) + end + end + if #TeamFrames==0 then + debugprint('removeteamframe, remove neutral') + if NeutralTeam then + RemoveNeutralTeam() + end + end + for i,key in ipairs(myEntry['MyPlayers']) do + RemovePlayerFromTeam(myEntry,i) + PlayerChanged(key, 'TeamColor') + end + RemoveMiddleBGFrame() + BaseUpdate() + AddingFrameLock = false +end + +function TeamAdded(nteam) + InsertTeamFrame(nteam) +end + +function TeamRemoved(nteam) + RemoveTeamFrame(nteam) +end + --------------------------------- +--[[ + called when ANYTHING changes the state of the playerlist + re-sorts everything,assures correct positions of all elements +--]] +function BaseUpdate() + while BaseUpdateLock do debugprint('in baseupdate lock') wait(1/30) end + BaseUpdateLock = true + --print ('baseupdate') + UpdateStatNames() + + if #TeamFrames == 0 and not NeutralTeam then + PlayerListModeUpdate() + else + TeamListModeUpdate() + end + for i,key in ipairs(MiddleFrames) do + if key.Parent ~= nil then + key.Position = UDim2.new(.5,0,((#MiddleFrames - (i)) * key.Size.Y.Scale),0) + end + end + if not IsMinimized.Value and #MiddleFrames>DefaultEntriesOnScreen then + UpdateScrollPosition() + end + + UpdateMinimize() + + UpdateScrollBarSize() + UpdateScrollPosition() + + UpdateScrollBarVisibility() + --debugprint('EndBaseUpdate') + BaseUpdateLock = false +end + +--[[ + code for attaching tab key to maximizing player list +--]] +game.GuiService:AddKey("\t") +local LastTabTime = time() +game.GuiService.KeyPressed:connect( +function(key) + if key == "\t" then + debugprint('caught tab key') + local modalCheck, isModal = pcall(function() return game.GuiService.IsModalDialog end) + if modalCheck == false or (modalCheck and isModal == false) then + if time() - LastTabTime > 0.4 then + LastTabTime = time() + if IsTabified.Value then + if not IsMaximized.Value then + ScreenGui:TweenPosition(UDim2.new(0, 0, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) + IsMaximized.Value = true + else + ScreenGui:TweenPosition(UDim2.new(NormalBounds.X.Scale, NormalBounds.X.Offset-10, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) + IsMaximized.Value = false + IsMinimized.Value=true + end + else + ToggleMaximize() + end + + end + end + end +end) + + +function PlayersChildAdded(tplayer) + if tplayer:IsA('Player') then + Spawn(function() debugPlayerAdd(tplayer) end) + else + BlowThisPopsicleStand() + end +end + +function coreGuiChanged(coreGuiType, enabled) + if coreGuiType == Enum.CoreGuiType.All or coreGuiType == Enum.CoreGuiType.PlayerList then + MainFrame.Visible = enabled + end +end + +function TeamsChildAdded(nteam) + if nteam:IsA('Team') then + TeamAdded(nteam) + else + BlowThisPopsicleStand() + end +end + +function TeamsChildRemoved(nteam) + if nteam:IsA('Team') then + TeamRemoved(nteam) + else + BlowThisPopsicleStand() + end +end + + ---------------------------- + -- Hookups and initialization + ---------------------------- +function debugPlayerAdd(p) + InsertPlayerFrame(p) +end + +pcall(function() + coreGuiChanged(Enum.CoreGuiType.PlayerList, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.PlayerList)) + Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) +end) + +while not game:GetService('Teams') do wait(1/30) debugprint('Waiting For Teams') end +for _,i in pairs(game.Teams:GetTeams()) do TeamAdded(i) end +for _,i in pairs(Players:GetPlayers()) do Spawn(function() debugPlayerAdd(i) end) end + +game.Teams.ChildAdded:connect(TeamsChildAdded) +game.Teams.ChildRemoved:connect(TeamsChildRemoved) +Players.ChildAdded:connect(PlayersChildAdded) + +InitReportAbuse() +AreNamesExpanded.Value = true +BaseUpdate() + + + +--UGGGLY,find a better way later +wait(2) +IsPersonalServer= not not game.Workspace:FindFirstChild("PSVariable") + + ---------------------------- + -- Running Logic + ---------------------------- + + --debug stuffs, will only run for 'newplayerlistisbad' + if LocalPlayer.Name == 'newplayerlistisbad' or LocalPlayer.Name == 'imtotallyadmin' then + debugFrame.Parent = ScreenGui + Spawn(function() + while true do + local str_players='' + for _,i in pairs(game.Players:GetPlayers()) do + str_players= str_players .." " .. i.Name + end + debugplayers.Text=str_players + wait(.5) + end + end) + end + + diff --git a/app/files/CoreGui/48488236 b/app/files/CoreGui/48488236 new file mode 100644 index 0000000..8ac9234 --- /dev/null +++ b/app/files/CoreGui/48488236 @@ -0,0 +1,2425 @@ +local RbxGui + +local localTesting = true + +local screen = script.Parent +local screenResizeCon = nil + +local friendWord = "Friend" +local friendWordLowercase = "friend" + +local elementNames = {} +local elementNameToElement = {} + +local privilegeOwner = 255 +local privilegeAdmin = 240 +local privilegeMember = 128 +local privilegeVisitor = 10 +local privilegeBanned = 0 + +local inContextMenu = false +local contextMenu3d = true + +local bigEasingStyle = Enum.EasingStyle.Back +local smallEasingStyle = Enum.EasingStyle.Quart + +local personalServerContextAdded = false +local personalServerPlace = false +local success = pcall(function() personalServerPlace = game.IsPersonalServer end) +if not success then + personalServerPlace = false +end + +local friendRequestBlacklist = {} +local otherPlayerBlacklist = {} + +local currentSortName = "" + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +local function waitForProperty(instance, prop) + while not instance[prop] do + instance.Changed:wait() + end +end + +local function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function ArrayRemove(t, obj) + for i, obj2 in ipairs(t) do + if obj == obj2 then + table.remove(t, i) + return true + end + end + return false +end + +local function getPlayers() + local result = {} + local players = game:GetService("Players"):GetChildren() + if players then + for i, player in ipairs(players) do + if player:IsA("Player") then + table.insert(result, player) + end + end + end + return result +end + +local brickColorTable = {} +for i = 0, 63 do + brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(i).Color +end + +local function remapColor(i, j) + brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(j).Color +end + +remapColor(13, 12) +remapColor(14, 12) +remapColor(15, 12) +remapColor(61, 29) +remapColor(63, 62) +remapColor(56, 50) +remapColor(45, 53) +remapColor(51, 20) +remapColor(4, 20) +remapColor(59, 35) +remapColor(60, 29) + +local function getColor(brickColor) + if brickColorTable[brickColor.Name] then + return brickColorTable[brickColor.Name] + else + return brickColor.Color; + end +end + + + +local function getTeams() + local result = {} + local teams = game:GetService("Teams"):GetChildren() + for i, team in ipairs(teams) do + if team:IsA("Team") then + table.insert(result, team) + end + end + return result +end + +local supportFriends = true +local currentBoardType = "PlayerList" +local currentStatCount = 0 + +local createBoardsFunction = nil + + +local playerTable = {} +local teamTable = {} +local teamColorTable = {} + +local removePlayerFunction = nil +local recreatePlayerFunction = nil +local addPlayerFunction = function(player) + if recreatePlayerFunction then + recreatePlayerFunction(player) + end +end +local sortPlayerListsFunction = nil + +local minimizedState = nil +local bigWindowImposter = nil +local smallWindowPosition = UDim2.new(0, -20, 0,5) +local smallWindowSize = UDim2.new(1,0,1,0) +local bigWindowSize = UDim2.new(0.6,0,0.6,0) +local bigWindowPosition = UDim2.new(.2, 0, .2,0) + +local smallWindowHeaderYSize = 32 + +local debounceTeamsChanged = false + +local currentWindowState = "Small" +local previousWindowState = nil +local transitionWindowsFunction = nil + +local container = nil +local topRightTrayContainer = nil + +local playerContextMenu = nil +local contextMenuElements = {} +local updateContextMenuItems = nil + +local function addContextMenuLabel(getText1, getText2, isVisible) + local t = {} + t.Type = "Label" + t.GetText1 = getText1 + t.GetText2 = getText2 + t.IsVisible = isVisible + table.insert(contextMenuElements, t) +end +local function addContextMenuButton(text, isVisible, isActive, doIt) + local t = {} + t.Text = text + t.Type = "Button" + t.IsVisible = isVisible + t.IsActive = isActive + t.DoIt = doIt + table.insert(contextMenuElements, t) +end + +local function getFriendStatus(player) + if player == game.Players.LocalPlayer then + return Enum.FriendStatus.NotFriend + else + local success, result = pcall(function() return game.Players.LocalPlayer:GetFriendStatus(player) end) + if success then + return result + else + return Enum.FriendStatus.NotFriend + end + end +end + + +local function getPrivilegeType(player) + local rank = player.PersonalServerRank + if rank >= privilegeOwner then + return privilegeOwner + elseif rank < privilegeOwner and rank >= privilegeAdmin then + return privilegeAdmin + elseif rank < privilegeAdmin and rank >= privilegeMember then + return privilegeMember + elseif rank < privilegeMember and rank >= privilegeVisitor then + return privilegeVisitor + else + return privilegeBanned + end +end + +--Populate the ContextMenus +addContextMenuLabel( + --GetText1 + function(player) + return "Loading..." + end, + --GetText2 + nil, + --IsVisible + function(player) + return getFriendStatus(player) == Enum.FriendStatus.Unknown + end) + +addContextMenuButton("Send " .. friendWord .. " Request", + --IsVisible + function(player) + return (not otherPlayerBlacklist[player]) and (getFriendStatus(player) == Enum.FriendStatus.NotFriend) + end, + --IsActive + function(player) + return true + end, + --DoIt? + function(player) + otherPlayerBlacklist[player] = true + return game.Players.LocalPlayer:RequestFriendship(player) + end +) +addContextMenuButton("Un" .. friendWordLowercase, + --IsVisible + function(player) + return getFriendStatus(player) == Enum.FriendStatus.Friend + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + return game.Players.LocalPlayer:RevokeFriendship(player) + end +) +addContextMenuButton("Accept " .. friendWord .. " Request", + --IsVisible + function(player) + return (not friendRequestBlacklist[player]) and (getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + return game.Players.LocalPlayer:RequestFriendship(player) + end +) + +addContextMenuButton("Deny " .. friendWord .. " Request", + --IsVisible + function(player) + return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + friendRequestBlacklist[player] = true + return game.Players.LocalPlayer:RevokeFriendship(player) + end +) + +addContextMenuButton("Cancel " .. friendWord .. " Request", + --IsVisible + function(player) + return false -- disable cancel request for now (can lead to griefing) + --return getFriendStatus(player) == Enum.FriendStatus.FriendRequestSent + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + otherPlayerBlacklist[player] = false + return game.Players.LocalPlayer:RevokeFriendship(player) + end +) + +function addPersonalServerContext() + if personalServerContextAdded then return end + personalServerContextAdded = true + addContextMenuButton("Ban", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin and (getPrivilegeType(player) < privilegeAdmin) ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + player.PersonalServerRank = privilegeBanned + return true + end + ) + addContextMenuButton("Promote to Visitor", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin ) and ( getPrivilegeType(player) == privilegeBanned ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Promote(player) + return true + end + ) + addContextMenuButton("Promote to Member", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin ) and ( getPrivilegeType(player) == privilegeVisitor ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Promote(player) + return true + end + ) + addContextMenuButton("Promote to Admin", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) == privilegeOwner ) and ( getPrivilegeType(player) == privilegeMember ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Promote(player) + return true + end + ) + addContextMenuButton("Demote to Member", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) == privilegeOwner ) and ( getPrivilegeType(player) == privilegeAdmin ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Demote(player) + return true + end + ) + addContextMenuButton("Demote to Visitor", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin ) and ( getPrivilegeType(player) == privilegeMember ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Demote(player) + return true + end + ) +end + +local function setupBuildToolManagement() + local buildToolManagerAssetId = 64164692 + game:GetService("ScriptContext"):AddCoreScript(buildToolManagerAssetId,game.Players.LocalPlayer,"BuildToolManager") +end + + +local function getStatColumns(players) + for i, player in ipairs(players) do + local leaderstats = player:FindFirstChild("leaderstats") + if leaderstats then + local stats = {} + local children = leaderstats:GetChildren() + if children then + for i, stat in ipairs(children) do + if stat:IsA("IntValue") then + table.insert(stats, stat) + else + --TODO: This should check for IntValue only but current ScoreHud does not + table.insert(stats, stat) + end + end + end + return stats + end + end + return nil +end + +local function determineBoardType() + local players = getPlayers() + + local foundLeaderstats = false + local numStats = 0 + local foundTeam = false + + local stats = getStatColumns(players) + if stats then + foundLeaderstats = true + numStats = #stats + end + + for i, player in ipairs(players) do + if not foundTeam then + if not player.Neutral then + foundTeam = true + break + end + end + end + + if foundLeaderstats and foundTeam then + return "TeamScore", numStats + elseif foundLeaderstats then + return "PlayerScore", numStats + elseif foundTeam then + return "TeamList", numStats + else + return "PlayerList", numStats + end +end + +local function toggleBigWindow() + if container == nil then + return + end + + if currentWindowState == "Big" then + --Hide it + if previousWindowState == nil or previousWindowState == "Big" or previousWindowState == "None" then + transitionWindowsFunction("None") + else + transitionWindowsFunction("Small") + end + else + previousWindowState = currentWindowState + transitionWindowsFunction("Big") + end +end +local previousBigPlayerList = nil +local function rebuildBoard(owner, boardType, numStats) + if topRightTrayContainer == nil then + topRightTrayContainer = owner:FindFirstChild("PlayerListTopRightFrame") + if topRightTrayContainer == nil then + topRightTrayContainer = Instance.new("Frame") + topRightTrayContainer.Name = "PlayerListTopRightFrame" + topRightTrayContainer.BackgroundTransparency = 1 + topRightTrayContainer.Size = UDim2.new(0.2, 16, 0.42, 16) + topRightTrayContainer.Position = UDim2.new(0.8, 0, 0, 0) + topRightTrayContainer.Parent = container + end + end + if minimizedState == nil then + minimizedState = Instance.new("Frame") + minimizedState.Name = "MinimizedPlayerlist" + minimizedState.BackgroundTransparency = 1 + minimizedState.Position = UDim2.new(1, -166, 0,0) + minimizedState.Size = UDim2.new(0, 151, 0, 30) + + playerListButton = Instance.new("ImageButton") + playerListButton.Name = "GoSmallButton" + playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_small.png" + playerListButton.BackgroundTransparency = 1 + playerListButton.Size = UDim2.new(0.0, 35, 0, 30) + playerListButton.Position = UDim2.new(1, -35, 0, 0) + playerListButton.MouseButton1Click:connect( + function() + transitionWindowsFunction("Small") + end) + playerListButton.Parent = minimizedState + + minimizedState.Visible = false + robloxLock(minimizedState) + minimizedState.Parent = topRightTrayContainer + end + if bigWindowImposter == nil then + bigWindowImposter = owner:FindFirstChild("BigPlayerListWindowImposter") + if bigWindowImposter == nil then + bigWindowImposter = Instance.new("Frame") + bigWindowImposter.Name = "BigPlayerListWindowImposter" + bigWindowImposter.Visible = false + bigWindowImposter.BackgroundColor3 = Color3.new(0,0,0) + bigWindowImposter.BackgroundTransparency = 0.7 + bigWindowImposter.BorderSizePixel = 0 + bigWindowImposter.Size = UDim2.new(0.4, 7, 0.4, 7) + bigWindowImposter.Position = UDim2.new(0.3, 0, 0.3, 0) + robloxLock(bigWindowImposter) + bigWindowImposter.Parent = container + end + end + if container == nil or container ~= owner then + container = owner + + topRightTrayContainer.Parent = container + bigWindowImposter.Parent = container + end + + local smallVisible = true + local bigVisible = false + if container then + if topRightTrayContainer then + --Delete the old boards + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + smallVisible = topRightTrayContainer.SmallPlayerlist.Visible + topRightTrayContainer.SmallPlayerlist.Parent = nil + end + end + if container:FindFirstChild("BigPlayerlist") then + bigVisible = container.BigPlayerlist.Visible or (previousBigPlayerList ~= nil) + container.BigPlayerlist.Parent = nil + if previousBigPlayerList ~= nil then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + end + end + end + + local smallBoard, bigBoard = createBoardsFunction(boardType, numStats) + if smallBoard then + smallBoard.Visible = smallVisible + smallBoard.Parent = topRightTrayContainer + recalculateSmallPlayerListSize(smallBoard) + end + if bigBoard then + if bigVisible then + previousBigPlayerList = bigBoard + local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + previousBigPlayerList.Visible = true + end, + function() + previousBigPlayerList.Visible = false + end) + end) + bigBoard.Visible = bigVisible + else + bigBoard.Visible = false + end + bigBoard.Parent = container + end + return container +end + +function recalculateSmallPlayerListSize(smallPlayerList) + waitForChild(smallPlayerList,"ScrollingArea") + waitForChild(smallPlayerList.ScrollingArea, "ScrollingFrame") + local scrollingFrame = smallPlayerList.ScrollingArea.ScrollingFrame + local playerLines = scrollingFrame:GetChildren() + + local totalPlayerListSize = 0 + for i = 1, #playerLines do + totalPlayerListSize = totalPlayerListSize + playerLines[i].AbsoluteSize.Y + end + + if not smallPlayerList.Parent then return end + + local yOffset = math.max(0,(smallPlayerList.Size.Y.Scale * smallPlayerList.Parent.AbsoluteSize.Y) - totalPlayerListSize - smallWindowHeaderYSize) + smallPlayerList.Size = UDim2.new(smallPlayerList.Size.X.Scale,smallPlayerList.Size.X.Offset,smallPlayerList.Size.Y.Scale,-yOffset) +end + + +local function showBigPlayerWindow() + if container:FindFirstChild("BigPlayerlist") then + if container.BigPlayerlist.Visible then + return + end + end + + bigWindowImposter.Visible = true + bigWindowImposter:TweenSizeAndPosition(bigWindowSize, bigWindowPosition, Enum.EasingDirection.Out, bigEasingStyle, 0.3, true, + function(state) + if state == Enum.TweenStatus.Completed then + bigWindowImposter.Visible = false + if container:FindFirstChild("BigPlayerlist") then + container.BigPlayerlist.Visible = true + end + end + end) +end + +local function hideBigPlayerWindow(completed) + if playerContextMenu then + playerContextMenu.Visible = false + end + + if container:FindFirstChild("BigPlayerlist") then + if container.BigPlayerlist.Visible == false and bigWindowImposter.Visible == false then + if completed then + completed() + end + --Already completely hidden + return + end + container.BigPlayerlist.Visible = false + end + + local completedFunction = completed + bigWindowImposter.Visible = true + bigWindowImposter:TweenSizeAndPosition(UDim2.new(0.4, 0, 0.4, 0), UDim2.new(0.3, 0, 0.3, 0), Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.15, true, + function(state) + if state == Enum.TweenStatus.Completed then + bigWindowImposter.Visible = false + if completedFunction then + completedFunction() + end + end + end) +end +local function hideSmallPlayerWindow(completed) + if playerContextMenu then + playerContextMenu.Visible = false + end + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + local completedFunction = completed + if topRightTrayContainer.SmallPlayerlist.Visible then + topRightTrayContainer.SmallPlayerlist:TweenPosition(UDim2.new(1,0,smallWindowPosition.Y.Scale, smallWindowPosition.Y.Offset), Enum.EasingDirection.Out, smallEasingStyle, 0.3, true, + function(state) + if state == Enum.TweenStatus.Completed then + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + topRightTrayContainer.SmallPlayerlist.Visible = false + end + if completedFunction then + completedFunction() + end + end + end) + return + end + end + if completed then + completed() + end +end + + +transitionWindowsFunction = function(desiredState) + if desiredState == "Big" then + minimizedState.Visible = false + hideSmallPlayerWindow() + + if previousBigPlayerList ~= nil then + if previousBigPlayerList ~= container:FindFirstChild("BigPlayerlist") then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + previousBigPlayerList = container:FindFirstChild("BigPlayerlist") + end + else + previousBigPlayerList = container:FindFirstChild("BigPlayerlist") + end + + if previousBigPlayerList then + local firstShow = false + local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + if not firstShow then + showBigPlayerWindow() + firstShow = true + else + previousBigPlayerList.Visible = true + end + end, + function() + if previousBigPlayerList then + previousBigPlayerList.Visible = false + end + end) + end) + if centerDialogSupported == false then + print("Exception", msg) + showBigPlayerWindow() + end + else + showBigPlayerWindow() + end + currentWindowState = "Big" + elseif desiredState == "Small" then + minimizedState.Visible = false + if previousBigPlayerList ~= nil then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + end + + hideBigPlayerWindow() + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + if not topRightTrayContainer.SmallPlayerlist.Visible or topRightTrayContainer.SmallPlayerlist.Position ~= smallWindowPosition then + topRightTrayContainer.SmallPlayerlist.Visible = true + topRightTrayContainer.SmallPlayerlist:TweenPosition(smallWindowPosition, Enum.EasingDirection.Out, smallEasingStyle, 0.3, true) + end + end + currentWindowState = "Small" + elseif desiredState == "None" then + if previousBigPlayerList ~= nil then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + end + + local smallDone = false + local bigDone = false + hideSmallPlayerWindow( + function() + smallDone = true + if bigDone and smallDone then + minimizedState.Visible = true + end + end) + hideBigPlayerWindow( + function() + bigDone = true + if bigDone and smallDone then + minimizedState.Visible = true + end + end) + currentWindowState = "None" + end +end + +local function getStatValuesForPlayer(player) + local leaderstats = player:FindFirstChild("leaderstats") + if leaderstats then + local children = leaderstats:GetChildren() + if children then + local result = {} + --Just go based on position + for i, stat in ipairs(children) do + if stat:IsA("IntValue") then + table.insert(result, stat) + else + table.insert(result, 0) + end + end + + return result, leaderstats + end + end + return nil +end + +--ChildAdded on Player (if it's name is "leaderstats") + +if UserSettings and LoadLibrary then + + RbxGui,msg = LoadLibrary("RbxGui") + + local function createTeamName(name, color) + local fontHeight = 20 + local frame = Instance.new("Frame") + frame.Name = "Team-" .. name + frame.BorderSizePixel = 0 + frame.BackgroundTransparency = 0.5 + frame.BackgroundColor3 = Color3.new(1,1,1) + frame.Size = UDim2.new(1, 0, 0, fontHeight) + frame.Position = UDim2.new(0,0,0,0) + + local label = Instance.new("TextLabel") + label.Name = "NameLabel" + label.Text = " " .. name + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size18 + label.Position = UDim2.new(0,0,0,0) + label.Size = UDim2.new(1,0,1,0) + label.TextColor3 = Color3.new(1,1,1) + label.BackgroundTransparency = 0.5 + label.BackgroundColor3 = getColor(color) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + + local changeFunc = nil + label, changeFunc = RbxGui.AutoTruncateTextObject(label) + label.Parent = frame + + return frame, changeFunc + end + + local function getFriendStatusIcon(friendStatus) + if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then + return nil + elseif friendStatus == Enum.FriendStatus.Friend then + return "rbxasset://textures/ui/PlayerlistFriendIcon.png" + elseif friendStatus == Enum.FriendStatus.FriendRequestSent then + return "rbxasset://textures/ui/PlayerlistFriendRequestSentIcon.png" + elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then + return "rbxasset://textures/ui/PlayerlistFriendRequestReceivedIcon.png" + else + error("Unknown FriendStatus: " .. friendStatus) + end + end + + local function getMembershipTypeIcon(membershipType) + if membershipType == Enum.MembershipType.None then + return "" + elseif membershipType == Enum.MembershipType.BuildersClub then + return "rbxasset://textures/ui/TinyBcIcon.png" + elseif membershipType == Enum.MembershipType.TurboBuildersClub then + return "rbxasset://textures/ui/TinyTbcIcon.png" + elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then + return "rbxasset://textures/ui/TinyObcIcon.png" + else + error("Uknown membershipType" .. membershipType) + end + end + + + local function updatePlayerFriendStatus(nameObject, friendStatus) + local fontHeight = 20 + + local friendIconImage = getFriendStatusIcon(friendStatus) + nameObject.MembershipTypeLabel.FriendStatusLabel.Visible = (friendIconImage ~= nil) + + if friendIconImage ~= nil then + --Show friend icon + nameObject.MembershipTypeLabel.FriendStatusLabel.Image = friendIconImage + nameObject.NameLabel.Position =UDim2.new(0,2*fontHeight,0,1) + nameObject.NameLabel.Size = UDim2.new(1,-2*fontHeight,1,-2) + else + --Hide the friend icon + nameObject.NameLabel.Position = UDim2.new(0,fontHeight+1,0,1) + nameObject.NameLabel.Size = UDim2.new(1,-(fontHeight+1),1,-2) + end + end + local function updatePlayerName(nameObject, membershipStatus, teamColor) + local fontHeight = 20 + + nameObject.Size = UDim2.new(1,0,0,fontHeight) + nameObject.MembershipTypeLabel.Image = getMembershipTypeIcon(membershipStatus) + end + + + local function updatePlayerNameColor(player, teamColor) + local function updatePlayerNameColorHelper(nameObject) + if teamColor ~= nil then + nameObject.NameLabel.TextColor3 = getColor(teamColor) + nameObject.NameLabel.FullNameLabel.TextColor3 = getColor(teamColor) + else + nameObject.NameLabel.TextColor3 = Color3.new(1,1,1) + nameObject.NameLabel.FullNameLabel.TextColor3 = Color3.new(1,1,1) + end + end + + updatePlayerNameColorHelper(playerTable[player].NameObjectSmall) + updatePlayerNameColorHelper(playerTable[player].NameObjectBig) + end + + + local function createPlayerName(name, membershipStatus, teamColor, friendStatus) + local frame = Instance.new("Frame") + frame.Name = "Player_" .. name + frame.BackgroundColor3 = Color3.new(1,1,1) + frame.BackgroundTransparency = 0.5 + frame.BorderSizePixel = 0 + + local membershipStatusLabel = Instance.new("ImageLabel") + membershipStatusLabel.Name = "MembershipTypeLabel" + membershipStatusLabel.BackgroundTransparency = 1 + membershipStatusLabel.Size = UDim2.new(1,0,1,0) + membershipStatusLabel.Position = UDim2.new(0,0,0,0) + membershipStatusLabel.SizeConstraint = Enum.SizeConstraint.RelativeYY + membershipStatusLabel.Parent = frame + + local friendStatusLabel = Instance.new("ImageLabel") + friendStatusLabel.Name = "FriendStatusLabel" + friendStatusLabel.Visible = false + friendStatusLabel.BackgroundTransparency = 1 + friendStatusLabel.Size = UDim2.new(1,0,1,0) + friendStatusLabel.Position = UDim2.new(1,0,0,0) + friendStatusLabel.Parent = membershipStatusLabel + + local changeNameFunction + local nameLabel = Instance.new("TextLabel") + nameLabel.Name = "NameLabel" + nameLabel.Text = name + nameLabel.Font = Enum.Font.ArialBold + nameLabel.FontSize = Enum.FontSize.Size14 + nameLabel.TextColor3 = Color3.new(1,1,1) + nameLabel.BackgroundTransparency = 1 + nameLabel.BackgroundColor3 = Color3.new(0,0,0) + nameLabel.TextXAlignment = Enum.TextXAlignment.Left + nameLabel, changeNameFunction = RbxGui.AutoTruncateTextObject(nameLabel) + nameLabel.Parent = frame + + updatePlayerName(frame, membershipStatus, teamColor) + if supportFriends and not friendRequestBlacklist[game.Players:FindFirstChild(name)] then + updatePlayerFriendStatus(frame, friendStatus) + else + updatePlayerFriendStatus(frame, Enum.FriendStatus.NotFriend) + end + return frame, changeNameFunction + end + + local function createStatColumn(i, numColumns, isTeam, color3, isHeader, stat) + local textLabel = Instance.new("TextButton") + textLabel.Name = "Stat" .. i + textLabel.AutoButtonColor = false + textLabel.TextColor3 = Color3.new(1,1,1) + textLabel.TextXAlignment = Enum.TextXAlignment.Right + textLabel.TextYAlignment = Enum.TextYAlignment.Center + textLabel.FontSize = Enum.FontSize.Size14 + + if isHeader then + textLabel.FontSize = Enum.FontSize.Size18 + else + textLabel.FontSize = Enum.FontSize.Size14 + end + if isHeader or isTeam then + textLabel.Font = Enum.Font.ArialBold + else + textLabel.Font = Enum.Font.Arial + end + + if isTeam then + textLabel.BackgroundColor3 = color3 + textLabel.Text = 0 + else + textLabel.BackgroundColor3 = Color3.new(0,0,0) + textLabel.Text = "" + end + textLabel.BackgroundTransparency = 1 + if i == numColumns then + textLabel.Size = UDim2.new(1/numColumns, -6, 1, 0) + else + textLabel.Size = UDim2.new(1/numColumns, -4, 1, 0) + end + + textLabel.Position = UDim2.new((i-1) * (1/numColumns), 0, 0, 0) + + local truncLabel, changer = RbxGui.AutoTruncateTextObject(textLabel) + + if isHeader then + local mouseCon = {} + + mouseCon[1] = truncLabel.MouseEnter:connect(function() + truncLabel.BackgroundTransparency = 0.2 + end) + mouseCon[2] = truncLabel.MouseLeave:connect(function() + truncLabel.BackgroundTransparency = 1 + end) + + mouseCon[3] = truncLabel.MouseButton1Click:connect(function() + sortPlayerListsFunction(truncLabel:GetChildren()[1].Name, (currentSortName == truncLabel:GetChildren()[1].Name) ) + truncLabel.BackgroundTransparency = 1 + end) + + mouseCon[4] = truncLabel:GetChildren()[1].MouseButton1Click:connect(function() + sortPlayerListsFunction(textLabel.Name, (currentSortName == truncLabel.Name) ) + truncLabel.BackgroundTransparency = 1 + end) + + mouseCon[5] = nil + mouseCon[5] = truncLabel.AncestryChanged:connect(function(child,parent) + if parent == nil then + for i,connection in pairs(mouseCon) do + connection:disconnect() + end + end + end) + end + + return truncLabel, changer + end + + local function createStatHeaders(stats, numColumns, isBig) + local frame = Instance.new("Frame") + frame.Name = "Headers" + frame.BorderSizePixel = 0 + frame.BackgroundColor3 = Color3.new(0,0,0) + frame.BackgroundTransparency = 1 + + local nameSize + if isBig then + nameSize = 0.5 + elseif numColumns == 1 then + nameSize = 0.7 + elseif numColumns == 2 then + nameSize = 0.6 + else + nameSize = 0.45 + end + frame.Size = UDim2.new(1-nameSize, 0, 1,0) + if isBig then + frame.Position = UDim2.new(nameSize,-25, 0,0) + else + frame.Position = UDim2.new(nameSize,0, 0,0) + end + + local i = 1 + while i <= numColumns do + local headerColumn, changeText = createStatColumn(i, numColumns, false, nil, true,stats[i]) + changeText(stats[i].Name) + headerColumn.Parent = frame + i = i + 1 + end + return frame, textChangers + end + + local function createStatColumns(nameObject, numColumns, isTeam, isBig) + local frame = Instance.new("Frame") + frame.Name = nameObject.Name .. "_WithStats" + frame.BorderSizePixel = 0 + frame.BackgroundColor3 = nameObject.BackgroundColor3 + frame.BackgroundTransparency = nameObject.BackgroundTransparency + frame.Size = nameObject.Size + frame.Position = nameObject.Position + + nameObject.BackgroundTransparency = 1 + + if numColumns == 0 then + nameObject.Size = UDim2.new(1,0,1,0) + nameObject.Position = UDim2.new(0,0,0,0) + nameObject.Parent = frame + return frame + end + + local statFrame = Instance.new("Frame") + statFrame.Name = "Stats" + if isTeam then + statFrame.BorderSizePixel = 0 + statFrame.BackgroundColor3 = nameObject.NameLabel.BackgroundColor3 + statFrame.BackgroundTransparency = nameObject.NameLabel.BackgroundTransparency + else + statFrame.BackgroundTransparency = 1 + end + + local nameSize + if isBig then + nameSize = 0.5 + elseif numColumns == 1 then + nameSize = 0.7 + elseif numColumns == 2 then + nameSize = 0.6 + else + nameSize = 0.45 + end + nameObject.Size = UDim2.new(nameSize, 0, 1, 0) + nameObject.Position = UDim2.new(0, 0, 0, 0) + statFrame.Size = UDim2.new(1-nameSize,0, 1,0) + statFrame.Position = UDim2.new(nameSize,0, 0,0) + + nameObject.Parent = frame + statFrame.Parent = frame + + local textChangers = {} + local i = 1 + while i <= numColumns do + local statColumn, changeText = createStatColumn(i, numColumns, isTeam, statFrame.BackgroundColor3) + statColumn.Parent = statFrame + table.insert(textChangers, changeText) + + i = i + 1 + end + + return frame, statFrame, textChangers + end + + local function createAlternatingRows(objects) + for i, line in ipairs(objects) do + if i % 2 == 0 then + line.BackgroundTransparency = 1 + else + line.BackgroundTransparency = 0.95 + end + end + end + local removeFromTeam = nil + + local function clearTableEntry(obj, tableInfo) + if tableInfo.MainObjectSmall then + tableInfo.MainObjectSmall.Parent = nil + tableInfo.MainObjectSmall = nil + end + if tableInfo.MainObjectBig then + tableInfo.MainObjectBig.Parent = nil + tableInfo.MainObjectBig = nil + end + if tableInfo.Connections then + for i, connection in ipairs(tableInfo.Connections) do + connection:disconnect() + end + tableInfo.Connections = nil + end + if tableInfo.LeaderStatConnections then + for i, connection in ipairs(tableInfo.LeaderStatConnections) do + connection:disconnect() + end + tableInfo.LeaderStatConnections = nil + end + if tableInfo.CurrentTeam then + removeFromTeam(obj) + tableInfo.CurrentTeam = nil + end + if tableInfo.Players then + for i, player in ipairs(tableInfo.Players) do + playerTable[player].CurrentTeam = nil + end + tableInfo.Players = {} + end + if tableInfo.StatValues then + tableInfo.StatValues = nil + end + end + + local function resetPlayerTable() + for player, info in pairs(playerTable) do + clearTableEntry(player, info) + playerTable[player] = nil + end + playerTable = {} + end + + local function resetTeamTable() + for team, info in pairs(teamTable) do + clearTableEntry(team, info) + teamTable[team] = nil + end + teamTable = {} + teamColorTable = {} + end + + local function getBoardTypeInfo() + local isTeam = (currentBoardType == "TeamScore" or currentBoardType == "TeamList") + local isScore = (currentBoardType == "TeamScore" or currentBoardType == "PlayerScore") + return isTeam, isScore + end + + + local function recomputeTeamScore(team, column) + if not team or team == "Neutral" then + return + end + + local function recomputeScoreHelper(statChangers) + if statChangers and column <= #statChangers then + local sum = 0 + for i, p in ipairs(teamTable[team].Players) do + if playerTable[p].StatValues and column <= #playerTable[p].StatValues then + sum = sum + playerTable[p].StatValues[column].Value + end + end + statChangers[column](sum) + end + end + + recomputeScoreHelper(teamTable[team].StatChangersSmall) + recomputeScoreHelper(teamTable[team].StatChangersBig) + end + local function recomputeCompleteTeamScore(team) + local col = 1 + while col <= currentStatCount do + recomputeTeamScore(team, col) + col = col + 1 + end + end + removeFromTeam = function(player) + if playerTable[player].CurrentTeam ~= nil and teamTable[playerTable[player].CurrentTeam] ~= nil then + ArrayRemove(teamTable[playerTable[player].CurrentTeam].Players, player) + recomputeCompleteTeamScore(playerTable[player].CurrentTeam) + playerTable[player].CurrentTeam = nil + end + end + + local function assignToTeam(player) + local isTeam, isScore = getBoardTypeInfo() + + if isTeam then + local newTeam = nil + + if player.Neutral or teamColorTable[player.TeamColor.Name] == nil then + newTeam = "Neutral" + else + newTeam = teamColorTable[player.TeamColor.Name] + end + + if playerTable[player].CurrentTeam == newTeam then + return + end + + local oldTeam = playerTable[player].LastTeam + removeFromTeam(player) + + playerTable[player].CurrentTeam = newTeam + + if teamTable[oldTeam] and teamTable[oldTeam]["NameChangeFuncBig"] then + if #teamTable[oldTeam].Players < 1 then + teamTable[oldTeam]["NameChangeFuncBig"](" " .. oldTeam.Name) + else + teamTable[oldTeam]["NameChangeFuncBig"](" " .. oldTeam.Name .. " (" .. tostring(#teamTable[oldTeam].Players) ..")") + end + end + + if teamTable[newTeam] then + table.insert(teamTable[newTeam].Players, player) + if newTeam["Name"] then + if teamTable[newTeam]["NameChangeFuncBig"] then + if #teamTable[newTeam].Players < 1 then + teamTable[newTeam]["NameChangeFuncBig"](" " .. newTeam.Name) + else + teamTable[newTeam]["NameChangeFuncBig"](" " .. newTeam.Name .. " (" .. tostring(#teamTable[newTeam].Players) ..")") + end + end + end + end + + if newTeam == "Neutral" then + updatePlayerNameColor(player, nil) + else + updatePlayerNameColor(player, player.TeamColor) + end + + playerTable[player].LastTeam = newTeam + + recomputeCompleteTeamScore(newTeam) + + --Relayout + if sortPlayerListsFunction then + sortPlayerListsFunction() + end + end + end + + local function buildTeamObject(team, numStatColumns, suffix) + local isTeam, isScore = getBoardTypeInfo() + local teamObject, changeFunc = createTeamName(team.Name, team.TeamColor) + teamObject.NameLabel.Text = " " .. team.Name .. " (0)" + if not teamTable[team] then + teamTable[team] = {} + end + teamTable[team]["NameObject" .. suffix] = teamObject + teamTable[team]["NameChangeFunc" .. suffix] = changeFunc + if isScore then + local statObject + local textChangers + teamObject, statObject, textChangers = createStatColumns(teamObject, numStatColumns, true, suffix == "Big") + teamTable[team]["StatObject" .. suffix] = statObject + teamTable[team]["StatChangers" .. suffix] = textChangers + end + teamTable[team]["MainObject" .. suffix] = teamObject + changeFunc(" " .. team.Name) + if not teamTable[team].Players then + teamTable[team].Players = {} + else + if suffix ~= "Small" and #teamTable[team].Players > 0 then + changeFunc(" " .. team.Name .. " (" .. tostring(#teamTable[team].Players) ..")") + end + end + + return teamObject + end + + local currentContextMenuPlayer = nil + local function updatePlayerContextMenu(player,x,y) + currentContextMenuPlayer = player + local elementHeight = 18 + local function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) + end + local function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) + end + if playerContextMenu == nil then + elementNames = {} + elementNameToElement = {} + + for i, contextElement in ipairs(contextMenuElements) do + table.insert(elementNames, contextElement.Text) + elementNameToElement[tostring(contextElement.Text)] = contextElement + end + + playerContextMenu = Instance.new("TextButton") + playerContextMenu.Name = "PlayerListContextMenu" + playerContextMenu.Style = Enum.ButtonStyle.RobloxButton + playerContextMenu.Text = "" + playerContextMenu.Visible = false + playerContextMenu.ZIndex = 4 + + playerContextMenu.MouseLeave:connect(function() + local menuChildren = playerContextMenu:GetChildren() + for i = 1, #menuChildren do + if menuChildren[i].Name == "ChoiceButton" then + menuChildren[i].TextColor3 = Color3.new(1,1,1) + menuChildren[i].BackgroundTransparency = 1 + end + end + playerContextMenu.Visible = false + inContextMenu = false + end) + + playerContextMenu.MouseEnter:connect(function() + inContextMenu = true + end) + + for i = 1, #elementNames do + local newElementButton = Instance.new("TextButton") + newElementButton.Name = "ChoiceButton" + newElementButton.Text = elementNames[i] + newElementButton.TextColor3 = Color3.new(1,1,1) + newElementButton.Font = Enum.Font.Arial + newElementButton.FontSize = Enum.FontSize.Size14 + newElementButton.BackgroundTransparency = 1 + newElementButton.TextWrap = true + newElementButton.Size = UDim2.new(1,0,0,elementHeight) + newElementButton.Position = UDim2.new(0,0,0,elementHeight * (i - 1)) + newElementButton.ZIndex = playerContextMenu.ZIndex + 1 + + newElementButton.MouseEnter:connect(function() + newElementButton.TextColor3 = Color3.new(0,0,0) + newElementButton.BackgroundTransparency = 0 + end) + + newElementButton.MouseLeave:connect(function() + newElementButton.TextColor3 = Color3.new(1,1,1) + newElementButton.BackgroundTransparency = 1 + end) + + newElementButton.MouseButton1Click:connect(function() + local element = elementNameToElement[newElementButton.Text] + pcall(function() element.DoIt(currentContextMenuPlayer) end) + playerContextMenu.Visible = false + newElementButton.TextColor3 = Color3.new(1,1,1) + newElementButton.BackgroundTransparency = 1 + end) + + newElementButton.Parent = playerContextMenu + end + + robloxLock(playerContextMenu) + playerContextMenu.Parent = script.Parent + + end + + local visibleElements = 0 + for i, contextElement in ipairs(contextMenuElements) do + local isVisible = false + + if contextElement.IsVisible then + local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end) + if success then + isVisible = visible + else + print("Error in IsVisible call: " .. visible) + end + end + + if isVisible then + local foundElement = false + for i = 1, #elementNames do + if elementNames[i] == contextElement.Text then + foundElement = true + break + end + end + if not foundElement then + table.insert(elementNames,contextElement.Text) + end + visibleElements = visibleElements + 1 + else + for i = 1, #elementNames do + if elementNames[i] == contextElement.Text then + table.remove(elementNames,i) + break + end + end + end + end + playerContextMenu.Size = UDim2.new(0, 150, 0, elementHeight + (elementHeight * visibleElements) ) + + if x and y then + x = x - (playerContextMenu.AbsoluteSize.X/2) + if x + playerContextMenu.AbsoluteSize.X >= script.Parent.AbsoluteSize.X then + x = script.Parent.AbsoluteSize.X - playerContextMenu.AbsoluteSize.X + end + playerContextMenu.Position = UDim2.new(0, x, 0, y - 3) + end + + local elementPos = 0 + local contextChildren = playerContextMenu:GetChildren() + for i = 1, #contextChildren do + if contextChildren[i]:IsA("GuiObject") and contextChildren[i].Name == "ChoiceButton" then + contextChildren[i].Visible = false + for j = 1, #elementNames do + if elementNames[j] == contextChildren[i].Text then + contextChildren[i].Visible = true + contextChildren[i].Position = UDim2.new(0,0,0,elementPos * elementHeight) + elementPos = elementPos + 1 + break + end + end + end + end + end + + local function playerContextMenuHasItems() + if playerContextMenu then + local children = playerContextMenu:GetChildren() + for i = 1, #children do + if children[i]:IsA("GuiObject") and children[i].Name == "ChoiceButton" and children[i].Visible then + return true + end + end + end + return false + end + + local function showPlayerMenu(player, x, y) + updatePlayerContextMenu(player,x,y) + if not playerContextMenuHasItems() then return end -- don't show if we have nothing to show + playerContextMenu.Visible = true + end + + local function buildPlayerObject(player, numStatColumns, suffix) + if not player then return nil end + + local isTeam, isScore = getBoardTypeInfo() + + local playerObject = nil + local changePlayerNameFunction = nil + local currentColor = nil + if isTeam and not player.Neutral then + currentColor = player.TeamColor.Color + else + currentColor = Color3.new(1,1,1) + end + playerObject, changePlayerNameFunction = createPlayerName(player.Name, player.MembershipType, currentColor, getFriendStatus(player)) + + if not playerTable[player] then + playerTable[player] = {} + end + if not playerTable[player].Connections then + playerTable[player].Connections = {} + end + if not playerTable[player].CurrentTeam then + playerTable[player].CurrentTeam = nil + end + if not playerTable[player].LastTeam then + playerTable[player].LastTeam = nil + end + playerTable[player]["NameObject" .. suffix] = playerObject + playerTable[player]["ChangeName" .. suffix] = changePlayerNameFunction + + if isScore then + local statObject = nil + local textChangers = nil + playerObject, statObject, textChangers = createStatColumns(playerObject, numStatColumns, false, suffix == "Big") + playerTable[player]["StatObject" .. suffix]= statObject + playerTable[player]["StatChangers" .. suffix] = textChangers + + local statValues, leaderstats = getStatValuesForPlayer(player) + if not statValues or #statValues < numStatColumns then + if not playerTable[player].LeaderStatConnections then + playerTable[player].LeaderStatConnections = {} + end + --Setup a listener to see when this data gets filled in + if not leaderstats then + --We don't even have a leaderstats child, wait for one + table.insert(playerTable[player].LeaderStatConnections, + player.ChildAdded:connect( + function(child) + if child.Name == "leaderstats" then + --Connections will be torn down + recreatePlayerFunction(player) + else + table.insert(playerTable[player].LeaderStatConnections, + child.Changed:connect( + function(prop) + if prop == "Name" and child.Name == "leaderstats" then + --Connections will be torn down + recreatePlayerFunction(player) + end + end)) + end + end)) + else + --We have a leaderstats, but not enough children, recreate if we get them + table.insert(playerTable[player].LeaderStatConnections, + leaderstats.ChildAdded:connect( + function(child) + --TODO only look for IntValue + recreatePlayerFunction(player) + end) + ) + table.insert(playerTable[player].LeaderStatConnections, + leaderstats.AncestryChanged:connect( + function(child) + --We got deleted, try again + recreatePlayerFunction(player) + end) + ) + end + end + if statValues then + if not playerTable[player].StatValues then + playerTable[player].StatValues = {} + end + local pos = 1 + while pos <= numStatColumns and pos <= #statValues do + local currentColumn = pos + local statValue = statValues[pos] + local statChanger = textChangers[pos] + + local updateStat = function(val) + statChanger(val) + if playerTable[player] ~= nil then recomputeTeamScore(playerTable[player].CurrentTeam, currentColumn) end + end + if pos > #playerTable[player].StatValues then + table.insert(playerTable[player].StatValues, statValue) + end + + if type(statValue) ~= "number" and statValue["Changed"] then + table.insert(playerTable[player].Connections, + statValue.Changed:connect(updateStat) + ) + end + + table.insert(playerTable[player].Connections, + statValue.AncestryChanged:connect( + function() + recreatePlayerFunction(player) + end) + ) + updateStat(statValue.Value) + pos = pos + 1 + end + end + end + + if supportFriends and player ~= game.Players.LocalPlayer and player.userId > 0 and game.Players.LocalPlayer.userId > 0 then + local button = Instance.new("TextButton") + button.Name = playerObject.Name .. "Button" + button.Text = "" + button.Active = false + button.Size = playerObject.Size + button.Position = playerObject.Position + button.BackgroundColor3 = playerObject.BackgroundColor3 + + local secondButton = Instance.new("TextButton") + secondButton.Name = playerObject.Name .. "RealButton" + secondButton.Text = "" + secondButton.BackgroundTransparency = 1 + secondButton.BackgroundColor3 = playerObject.BackgroundColor3 + local theNameLabel = playerObject:findFirstChild("NameLabel",true) + if theNameLabel then + theNameLabel.TextColor3 = Color3.new(1,1,1) + secondButton.Parent = theNameLabel + end + secondButton.Parent.BackgroundTransparency = 1 + secondButton.Parent.Visible = true + secondButton.ZIndex = 2 + secondButton.Size = UDim2.new(1,0,1,0) + + local previousTransparency = nil + table.insert(playerTable[player].Connections, + secondButton.MouseEnter:connect( + function(x,y) + if playerContextMenu and playerContextMenu.Visible then + return + end -- don't update if we currently see it + + updatePlayerContextMenu(player,x,y) + if not playerContextMenuHasItems() then return end -- don't show if we have nothing to show + + if previousTransparency == nil then + previousTransparency = secondButton.BackgroundTransparency + end + secondButton.Parent.BackgroundTransparency = 0 + end)) + table.insert(playerTable[player].Connections, + secondButton.MouseLeave:connect( + function() + if previousTransparency ~= nil then + previousTransparency = nil + end + delay(0.01,function() + if playerContextMenu and not inContextMenu then + playerContextMenu.Visible = false + end + end) + secondButton.Parent.BackgroundTransparency = 1 + end)) + + local mouseDownX, mouseDownY + table.insert(playerTable[player].Connections, + secondButton.MouseButton1Down:connect(function(x,y) + mouseDownX = x + mouseDownY = y + end)) + table.insert(playerTable[player].Connections, + secondButton.MouseButton1Click:connect(function() + showPlayerMenu(player, mouseDownX, secondButton.AbsolutePosition.Y + secondButton.AbsoluteSize.Y ) + end)) + playerObject.BackgroundTransparency = 1 + playerObject.Size = UDim2.new(1,0,1,0) + playerObject.Position = UDim2.new(0,0,0,0) + playerObject.Parent = button + + playerTable[player]["MainObject" .. suffix] = button + + playerObject = button + else + playerTable[player]["MainObject" .. suffix] = playerObject + + if player == game.Players.LocalPlayer and supportFriends then + table.insert(playerTable[player].Connections, + player.FriendStatusChanged:connect( + function(otherPlayer, friendStatus) + if friendRequestBlacklist[otherPlayer] then + updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], Enum.FriendStatus.NotFriend) + elseif playerTable[otherPlayer] then + updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], friendStatus) + end + end) + ) + end + end + table.insert(playerTable[player].Connections, + player.Changed:connect( + function(prop) + if prop == "MembershipType" then + updatePlayerName(playerTable[player]["NameObject" .. suffix], player.MembershipType, currentColor) + elseif prop == "Name" then + playerTable[player]["ChangeName" .. suffix](player.Name) + elseif prop == "Neutral" or prop == "TeamColor" then + assignToTeam(player) + end + end) + ) + return playerObject + end + + local function doSort(tableToSort, objectName, order, startPos, sortType, ascending) + local orderedPlayerTable = {} + getLocalPlayer = false + for i, player in ipairs(tableToSort) do + if playerTable[player] then + if playerTable[player][objectName] ~= nil then + if player ~= game.Players.LocalPlayer then + table.insert(orderedPlayerTable,playerTable[player][objectName]) + else + getLocalPlayer = true + end + end + end + end + + if sortType == nil then -- default back to alphabetical sort + table.sort(orderedPlayerTable,function(a,b) + return string.lower(a:FindFirstChild("FullNameLabel",true).Text) < string.lower(b:FindFirstChild("FullNameLabel",true).Text) + end) + else -- we are sorting by a value + table.sort(orderedPlayerTable,function(a,b) + if ascending then + currentSortName = "" + return tonumber(a:FindFirstChild(sortType,true).Text) > tonumber(b:FindFirstChild(sortType,true).Text) + else + currentSortName = sortType + return tonumber(a:FindFirstChild(sortType,true).Text) < tonumber(b:FindFirstChild(sortType,true).Text) + end + end) + end + if getLocalPlayer and playerTable[game.Players.LocalPlayer] and playerTable[game.Players.LocalPlayer][objectName] then + table.insert(orderedPlayerTable,1,playerTable[game.Players.LocalPlayer][objectName]) + end + for i = 1, #orderedPlayerTable do + order[orderedPlayerTable[i]] = startPos + startPos = startPos + 1 + end + + return startPos + end + + local function orderScrollList(scrollOrder, objectName, scrollFrame, sortType, ascending) + local pos = 0 + local order = {} + local isTeam, isScore = getBoardTypeInfo() + for i, obj in ipairs(scrollOrder) do + order[obj] = 0 + end + + if isTeam then + local teams = getTeams() + for i, team in ipairs(teams) do + if teamTable[team][objectName] then + order[teamTable[team][objectName]] = pos + pos = pos + 1 + end + pos = doSort(teamTable[team].Players, objectName, order, pos, sortType, ascending) + end + + if #teamTable["Neutral"].Players > 0 then + teamTable["Neutral"][objectName].Parent = scrollFrame + order[teamTable["Neutral"][objectName]] = pos + pos = pos + 1 + doSort(teamTable["Neutral"].Players, objectName, order, pos, sortType, ascending) + else + teamTable["Neutral"][objectName].Parent = nil + end + else + local players = getPlayers() + doSort(players, objectName, order, pos, sortType, ascending) + end + + table.sort(scrollOrder, + function(a,b) + return order[a] < order[b] + end) + end + + local function createPlayerListBasics(frame, isBig) + local headerFrame = Instance.new("Frame") + headerFrame.Name = "Header" + headerFrame.BackgroundTransparency = 1 + headerFrame.Size = UDim2.new(1,-13,0,26) + headerFrame.Position = UDim2.new(0,0,0,0) + headerFrame.Parent = frame + + local lowerPaneFrame = Instance.new("Frame") + lowerPaneFrame.Name = "ScrollingArea" + lowerPaneFrame.BackgroundTransparency = 1 + lowerPaneFrame.Size = UDim2.new(1,-3,1,-26) + if not isBig then lowerPaneFrame.Size = UDim2.new(1,-3,1,-30) end + lowerPaneFrame.Position = UDim2.new(0,0,0,26) + lowerPaneFrame.Parent = frame + + local scrollOrder = {} + local scrollFrame, scrollUp, scrollDown, recalculateScroll, scrollBar = RbxGui.CreateScrollingFrame(scrollOrder) + + scrollBar.Size = UDim2.new(0, 17, 1, -36) + if isBig then scrollBar.Size = UDim2.new(0, 17, 1, -61) end + scrollBar.Parent = lowerPaneFrame + + scrollFrame.Parent = lowerPaneFrame + scrollUp.Parent = lowerPaneFrame + scrollDown.Parent = lowerPaneFrame + + if isBig then + scrollFrame.Position = UDim2.new(0,0,0,0) + scrollUp.Position = UDim2.new(1,-41,0,5) + scrollDown.Position = UDim2.new(1,-41,1,-35) + scrollBar.Position = UDim2.new(1, -41, 0, 24) + + scrollFrame.Size = UDim2.new(1,-48,1,-16) + headerFrame.Size = UDim2.new(1,-20,0,26) + + else + scrollBar.Position = UDim2.new(1, -15, 0, 14) + scrollBar.Size = UDim2.new(0,17,1,-36) + scrollFrame.Position = UDim2.new(0,1,0,0) + scrollUp.Position = UDim2.new(1,-15,0,-5) + scrollDown.Position = UDim2.new(1,-15,1,-20) + + lowerPaneFrame.Position = UDim2.new(0,0,0,30) + + local toggleScrollBar = function(visible) + if visible then + scrollFrame.Size = UDim2.new(1,-16,1,0) + headerFrame.Size = UDim2.new(1,-16,0,smallWindowHeaderYSize) + else + scrollFrame.Size = UDim2.new(1,0,1,0) + headerFrame.Size = UDim2.new(1,0,0,smallWindowHeaderYSize) + end + scrollUp.Visible = visible + scrollDown.Visible = visible + scrollBar.Visible = visible + end + scrollUp.Changed:connect(function(prop) + if prop == "Active" then + toggleScrollBar(scrollUp.Active or scrollDown.Active) + end + end) + + scrollDown.Changed:connect(function(prop) + if prop == "Active" then + toggleScrollBar(scrollUp.Active or scrollDown.Active) + end + end) + + toggleScrollBar(scrollUp.Active or scrollDown.Active) + end + return headerFrame, scrollFrame, recalculateScroll, scrollOrder + end + + createBoardsFunction = function (boardType, numStatColumns) + local updatePlayerCount = function() + return #getPlayers() + end + + local smallFrame = Instance.new("Frame") + smallFrame.Name = "SmallPlayerlist" + smallFrame.Position = smallWindowPosition + smallFrame.Active = false + smallFrame.Size = smallWindowSize + smallFrame.BackgroundColor3 = Color3.new(0,0,0) + smallFrame.BackgroundTransparency = 0.7 + smallFrame.BorderSizePixel = 0 + + local bigFrame = Instance.new("Frame") + bigFrame.Name = "BigPlayerlist" + bigFrame.Size = bigWindowSize + bigFrame.Position = bigWindowPosition + bigFrame.BackgroundColor3 = Color3.new(0,0,0) + bigFrame.BackgroundTransparency = 0.7 + bigFrame.BorderSizePixel = 0 + bigFrame.Visible = false + + local bigFrameWrapper = Instance.new("Frame") + bigFrameWrapper.Name = "Expander" + bigFrameWrapper.Size = UDim2.new(1,21,1,16) + bigFrameWrapper.Position = UDim2.new(0, 0, 0,0) + bigFrameWrapper.BackgroundTransparency = 1 + bigFrameWrapper.Parent = bigFrame + + local smallHeaderFrame, scrollFrameSmall, recalculateScrollSmall, scrollOrderSmall = createPlayerListBasics(smallFrame, false) + local bigHeaderFrame, scrollFrameBig, recalculateScrollBig, scrollOrderBig = createPlayerListBasics(bigFrameWrapper, true) + + local playerListButton = Instance.new("ImageButton") + playerListButton.Name = "GoBigButton" + playerListButton.BackgroundTransparency = 1 + playerListButton.Image = "rbxasset://textures/ui/playerlist_small_maximize.png" + playerListButton.Size = UDim2.new(0.0, 35, 0, 29) + playerListButton.Position = UDim2.new(0, 0, 0, 0) + playerListButton.MouseButton1Click:connect( + function() + toggleBigWindow() + end) + playerListButton.Parent = smallHeaderFrame + + playerListButton = Instance.new("ImageButton") + playerListButton.Name = "CloseButton" + playerListButton.BackgroundTransparency = 1 + playerListButton.Image = "rbxasset://textures/ui/playerlist_small_hide.png" + playerListButton.Size = UDim2.new(0.0, 38, 0, 29) + playerListButton.Position = UDim2.new(0, 35, 0, 0) + playerListButton.MouseButton1Click:connect( + function() + transitionWindowsFunction("None") + end) + playerListButton.Parent = smallHeaderFrame + + playerListButton = Instance.new("ImageButton") + playerListButton.Name = "CloseButton" + playerListButton.Image = "rbxasset://textures/ui/playerlist_big_hide.png" + playerListButton.BackgroundTransparency = 1 + playerListButton.Size = UDim2.new(0.0, 29, 0, 29) + playerListButton.Position = UDim2.new(1, -30, 0.5, -13) + playerListButton.MouseButton1Click:connect( + function() + toggleBigWindow() + end) + playerListButton.Parent = bigHeaderFrame + + local placeName = Instance.new("TextButton") + placeName.Name = "PlaceName" + placeName.Text = " Players (" .. tostring(updatePlayerCount()) .. ")" + placeName.AutoButtonColor = false + placeName.FontSize = Enum.FontSize.Size24 + placeName.TextXAlignment = Enum.TextXAlignment.Left + placeName.Font = Enum.Font.ArialBold + placeName.BorderSizePixel = 0 + placeName.BackgroundColor3 = Color3.new(0,0,0) + placeName.BackgroundTransparency = 1 + placeName.TextColor3 = Color3.new(1,1,1) + placeName.Size = UDim2.new(0.4, 0, 1, 0) + placeName.Position = UDim2.new(0, 0, 0.0, 0) + placeName = RbxGui.AutoTruncateTextObject(placeName) + placeName.Parent = bigHeaderFrame + + placeName.MouseEnter:connect(function() + placeName.BackgroundTransparency = 0.2 + end) + + placeName.MouseLeave:connect(function() + placeName.BackgroundTransparency = 1 + end) + + placeName.MouseButton1Click:connect(function() + sortPlayerListsFunction() + end) + + currentBoardType = boardType + currentStatCount = numStatColumns + local isTeam, isScore = getBoardTypeInfo() + local players = getPlayers() + + if isScore then + local statColumns = getStatColumns(players) + numStatColumns = #statColumns + if numStatColumns > 3 then + numStatColumns = 3 + end + createStatHeaders(statColumns, numStatColumns, false).Parent = smallHeaderFrame + createStatHeaders(statColumns, currentStatCount, true).Parent = bigHeaderFrame + end + + --Clean up all old stuff + resetPlayerTable() + updatePlayerCount() + + for i, player in ipairs(players) do + local playerObject = buildPlayerObject(player, numStatColumns, "Small") + table.insert(scrollOrderSmall, playerObject) + playerObject.Parent = scrollFrameSmall + + playerObject = buildPlayerObject(player, currentStatCount, "Big") + table.insert(scrollOrderBig, playerObject) + playerObject.Parent = scrollFrameBig + end + + --Clean up old stuff + resetTeamTable() + + local teamStatObjects = {} + if isTeam then + local teams = getTeams() + local i = #teams + while i >= 1 do + --We go backwards so the "first" team color gets the team + local team = teams[i] + teamColorTable[team.TeamColor.Name] = team + i = i - 1 + end + + --Adding/Removing a Team causes a full invalidation of the board + for i, team in ipairs(teams) do + local teamObject = buildTeamObject(team, numStatColumns, "Small") + table.insert(scrollOrderSmall, teamObject) + teamObject.Parent = scrollFrameSmall + + teamObject = buildTeamObject(team, currentStatCount, "Big") + table.insert(scrollOrderBig, teamObject) + teamObject.Parent = scrollFrameBig + end + + teamTable["Neutral"] = {} + teamTable["Neutral"].Players = {} + + local neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) + teamTable["Neutral"].NameObjectSmall = neutralTeamObject + teamTable["Neutral"].StatObjectSmall = nil + teamTable["Neutral"].MainObjectSmall = neutralTeamObject + table.insert(scrollOrderSmall, neutralTeamObject) + + neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) + teamTable["Neutral"].NameObjectBig = neutralTeamObject + teamTable["Neutral"].StatObjectBig = nil + teamTable["Neutral"].MainObjectBig = neutralTeamObject + table.insert(scrollOrderBig, neutralTeamObject) + + local neutralPlayers = {} + for i, player in ipairs(players) do + assignToTeam(player) + end + end + + removePlayerFunction = function(player) + if playerTable[player] then + clearTableEntry(player, playerTable[player]) + + placeName.Text = " Players (" .. tostring(updatePlayerCount()) .. ")" + + ArrayRemove(scrollOrderSmall, playerTable[player].MainObjectSmall) + ArrayRemove(scrollOrderBig, playerTable[player].MainObjectBig) + + playerTable[player] = nil + recalculateSmallPlayerListSize(smallFrame) + end + end + recreatePlayerFunction = function(player) + placeName.Text = " Players (" .. tostring(updatePlayerCount()) .. ")" + + removePlayerFunction(player) + + local playerObject = buildPlayerObject(player, numStatColumns, "Small") + table.insert(scrollOrderSmall, playerObject) + robloxLock(playerObject) + playerObject.Parent = scrollFrameSmall + + playerObject = buildPlayerObject(player, currentStatCount, "Big") + table.insert(scrollOrderBig, playerObject) + robloxLock(playerObject) + playerObject.Parent = scrollFrameBig + + local isTeam, isScore = getBoardTypeInfo() + if isTeam then + assignToTeam(player) + end + + sortPlayerListsFunction() + recalculateSmallPlayerListSize(smallFrame) + end + + if screenResizeCon then screenResizeCon:disconnect() end + screenResizeCon = screen.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + wait() + recalculateSmallPlayerListSize(smallFrame) + end + end) + + sortPlayerListsFunction = function(sortType, ascending) + orderScrollList(scrollOrderSmall, "MainObjectSmall", scrollFrameSmall, sortType, ascending) + recalculateScrollSmall() + createAlternatingRows(scrollOrderSmall) + + orderScrollList(scrollOrderBig, "MainObjectBig", scrollFrameBig, sortType, ascending) + recalculateScrollBig() + createAlternatingRows(scrollOrderBig) + end + + sortPlayerListsFunction() + + robloxLock(smallFrame) + robloxLock(bigFrame) + return smallFrame, bigFrame + end + + --Teams changing invalidates the whole board + local function teamsChanged() + if debounceTeamsChanged then + return + end + + debounceTeamsChanged = true + wait() + rebuildBoard(script.Parent, determineBoardType()) + debounceTeamsChanged = false + end + + + local checkIfBoardChanged = function() + local newBoardType, numStats = determineBoardType() + if newBoardType ~= currentBoardType or numStats ~= currentStatCount then + rebuildBoard(script.Parent, newBoardType, numStats) + end + end + + local function buildPlayerList() + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local teams = game:GetService("Teams") + if teams then + local teamConnections = {} + + teams.ChildAdded:connect( + function(child) + if child:IsA("Team") then + teamsChanged() + teamConnections[child] = child.Changed:connect( + function(prop) + if prop == "TeamColor" or prop == "Name" then + --Rebuild when things change + teamsChanged() + end + end) + end + end) + teams.ChildRemoved:connect( + function(child) + if child:IsA("Team") then + if teamConnections[child] then + teamConnections[child]:disconnect() + teamConnections[child] = nil + end + teamsChanged() + end + end) + end + + game.Players.ChildAdded:connect( + function(player) + if player:IsA("Player") then + addPlayerFunction(player) + end + end) + + game.Players.ChildRemoved:connect( + function(player) + if player:IsA("Player") then + if removePlayerFunction then + removePlayerFunction(player) + end + end + end) + + rebuildBoard(script.Parent, determineBoardType()) + game.GuiService.ShowLegacyPlayerList = false + + game.GuiService:AddKey("\t") + local lastTime = nil + game.GuiService.KeyPressed:connect( + function(key) + if key == "\t" then + local modalCheck, isModal = pcall(function() return game.GuiService.IsModalDialog end) + if modalCheck == false or (modalCheck and isModal == false) then + local currentTime = time() + if lastTime == nil or currentTime - lastTime > 0.4 then + lastTime = currentTime + toggleBigWindow() + end + end + end + end) + + delay(0, + function() + while true do + wait(5) + checkIfBoardChanged() + end + end) + end + + if game.CoreGui.Version >= 2 then + buildPlayerList() + end +end + +if not personalServerPlace then -- one more backup check + local theBool = game.Workspace:FindFirstChild("PSVariable") + if theBool and theBool:IsA("BoolValue") then + personalServerPlace = true + end +end + +if personalServerPlace then + addPersonalServerContext() + setupBuildToolManagement() +else + local psVarCon = nil + psVarCon = game.Workspace.ChildAdded:connect(function(child) + if child:IsA("BoolValue") and child.Name == "PSVariable" then + psVarCon:disconnect() + personalServerPlace = true + addPersonalServerContext() + setupBuildToolManagement() + end + end) +end + + +---------------------------------- Start Player Hover Code ---------------------------------------- +if contextMenu3d then + local inMenu = false + + function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end + end + + function makeNewActionButton() + local button = Instance.new("TextButton") + button.Name = "ActionButton" + button.Style = Enum.ButtonStyle.RobloxButtonDefault + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderColor3 = Color3.new(1,0,0) + button.BackgroundTransparency = 0.5 + button.Size = UDim2.new(1,0,0,50) + button.Text = "" + button.Font = Enum.Font.ArialBold + button.FontSize = Enum.FontSize.Size18 + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 4 + return button + end + + function getContextElements(currentContextMenuPlayer) + local elements = {} + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + + local isVisible = false + + if contextElement.IsVisible then + local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end) + if success then + isVisible = visible + else + print("Error in IsVisible call: " .. visible) + end + end + + if element.Type == "Button" then + local button = makeNewActionButton() + button.Name = "ContextButton" .. i + button.Visible = isVisible + button.Text = contextElement.Text + button.MouseButton1Click:connect(function() + if button.Active then + local success, result = pcall(function() element.DoIt(currentContextMenuPlayer) end) + end + end) + + contextElement.Button = button + contextElement.Element = button + + table.insert(elements,contextElement) + end + end + + return elements + end + + function findContextElement(contextElements, button) + for i = 1, #contextElements do + if contextElements[i].Button == button then + return contextElements[i] + end + end + end + + function populateActions(scrollFrame, nullFrame, recalcFunction, otherPlayer) + local elements = getContextElements(otherPlayer) + for i = 1, #elements do + if elements[i].Button.Visible then + elements[i].Button.Parent = scrollFrame + else + elements[i].Button.Parent = nullFrame + end + + local actionButtonCon + actionButtonCon = elements[i].Button.MouseButton1Click:connect(function() + actionButtonCon:disconnect() + + local nullFrameChildren = nullFrame:GetChildren() + for j = 1, #nullFrameChildren do + local contextElement = findContextElement(elements, nullFrameChildren[j]) + pcall(function() nullFrameChildren[j].Visible = contextElement.IsVisible(otherPlayer) end) + if nullFrameChildren[j].Visible then + nullFrameChildren[j].Parent = scrollFrame + end + end + + local scrollFrameChildren = scrollFrame:GetChildren() + for j = 1, #scrollFrameChildren do + local contextElement = findContextElement(elements, scrollFrameChildren[j]) + pcall(function() scrollFrameChildren[j].Visible = contextElement.IsVisible(otherPlayer) end) + if not scrollFrameChildren[j].Visible then + scrollFrameChildren[j].Parent = nullFrame + end + end + + elements[i].Button.Parent = nullFrame + recalcFunction() + end) + end + end + + + function createContextMenu(otherPlayer) + + local frame = Instance.new("Frame") + frame.Name = "ContextMenuFrame" + frame.Style = Enum.FrameStyle.RobloxRound + frame.Size = UDim2.new(0,300,0,400) + frame.Position = UDim2.new(0.5,-150,0.5,-200) + frame.ZIndex = 2 + + local scrollFrame, scrollUpButton, scrollDownButton, recalc, scrollBar = RbxGui.CreateScrollingFrame() + + scrollFrame.Name = "Actions" + scrollFrame.BackgroundTransparency = 1 + scrollFrame.Position = UDim2.new(0,0,0,25) + scrollFrame.Size = UDim2.new(1,-20,1,-80) + scrollFrame.ZIndex = 3 + scrollFrame.Parent = frame + + local nullFrame = Instance.new("Frame") + nullFrame.Name = "NullFrame" + nullFrame.BackgroundTransparency = 1 + nullFrame.Visible = false + nullFrame.Parent = frame + + local scrollButtons = Instance.new("Frame") + scrollButtons.Name = "ScrollButtons" + scrollButtons.BackgroundTransparency = 1 + scrollButtons.Position = UDim2.new(1,-17,0,25) + scrollButtons.Size = UDim2.new(0,17,1,-80) + scrollButtons.ZIndex = 3 + scrollButtons.Parent = frame + + scrollUpButton.ZIndex = 3 + scrollUpButton.Parent = scrollButtons + scrollDownButton.Position = UDim2.new(0,0,1,-17) + scrollDownButton.ZIndex = 3 + scrollDownButton.Parent = scrollButtons + + scrollBar.Size = UDim2.new(1,0,1,-34) + scrollBar.Position = UDim2.new(0,0,0,17) + scrollBar.Parent = scrollButtons + + local playerImage = Instance.new("ImageLabel") + playerImage.Name = "PlayerImage" + playerImage.BackgroundTransparency = 1 + playerImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(otherPlayer.userId) .. "&x=352&y=352" + playerImage.Position = UDim2.new(0.5,-150,0.5,-150) + playerImage.Size = UDim2.new(0,300,0,300) + playerImage.Parent = frame + + local playerName = Instance.new("TextLabel") + playerName.Name = "PlayerName" + playerName.BackgroundTransparency = 1 + playerName.Font = Enum.Font.ArialBold + playerName.FontSize = Enum.FontSize.Size24 + playerName.Position = UDim2.new(0,-8,0,-6) + playerName.Size = UDim2.new(1,16,0,24) + playerName.Text = otherPlayer["Name"] + playerName.TextColor3 = Color3.new(1,1,1) + playerName.TextWrap = true + playerName.ZIndex = 3 + playerName.Parent = frame + + local doneButtonCon + + local doneButton = Instance.new("TextButton") + doneButton.Name = "DoneButton" + doneButton.Style = Enum.ButtonStyle.RobloxButton + doneButton.Font = Enum.Font.ArialBold + doneButton.FontSize = Enum.FontSize.Size36 + doneButton.Position = UDim2.new(0.25,0,1,-50) + doneButton.Size = UDim2.new(0.5,0,0,50) + doneButton.Text = "Done" + doneButton.TextColor3 = Color3.new(1,1,1) + doneButton.ZIndex = 3 + doneButton.Parent = frame + doneButton.Modal = true + doneButtonCon = doneButton.MouseButton1Click:connect(function() + doneButtonCon:disconnect() + inMenu = false + game.GuiService:RemoveCenterDialog(frame) + frame:remove() + end) + + populateActions(scrollFrame, nullFrame, recalc, otherPlayer) + recalc() + + return frame + end + + function makeContextInvisible(menu) + menu.Visible = false + end + + function goToContextMenu(otherPlayer) + + local menu = createContextMenu(otherPlayer) + + game.GuiService:AddCenterDialog(menu, Enum.CenterDialogType.PlayerInitiatedDialog, + --ShowFunction + function() + menu.Visible = true + menu:TweenSize(UDim2.new(0,300,0,400),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) + end, + --HideFunction + function() + menu:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true,function() makeContextInvisible(menu) end) + end) + menu.Parent = game.CoreGui.RobloxGui + + inMenu = true + end + + waitForProperty(game.Players, "LocalPlayer") + + local currSelectedPlayer = nil + if game.Players.LocalPlayer["HoverOnPlayerChanged"] then + game.Players.LocalPlayer.HoverOnPlayerChanged:connect(function(otherPlayer) + if not inMenu then + if otherPlayer and otherPlayer.userId < 0 then return end -- we don't want this for guests + end + wait(0.5) + currSelectedPlayer = otherPlayer + end) + end + + if game.Players.LocalPlayer["MouseDownOnPlayer"] then + game.Players.LocalPlayer.MouseDownOnPlayer:connect(function(otherPlayer) + if currSelectedPlayer ~= otherPlayer then return end + if not inMenu and otherPlayer.userId > 0 then + goToContextMenu(otherPlayer) + end + end) + end +end +---------------------------------- End Player Hover Code ---------------------------------------- \ No newline at end of file diff --git a/app/files/CoreGui/48488398 b/app/files/CoreGui/48488398 new file mode 100644 index 0000000..df9e0b6 --- /dev/null +++ b/app/files/CoreGui/48488398 @@ -0,0 +1,306 @@ +function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForProperty(game.Players,"LocalPlayer") +waitForChild(script.Parent,"Popup") +waitForChild(script.Parent.Popup,"AcceptButton") +script.Parent.Popup.AcceptButton.Modal = true + +local localPlayer = game.Players.LocalPlayer +local teleportUI = nil + +local acceptedTeleport = Instance.new("IntValue") + +local friendRequestBlacklist = {} + +local teleportEnabled = true + +local makePopupInvisible = function() + if script.Parent.Popup then script.Parent.Popup.Visible = false end +end + +function makeFriend(fromPlayer,toPlayer) + + local popup = script.Parent:FindFirstChild("Popup") + if popup == nil then return end -- there is no popup! + if popup.Visible then return end -- currently popping something, abort! + if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! + + popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?" + popup.PopupImage.Image = "http://www.nexium.fit/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=352&y=352" + + showTwoButtons() + popup.Visible = true + popup.AcceptButton.Text = "Accept" + popup.DeclineButton.Text = "Decline" + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + + local yesCon, noCon + + yesCon = popup.AcceptButton.MouseButton1Click:connect(function() + popup.Visible = false + toPlayer:RequestFriendship(fromPlayer) + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + + noCon = popup.DeclineButton.MouseButton1Click:connect(function() + popup.Visible = false + toPlayer:RevokeFriendship(fromPlayer) + friendRequestBlacklist[fromPlayer] = true + print("pop up blacklist") + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) +end + + +game.Players.FriendRequestEvent:connect(function(fromPlayer,toPlayer,event) + + -- if this doesn't involve me, then do nothing + if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then return end + + if fromPlayer == localPlayer then + if event == Enum.FriendRequestEvent.Accept then + game:GetService("GuiService"):SendNotification("You are Friends", + "With " .. toPlayer.Name .. "!", + "http://www.nexium.fit/thumbs/avatar.ashx?userId="..tostring(toPlayer.userId).."&x=48&y=48", + 5, + function() + + end) + end + elseif toPlayer == localPlayer then + if event == Enum.FriendRequestEvent.Issue then + if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! + game:GetService("GuiService"):SendNotification("Friend Request", + "From " .. fromPlayer.Name, + "http://www.nexium.fit/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", + 8, + function() + makeFriend(fromPlayer,toPlayer) + end) + elseif event == Enum.FriendRequestEvent.Accept then + game:GetService("GuiService"):SendNotification("You are Friends", + "With " .. fromPlayer.Name .. "!", + "http://www.nexium.fit/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", + 5, + function() + + end) + end + end +end) + +function showOneButton() + local popup = script.Parent:FindFirstChild("Popup") + if popup then + popup.OKButton.Visible = true + popup.DeclineButton.Visible = false + popup.AcceptButton.Visible = false + end +end + +function showTwoButtons() + local popup = script.Parent:FindFirstChild("Popup") + if popup then + popup.OKButton.Visible = false + popup.DeclineButton.Visible = true + popup.AcceptButton.Visible = true + end +end + +function onTeleport(teleportState, placeId, spawnName) + if game:GetService("TeleportService").CustomizedTeleportUI == false then + if teleportState == Enum.TeleportState.Started then + showTeleportUI("Teleport started...", 0) + elseif teleportState == Enum.TeleportState.WaitingForServer then + showTeleportUI("Requesting server...", 0) + elseif teleportState == Enum.TeleportState.InProgress then + showTeleportUI("Teleporting...", 0) + elseif teleportState == Enum.TeleportState.Failed then + showTeleportUI("Teleport failed. Insufficient privileges or target place does not exist.", 3) + end + end +end + +function showTeleportUI(message, timer) + if teleportUI ~= nil then + teleportUI:Remove() + end + waitForChild(localPlayer, "PlayerGui") + teleportUI = Instance.new("Message", localPlayer.PlayerGui) + teleportUI.Text = message + if timer > 0 then + wait(timer) + teleportUI:Remove() + end +end + +if teleportEnabled then + + localPlayer.OnTeleport:connect(onTeleport) + + game:GetService("TeleportService").ErrorCallback = function(message) + local popup = script.Parent:FindFirstChild("Popup") + showOneButton() + popup.PopupText.Text = message + local clickCon + clickCon = popup.OKButton.MouseButton1Click:connect(function() + game:GetService("TeleportService"):TeleportCancel() + if clickCon then clickCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + showOneButton() + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + --HideFunction + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + + end + game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName) + local popup = script.Parent:FindFirstChild("Popup") + popup.PopupText.Text = message + popup.PopupImage.Image = "" + + local yesCon, noCon + + local function killCons() + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end + + yesCon = popup.AcceptButton.MouseButton1Click:connect(function() + killCons() + local success, err = pcall(function() game:GetService("TeleportService"):TeleportImpl(placeId,spawnName) end) + if not success then + showOneButton() + popup.PopupText.Text = err + local clickCon + clickCon = popup.OKButton.MouseButton1Click:connect(function() + if clickCon then clickCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + showOneButton() + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + --HideFunction + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + end + end) + + noCon = popup.DeclineButton.MouseButton1Click:connect(function() + killCons() + local success = pcall(function() game:GetService("TeleportService"):TeleportCancel() end) + end) + + local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + showTwoButtons() + popup.AcceptButton.Text = "Leave" + popup.DeclineButton.Text = "Stay" + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + --HideFunction + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + end) + + if centerDialogSuccess == false then + script.Parent:FindFirstChild("Popup").Visible = true + popup.AcceptButton.Text = "Leave" + popup.DeclineButton.Text = "Stay" + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end + return true + + end +end + +game:GetService("MarketplaceService").ClientLuaDialogRequested:connect(function(message, accept, decline) + local popup = script.Parent:FindFirstChild("Popup") + popup.PopupText.Text = message + popup.PopupImage.Image = "" + + local yesCon, noCon + + local function killCons() + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end + + yesCon = popup.AcceptButton.MouseButton1Click:connect(function() + killCons() + game:GetService("MarketplaceService"):SignalServerLuaDialogClosed(true); + end) + + noCon = popup.DeclineButton.MouseButton1Click:connect(function() + killCons() + game:GetService("MarketplaceService"):SignalServerLuaDialogClosed(false); + end) + + local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + function() + showTwoButtons() + popup.AcceptButton.Text = accept + popup.DeclineButton.Text = decline + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + end) + + if centerDialogSuccess == false then + script.Parent:FindFirstChild("Popup").Visible = true + popup.AcceptButton.Text = accept + popup.DeclineButton.Text = decline + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end + + return true + +end) + +Game:GetService("PointsService").PointsAwarded:connect( function(userId, pointsAwarded, userBalanceInGame, userTotalBalance) + if userId == Game.Players.LocalPlayer.userId then + game:GetService("GuiService"):SendNotification("Points Awarded!", + "You received " ..tostring(pointsAwarded) .. " points!", + "http://www.nexium.fit/asset?id=155363793", + 5, + function() + end) + end +end) diff --git a/app/files/CoreGui/48488451 b/app/files/CoreGui/48488451 new file mode 100644 index 0000000..19f76a9 --- /dev/null +++ b/app/files/CoreGui/48488451 @@ -0,0 +1,72 @@ +--build our gui + +local popupFrame = Instance.new("Frame") +popupFrame.Position = UDim2.new(0.5,-165,0.5,-175) +popupFrame.Size = UDim2.new(0,330,0,350) +popupFrame.Style = Enum.FrameStyle.RobloxRound +popupFrame.ZIndex = 4 +popupFrame.Name = "Popup" +popupFrame.Visible = false +popupFrame.Parent = script.Parent + +local darken = popupFrame:clone() +darken.Size = UDim2.new(1,16,1,16) +darken.Position = UDim2.new(0,-8,0,-8) +darken.Name = "Darken" +darken.ZIndex = 1 +darken.Parent = popupFrame + +local acceptButton = Instance.new("TextButton") +acceptButton.Position = UDim2.new(0,20,0,270) +acceptButton.Size = UDim2.new(0,100,0,50) +acceptButton.Font = Enum.Font.ArialBold +acceptButton.FontSize = Enum.FontSize.Size24 +acceptButton.Style = Enum.ButtonStyle.RobloxButton +acceptButton.TextColor3 = Color3.new(248/255,248/255,248/255) +acceptButton.Text = "Yes" +acceptButton.ZIndex = 5 +acceptButton.Name = "AcceptButton" +acceptButton.Parent = popupFrame + +local declineButton = acceptButton:clone() +declineButton.Position = UDim2.new(1,-120,0,270) +declineButton.Text = "No" +declineButton.Name = "DeclineButton" +declineButton.Parent = popupFrame + +local okButton = acceptButton:clone() +okButton.Name = "OKButton" +okButton.Text = "OK" +okButton.Position = UDim2.new(0.5,-50,0,270) +okButton.Visible = false +okButton.Parent = popupFrame + +local popupImage = Instance.new("ImageLabel") +popupImage.BackgroundTransparency = 1 +popupImage.Position = UDim2.new(0.5,-140,0,0) +popupImage.Size = UDim2.new(0,280,0,280) +popupImage.ZIndex = 3 +popupImage.Name = "PopupImage" +popupImage.Parent = popupFrame + +local backing = Instance.new("ImageLabel") +backing.BackgroundTransparency = 1 +backing.Size = UDim2.new(1,0,1,0) +backing.Image = "http://www.nexium.fit/asset/?id=47574181" +backing.Name = "Backing" +backing.ZIndex = 2 +backing.Parent = popupImage + +local popupText = Instance.new("TextLabel") +popupText.Name = "PopupText" +popupText.Size = UDim2.new(1,0,0.8,0) +popupText.Font = Enum.Font.ArialBold +popupText.FontSize = Enum.FontSize.Size36 +popupText.BackgroundTransparency = 1 +popupText.Text = "Hello I'm a popup" +popupText.TextColor3 = Color3.new(248/255,248/255,248/255) +popupText.TextWrap = true +popupText.ZIndex = 5 +popupText.Parent = popupFrame + +script:remove() \ No newline at end of file diff --git a/app/files/CoreGui/53878047 b/app/files/CoreGui/53878047 new file mode 100644 index 0000000..94bb130 --- /dev/null +++ b/app/files/CoreGui/53878047 @@ -0,0 +1,874 @@ +-- This script creates almost all gui elements found in the backpack (warning: there are a lot!) +-- TODO: automate this process + +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +local gui = script.Parent + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +local function IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) + return touchEnabled +end + +local function IsPhone() + if gui.AbsoluteSize.Y <= 320 then + return true + end + return false +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +-- First up is the current loadout +local CurrentLoadout = Instance.new("Frame") +CurrentLoadout.Name = "CurrentLoadout" +CurrentLoadout.Position = UDim2.new(0.5, -300, 1, -85) +CurrentLoadout.Size = UDim2.new(0, 600, 0, 54) +CurrentLoadout.BackgroundTransparency = 1 +CurrentLoadout.RobloxLocked = true +CurrentLoadout.Parent = gui + +local CLBackground = Instance.new('ImageLabel') +CLBackground.Name = 'Background'; +CLBackground.Size = UDim2.new(1.2, 0, 1.2, 0); +CLBackground.Image = "http://www.nexium.fit/asset/?id=96536002" +CLBackground.BackgroundTransparency = 1.0; +CLBackground.Position = UDim2.new(-0.1, 0, -0.1, 0); +CLBackground.ZIndex = 0.0; +CLBackground.Parent = CurrentLoadout +CLBackground.Visible = false + +local BackgroundUp = Instance.new('ImageLabel') +BackgroundUp.Size = UDim2.new(1, 0, 0.025, 1) +BackgroundUp.Position = UDim2.new(0, 0, 0, 0) +BackgroundUp.Image = 'http://www.nexium.fit/asset/?id=97662207' +BackgroundUp.BackgroundTransparency = 1.0 +BackgroundUp.Parent = CLBackground + +local Debounce = Instance.new("BoolValue") +Debounce.Name = "Debounce" +Debounce.RobloxLocked = true +Debounce.Parent = CurrentLoadout + +local BackpackButton = Instance.new("ImageButton") +BackpackButton.RobloxLocked = true +BackpackButton.Visible = false +BackpackButton.Name = "BackpackButton" +BackpackButton.BackgroundTransparency = 1 +BackpackButton.Image = "http://www.nexium.fit/asset/?id=97617958" +BackpackButton.Position = UDim2.new(0.5, -60, 1, -108) +BackpackButton.Size = UDim2.new(0, 120, 0, 18) +waitForChild(gui,"ControlFrame") +BackpackButton.Parent = gui.ControlFrame + +local NumSlots = 9 + +if IsPhone() then + NumSlots = 3 + CurrentLoadout.Size = UDim2.new(0,180,0,54) + CurrentLoadout.Position = UDim2.new(0.5,-90,1,-85) +end + +for i = 0, NumSlots do + local slotFrame = Instance.new("Frame") + slotFrame.RobloxLocked = true + slotFrame.BackgroundColor3 = Color3.new(0,0,0) + slotFrame.BackgroundTransparency = 1 + slotFrame.BorderColor3 = Color3.new(1, 1, 1) + slotFrame.Name = "Slot" .. tostring(i) + slotFrame.ZIndex = 4.0 + if i == 0 then + slotFrame.Position = UDim2.new(0.9, 0, 0, 0) + else + slotFrame.Position = UDim2.new((i - 1) * 0.1, (i-1)* 6,0,0) + end + + + slotFrame.Size = UDim2.new(0, 54, 1, 0) + slotFrame.Parent = CurrentLoadout + + if gui.AbsoluteSize.Y <= 320 then + slotFrame.Position = UDim2.new(0, (i-1)* 60, 0, -50) + print('Well got here', slotFrame, slotFrame.Position.X.Scale, slotFrame.Position.X.Offset) + end + if gui.AbsoluteSize.Y <= 320 and i == 0 then + slotFrame:Destroy() + end +end + +local TempSlot = Instance.new("ImageButton") +TempSlot.Name = "TempSlot" +TempSlot.Active = true +TempSlot.Size = UDim2.new(1,0,1,0) +TempSlot.BackgroundTransparency = 1.0 +TempSlot.Style = 'Custom' +TempSlot.Visible = false +TempSlot.RobloxLocked = true +TempSlot.Parent = CurrentLoadout +TempSlot.ZIndex = 3.0 + + local slotBackground = Instance.new('ImageLabel') + slotBackground.Name = 'Background' + slotBackground.BackgroundTransparency = 1.0 + slotBackground.Image = 'http://www.nexium.fit/asset/?id=97613075' + slotBackground.Size = UDim2.new(1, 0, 1, 0) + slotBackground.Parent = TempSlot + + local HighLight = Instance.new('ImageLabel') + HighLight.Name = 'Highlight' + HighLight.BackgroundTransparency = 1.0 + HighLight.Image = 'http://www.nexium.fit/asset/?id=97643886' + HighLight.Size = UDim2.new(1, 0, 1, 0) + --HighLight.Parent = TempSlot + HighLight.Visible = false + + -- TempSlot Children + local GearReference = Instance.new("ObjectValue") + GearReference.Name = "GearReference" + GearReference.RobloxLocked = true + GearReference.Parent = TempSlot + + + local ToolTipLabel = Instance.new("TextLabel") + ToolTipLabel.Name = "ToolTipLabel" + ToolTipLabel.RobloxLocked = true + ToolTipLabel.Text = "" + ToolTipLabel.BackgroundTransparency = 0.5 + ToolTipLabel.BorderSizePixel = 0 + ToolTipLabel.Visible = false + ToolTipLabel.TextColor3 = Color3.new(1,1,1) + ToolTipLabel.BackgroundColor3 = Color3.new(0,0,0) + ToolTipLabel.TextStrokeTransparency = 0 + ToolTipLabel.Font = Enum.Font.ArialBold + ToolTipLabel.FontSize = Enum.FontSize.Size14 + --ToolTipLabel.TextWrap = true + ToolTipLabel.Size = UDim2.new(1,60,0,20) + ToolTipLabel.Position = UDim2.new(0,-30,0,-30) + ToolTipLabel.Parent = TempSlot + + + local Kill = Instance.new("BoolValue") + Kill.Name = "Kill" + Kill.RobloxLocked = true + Kill.Parent = TempSlot + + local GearImage = Instance.new("ImageLabel") + GearImage.Name = "GearImage" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0, 0, 0, 0) + GearImage.Size = UDim2.new(1, 0, 1, 0) + GearImage.ZIndex = 5.0 + GearImage.RobloxLocked = true + GearImage.Parent = TempSlot + + local SlotNumber = Instance.new("TextLabel") + SlotNumber.Name = "SlotNumber" + SlotNumber.BackgroundTransparency = 1 + SlotNumber.BorderSizePixel = 0 + SlotNumber.Font = Enum.Font.ArialBold + SlotNumber.FontSize = Enum.FontSize.Size18 + SlotNumber.Position = UDim2.new(0, 0, 0, 0) + SlotNumber.Size = UDim2.new(0,10,0,15) + SlotNumber.TextColor3 = Color3.new(1,1,1) + SlotNumber.TextTransparency = 0 + SlotNumber.TextXAlignment = Enum.TextXAlignment.Left + SlotNumber.TextYAlignment = Enum.TextYAlignment.Bottom + SlotNumber.RobloxLocked = true + SlotNumber.Parent = TempSlot + SlotNumber.ZIndex = 5 + + if IsTouchDevice() then + SlotNumber.Visible = false + end + + local SlotNumberDownShadow = SlotNumber:Clone() + SlotNumberDownShadow.Name = "SlotNumberDownShadow" + SlotNumberDownShadow.TextColor3 = Color3.new(0,0,0) + SlotNumberDownShadow.Position = UDim2.new(0, 1, 0, -1) + SlotNumberDownShadow.Parent = TempSlot + SlotNumberDownShadow.ZIndex = 2 + + local SlotNumberUpShadow = SlotNumberDownShadow:Clone() + SlotNumberUpShadow.Name = "SlotNumberUpShadow" + SlotNumberUpShadow.Position = UDim2.new(0, -1, 0, -1) + SlotNumberUpShadow.Parent = TempSlot + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = TempSlot + GearText.ZIndex = 5.0 + +--- Great, now lets make the inventory! + +local Backpack = Instance.new("Frame") +Backpack.RobloxLocked = true +Backpack.Visible = false +Backpack.Name = "Backpack" +Backpack.Position = UDim2.new(0.5, 0, 0.5, 0) +Backpack.BackgroundColor3 = Color3.new(32/255, 32/255, 32/255) +Backpack.BackgroundTransparency = 0.0 +Backpack.BorderSizePixel = 0 +Backpack.Parent = gui +Backpack.Active = true + + -- Backpack Children + local SwapSlot = Instance.new("BoolValue") + SwapSlot.RobloxLocked = true + SwapSlot.Name = "SwapSlot" + SwapSlot.Parent = Backpack + + -- SwapSlot Children + local Slot = Instance.new("IntValue") + Slot.RobloxLocked = true + Slot.Name = "Slot" + Slot.Parent = SwapSlot + + local GearButton = Instance.new("ObjectValue") + GearButton.RobloxLocked = true + GearButton.Name = "GearButton" + GearButton.Parent = SwapSlot + + local Tabs = Instance.new("Frame") + Tabs.Name = "Tabs" + Tabs.Visible = false + Tabs.Active = false + Tabs.RobloxLocked = true + Tabs.BackgroundColor3 = Color3.new(0,0,0) + Tabs.BackgroundTransparency = 0.08 + Tabs.BorderSizePixel = 0 + Tabs.Position = UDim2.new(0,0,-0.1,-4) + Tabs.Size = UDim2.new(1,0,0.1,4) + Tabs.Parent = Backpack + + -- Tabs Children + + local tabLine = Instance.new("Frame") + tabLine.RobloxLocked = true + tabLine.Name = "TabLine" + tabLine.BackgroundColor3 = Color3.new(53/255, 53/255, 53/255) + tabLine.BorderSizePixel = 0 + tabLine.Position = UDim2.new(0,5,1,-4) + tabLine.Size = UDim2.new(1,-10,0,4) + tabLine.ZIndex = 2 + tabLine.Parent = Tabs + + local InventoryButton = Instance.new("TextButton") + InventoryButton.RobloxLocked = true + InventoryButton.Name = "InventoryButton" + InventoryButton.Size = UDim2.new(0,60,0,30) + InventoryButton.Position = UDim2.new(0,7,1,-31) + InventoryButton.BackgroundColor3 = Color3.new(1,1,1) + InventoryButton.BorderColor3 = Color3.new(1,1,1) + InventoryButton.Font = Enum.Font.ArialBold + InventoryButton.FontSize = Enum.FontSize.Size18 + InventoryButton.Text = "Gear" + InventoryButton.AutoButtonColor = false + InventoryButton.TextColor3 = Color3.new(0,0,0) + InventoryButton.Selected = true + InventoryButton.Active = true + InventoryButton.ZIndex = 3 + InventoryButton.Parent = Tabs + + if game.CoreGui.Version >= 8 then + local WardrobeButton = Instance.new("TextButton") + WardrobeButton.RobloxLocked = true + WardrobeButton.Name = "WardrobeButton" + WardrobeButton.Size = UDim2.new(0,90,0,30) + WardrobeButton.Position = UDim2.new(0,77,1,-31) + WardrobeButton.BackgroundColor3 = Color3.new(0,0,0) + WardrobeButton.BorderColor3 = Color3.new(1,1,1) + WardrobeButton.Font = Enum.Font.ArialBold + WardrobeButton.FontSize = Enum.FontSize.Size18 + WardrobeButton.Text = "Wardrobe" + WardrobeButton.AutoButtonColor = false + WardrobeButton.TextColor3 = Color3.new(1,1,1) + WardrobeButton.Selected = false + WardrobeButton.Active = true + WardrobeButton.Parent = Tabs + end + + local closeButton = Instance.new("TextButton") + closeButton.RobloxLocked = true + closeButton.Name = "CloseButton" + closeButton.Font = Enum.Font.ArialBold + closeButton.FontSize = Enum.FontSize.Size24 + closeButton.Position = UDim2.new(1,-33,0,4) + closeButton.Size = UDim2.new(0,30,0,30) + closeButton.Style = Enum.ButtonStyle.RobloxButton + closeButton.Text = "" + closeButton.TextColor3 = Color3.new(1,1,1) + closeButton.Parent = Tabs + closeButton.Modal = true + + --closeButton child + local XImage = Instance.new("ImageLabel") + XImage.RobloxLocked = true + XImage.Name = "XImage" + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=75547445") + XImage.Image = "http://www.nexium.fit/asset/?id=75547445" --TODO: move to rbxasset + XImage.BackgroundTransparency = 1 + XImage.Position = UDim2.new(-.25,-1,-.25,-1) + XImage.Size = UDim2.new(1.5,2,1.5,2) + XImage.ZIndex = 2 + XImage.Parent = closeButton + + -- Generic Search gui used across backpack + local SearchFrame = Instance.new("Frame") + SearchFrame.RobloxLocked = true + SearchFrame.Name = "SearchFrame" + SearchFrame.BackgroundTransparency = 1 + SearchFrame.Position = UDim2.new(1,-220,0,2) + SearchFrame.Size = UDim2.new(0,220,0,24) + SearchFrame.Parent = Backpack + + -- SearchFrame Children + local SearchButton = Instance.new("ImageButton") + SearchButton.RobloxLocked = true + SearchButton.Name = "SearchButton" + SearchButton.Size = UDim2.new(0,25,0,25) + SearchButton.BackgroundTransparency = 1 + SearchButton.Image = "rbxasset://textures/ui/SearchIcon.png" + SearchButton.Parent = SearchFrame + + local SearchBoxFrame = Instance.new("TextButton") + SearchBoxFrame.RobloxLocked = true + SearchBoxFrame.Position = UDim2.new(0,25,0,0) + SearchBoxFrame.Size = UDim2.new(1,-28,0,26) + SearchBoxFrame.Name = "SearchBoxFrame" + SearchBoxFrame.Text = "" + SearchBoxFrame.Style = Enum.ButtonStyle.RobloxButton + SearchBoxFrame.Parent = SearchFrame + + -- SearchBoxFrame Children + local SearchBox = Instance.new("TextBox") + SearchBox.RobloxLocked = true + SearchBox.Name = "SearchBox" + SearchBox.BackgroundTransparency = 1 + SearchBox.Font = Enum.Font.ArialBold + SearchBox.FontSize = Enum.FontSize.Size12 + SearchBox.Position = UDim2.new(0,-5,0,-5) + SearchBox.Size = UDim2.new(1,10,1,10) + SearchBox.TextColor3 = Color3.new(1,1,1) + SearchBox.TextXAlignment = Enum.TextXAlignment.Left + SearchBox.ZIndex = 2 + SearchBox.TextWrap = true + SearchBox.Text = "Search..." + SearchBox.Parent = SearchBoxFrame + + + local ResetButton = Instance.new("TextButton") + ResetButton.RobloxLocked = true + ResetButton.Visible = false + ResetButton.Name = "ResetButton" + ResetButton.Position = UDim2.new(1,-26,0,3) + ResetButton.Size = UDim2.new(0,20,0,20) + ResetButton.Style = Enum.ButtonStyle.RobloxButtonDefault + ResetButton.Text = "X" + ResetButton.TextColor3 = Color3.new(1,1,1) + ResetButton.Font = Enum.Font.ArialBold + ResetButton.FontSize = Enum.FontSize.Size18 + ResetButton.ZIndex = 3 + ResetButton.Parent = SearchFrame + +------------------------------- GEAR ------------------------------------------------------- + local Gear = Instance.new("Frame") + Gear.Name = "Gear" + Gear.RobloxLocked = true + Gear.BackgroundTransparency = 1 + Gear.Size = UDim2.new(1,0,1,0) + Gear.ClipsDescendants = true + Gear.Parent = Backpack + + -- Gear Children + local AssetsList = Instance.new("Frame") + AssetsList.RobloxLocked = true + AssetsList.Name = "AssetsList" + AssetsList.BackgroundTransparency = 1 + AssetsList.Size = UDim2.new(0.2,0,1,0) + AssetsList.Style = Enum.FrameStyle.RobloxSquare + AssetsList.Visible = false + AssetsList.Parent = Gear + + local GearGrid = Instance.new("Frame") + GearGrid.RobloxLocked = true + GearGrid.Name = "GearGrid" + GearGrid.Size = UDim2.new(0.95, 0, 1, 0) + GearGrid.BackgroundTransparency = 1 + GearGrid.Parent = Gear + + + local GearButton = Instance.new("ImageButton") + GearButton.RobloxLocked = true + GearButton.Visible = false + GearButton.Name = "GearButton" + GearButton.Size = UDim2.new(0, 54, 0, 54) + GearButton.Style = 'Custom' + GearButton.Parent = GearGrid + GearButton.BackgroundTransparency = 1.0 + + local slotBackground = Instance.new('ImageLabel') + slotBackground.Name = 'Background' + slotBackground.BackgroundTransparency = 1.0 + slotBackground.Image = 'http://www.nexium.fit/asset/?id=97613075' + slotBackground.Size = UDim2.new(1, 0, 1, 0) + slotBackground.Parent = GearButton + + + -- GearButton Children + local GearReference = Instance.new("ObjectValue") + GearReference.RobloxLocked = true + GearReference.Name = "GearReference" + GearReference.Parent = GearButton + + local GreyOutButton = Instance.new("Frame") + GreyOutButton.RobloxLocked = true + GreyOutButton.Name = "GreyOutButton" + GreyOutButton.BackgroundTransparency = 0.5 + GreyOutButton.Size = UDim2.new(1,0,1,0) + GreyOutButton.Active = true + GreyOutButton.Visible = false + GreyOutButton.ZIndex = 3 + GreyOutButton.Parent = GearButton + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.ZIndex = 2 + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = GearButton + + local GearGridScrollingArea = Instance.new("Frame") + GearGridScrollingArea.RobloxLocked = true + GearGridScrollingArea.Name = "GearGridScrollingArea" + GearGridScrollingArea.Position = UDim2.new(1, -19, 0, 35) + GearGridScrollingArea.Size = UDim2.new(0, 17, 1, -45) + GearGridScrollingArea.BackgroundTransparency = 1 + GearGridScrollingArea.Parent = Gear + + local GearLoadouts = Instance.new("Frame") + GearLoadouts.RobloxLocked = true + GearLoadouts.Name = "GearLoadouts" + GearLoadouts.BackgroundTransparency = 1 + GearLoadouts.Position = UDim2.new(0.7,23,0.5,1) + GearLoadouts.Size = UDim2.new(0.3,-23,0.5,-1) + GearLoadouts.Parent = Gear + GearLoadouts.Visible = false + + -- GearLoadouts Children + local GearLoadoutsHeader = Instance.new("Frame") + GearLoadoutsHeader.RobloxLocked = true + GearLoadoutsHeader.Name = "GearLoadoutsHeader" + GearLoadoutsHeader.BackgroundColor3 = Color3.new(0,0,0) + GearLoadoutsHeader.BackgroundTransparency = 0.2 + GearLoadoutsHeader.BorderColor3 = Color3.new(1,0,0) + GearLoadoutsHeader.Size = UDim2.new(1,2,0.15,-1) + GearLoadoutsHeader.Parent = GearLoadouts + + -- GearLoadoutsHeader Children + local LoadoutsHeaderText = Instance.new("TextLabel") + LoadoutsHeaderText.RobloxLocked = true + LoadoutsHeaderText.Name = "LoadoutsHeaderText" + LoadoutsHeaderText.BackgroundTransparency = 1 + LoadoutsHeaderText.Font = Enum.Font.ArialBold + LoadoutsHeaderText.FontSize = Enum.FontSize.Size18 + LoadoutsHeaderText.Size = UDim2.new(1,0,1,0) + LoadoutsHeaderText.Text = "Loadouts" + LoadoutsHeaderText.TextColor3 = Color3.new(1,1,1) + LoadoutsHeaderText.Parent = GearLoadoutsHeader + + local GearLoadoutsScrollingArea = GearGridScrollingArea:clone() + GearLoadoutsScrollingArea.RobloxLocked = true + GearLoadoutsScrollingArea.Name = "GearLoadoutsScrollingArea" + GearLoadoutsScrollingArea.Position = UDim2.new(1,-15,0.15,2) + GearLoadoutsScrollingArea.Size = UDim2.new(0,17,0.85,-2) + GearLoadoutsScrollingArea.Parent = GearLoadouts + + local LoadoutsList = Instance.new("Frame") + LoadoutsList.RobloxLocked = true + LoadoutsList.Name = "LoadoutsList" + LoadoutsList.Position = UDim2.new(0,0,0.15,2) + LoadoutsList.Size = UDim2.new(1,-17,0.85,-2) + LoadoutsList.Style = Enum.FrameStyle.RobloxSquare + LoadoutsList.Parent = GearLoadouts + + local GearPreview = Instance.new("Frame") + GearPreview.RobloxLocked = true + GearPreview.Name = "GearPreview" + GearPreview.Position = UDim2.new(0.7,23,0,0) + GearPreview.Size = UDim2.new(0.3,-28,0.5,-1) + GearPreview.BackgroundTransparency = 1 + GearPreview.ZIndex = 7 + GearPreview.Parent = Gear + + -- GearPreview Children + local GearStats = Instance.new("Frame") + GearStats.RobloxLocked = true + GearStats.Name = "GearStats" + GearStats.BackgroundTransparency = 1 + GearStats.Position = UDim2.new(0,0,0.75,0) + GearStats.Size = UDim2.new(1,0,0.25,0) + GearStats.ZIndex = 8 + GearStats.Parent = GearPreview + + -- GearStats Children + local GearName = Instance.new("TextLabel") + GearName.RobloxLocked = true + GearName.Name = "GearName" + GearName.BackgroundTransparency = 1 + GearName.Font = Enum.Font.ArialBold + GearName.FontSize = Enum.FontSize.Size18 + GearName.Position = UDim2.new(0,-3,0,0) + GearName.Size = UDim2.new(1,6,1,5) + GearName.Text = "" + GearName.TextColor3 = Color3.new(1,1,1) + GearName.TextWrap = true + GearName.ZIndex = 9 + GearName.Parent = GearStats + + local GearImage = Instance.new("ImageLabel") + GearImage.RobloxLocked = true + GearImage.Name = "GearImage" + GearImage.Image = "" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0.125,0,0,0) + GearImage.Size = UDim2.new(0.75,0,0.75,0) + GearImage.ZIndex = 8 + GearImage.Parent = GearPreview + + --GearImage Children + local GearIcons = Instance.new("Frame") + GearIcons.BackgroundColor3 = Color3.new(0,0,0) + GearIcons.BackgroundTransparency = 0.5 + GearIcons.BorderSizePixel = 0 + GearIcons.RobloxLocked = true + GearIcons.Name = "GearIcons" + GearIcons.Position = UDim2.new(0.4,2,0.85,-2) + GearIcons.Size = UDim2.new(0.6,0,0.15,0) + GearIcons.Visible = false + GearIcons.ZIndex = 9 + GearIcons.Parent = GearImage + + -- GearIcons Children + local GenreImage = Instance.new("ImageLabel") + GenreImage.RobloxLocked = true + GenreImage.Name = "GenreImage" + GenreImage.BackgroundColor3 = Color3.new(102/255,153/255,1) + GenreImage.BackgroundTransparency = 0.5 + GenreImage.BorderSizePixel = 0 + GenreImage.Size = UDim2.new(0.25,0,1,0) + GenreImage.Parent = GearIcons + + local AttributeOneImage = GenreImage:clone() + AttributeOneImage.RobloxLocked = true + AttributeOneImage.Name = "AttributeOneImage" + AttributeOneImage.BackgroundColor3 = Color3.new(1,51/255,0) + AttributeOneImage.Position = UDim2.new(0.25,0,0,0) + AttributeOneImage.Parent = GearIcons + + local AttributeTwoImage = GenreImage:clone() + AttributeTwoImage.RobloxLocked = true + AttributeTwoImage.Name = "AttributeTwoImage" + AttributeTwoImage.BackgroundColor3 = Color3.new(153/255,1,153/255) + AttributeTwoImage.Position = UDim2.new(0.5,0,0,0) + AttributeTwoImage.Parent = GearIcons + + local AttributeThreeImage = GenreImage:clone() + AttributeThreeImage.RobloxLocked = true + AttributeThreeImage.Name = "AttributeThreeImage" + AttributeThreeImage.BackgroundColor3 = Color3.new(0,0.5,0.5) + AttributeThreeImage.Position = UDim2.new(0.75,0,0,0) + AttributeThreeImage.Parent = GearIcons + +------------------------------- WARDROBE ------------------------------------------------------- + if game.CoreGui.Version < 8 then + -- no need for this to stick around, we aren't ready for wardrobe + script:remove() + return + end + + local function makeCharFrame(frameName, parent) + local frame = Instance.new("Frame") + frame.RobloxLocked = true + frame.Size = UDim2.new(1,0,1,-70) + frame.Position = UDim2.new(0,0,0,20) + frame.Name = frameName + frame.BackgroundTransparency = 1 + frame.Parent = parent + frame.Visible = false + return frame + end + local function makeZone( zoneName, image, size, position, parent ) + local zone = Instance.new("ImageLabel") + zone.RobloxLocked = true + zone.Name = zoneName + zone.Image = image + zone.Size = size + zone.BackgroundTransparency = 1 + zone.Position = position + zone.Parent = parent + return zone + end + local function makeStyledButton( buttonName, size, position, parent, buttonStyle ) + local button = Instance.new("ImageButton") + button.RobloxLocked = true + button.Name = buttonName + button.Size = size + button.Position = position + if buttonStyle then + button.Style = buttonStyle + else + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderColor3 = Color3.new(1,1,1) + end + button.Parent = parent + return button + end + local function makeTextLabel( TextLabelName,text,position,parent ) + local label = Instance.new("TextLabel") + label.RobloxLocked = true + label.BackgroundTransparency = 1 + label.Size = UDim2.new(0,32,0,14) + label.Name = TextLabelName + label.Font = Enum.Font.Arial + label.TextColor3 = Color3.new(1,1,1) + label.FontSize = Enum.FontSize.Size14 + label.Text = text + label.Position = position + label.Parent = parent + end + + + local Wardrobe = Instance.new("Frame") + Wardrobe.Name = "Wardrobe" + Wardrobe.RobloxLocked = true + Wardrobe.BackgroundTransparency = 1 + Wardrobe.Visible = false + Wardrobe.Size = UDim2.new(1,0,1,0) + Wardrobe.Parent = Backpack + + local AssetList = Instance.new("Frame") + AssetList.RobloxLocked = true + AssetList.Name = "AssetList" + AssetList.Position = UDim2.new(0,4,0,5) + AssetList.Size = UDim2.new(0,85,1,-5) + AssetList.BackgroundTransparency = 1 + AssetList.Visible = true + AssetList.Parent = Wardrobe + + local PreviewAssetFrame = Instance.new("Frame") + PreviewAssetFrame.RobloxLocked = true + PreviewAssetFrame.Name = "PreviewAssetFrame" + PreviewAssetFrame.BackgroundTransparency = 1 + PreviewAssetFrame.Position = UDim2.new(1,-240,0,30) + PreviewAssetFrame.Size = UDim2.new(0,250,0,250) + PreviewAssetFrame.Parent = Wardrobe + + local PreviewAssetBacking = Instance.new("TextButton") + PreviewAssetBacking.RobloxLocked = true + PreviewAssetBacking.Name = "PreviewAssetBacking" + PreviewAssetBacking.Active = false + PreviewAssetBacking.Text = "" + PreviewAssetBacking.AutoButtonColor = false + PreviewAssetBacking.Size = UDim2.new(1,0,1,0) + PreviewAssetBacking.Style = Enum.ButtonStyle.RobloxButton + PreviewAssetBacking.Visible = false + PreviewAssetBacking.ZIndex = 9 + PreviewAssetBacking.Parent = PreviewAssetFrame + + local PreviewAssetImage = Instance.new("ImageLabel") + PreviewAssetImage.RobloxLocked = true + PreviewAssetImage.Name = "PreviewAssetImage" + PreviewAssetImage.BackgroundTransparency = 0.8 + PreviewAssetImage.Position = UDim2.new(0.5,-100,0,0) + PreviewAssetImage.Size = UDim2.new(0,200,0,200) + PreviewAssetImage.BorderSizePixel = 0 + PreviewAssetImage.ZIndex = 10 + PreviewAssetImage.Parent = PreviewAssetBacking + + local AssetNameLabel = Instance.new("TextLabel") + AssetNameLabel.Name = "AssetNameLabel" + AssetNameLabel.RobloxLocked = true + AssetNameLabel.BackgroundTransparency = 1 + AssetNameLabel.Position = UDim2.new(0,0,1,-20) + AssetNameLabel.Size = UDim2.new(0.5,0,0,24) + AssetNameLabel.ZIndex = 10 + AssetNameLabel.Font = Enum.Font.Arial + AssetNameLabel.Text = "" + AssetNameLabel.TextColor3 = Color3.new(1,1,1) + AssetNameLabel.TextScaled = true + AssetNameLabel.Parent = PreviewAssetBacking + + local AssetTypeLabel = AssetNameLabel:clone() + AssetTypeLabel.RobloxLocked = true + AssetTypeLabel.Name = "AssetTypeLabel" + AssetTypeLabel.TextScaled = false + AssetTypeLabel.FontSize = Enum.FontSize.Size18 + AssetTypeLabel.Position = UDim2.new(0.5,3,1,-20) + AssetTypeLabel.Parent = PreviewAssetBacking + + + + local PreviewButton = Instance.new("TextButton") + PreviewButton.RobloxLocked = true + PreviewButton.Name = "PreviewButton" + PreviewButton.Text = "Rotate" + PreviewButton.BackgroundColor3 = Color3.new(0,0,0) + PreviewButton.BackgroundTransparency = 0.5 + PreviewButton.BorderColor3 = Color3.new(1,1,1) + PreviewButton.Position = UDim2.new(1.2,-62,1,-50) + PreviewButton.Size = UDim2.new(0,125,0,50) + PreviewButton.Font = Enum.Font.ArialBold + PreviewButton.FontSize = Enum.FontSize.Size24 + PreviewButton.TextColor3 = Color3.new(1,1,1) + PreviewButton.TextWrapped = true + PreviewButton.TextStrokeTransparency = 0 + PreviewButton.Parent = Wardrobe + + local CharacterPane = Instance.new("Frame") + CharacterPane.RobloxLocked = true + CharacterPane.Name = "CharacterPane" + CharacterPane.Position = UDim2.new(1,-220,0,32) + CharacterPane.Size = UDim2.new(0,220,1,-40) + CharacterPane.BackgroundTransparency = 1 + CharacterPane.Visible = true + CharacterPane.Parent = Wardrobe + + --CharacterPane Children + local FaceFrame = makeCharFrame("FacesFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=75460621") + makeZone("FaceZone","http://www.nexium.fit/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),FaceFrame) + makeStyledButton("Face",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),FaceFrame) + + local HeadFrame = makeCharFrame("HeadsFrame", CharacterPane) + makeZone("FaceZone","http://www.nexium.fit/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),HeadFrame) + makeStyledButton("Head",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),HeadFrame) + + local HatsFrame = makeCharFrame("HatsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=75457888") + local HatsZone = makeZone("HatsZone","http://www.nexium.fit/asset/?id=75457888",UDim2.new(0,186,0,184),UDim2.new(0.5,-93,0.5,-100), HatsFrame) + makeStyledButton("Hat1Button",UDim2.new(0,64,0,64),UDim2.new(0,-1,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat2Button",UDim2.new(0,64,0,64),UDim2.new(0,63,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat3Button",UDim2.new(0,64,0,64),UDim2.new(0,127,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + + local PantsFrame = makeCharFrame("PantsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=75457920") + makeZone("PantsZone","http://www.nexium.fit/asset/?id=75457920",UDim2.new(0,121,0,99),UDim2.new(0.5,-60,0.5,-100),PantsFrame) + + local pantFrame = Instance.new("Frame") + pantFrame.RobloxLocked = true + pantFrame.Size = UDim2.new(0,25,0,56) + pantFrame.Position = UDim2.new(0.5,-26,0.5,0) + pantFrame.BackgroundColor3 = Color3.new(0,0,0) + pantFrame.BorderColor3 = Color3.new(1,1,1) + pantFrame.Name = "PantFrame" + pantFrame.Parent = PantsFrame + + local otherPantFrame = pantFrame:clone() + otherPantFrame.Position = UDim2.new(0.5,3,0.5,0) + otherPantFrame.RobloxLocked = true + otherPantFrame.Parent = PantsFrame + + local CurrentPants = Instance.new("ImageButton") + CurrentPants.RobloxLocked = true + CurrentPants.BackgroundTransparency = 1 + CurrentPants.ZIndex = 2 + CurrentPants.Name = "CurrentPants" + CurrentPants.Position = UDim2.new(0.5,-31,0.5,-4) + CurrentPants.Size = UDim2.new(0,54,0,59) + CurrentPants.Parent = PantsFrame + + local MeshFrame = makeCharFrame("PackagesFrame", CharacterPane) + local torsoButton = makeStyledButton("TorsoMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("TorsoLabel","Torso",UDim2.new(0.5,-16,0,-25),torsoButton) + local leftLegButton = makeStyledButton("LeftLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,0,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftLegLabel","Left Leg",UDim2.new(0.5,-16,0,-25),leftLegButton) + local rightLegButton = makeStyledButton("RightLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-64,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightLegLabel","Right Leg",UDim2.new(0.5,-16,0,-25),rightLegButton) + local rightArmButton = makeStyledButton("RightArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-96,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightArmLabel","Right Arm",UDim2.new(0.5,-16,0,-25),rightArmButton) + local leftArmButton = makeStyledButton("LeftArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftArmLabel","Left Arm",UDim2.new(0.5,-16,0,-25),leftArmButton) + + local TShirtFrame = makeCharFrame("T-ShirtsFrame",CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=75460642") + makeZone("TShirtZone","http://www.nexium.fit/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),TShirtFrame) + makeStyledButton("TShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),TShirtFrame) + + + local ShirtFrame = makeCharFrame("ShirtsFrame", CharacterPane) + makeZone("ShirtZone","http://www.nexium.fit/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),ShirtFrame) + makeStyledButton("ShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),ShirtFrame) + + + local ColorFrame = makeCharFrame("ColorFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.nexium.fit/asset/?id=76049888") + local ColorZone = makeZone("ColorZone","http://www.nexium.fit/asset/?id=76049888", UDim2.new(0,120,0,150),UDim2.new(0.5,-60,0.5,-100),ColorFrame) + makeStyledButton("Head",UDim2.new(0.26,0,0.19,0),UDim2.new(0.37,0,0.02,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.78,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.025,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("Torso",UDim2.new(0.43,0,0.36,0),UDim2.new(0.28,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.275,0,0.67,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.525,0,0.67,0),ColorZone).AutoButtonColor = false + + -- Character Panel label (shows what category we are currently browsing) + local CategoryLabel = Instance.new("TextLabel") + CategoryLabel.RobloxLocked = true + CategoryLabel.Name = "CategoryLabel" + CategoryLabel.BackgroundTransparency = 1 + CategoryLabel.Font = Enum.Font.ArialBold + CategoryLabel.FontSize = Enum.FontSize.Size18 + CategoryLabel.Position = UDim2.new(0,0,0,-7) + CategoryLabel.Size = UDim2.new(1,0,0,20) + CategoryLabel.TextXAlignment = Enum.TextXAlignment.Center + CategoryLabel.Text = "All" + CategoryLabel.TextColor3 = Color3.new(1,1,1) + CategoryLabel.Parent = CharacterPane + + --Save Button + local SaveButton = Instance.new("TextButton") + SaveButton.RobloxLocked = true + SaveButton.Name = "SaveButton" + SaveButton.Size = UDim2.new(0.6,0,0,50) + SaveButton.Position = UDim2.new(0.2,0,1,-50) + SaveButton.Style = Enum.ButtonStyle.RobloxButton + SaveButton.Selected = false + SaveButton.Font = Enum.Font.ArialBold + SaveButton.FontSize = Enum.FontSize.Size18 + SaveButton.Text = "Save" + SaveButton.TextColor3 = Color3.new(1,1,1) + SaveButton.Parent = CharacterPane + +-- no need for this to stick around + +script:Destroy() \ No newline at end of file diff --git a/app/files/CoreGui/53878048 b/app/files/CoreGui/53878048 new file mode 100644 index 0000000..4d3e7db --- /dev/null +++ b/app/files/CoreGui/53878048 @@ -0,0 +1,790 @@ +-- This script creates almost all gui elements found in the backpack (warning: there are a lot!) +-- TODO: automate this process + +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +local gui = script.Parent + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +-- First up is the current loadout +local CurrentLoadout = Instance.new("Frame") +CurrentLoadout.Name = "CurrentLoadout" +CurrentLoadout.Position = UDim2.new(0.5, -240, 1, -85) +CurrentLoadout.Size = UDim2.new(0, 480, 0, 48) +CurrentLoadout.BackgroundTransparency = 1 +CurrentLoadout.RobloxLocked = true +CurrentLoadout.Parent = gui + +local Debounce = Instance.new("BoolValue") +Debounce.Name = "Debounce" +Debounce.RobloxLocked = true +Debounce.Parent = CurrentLoadout + +local BackpackButton = Instance.new("ImageButton") +BackpackButton.RobloxLocked = true +BackpackButton.Visible = false +BackpackButton.Name = "BackpackButton" +BackpackButton.BackgroundTransparency = 1 +BackpackButton.Image = "rbxasset://textures/ui/backpackButton.png" +BackpackButton.Position = UDim2.new(0.5, -195, 1, -30) +BackpackButton.Size = UDim2.new(0,107,0,26) +waitForChild(gui,"ControlFrame") +BackpackButton.Parent = gui.ControlFrame + +for i = 0, 9 do + local slotFrame = Instance.new("Frame") + slotFrame.RobloxLocked = true + slotFrame.BackgroundColor3 = Color3.new(0,0,0) + slotFrame.BackgroundTransparency = 1 + slotFrame.BorderColor3 = Color3.new(1,1,1) + slotFrame.Name = "Slot" .. tostring(i) + if i == 0 then + slotFrame.Position = UDim2.new(0.9,0,0,0) + else + slotFrame.Position = UDim2.new((i - 1) * 0.1,0,0,0) + end + slotFrame.Size = UDim2.new(0.1,0,1,0) + slotFrame.Parent = CurrentLoadout +end + +local TempSlot = Instance.new("ImageButton") +TempSlot.Name = "TempSlot" +TempSlot.Active = true +TempSlot.Size = UDim2.new(1,0,1,0) +TempSlot.Style = Enum.ButtonStyle.RobloxButton +TempSlot.Visible = false +TempSlot.RobloxLocked = true +TempSlot.Parent = CurrentLoadout + + -- TempSlot Children + local GearReference = Instance.new("ObjectValue") + GearReference.Name = "GearReference" + GearReference.RobloxLocked = true + GearReference.Parent = TempSlot + + local ToolTipLabel = Instance.new("TextLabel") + ToolTipLabel.Name = "ToolTipLabel" + ToolTipLabel.RobloxLocked = true + ToolTipLabel.Text = "" + ToolTipLabel.BackgroundTransparency = 0.5 + ToolTipLabel.BorderSizePixel = 0 + ToolTipLabel.Visible = false + ToolTipLabel.TextColor3 = Color3.new(1,1,1) + ToolTipLabel.BackgroundColor3 = Color3.new(0,0,0) + ToolTipLabel.TextStrokeTransparency = 0 + ToolTipLabel.Font = Enum.Font.ArialBold + ToolTipLabel.FontSize = Enum.FontSize.Size14 + --ToolTipLabel.TextWrap = true + ToolTipLabel.Size = UDim2.new(1,60,0,20) + ToolTipLabel.Position = UDim2.new(0,-30,0,-30) + ToolTipLabel.Parent = TempSlot + + local Kill = Instance.new("BoolValue") + Kill.Name = "Kill" + Kill.RobloxLocked = true + Kill.Parent = TempSlot + + local GearImage = Instance.new("ImageLabel") + GearImage.Name = "GearImage" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0,-7,0,-7) + GearImage.Size = UDim2.new(1,14,1,14) + GearImage.ZIndex = 2 + GearImage.RobloxLocked = true + GearImage.Parent = TempSlot + + local SlotNumber = Instance.new("TextLabel") + SlotNumber.Name = "SlotNumber" + SlotNumber.BackgroundTransparency = 1 + SlotNumber.BorderSizePixel = 0 + SlotNumber.Font = Enum.Font.ArialBold + SlotNumber.FontSize = Enum.FontSize.Size18 + SlotNumber.Position = UDim2.new(0,-7,0,-7) + SlotNumber.Size = UDim2.new(0,10,0,15) + SlotNumber.TextColor3 = Color3.new(1,1,1) + SlotNumber.TextTransparency = 0 + SlotNumber.TextXAlignment = Enum.TextXAlignment.Left + SlotNumber.TextYAlignment = Enum.TextYAlignment.Bottom + SlotNumber.ZIndex = 4 + SlotNumber.RobloxLocked = true + SlotNumber.Parent = TempSlot + + local SlotNumberDownShadow = SlotNumber:clone() + SlotNumberDownShadow.Name = "SlotNumberDownShadow" + SlotNumberDownShadow.TextColor3 = Color3.new(0,0,0) + SlotNumberDownShadow.ZIndex = 3 + SlotNumberDownShadow.Position = UDim2.new(0,-6,0,-6) + SlotNumberDownShadow.Parent = TempSlot + + local SlotNumberUpShadow = SlotNumberDownShadow:clone() + SlotNumberUpShadow.Name = "SlotNumberUpShadow" + SlotNumberUpShadow.Position = UDim2.new(0,-8,0,-8) + SlotNumberUpShadow.Parent = TempSlot + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.ZIndex = 2 + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = TempSlot + +--- Great, now lets make the inventory! + +local Backpack = Instance.new("Frame") +Backpack.RobloxLocked = true +Backpack.Visible = false +Backpack.Name = "Backpack" +Backpack.Position = UDim2.new(0.5,0,0.5,0) +Backpack.BackgroundColor3 = Color3.new(0,0,0) +Backpack.BackgroundTransparency = 0.08 +Backpack.BorderSizePixel = 0 +Backpack.Parent = gui +Backpack.Active = true + + -- Backpack Children + local SwapSlot = Instance.new("BoolValue") + SwapSlot.RobloxLocked = true + SwapSlot.Name = "SwapSlot" + SwapSlot.Parent = Backpack + + -- SwapSlot Children + local Slot = Instance.new("IntValue") + Slot.RobloxLocked = true + Slot.Name = "Slot" + Slot.Parent = SwapSlot + + local GearButton = Instance.new("ObjectValue") + GearButton.RobloxLocked = true + GearButton.Name = "GearButton" + GearButton.Parent = SwapSlot + + local Tabs = Instance.new("Frame") + Tabs.Name = "Tabs" + Tabs.Visible = true + Tabs.RobloxLocked = true + Tabs.BackgroundColor3 = Color3.new(0,0,0) + Tabs.BackgroundTransparency = 0.08 + Tabs.BorderSizePixel = 0 + Tabs.Position = UDim2.new(0,0,-0.1,-4) + Tabs.Size = UDim2.new(1,0,0.1,4) + Tabs.Parent = Backpack + + -- Tabs Children + + local tabLine = Instance.new("Frame") + tabLine.RobloxLocked = true + tabLine.Name = "TabLine" + tabLine.BackgroundColor3 = Color3.new(53/255, 53/255, 53/255) + tabLine.BorderSizePixel = 0 + tabLine.Position = UDim2.new(0,5,1,-4) + tabLine.Size = UDim2.new(1,-10,0,4) + tabLine.ZIndex = 2 + tabLine.Parent = Tabs + + local InventoryButton = Instance.new("TextButton") + InventoryButton.RobloxLocked = true + InventoryButton.Name = "InventoryButton" + InventoryButton.Size = UDim2.new(0,60,0,30) + InventoryButton.Position = UDim2.new(0,7,1,-31) + InventoryButton.BackgroundColor3 = Color3.new(1,1,1) + InventoryButton.BorderColor3 = Color3.new(1,1,1) + InventoryButton.Font = Enum.Font.ArialBold + InventoryButton.FontSize = Enum.FontSize.Size18 + InventoryButton.Text = "Gear" + InventoryButton.AutoButtonColor = false + InventoryButton.TextColor3 = Color3.new(0,0,0) + InventoryButton.Selected = true + InventoryButton.Active = true + InventoryButton.ZIndex = 3 + InventoryButton.Parent = Tabs + + if game.CoreGui.Version >= 8 then + local WardrobeButton = Instance.new("TextButton") + WardrobeButton.RobloxLocked = true + WardrobeButton.Name = "WardrobeButton" + WardrobeButton.Size = UDim2.new(0,90,0,30) + WardrobeButton.Position = UDim2.new(0,77,1,-31) + WardrobeButton.BackgroundColor3 = Color3.new(0,0,0) + WardrobeButton.BorderColor3 = Color3.new(1,1,1) + WardrobeButton.Font = Enum.Font.ArialBold + WardrobeButton.FontSize = Enum.FontSize.Size18 + WardrobeButton.Text = "Wardrobe" + WardrobeButton.AutoButtonColor = false + WardrobeButton.TextColor3 = Color3.new(1,1,1) + WardrobeButton.Selected = false + WardrobeButton.Active = true + WardrobeButton.Parent = Tabs + end + + local closeButton = Instance.new("TextButton") + closeButton.RobloxLocked = true + closeButton.Name = "CloseButton" + closeButton.Font = Enum.Font.ArialBold + closeButton.FontSize = Enum.FontSize.Size24 + closeButton.Position = UDim2.new(1,-33,0,4) + closeButton.Size = UDim2.new(0,30,0,30) + closeButton.Style = Enum.ButtonStyle.RobloxButton + closeButton.Text = "" + closeButton.TextColor3 = Color3.new(1,1,1) + closeButton.Parent = Tabs + closeButton.Modal = true + + --closeButton child + local XImage = Instance.new("ImageLabel") + XImage.RobloxLocked = true + XImage.Name = "XImage" + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75547445") + XImage.Image = "http://www.roblox.com/asset/?id=75547445" --TODO: move to rbxasset + XImage.BackgroundTransparency = 1 + XImage.Position = UDim2.new(-.25,-1,-.25,-1) + XImage.Size = UDim2.new(1.5,2,1.5,2) + XImage.ZIndex = 2 + XImage.Parent = closeButton + + -- Generic Search gui used across backpack + local SearchFrame = Instance.new("Frame") + SearchFrame.RobloxLocked = true + SearchFrame.Name = "SearchFrame" + SearchFrame.BackgroundTransparency = 1 + SearchFrame.Position = UDim2.new(1,-220,0,2) + SearchFrame.Size = UDim2.new(0,220,0,24) + SearchFrame.Parent = Backpack + + -- SearchFrame Children + local SearchButton = Instance.new("ImageButton") + SearchButton.RobloxLocked = true + SearchButton.Name = "SearchButton" + SearchButton.Size = UDim2.new(0,25,0,25) + SearchButton.BackgroundTransparency = 1 + SearchButton.Image = "rbxasset://textures/ui/SearchIcon.png" + SearchButton.Parent = SearchFrame + + local SearchBoxFrame = Instance.new("TextButton") + SearchBoxFrame.RobloxLocked = true + SearchBoxFrame.Position = UDim2.new(0,25,0,0) + SearchBoxFrame.Size = UDim2.new(1,-28,0,26) + SearchBoxFrame.Name = "SearchBoxFrame" + SearchBoxFrame.Text = "" + SearchBoxFrame.Style = Enum.ButtonStyle.RobloxButton + SearchBoxFrame.Parent = SearchFrame + + -- SearchBoxFrame Children + local SearchBox = Instance.new("TextBox") + SearchBox.RobloxLocked = true + SearchBox.Name = "SearchBox" + SearchBox.BackgroundTransparency = 1 + SearchBox.Font = Enum.Font.ArialBold + SearchBox.FontSize = Enum.FontSize.Size12 + SearchBox.Position = UDim2.new(0,-5,0,-5) + SearchBox.Size = UDim2.new(1,10,1,10) + SearchBox.TextColor3 = Color3.new(1,1,1) + SearchBox.TextXAlignment = Enum.TextXAlignment.Left + SearchBox.ZIndex = 2 + SearchBox.TextWrap = true + SearchBox.Text = "Search..." + SearchBox.Parent = SearchBoxFrame + + + local ResetButton = Instance.new("TextButton") + ResetButton.RobloxLocked = true + ResetButton.Visible = false + ResetButton.Name = "ResetButton" + ResetButton.Position = UDim2.new(1,-26,0,3) + ResetButton.Size = UDim2.new(0,20,0,20) + ResetButton.Style = Enum.ButtonStyle.RobloxButtonDefault + ResetButton.Text = "X" + ResetButton.TextColor3 = Color3.new(1,1,1) + ResetButton.Font = Enum.Font.ArialBold + ResetButton.FontSize = Enum.FontSize.Size18 + ResetButton.ZIndex = 3 + ResetButton.Parent = SearchFrame + +------------------------------- GEAR ------------------------------------------------------- + local Gear = Instance.new("Frame") + Gear.Name = "Gear" + Gear.RobloxLocked = true + Gear.BackgroundTransparency = 1 + Gear.Size = UDim2.new(1,0,1,0) + Gear.Parent = Backpack + + -- Gear Children + local AssetsList = Instance.new("Frame") + AssetsList.RobloxLocked = true + AssetsList.Name = "AssetsList" + AssetsList.BackgroundTransparency = 1 + AssetsList.Size = UDim2.new(0.2,0,1,0) + AssetsList.Style = Enum.FrameStyle.RobloxSquare + AssetsList.Visible = false + AssetsList.Parent = Gear + + local GearGrid = Instance.new("Frame") + GearGrid.RobloxLocked = true + GearGrid.Name = "GearGrid" + GearGrid.Size = UDim2.new(0.69,0,1,0) + GearGrid.BackgroundTransparency = 1 + GearGrid.Parent = Gear + + + local GearButton = Instance.new("ImageButton") + GearButton.RobloxLocked = true + GearButton.Visible = false + GearButton.Name = "GearButton" + GearButton.Size = UDim2.new(0,64,0,64) + GearButton.Style = Enum.ButtonStyle.RobloxButton + GearButton.Parent = GearGrid + + -- GearButton Children + local GearReference = Instance.new("ObjectValue") + GearReference.RobloxLocked = true + GearReference.Name = "GearReference" + GearReference.Parent = GearButton + + local GreyOutButton = Instance.new("Frame") + GreyOutButton.RobloxLocked = true + GreyOutButton.Name = "GreyOutButton" + GreyOutButton.BackgroundTransparency = 0.5 + GreyOutButton.Size = UDim2.new(1,0,1,0) + GreyOutButton.Active = true + GreyOutButton.Visible = false + GreyOutButton.ZIndex = 3 + GreyOutButton.Parent = GearButton + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.ZIndex = 2 + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = GearButton + + local GearGridScrollingArea = Instance.new("Frame") + GearGridScrollingArea.RobloxLocked = true + GearGridScrollingArea.Name = "GearGridScrollingArea" + GearGridScrollingArea.Position = UDim2.new(0.7,0,0,35) + GearGridScrollingArea.Size = UDim2.new(0,17,1,-45) + GearGridScrollingArea.BackgroundTransparency = 1 + GearGridScrollingArea.Parent = Gear + + local GearLoadouts = Instance.new("Frame") + GearLoadouts.RobloxLocked = true + GearLoadouts.Name = "GearLoadouts" + GearLoadouts.BackgroundTransparency = 1 + GearLoadouts.Position = UDim2.new(0.7,23,0.5,1) + GearLoadouts.Size = UDim2.new(0.3,-23,0.5,-1) + GearLoadouts.Parent = Gear + GearLoadouts.Visible = false + + -- GearLoadouts Children + local GearLoadoutsHeader = Instance.new("Frame") + GearLoadoutsHeader.RobloxLocked = true + GearLoadoutsHeader.Name = "GearLoadoutsHeader" + GearLoadoutsHeader.BackgroundColor3 = Color3.new(0,0,0) + GearLoadoutsHeader.BackgroundTransparency = 0.2 + GearLoadoutsHeader.BorderColor3 = Color3.new(1,0,0) + GearLoadoutsHeader.Size = UDim2.new(1,2,0.15,-1) + GearLoadoutsHeader.Parent = GearLoadouts + + -- GearLoadoutsHeader Children + local LoadoutsHeaderText = Instance.new("TextLabel") + LoadoutsHeaderText.RobloxLocked = true + LoadoutsHeaderText.Name = "LoadoutsHeaderText" + LoadoutsHeaderText.BackgroundTransparency = 1 + LoadoutsHeaderText.Font = Enum.Font.ArialBold + LoadoutsHeaderText.FontSize = Enum.FontSize.Size18 + LoadoutsHeaderText.Size = UDim2.new(1,0,1,0) + LoadoutsHeaderText.Text = "Loadouts" + LoadoutsHeaderText.TextColor3 = Color3.new(1,1,1) + LoadoutsHeaderText.Parent = GearLoadoutsHeader + + local GearLoadoutsScrollingArea = GearGridScrollingArea:clone() + GearLoadoutsScrollingArea.RobloxLocked = true + GearLoadoutsScrollingArea.Name = "GearLoadoutsScrollingArea" + GearLoadoutsScrollingArea.Position = UDim2.new(1,-15,0.15,2) + GearLoadoutsScrollingArea.Size = UDim2.new(0,17,0.85,-2) + GearLoadoutsScrollingArea.Parent = GearLoadouts + + local LoadoutsList = Instance.new("Frame") + LoadoutsList.RobloxLocked = true + LoadoutsList.Name = "LoadoutsList" + LoadoutsList.Position = UDim2.new(0,0,0.15,2) + LoadoutsList.Size = UDim2.new(1,-17,0.85,-2) + LoadoutsList.Style = Enum.FrameStyle.RobloxSquare + LoadoutsList.Parent = GearLoadouts + + local GearPreview = Instance.new("Frame") + GearPreview.RobloxLocked = true + GearPreview.Name = "GearPreview" + GearPreview.Position = UDim2.new(0.7,23,0,0) + GearPreview.Size = UDim2.new(0.3,-28,0.5,-1) + GearPreview.BackgroundTransparency = 1 + GearPreview.ZIndex = 7 + GearPreview.Parent = Gear + + -- GearPreview Children + local GearStats = Instance.new("Frame") + GearStats.RobloxLocked = true + GearStats.Name = "GearStats" + GearStats.BackgroundTransparency = 1 + GearStats.Position = UDim2.new(0,0,0.75,0) + GearStats.Size = UDim2.new(1,0,0.25,0) + GearStats.ZIndex = 8 + GearStats.Parent = GearPreview + + -- GearStats Children + local GearName = Instance.new("TextLabel") + GearName.RobloxLocked = true + GearName.Name = "GearName" + GearName.BackgroundTransparency = 1 + GearName.Font = Enum.Font.ArialBold + GearName.FontSize = Enum.FontSize.Size18 + GearName.Position = UDim2.new(0,-3,0,0) + GearName.Size = UDim2.new(1,6,1,5) + GearName.Text = "" + GearName.TextColor3 = Color3.new(1,1,1) + GearName.TextWrap = true + GearName.ZIndex = 9 + GearName.Parent = GearStats + + local GearImage = Instance.new("ImageLabel") + GearImage.RobloxLocked = true + GearImage.Name = "GearImage" + GearImage.Image = "" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0.125,0,0,0) + GearImage.Size = UDim2.new(0.75,0,0.75,0) + GearImage.ZIndex = 8 + GearImage.Parent = GearPreview + + --GearImage Children + local GearIcons = Instance.new("Frame") + GearIcons.BackgroundColor3 = Color3.new(0,0,0) + GearIcons.BackgroundTransparency = 0.5 + GearIcons.BorderSizePixel = 0 + GearIcons.RobloxLocked = true + GearIcons.Name = "GearIcons" + GearIcons.Position = UDim2.new(0.4,2,0.85,-2) + GearIcons.Size = UDim2.new(0.6,0,0.15,0) + GearIcons.Visible = false + GearIcons.ZIndex = 9 + GearIcons.Parent = GearImage + + -- GearIcons Children + local GenreImage = Instance.new("ImageLabel") + GenreImage.RobloxLocked = true + GenreImage.Name = "GenreImage" + GenreImage.BackgroundColor3 = Color3.new(102/255,153/255,1) + GenreImage.BackgroundTransparency = 0.5 + GenreImage.BorderSizePixel = 0 + GenreImage.Size = UDim2.new(0.25,0,1,0) + GenreImage.Parent = GearIcons + + local AttributeOneImage = GenreImage:clone() + AttributeOneImage.RobloxLocked = true + AttributeOneImage.Name = "AttributeOneImage" + AttributeOneImage.BackgroundColor3 = Color3.new(1,51/255,0) + AttributeOneImage.Position = UDim2.new(0.25,0,0,0) + AttributeOneImage.Parent = GearIcons + + local AttributeTwoImage = GenreImage:clone() + AttributeTwoImage.RobloxLocked = true + AttributeTwoImage.Name = "AttributeTwoImage" + AttributeTwoImage.BackgroundColor3 = Color3.new(153/255,1,153/255) + AttributeTwoImage.Position = UDim2.new(0.5,0,0,0) + AttributeTwoImage.Parent = GearIcons + + local AttributeThreeImage = GenreImage:clone() + AttributeThreeImage.RobloxLocked = true + AttributeThreeImage.Name = "AttributeThreeImage" + AttributeThreeImage.BackgroundColor3 = Color3.new(0,0.5,0.5) + AttributeThreeImage.Position = UDim2.new(0.75,0,0,0) + AttributeThreeImage.Parent = GearIcons + +------------------------------- WARDROBE ------------------------------------------------------- + if game.CoreGui.Version < 8 then + -- no need for this to stick around, we aren't ready for wardrobe + script:remove() + return + end + + local function makeCharFrame(frameName, parent) + local frame = Instance.new("Frame") + frame.RobloxLocked = true + frame.Size = UDim2.new(1,0,1,-70) + frame.Position = UDim2.new(0,0,0,20) + frame.Name = frameName + frame.BackgroundTransparency = 1 + frame.Parent = parent + frame.Visible = false + return frame + end + local function makeZone( zoneName, image, size, position, parent ) + local zone = Instance.new("ImageLabel") + zone.RobloxLocked = true + zone.Name = zoneName + zone.Image = image + zone.Size = size + zone.BackgroundTransparency = 1 + zone.Position = position + zone.Parent = parent + return zone + end + local function makeStyledButton( buttonName, size, position, parent, buttonStyle ) + local button = Instance.new("ImageButton") + button.RobloxLocked = true + button.Name = buttonName + button.Size = size + button.Position = position + if buttonStyle then + button.Style = buttonStyle + else + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderColor3 = Color3.new(1,1,1) + end + button.Parent = parent + return button + end + local function makeTextLabel( TextLabelName,text,position,parent ) + local label = Instance.new("TextLabel") + label.RobloxLocked = true + label.BackgroundTransparency = 1 + label.Size = UDim2.new(0,32,0,14) + label.Name = TextLabelName + label.Font = Enum.Font.Arial + label.TextColor3 = Color3.new(1,1,1) + label.FontSize = Enum.FontSize.Size14 + label.Text = text + label.Position = position + label.Parent = parent + end + + + local Wardrobe = Instance.new("Frame") + Wardrobe.Name = "Wardrobe" + Wardrobe.RobloxLocked = true + Wardrobe.BackgroundTransparency = 1 + Wardrobe.Visible = false + Wardrobe.Size = UDim2.new(1,0,1,0) + Wardrobe.Parent = Backpack + + local AssetList = Instance.new("Frame") + AssetList.RobloxLocked = true + AssetList.Name = "AssetList" + AssetList.Position = UDim2.new(0,4,0,5) + AssetList.Size = UDim2.new(0,85,1,-5) + AssetList.BackgroundTransparency = 1 + AssetList.Visible = true + AssetList.Parent = Wardrobe + + local PreviewAssetFrame = Instance.new("Frame") + PreviewAssetFrame.RobloxLocked = true + PreviewAssetFrame.Name = "PreviewAssetFrame" + PreviewAssetFrame.BackgroundTransparency = 1 + PreviewAssetFrame.Position = UDim2.new(1,-240,0,30) + PreviewAssetFrame.Size = UDim2.new(0,250,0,250) + PreviewAssetFrame.Parent = Wardrobe + + local PreviewAssetBacking = Instance.new("TextButton") + PreviewAssetBacking.RobloxLocked = true + PreviewAssetBacking.Name = "PreviewAssetBacking" + PreviewAssetBacking.Active = false + PreviewAssetBacking.Text = "" + PreviewAssetBacking.AutoButtonColor = false + PreviewAssetBacking.Size = UDim2.new(1,0,1,0) + PreviewAssetBacking.Style = Enum.ButtonStyle.RobloxButton + PreviewAssetBacking.Visible = false + PreviewAssetBacking.ZIndex = 9 + PreviewAssetBacking.Parent = PreviewAssetFrame + + local PreviewAssetImage = Instance.new("ImageLabel") + PreviewAssetImage.RobloxLocked = true + PreviewAssetImage.Name = "PreviewAssetImage" + PreviewAssetImage.BackgroundTransparency = 0.8 + PreviewAssetImage.Position = UDim2.new(0.5,-100,0,0) + PreviewAssetImage.Size = UDim2.new(0,200,0,200) + PreviewAssetImage.BorderSizePixel = 0 + PreviewAssetImage.ZIndex = 10 + PreviewAssetImage.Parent = PreviewAssetBacking + + local AssetNameLabel = Instance.new("TextLabel") + AssetNameLabel.Name = "AssetNameLabel" + AssetNameLabel.RobloxLocked = true + AssetNameLabel.BackgroundTransparency = 1 + AssetNameLabel.Position = UDim2.new(0,0,1,-20) + AssetNameLabel.Size = UDim2.new(0.5,0,0,24) + AssetNameLabel.ZIndex = 10 + AssetNameLabel.Font = Enum.Font.Arial + AssetNameLabel.Text = "" + AssetNameLabel.TextColor3 = Color3.new(1,1,1) + AssetNameLabel.TextScaled = true + AssetNameLabel.Parent = PreviewAssetBacking + + local AssetTypeLabel = AssetNameLabel:clone() + AssetTypeLabel.RobloxLocked = true + AssetTypeLabel.Name = "AssetTypeLabel" + AssetTypeLabel.TextScaled = false + AssetTypeLabel.FontSize = Enum.FontSize.Size18 + AssetTypeLabel.Position = UDim2.new(0.5,3,1,-20) + AssetTypeLabel.Parent = PreviewAssetBacking + + + + local PreviewButton = Instance.new("TextButton") + PreviewButton.RobloxLocked = true + PreviewButton.Name = "PreviewButton" + PreviewButton.Text = "Rotate" + PreviewButton.BackgroundColor3 = Color3.new(0,0,0) + PreviewButton.BackgroundTransparency = 0.5 + PreviewButton.BorderColor3 = Color3.new(1,1,1) + PreviewButton.Position = UDim2.new(1.2,-62,1,-50) + PreviewButton.Size = UDim2.new(0,125,0,50) + PreviewButton.Font = Enum.Font.ArialBold + PreviewButton.FontSize = Enum.FontSize.Size24 + PreviewButton.TextColor3 = Color3.new(1,1,1) + PreviewButton.TextWrapped = true + PreviewButton.TextStrokeTransparency = 0 + PreviewButton.Parent = Wardrobe + + local CharacterPane = Instance.new("Frame") + CharacterPane.RobloxLocked = true + CharacterPane.Name = "CharacterPane" + CharacterPane.Position = UDim2.new(1,-220,0,32) + CharacterPane.Size = UDim2.new(0,220,1,-40) + CharacterPane.BackgroundTransparency = 1 + CharacterPane.Visible = true + CharacterPane.Parent = Wardrobe + + --CharacterPane Children + local FaceFrame = makeCharFrame("FacesFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75460621") + makeZone("FaceZone","http://www.roblox.com/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),FaceFrame) + makeStyledButton("Face",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),FaceFrame) + + local HeadFrame = makeCharFrame("HeadsFrame", CharacterPane) + makeZone("FaceZone","http://www.roblox.com/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),HeadFrame) + makeStyledButton("Head",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),HeadFrame) + + local HatsFrame = makeCharFrame("HatsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75457888") + local HatsZone = makeZone("HatsZone","http://www.roblox.com/asset/?id=75457888",UDim2.new(0,186,0,184),UDim2.new(0.5,-93,0.5,-100), HatsFrame) + makeStyledButton("Hat1Button",UDim2.new(0,64,0,64),UDim2.new(0,-1,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat2Button",UDim2.new(0,64,0,64),UDim2.new(0,63,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat3Button",UDim2.new(0,64,0,64),UDim2.new(0,127,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + + local PantsFrame = makeCharFrame("PantsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75457920") + makeZone("PantsZone","http://www.roblox.com/asset/?id=75457920",UDim2.new(0,121,0,99),UDim2.new(0.5,-60,0.5,-100),PantsFrame) + + local pantFrame = Instance.new("Frame") + pantFrame.RobloxLocked = true + pantFrame.Size = UDim2.new(0,25,0,56) + pantFrame.Position = UDim2.new(0.5,-26,0.5,0) + pantFrame.BackgroundColor3 = Color3.new(0,0,0) + pantFrame.BorderColor3 = Color3.new(1,1,1) + pantFrame.Name = "PantFrame" + pantFrame.Parent = PantsFrame + + local otherPantFrame = pantFrame:clone() + otherPantFrame.Position = UDim2.new(0.5,3,0.5,0) + otherPantFrame.RobloxLocked = true + otherPantFrame.Parent = PantsFrame + + local CurrentPants = Instance.new("ImageButton") + CurrentPants.RobloxLocked = true + CurrentPants.BackgroundTransparency = 1 + CurrentPants.ZIndex = 2 + CurrentPants.Name = "CurrentPants" + CurrentPants.Position = UDim2.new(0.5,-31,0.5,-4) + CurrentPants.Size = UDim2.new(0,54,0,59) + CurrentPants.Parent = PantsFrame + + local MeshFrame = makeCharFrame("PackagesFrame", CharacterPane) + local torsoButton = makeStyledButton("TorsoMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("TorsoLabel","Torso",UDim2.new(0.5,-16,0,-25),torsoButton) + local leftLegButton = makeStyledButton("LeftLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,0,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftLegLabel","Left Leg",UDim2.new(0.5,-16,0,-25),leftLegButton) + local rightLegButton = makeStyledButton("RightLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-64,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightLegLabel","Right Leg",UDim2.new(0.5,-16,0,-25),rightLegButton) + local rightArmButton = makeStyledButton("RightArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-96,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightArmLabel","Right Arm",UDim2.new(0.5,-16,0,-25),rightArmButton) + local leftArmButton = makeStyledButton("LeftArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftArmLabel","Left Arm",UDim2.new(0.5,-16,0,-25),leftArmButton) + + local TShirtFrame = makeCharFrame("T-ShirtsFrame",CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75460642") + makeZone("TShirtZone","http://www.roblox.com/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),TShirtFrame) + makeStyledButton("TShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),TShirtFrame) + + + local ShirtFrame = makeCharFrame("ShirtsFrame", CharacterPane) + makeZone("ShirtZone","http://www.roblox.com/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),ShirtFrame) + makeStyledButton("ShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),ShirtFrame) + + + local ColorFrame = makeCharFrame("ColorFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=76049888") + local ColorZone = makeZone("ColorZone","http://www.roblox.com/asset/?id=76049888", UDim2.new(0,120,0,150),UDim2.new(0.5,-60,0.5,-100),ColorFrame) + makeStyledButton("Head",UDim2.new(0.26,0,0.19,0),UDim2.new(0.37,0,0.02,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.78,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.025,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("Torso",UDim2.new(0.43,0,0.36,0),UDim2.new(0.28,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.275,0,0.67,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.525,0,0.67,0),ColorZone).AutoButtonColor = false + + -- Character Panel label (shows what category we are currently browsing) + local CategoryLabel = Instance.new("TextLabel") + CategoryLabel.RobloxLocked = true + CategoryLabel.Name = "CategoryLabel" + CategoryLabel.BackgroundTransparency = 1 + CategoryLabel.Font = Enum.Font.ArialBold + CategoryLabel.FontSize = Enum.FontSize.Size18 + CategoryLabel.Position = UDim2.new(0,0,0,-7) + CategoryLabel.Size = UDim2.new(1,0,0,20) + CategoryLabel.TextXAlignment = Enum.TextXAlignment.Center + CategoryLabel.Text = "All" + CategoryLabel.TextColor3 = Color3.new(1,1,1) + CategoryLabel.Parent = CharacterPane + + --Save Button + local SaveButton = Instance.new("TextButton") + SaveButton.RobloxLocked = true + SaveButton.Name = "SaveButton" + SaveButton.Size = UDim2.new(0.6,0,0,50) + SaveButton.Position = UDim2.new(0.2,0,1,-50) + SaveButton.Style = Enum.ButtonStyle.RobloxButton + SaveButton.Selected = false + SaveButton.Font = Enum.Font.ArialBold + SaveButton.FontSize = Enum.FontSize.Size18 + SaveButton.Text = "Save" + SaveButton.TextColor3 = Color3.new(1,1,1) + SaveButton.Parent = CharacterPane + +-- no need for this to stick around +script:remove() \ No newline at end of file diff --git a/app/files/CoreGui/53878053 b/app/files/CoreGui/53878053 new file mode 100644 index 0000000..79b5c9d --- /dev/null +++ b/app/files/CoreGui/53878053 @@ -0,0 +1,968 @@ +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +local RbxGui,msg = LoadLibrary("RbxGui") +if not RbxGui then print("could not find RbxGui!") return end + +--- Begin Locals +waitForChild(game,"Players") + +-- don't do anything if we are in an empty game +if #game.Players:GetChildren() < 1 then + game.Players.ChildAdded:wait() +end + +local tilde = "~" +local backquote = "`" +game:GetService("GuiService"):AddKey(tilde) -- register our keys +game:GetService("GuiService"):AddKey(backquote) + +local player = game.Players.LocalPlayer + +local backpack = script.Parent +local screen = script.Parent.Parent +local closeButton = backpack.Tabs.CloseButton + +local openCloseDebounce = false + +local backpackItems = {} + +local buttons = {} + +local debounce = false + +local guiTweenSpeed = 1 + +local backpackOldStateVisible = false +local browsingMenu = false + +local mouseEnterCons = {} +local mouseClickCons = {} + +local characterChildAddedCon = nil +local characterChildRemovedCon = nil +local backpackAddCon = nil +local humanoidDiedCon = nil +local backpackButtonClickCon = nil +local guiServiceKeyPressCon = nil + +waitForChild(player,"Backpack") +local playerBackpack = player.Backpack + +waitForChild(backpack,"Gear") +waitForChild(backpack.Gear,"GearPreview") +local gearPreview = backpack.Gear.GearPreview + +waitForChild(backpack.Gear,"GearGridScrollingArea") +local scroller = backpack.Gear.GearGridScrollingArea + +waitForChild(backpack.Parent,"CurrentLoadout") +local currentLoadout = backpack.Parent.CurrentLoadout + +waitForChild(backpack.Parent,"ControlFrame") +waitForChild(backpack.Parent.ControlFrame,"BackpackButton") +local backpackButton = backpack.Parent.ControlFrame.BackpackButton + +waitForChild(backpack.Gear,"GearGrid") +waitForChild(backpack.Gear.GearGrid,"GearButton") +local gearButton = backpack.Gear.GearGrid.GearButton +local grid = backpack.Gear.GearGrid + +waitForChild(backpack.Gear.GearGrid,"SearchFrame") +waitForChild(backpack.Gear.GearGrid.SearchFrame,"SearchBoxFrame") +waitForChild(backpack.Gear.GearGrid.SearchFrame.SearchBoxFrame,"SearchBox") +local searchBox = backpack.Gear.GearGrid.SearchFrame.SearchBoxFrame.SearchBox + +waitForChild(backpack.Gear.GearGrid.SearchFrame,"SearchButton") +local searchButton = backpack.Gear.GearGrid.SearchFrame.SearchButton + +waitForChild(backpack.Gear.GearGrid,"ResetFrame") +local resetFrame = backpack.Gear.GearGrid.ResetFrame + +waitForChild(backpack.Gear.GearGrid.ResetFrame,"ResetButtonBorder") +local resetButton = backpack.Gear.GearGrid.ResetFrame.ResetButtonBorder + +waitForChild(script.Parent,"SwapSlot") +local swapSlot = script.Parent.SwapSlot + + +-- creating scroll bar early as to make sure items get placed correctly +local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil, "grid", Vector2.new(4, 4)) + +scrollFrame.Position = UDim2.new(0,0,0,30) +scrollFrame.Size = UDim2.new(1,0,1,-30) +scrollFrame.Parent = backpack.Gear.GearGrid + +local scrollBar = Instance.new("Frame") +scrollBar.Name = "ScrollBar" +scrollBar.BackgroundTransparency = 0.9 +scrollBar.BackgroundColor3 = Color3.new(1,1,1) +scrollBar.BorderSizePixel = 0 +scrollBar.Size = UDim2.new(0, 17, 1, -36) +scrollBar.Position = UDim2.new(0,0,0,18) +scrollBar.Parent = scroller + +scrollDown.Position = UDim2.new(0,0,1,-17) + +scrollUp.Parent = scroller +scrollDown.Parent = scroller + +local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() + +scrollFrameLoadout.Position = UDim2.new(0,0,0,0) +scrollFrameLoadout.Size = UDim2.new(1,0,1,0) +scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList + +local LoadoutButton = Instance.new("TextButton") +LoadoutButton.RobloxLocked = true +LoadoutButton.Name = "LoadoutButton" +LoadoutButton.Font = Enum.Font.ArialBold +LoadoutButton.FontSize = Enum.FontSize.Size14 +LoadoutButton.Position = UDim2.new(0,0,0,0) +LoadoutButton.Size = UDim2.new(1,0,0,32) +LoadoutButton.Style = Enum.ButtonStyle.RobloxButton +LoadoutButton.Text = "Loadout #1" +LoadoutButton.TextColor3 = Color3.new(1,1,1) +LoadoutButton.Parent = scrollFrameLoadout + +local LoadoutButtonTwo = LoadoutButton:clone() +LoadoutButtonTwo.Text = "Loadout #2" +LoadoutButtonTwo.Parent = scrollFrameLoadout + +local LoadoutButtonThree = LoadoutButton:clone() +LoadoutButtonThree.Text = "Loadout #3" +LoadoutButtonThree.Parent = scrollFrameLoadout + +local LoadoutButtonFour = LoadoutButton:clone() +LoadoutButtonFour.Text = "Loadout #4" +LoadoutButtonFour.Parent = scrollFrameLoadout + +local scrollBarLoadout = Instance.new("Frame") +scrollBarLoadout.Name = "ScrollBarLoadout" +scrollBarLoadout.BackgroundTransparency = 0.9 +scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) +scrollBarLoadout.BorderSizePixel = 0 +scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) +scrollBarLoadout.Position = UDim2.new(0,0,0,18) +scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + +scrollDownLoadout.Position = UDim2.new(0,0,1,-17) + +scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea +scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + + +-- Begin Functions +function removeFromMap(map,object) + for i = 1, #map do + if map[i] == object then + table.remove(map,i) + break + end + end +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resize() + local size = 0 + if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then + size = gearPreview.AbsoluteSize.X * 0.75 + else + size = gearPreview.AbsoluteSize.Y * 0.75 + end + + gearPreview.GearImage.Size = UDim2.new(0,size,0,size) + gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) + + resizeGrid() +end + +function addToGrid(child) + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + return + end + end + if child:FindFirstChild("RobloxBuildTool") then return end + + for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered + if v == child then return end + end + + table.insert(backpackItems,child) + + local changeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if buttons[child] then + if buttons[child].Image == "" then + buttons[child].GearText.Text = child.Name + end + end + end + end) + local ancestryCon = nil + ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) + local thisObject = nil + for k,v in pairs(backpackItems) do + if v == child then + thisObject = v + break + end + end + + waitForProperty(player,"Character") + waitForChild(player,"Backpack") + if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then + if ancestryCon then ancestryCon:disconnect() end + if changeCon then changeCon:disconnect() end + + for k,v in pairs(backpackItems) do + if v == thisObject then + if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end + if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end + buttons[v].Parent = nil + buttons[v] = nil + break + end + end + + removeFromMap(backpackItems,thisObject) + + resizeGrid() + else + resizeGrid() + end + updateGridActive() + end) + resizeGrid() +end + +function buttonClick(button) + if button:FindFirstChild("UnequipContextMenu") and not button.Active then + button.UnequipContextMenu.Visible = true + browsingMenu = true + end +end + +function previewGear(button) + if not browsingMenu then + gearPreview.GearImage.Image = button.Image + gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name + end +end + +function findEmptySlot() + local smallestNum = nil + local loadout = currentLoadout:GetChildren() + for i = 1, #loadout do + if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then + local frameNum = tonumber(string.sub(loadout[i].Name,5)) + if frameNum == 0 then frameNum = 10 end + if not smallestNum or (smallestNum > frameNum) then + smallestNum = frameNum + end + end + end + if smallestNum == 10 then smallestNum = 0 end + return smallestNum +end + +function checkForSwap(button,x,y) + local loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then + if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + swapGearSlot(slot,button) + return true + end + end + end + end + return false +end + +function resizeGrid() + for k,v in pairs(backpackItems) do + if not v:FindFirstChild("RobloxBuildTool") then + if not buttons[v] then + local buttonClone = gearButton:clone() + buttonClone.Parent = grid.ScrollingFrame + buttonClone.Visible = true + buttonClone.Image = v.TextureId + if buttonClone.Image == "" then + buttonClone.GearText.Text = v.Name + end + + buttonClone.GearReference.Value = v + buttonClone.Draggable = true + buttons[v] = buttonClone + + local unequipMenu = getGearContextMenu() + + unequipMenu.Visible = false + unequipMenu.Parent = buttonClone + + local beginPos = nil + buttonClone.DragBegin:connect(function(value) + buttonClone.ZIndex = 9 + beginPos = value + end) + buttonClone.DragStopped:connect(function(x,y) + buttonClone.ZIndex = 1 + if beginPos ~= buttonClone.Position then + if not checkForSwap(buttonClone,x,y) then + buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) + buttonClone.Draggable = false + delay(0.5,function() + buttonClone.Draggable = true + end) + else + buttonClone.Position = beginPos + end + end + end) + local clickTime = tick() + mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) + mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() + local newClickTime = tick() + if buttonClone.Active and (newClickTime - clickTime) < 0.5 then + local slot = findEmptySlot() + if slot then + buttonClone.ZIndex = 1 + swapGearSlot(slot,buttonClone) + end + else + buttonClick(buttonClone) + end + clickTime = newClickTime + end) + end + end + end + recalculateScroll() +end + +function showPartialGrid(subset) + + resetFrame.Visible = true + + for k,v in pairs(buttons) do + v.Parent = nil + end + for k,v in pairs(subset) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function showEntireGrid() + resetFrame.Visible = false + + for k,v in pairs(buttons) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function inLoadout(gear) + local children = currentLoadout:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + local button = children[i]:GetChildren() + if #button > 0 then + if button[1].GearReference.Value and button[1].GearReference.Value == gear then + return true + end + end + end + end + return false +end + +function updateGridActive() + for k,v in pairs(backpackItems) do + if buttons[v] then + local gear = nil + local gearRef = buttons[v]:FindFirstChild("GearReference") + + if gearRef then gear = gearRef.Value end + + if not gear then + buttons[v].Active = false + elseif inLoadout(gear) then + buttons[v].Active = false + else + buttons[v].Active = true + end + end + end +end + +function centerGear(loadoutChildren) + local gearButtons = {} + local lastSlotAdd = nil + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function spreadOutGear(loadoutChildren) + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + if slot == 0 then slot = 10 end + loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end +end + +function openCloseBackpack(close) + if openCloseDebounce then return end + openCloseDebounce = true + + local visible = not backpack.Visible + if visible and not close then + updateGridActive() + local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + backpack.Visible = true + loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 0.5 + end + end + spreadOutGear(loadoutChildren) + end, + function() + backpack.Visible = false + end) + end) + backpackButton.Selected = true + backpack:TweenSizeAndPosition(UDim2.new(0.55, 0, 0.6, 0),UDim2.new(0.225, 0, 0.2, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed/2, true) + delay(guiTweenSpeed/2 + 0.01, + function() + local children = backpack:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + children[i].Visible = true + end + end + resizeGrid() + resize() + openCloseDebounce = false + end) + else + backpackButton.Selected = false + local children = backpack:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + children[i].Visible = false + end + end + loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 1 + end + end + centerGear(loadoutChildren) + + backpack:TweenSizeAndPosition(UDim2.new(0,0,0,0),UDim2.new(0.5,0,0.5,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed/2, true) + delay(guiTweenSpeed/2 + 0.01, + function() + backpack.Visible = visible + resizeGrid() + resize() + pcall(function() game.GuiService:RemoveCenterDialog(backpack) end) + openCloseDebounce = false + end) + end +end + +function loadoutCheck(child, selectState) + if not child:IsA("ImageButton") then return end + for k,v in pairs(backpackItems) do + if buttons[v] then + if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then + if buttons[v].GearReference.Value == child.GearReference.Value then + buttons[v].Active = selectState + break + end + end + end + end +end + +function clearPreview() + gearPreview.GearImage.Image = "" + gearPreview.GearStats.GearName.Text = "" +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + stuff[i].Parent = playerBackpack + end + end +end + +function equipGear(physGear) + removeAllEquippedGear(physGear) + physGear.Parent = player.Character + updateGridActive() +end + +function unequipGear(physGear) + physGear.Parent = playerBackpack + updateGridActive() +end + +function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) +end +function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function swapGearSlot(slot,gearButton) + if not swapSlot.Value then -- signal loadout to swap a gear out + swapSlot.Slot.Value = slot + swapSlot.GearButton.Value = gearButton + swapSlot.Value = true + updateGridActive() + end +end + + +local UnequipGearMenuClick = function(element, menu) + if type(element.Action) ~= "number" then return end + local num = element.Action + if num == 1 then -- remove from loadout + unequipGear(menu.Parent.GearReference.Value) + local inventoryButton = menu.Parent + local gearToUnequip = inventoryButton.GearReference.Value + local loadoutChildren = currentLoadout:GetChildren() + local slot = -1 + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local button = loadoutChildren[i]:GetChildren() + if button[1] and button[1].GearReference.Value == gearToUnequip then + slot = button[1].SlotNumber.Text + break + end + end + end + swapGearSlot(slot,nil) + end +end + +-- these next two functions are used to stop any use of backpack while the player is dead (can cause issues) +function activateBackpack() + backpack.Visible = backpackOldStateVisible + + loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 1 + end + end + + backpackButtonClickCon = backpackButton.MouseButton1Click:connect(function() openCloseBackpack() end) + guiServiceKeyPressCon = game:GetService("GuiService").KeyPressed:connect(function(key) + if key == tilde or key == backquote then + openCloseBackpack() + end + end) +end +function deactivateBackpack() + if backpackButtonClickCon then backpackButtonClickCon:disconnect() end + if guiServiceKeyPressCon then guiServiceKeyPressCon:disconnect() end + + backpackOldStateVisible = backpack.Visible + backpack.Visible = false + openCloseBackpack(true) +end + +function setupCharacterConnections() + + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + + -- make sure we get all the children + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) + end + + if characterChildAddedCon then characterChildAddedCon:disconnect() end + characterChildAddedCon = + game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) + addToGrid(child) + updateGridActive() + end) + + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + characterChildRemovedCon = + game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) + updateGridActive() + end) + + + if humanoidDiedCon then humanoidDiedCon:disconnect() end + local localPlayer = game.Players.LocalPlayer + waitForProperty(localPlayer,"Character") + waitForChild(localPlayer.Character,"Humanoid") + humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(function() deactivateBackpack() end) + + activateBackpack() + + wait() + centerGear(currentLoadout:GetChildren()) +end + +function removeCharacterConnections() + if characterChildAddedCon then characterChildAddedCon:disconnect() end + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + if backpackAddCon then backpackAddCon:disconnect() end +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function splitByWhiteSpace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 2 then + table.insert(terms,token) + end + end + return terms +end + +function filterGear(searchTerm) + string.lower(searchTerm) + searchTerm = trim(searchTerm) + if string.len(searchTerm) < 2 then return nil end + local terms = splitByWhiteSpace(searchTerm) + + local filteredGear = {} + for k,v in pairs(backpackItems) do + if buttons[v] then + local gearString = string.lower(buttons[v].GearReference.Value.Name) + gearString = trim(gearString) + for i = 1, #terms do + if string.match(gearString,terms[i]) then + table.insert(filteredGear,buttons[v]) + break + end + end + end + end + + return filteredGear +end + + +function showSearchGear() + local searchText = searchBox.Text + searchBox.Text = "Search..." + local filteredButtons = filterGear(searchText) + if filteredButtons and #filteredButtons > 0 then + showPartialGrid(filteredButtons) + else + showEntireGrid() + end +end + +function nukeBackpack() + while #buttons > 0 do + table.remove(buttons) + end + buttons = {} + while #backpackItems > 0 do + table.remove(backpackItems) + end + backpackItems = {} + local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() + for i = 1, #scrollingFrameChildren do + scrollingFrameChildren[i]:remove() + end +end + +function getGearContextMenu() + local gearContextMenu = Instance.new("Frame") + gearContextMenu.Active = true + gearContextMenu.Name = "UnequipContextMenu" + gearContextMenu.Size = UDim2.new(0,115,0,70) + gearContextMenu.Position = UDim2.new(0,-16,0,-16) + gearContextMenu.BackgroundTransparency = 1 + gearContextMenu.Visible = false + + local gearContextMenuButton = Instance.new("TextButton") + gearContextMenuButton.Name = "UnequipContextMenuButton" + gearContextMenuButton.Text = "" + gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault + gearContextMenuButton.ZIndex = 8 + gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) + gearContextMenuButton.Visible = true + gearContextMenuButton.Parent = gearContextMenu + + local elementHeight = 12 + + local contextMenuElements = {} + local contextMenuElementsName = {"Remove Hotkey"} + + for i = 1, #contextMenuElementsName do + local element = {} + element.Type = "Button" + element.Text = contextMenuElementsName[i] + element.Action = i + element.DoIt = UnequipGearMenuClick + table.insert(contextMenuElements,element) + end + + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + if element.Type == "Button" then + local button = Instance.new("TextButton") + button.Name = "UnequipContextButton" .. i + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderSizePixel = 0 + button.TextXAlignment = Enum.TextXAlignment.Left + button.Text = " " .. contextElement.Text + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size14 + button.Size = UDim2.new(1, 8, 0, elementHeight) + button.Position = UDim2.new(0,0,0,elementHeight * i) + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 9 + button.Parent = gearContextMenuButton + + button.MouseButton1Click:connect(function() + if button.Active and not gearContextMenu.Parent.Active then + local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) + browsingMenu = false + gearContextMenu.Visible = false + clearHighlight(button) + clearPreview() + end + end) + + button.MouseEnter:connect(function() + if button.Active and gearContextMenu.Parent.Active then + highlight(button) + end + end) + button.MouseLeave:connect(function() + if button.Active and gearContextMenu.Parent.Active then + clearHighlight(button) + end + end) + + contextElement.Button = button + contextElement.Element = button + elseif element.Type == "Label" then + local frame = Instance.new("Frame") + frame.Name = "ContextLabel" .. i + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1, 8, 0, elementHeight) + + local label = Instance.new("TextLabel") + label.Name = "Text1" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.0, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label1 = label + + if element.GetText2 then + label = Instance.new("TextLabel") + label.Name = "Text2" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Right + label.Font = Enum.Font.Arial + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.5, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label2 = label + end + frame.Parent = gearContextMenuButton + element.Label = frame + element.Element = frame + end + end + + gearContextMenu.ZIndex = 4 + gearContextMenu.MouseLeave:connect(function() + browsingMenu = false + gearContextMenu.Visible = false + clearPreview() + end) + robloxLock(gearContextMenu) + + return gearContextMenu +end + +local backpackChildren = player.Backpack:GetChildren() +for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) +end + +------------------------- Start Lifelong Connections ----------------------- +screen.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + if debounce then return end + debounce = true + wait() + resize() + resizeGrid() + debounce = false + end +end) + +currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) +currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) + +currentLoadout.DescendantAdded:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + centerGear(currentLoadout:GetChildren()) + end +end) +currentLoadout.DescendantRemoving:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + wait() + centerGear(currentLoadout:GetChildren()) + end +end) + +grid.MouseEnter:connect(function() clearPreview() end) +grid.MouseLeave:connect(function() clearPreview() end) + +player.CharacterRemoving:connect(function() + removeCharacterConnections() + nukeBackpack() +end) +player.CharacterAdded:connect(function() setupCharacterConnections() end) + +player.ChildAdded:connect(function(child) + if child:IsA("Backpack") then + playerBackpack = child + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + end +end) + +swapSlot.Changed:connect(function() + if not swapSlot.Value then + updateGridActive() + end +end) + +searchBox.FocusLost:connect(function(enterPressed) + if enterPressed then + showSearchGear() + end +end) + +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + loadoutChildren[i].ChildRemoved:connect(function() + updateGridActive() + end) + loadoutChildren[i].ChildAdded:connect(function() + updateGridActive() + end) + end +end + +pcall(function() closeButton.Modal = true end) +closeButton.MouseButton1Click:connect(function() openCloseBackpack() end) + +searchButton.MouseButton1Click:connect(function() showSearchGear() end) +resetButton.MouseButton1Click:connect(function() showEntireGrid() end) +------------------------- End Lifelong Connections ----------------------- + +resize() +resizeGrid() + +-- make sure any items in the loadout are accounted for in inventory +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + loadoutCheck(loadoutChildren[i], false) +end +if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end + +-- make sure that inventory is listening to gear reparenting +if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then + setupCharacterConnections() +end +if not backpackAddCon then + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) +end + +-- flip it on if we are good +if game.CoreGui.Version >= 3 then + backpackButton.Visible = true +end + +recalculateScrollLoadout() + + diff --git a/app/files/CoreGui/53878057 b/app/files/CoreGui/53878057 new file mode 100644 index 0000000..f74cba0 --- /dev/null +++ b/app/files/CoreGui/53878057 @@ -0,0 +1,1098 @@ +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +local useCoreHealthBar = false +pcall(function() useCoreHealthBar = Game.Players:GetUseCoreScriptHealthBar() end) + + +local currentLoadout = script.Parent +local StaticTabName = "gear" +local backpackEnabled = true + +local robloxGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") +assert(robloxGui) +local controlFrame = waitForChild(robloxGui, 'ControlFrame') +local backpackButton = waitForChild(controlFrame, 'BackpackButton') +local backpack = waitForChild(robloxGui, 'Backpack') +waitForChild(robloxGui,"CurrentLoadout") +waitForChild(robloxGui.CurrentLoadout,"TempSlot") +waitForChild(robloxGui.CurrentLoadout.TempSlot,"SlotNumber") + +waitForChild(currentLoadout, 'Background') +local clBackground = currentLoadout.Background + +local function IsTouchDevice() + return Game:GetService('UserInputService').TouchEnabled +end + +local function IsSmallScreen() + return (robloxGui.AbsoluteSize.Y <= 500) +end + +local function moveHealthBar(pGui) + waitForChild(pGui, 'HealthGUI') + waitForChild(pGui['HealthGUI'], 'tray') + local tray = pGui['HealthGUI']['tray'] + tray.Position = UDim2.new(0.5, -85, 1, -26) +end + +local function setHealthBarVisible( pGui, visible ) + waitForChild(pGui, 'HealthGUI') + waitForChild(pGui['HealthGUI'], 'tray') + local tray = pGui['HealthGUI']['tray'] + tray.Visible = visible +end + + +--- Begin Locals +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +if not useCoreHealthBar then + waitForChild(player, 'PlayerGui') + Spawn(function() + moveHealthBar(player.PlayerGui) + end) +end + +while player.Character == nil do wait(0.03) end +local humanoid = waitForChild(player.Character, 'Humanoid') +humanoid.Died:connect(function() + backpackButton.Visible = false +end) + +waitForChild(game, "LocalBackpack") +game.LocalBackpack:SetOldSchoolBackpack(false) + +waitForChild(currentLoadout.Parent,"Backpack") +local guiBackpack = currentLoadout.Parent.Backpack + +local backpackManager = waitForChild(guiBackpack,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") + +local inGearTab = true + +local maxNumLoadoutItems = 10 +if IsSmallScreen() then + maxNumLoadoutItems = 4 +end + + +local characterChildAddedCon = nil +local backpackChildCon = nil + +local debounce = false + +local enlargeFactor = 1.18 +local buttonSizeEnlarge = UDim2.new(1 * enlargeFactor,0,1 * enlargeFactor,0) +local buttonSizeNormal = UDim2.new(1,0,1,0) +local enlargeOverride = true +local guiTweenSpeed = 0.5 + +local firstInstanceOfLoadout = false + +local inventory = {} + +local gearSlots = {} +for i = 1, maxNumLoadoutItems do + gearSlots[i] = "empty" +end + +local backpackWasOpened = false +--- End Locals + + + + + + +-- Begin Functions +local function backpackIsOpen() + if guiBackpack then + return guiBackpack.Visible + end + return false +end + + +local function kill(prop,con,gear) + if con then con:disconnect() end + if prop == true and gear then + reorganizeLoadout(gear,false) + end +end + +function registerNumberKeys() + for i = 0, 9 do + game:GetService("GuiService"):AddKey(tostring(i)) + end +end + +function unregisterNumberKeys() + for i = 0, 9 do + game:GetService("GuiService"):RemoveKey(tostring(i)) + end +end + +function characterInWorkspace() + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer["Character"] then + if game.Players.LocalPlayer.Character ~= nil then + if game.Players.LocalPlayer.Character.Parent ~= nil then + return true + end + end + end + end + + return false +end + +function removeGear(gear) + local emptySlot = nil + for i = 1, #gearSlots do + if gearSlots[i] == gear and gear.Parent ~= nil then + emptySlot = i + break + end + end + if emptySlot then + if gearSlots[emptySlot].GearReference.Value then + if gearSlots[emptySlot].GearReference.Value.Parent == game.Players.LocalPlayer.Character then -- if we currently have this equipped, unequip it + gearSlots[emptySlot].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + + if gearSlots[emptySlot].GearReference.Value:IsA("HopperBin") and gearSlots[emptySlot].GearReference.Value.Active then -- this is an active hopperbin + gearSlots[emptySlot].GearReference.Value:Disable() + gearSlots[emptySlot].GearReference.Value.Active = false + end + end + + gearSlots[emptySlot] = "empty" + + local centerizeX = gear.Size.X.Scale/2 + local centerizeY = gear.Size.Y.Scale/2 + --[[gear:TweenSizeAndPosition(UDim2.new(0,0,0,0), + UDim2.new(gear.Position.X.Scale + centerizeX,gear.Position.X.Offset,gear.Position.Y.Scale + centerizeY,gear.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/4,true)]] + delay(0, + function() + gear:remove() + end) + + Spawn(function() + while backpackIsOpen() do wait(0.03) end + waitForChild(player, 'Backpack') + local allEmpty = true + for i = 1, #gearSlots do + if gearSlots[i] ~= 'empty' then + allEmpty = false + end + end + + if allEmpty then + if #player.Backpack:GetChildren() < 1 then + backpackButton.Visible = false + else + backpackButton.Position = UDim2.new(0.5, -60, 1, -44) + end + clBackground.Visible = false + end + end) + end +end + +function insertGear(gear, addToSlot) + local pos = nil + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + pos = i + break + end + end + + if pos == 1 and gearSlots[1] ~= "empty" then gear:remove() return end -- we are currently full, can't add in + else + pos = addToSlot + -- push all gear down one slot + local start = 1 + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + start = i + break + end + end + for i = start, pos + 1, -1 do + gearSlots[i] = gearSlots[i - 1] + if i == 10 then + gearSlots[i].SlotNumber.Text = "0" + gearSlots[i].SlotNumberDownShadow.Text = "0" + gearSlots[i].SlotNumberUpShadow.Text = "0" + else + gearSlots[i].SlotNumber.Text = i + gearSlots[i].SlotNumberDownShadow.Text = i + gearSlots[i].SlotNumberUpShadow.Text = i + end + end + end + + gearSlots[pos] = gear + if pos ~= maxNumLoadoutItems then + if(type(tostring(pos)) == "string") then + local posString = tostring(pos) + gear.SlotNumber.Text = posString + gear.SlotNumberDownShadow.Text = posString + gear.SlotNumberUpShadow.Text = posString + end + else -- tenth gear doesn't follow mathematical pattern :( + gear.SlotNumber.Text = "0" + gear.SlotNumberDownShadow.Text = "0" + gear.SlotNumberUpShadow.Text = "0" + end + gear.Visible = true + + local con = nil + con = gear.Kill.Changed:connect(function(prop) kill(prop,con,gear) end) +end + + +function reorganizeLoadout(gear, inserting, equipped, addToSlot) + if inserting then -- add in gear + insertGear(gear, addToSlot) + else + removeGear(gear) + end + if gear ~= "empty" then gear.ZIndex = 1 end +end + +function checkToolAncestry(child,parent) + if child:FindFirstChild("RobloxBuildTool") then return end -- don't show roblox build tools + if child:IsA("Tool") or child:IsA("HopperBin") then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then + if parent == nil then + gearSlots[i].Kill.Value = true + return false + elseif child.Parent == player.Character then + gearSlots[i].Selected = true + return true + elseif child.Parent == player.Backpack then + if child:IsA("Tool") or child:IsA("HopperBin") then gearSlots[i].Selected = false end + return true + else + gearSlots[i].Kill.Value = true + return false + end + return true + end + end + end +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + if stuff[i]:IsA("Tool") then stuff[i].Parent = player.Backpack end + if stuff[i]:IsA("HopperBin") then + stuff[i]:Disable() + end + end + end +end + +function hopperBinSwitcher(numKey, physGear) + if not physGear then return end + + physGear:ToggleSelect() + + if gearSlots[numKey] == "empty" then return end + + if not physGear.Active then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + else + gearSlots[numKey].Selected = true + enlargeButton(gearSlots[numKey]) + end +end + +function toolSwitcher(numKey) + + if not gearSlots[numKey] then return end + local physGear = gearSlots[numKey].GearReference.Value + if physGear == nil then return end + + removeAllEquippedGear(physGear) -- we don't remove this gear, as then we get a double switcheroo + + local key = numKey + if numKey == 0 then key = 10 end + + for i = 1, #gearSlots do + if gearSlots[i] and gearSlots[i] ~= "empty" and i ~= key then + normalizeButton(gearSlots[i]) + gearSlots[i].Selected = false + if gearSlots[i].GearReference and gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value:IsA("HopperBin") and gearSlots[i].GearReference.Value.Active then + gearSlots[i].GearReference.Value:ToggleSelect() + end + end + end + + if physGear:IsA("HopperBin") then + hopperBinSwitcher(numKey,physGear) + else + if physGear.Parent == player.Character then + physGear.Parent = player.Backpack + + if gearSlots[numKey] ~= "empty" then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + end + else + --player.Character.Humanoid:EquipTool(physGear) + + physGear.Parent = player.Character + gearSlots[numKey].Selected = true + + enlargeButton(gearSlots[numKey]) + end + end +end + + +function activateGear(num) + local numKey = nil + if num == "0" then + numKey = 10 -- why do lua indexes have to start at 1? :( + else + numKey = tonumber(num) + end + + if(numKey == nil) then return end + + if gearSlots[numKey] ~= "empty" then + toolSwitcher(numKey) + end +end + + +enlargeButton = function(button) + if button.Size.Y.Scale > 1 then return end + if not button.Parent then return end + if not button.Selected then return end + + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i]) + end + end + + if not enlargeOverride then + return + end + + if button:FindFirstChild('Highlight') then + button.Highlight.Visible = true + end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 5 + local centerizeX = -(buttonSizeEnlarge.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeEnlarge.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeEnlarge, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/5,enlargeOverride) + end +end + +normalizeAllButtons = function() + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i],0.1) + end + end +end + + +normalizeButton = function(button, speed) + if not button then return end + if button.Size.Y.Scale <= 1 then return end + if button.Selected then return end + if not button.Parent then return end + + local moveSpeed = speed + if moveSpeed == nil or type(moveSpeed) ~= "number" then moveSpeed = guiTweenSpeed/5 end + + if button:FindFirstChild('Highlight') then + button.Highlight.Visible = false + end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 1 + local inverseEnlarge = 1/enlargeFactor + local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeNormal, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,moveSpeed,enlargeOverride) + end +end + +local waitForDebounce = function() + while debounce do + wait() + end +end + +function pointInRectangle(point,rectTopLeft,rectSize) + if point.x > rectTopLeft.x and point.x < (rectTopLeft.x + rectSize.x) then + if point.y > rectTopLeft.y and point.y < (rectTopLeft.y + rectSize.y) then + return true + end + end + return false +end + +function swapGear(gearClone,toFrame) + local toFrameChildren = toFrame:GetChildren() + if #toFrameChildren == 1 then + if toFrameChildren[1]:FindFirstChild("SlotNumber") then + + local toSlot = tonumber(toFrameChildren[1].SlotNumber.Text) + local gearCloneSlot = tonumber(gearClone.SlotNumber.Text) + if toSlot == 0 then toSlot = 10 end + if gearCloneSlot == 0 then gearCloneSlot = 10 end + + gearSlots[toSlot] = gearClone + gearSlots[gearCloneSlot] = toFrameChildren[1] + + toFrameChildren[1].SlotNumber.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberDownShadow.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberUpShadow.Text = gearClone.SlotNumber.Text + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + toFrameChildren[1].Position = UDim2.new(toFrameChildren[1].Position.X.Scale,0,toFrameChildren[1].Position.Y.Scale,0) + + toFrameChildren[1].Parent = gearClone.Parent + gearClone.Parent = toFrame + end + else + local slotNum = tonumber(gearClone.SlotNumber.Text) + if slotNum == 0 then slotNum = 10 end + gearSlots[slotNum] = "empty" -- reset this gear slot + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + local toSlotNum = tonumber(gearClone.SlotNumber.Text) + if toSlotNum == 0 then toSlotNum = 10 end + gearSlots[toSlotNum] = gearClone + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + gearClone.Parent = toFrame + end +end + +function resolveDrag(gearClone,x,y) + local mousePoint = Vector2.new(x,y) + + local frame = gearClone.Parent + local frames = frame.Parent:GetChildren() + + for i = 1, #frames do + if frames[i]:IsA("Frame") then + if pointInRectangle(mousePoint, frames[i].AbsolutePosition,frames[i].AbsoluteSize) then + swapGear(gearClone,frames[i]) + return true + end + end + end + + if x < frame.AbsolutePosition.x or x > ( frame.AbsolutePosition.x + frame.AbsoluteSize.x ) then + reorganizeLoadout(gearClone,false) + return false + elseif y < frame.AbsolutePosition.y or y > ( frame.AbsolutePosition.y + frame.AbsoluteSize.y ) then + reorganizeLoadout(gearClone,false) + return false + else + if dragBeginPos then gearClone.Position = dragBeginPos end + return -1 + end +end + +function unequipAllItems(dontEquipThis) + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value ~= dontEquipThis then + if gearSlots[i].GearReference.Value:IsA("HopperBin") then + gearSlots[i].GearReference.Value:Disable() + elseif gearSlots[i].GearReference.Value:IsA("Tool") then + gearSlots[i].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + gearSlots[i].Selected = false + end + end +end + +function showToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") and not IsTouchDevice() then + button.ToolTipLabel.Text = tostring(tip) + local xSize = button.ToolTipLabel.TextBounds.X + 6 + button.ToolTipLabel.Size = UDim2.new(0,xSize,0,20) + button.ToolTipLabel.Position = UDim2.new(0.5,-xSize/2,0,-30) + button.ToolTipLabel.Visible = true + end +end + +function hideToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then + button.ToolTipLabel.Visible = false + end +end + +local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButton) + waitForDebounce() + debounce = true + + if child:FindFirstChild("RobloxBuildTool") then debounce = false return end -- don't show roblox build tools + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + debounce = false + return -- we don't care about anything besides tools (sigh...) + end + end + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then -- we already have gear, do nothing + debounce = false + return + end + end + end + + local gearClone = currentLoadout.TempSlot:clone() + gearClone.Name = child.Name + gearClone.GearImage.Image = child.TextureId + if gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + gearClone.GearReference.Value = child + + gearClone.MouseEnter:connect(function() + local gear = gearClone.GearReference and gearClone.GearReference.Value + if gear:IsA("Tool") and gear.ToolTip ~= "" then + showToolTip(gearClone, gear.ToolTip) + end + end) + + gearClone.MouseLeave:connect(function() + local gear = gearClone.GearReference and gearClone.GearReference.Value + if gear:IsA("Tool") and gear.ToolTip ~= "" then + hideToolTip(gearClone, gear.ToolTip) + end + end) + + gearClone.RobloxLocked = true + + local slotToMod = -1 + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + slotToMod = i + break + end + end + else + slotToMod = addToSlot + end + + if slotToMod == - 1 then -- No available slot to add in! + debounce = false + return + end + + local slotNum = slotToMod % 10 + local parent = currentLoadout:FindFirstChild("Slot"..tostring(slotNum)) + gearClone.Parent = parent + + if inventoryGearButton then + local absolutePositionFinal = inventoryGearButton.AbsolutePosition + local currentAbsolutePosition = gearClone.AbsolutePosition + local diff = absolutePositionFinal - currentAbsolutePosition + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,diff.x,gearClone.Position.Y.Scale,diff.y) + gearClone.ZIndex = 4 + end + + if addToSlot then + reorganizeLoadout(gearClone, true, equipped, addToSlot) + else + reorganizeLoadout(gearClone, true) + end + + if gearClone.Parent == nil then debounce = false return end -- couldn't fit in (hopper is full!) + + if equipped then + gearClone.Selected = true + unequipAllItems(child) + delay(guiTweenSpeed + 0.01,function() -- if our gear is equipped, we will want to enlarge it when done moving + if gearClone:FindFirstChild("GearReference") and ( (gearClone.GearReference.Value:IsA("Tool") and gearClone.GearReference.Value.Parent == player.Character) or + (gearClone.GearReference.Value:IsA("HopperBin") and gearClone.GearReference.Value.Active == true) ) then + enlargeButton(gearClone) + end + end) + end + + local dragBeginPos = nil + local clickCon, buttonDeleteCon, mouseEnterCon, mouseLeaveCon, dragStop, dragBegin = nil + clickCon = gearClone.MouseButton1Click:connect(function() + if characterInWorkspace() then + if not gearClone.Draggable then + activateGear(gearClone.SlotNumber.Text) + end + end + end) + mouseEnterCon = gearClone.MouseEnter:connect(function() + if guiBackpack.Visible then + gearClone.Draggable = true + end + end) + dragBegin = gearClone.DragBegin:connect(function(pos) + dragBeginPos = pos + gearClone.ZIndex = 7 + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 8 + else + children[i].ZIndex = 9 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 7 + end + end + end) + dragStop = gearClone.DragStopped:connect(function(x,y) + if gearClone.Selected then + gearClone.ZIndex = 4 + else + gearClone.ZIndex = 3 + end + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 3 + else + children[i].ZIndex = 4 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 2 + end + end + resolveDrag(gearClone,x,y) + end) + mouseLeaveCon = gearClone.MouseLeave:connect(function() + gearClone.Draggable = false + end) + buttonDeleteCon = gearClone.AncestryChanged:connect(function() + if gearClone.Parent and gearClone.Parent.Parent == currentLoadout then return end + if clickCon then clickCon:disconnect() end + if buttonDeleteCon then buttonDeleteCon:disconnect() end + if mouseEnterCon then mouseEnterCon:disconnect() end + if mouseLeaveCon then mouseLeaveCon:disconnect() end + if dragStop then dragStop:disconnect() end + if dragBegin then dragBegin:disconnect() end + end) -- this probably isn't necessary since objects are being deleted (probably), but this might still leak just in case + + local childCon = nil + local childChangeCon = nil + childCon = child.AncestryChanged:connect(function(newChild,parent) + if not checkToolAncestry(newChild,parent) then + if childCon then childCon:disconnect() end + if childChangeCon then childChangeCon:disconnect() end + removeFromInventory(child) + elseif parent == game.Players.LocalPlayer.Backpack then + normalizeButton(gearClone) + end + end) + + childChangeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if gearClone and gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + elseif prop == "Active" then + if child and child:IsA("HopperBin") then + if not child.Active then + gearClone.Selected = false + normalizeButton(gearClone) + end + end + elseif prop == "TextureId" then + gearClone.GearImage.Image = child.TextureId + end + end) + + debounce = false + + Spawn(function() + while backpackIsOpen() do wait(0.03) end + for i = 1, #gearSlots do + if gearSlots[i] ~= 'empty' then + backpackButton.Position = UDim2.new(0.5, -60, 1, -108) + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + end + end + end) +end + +function addToInventory(child) + if not child:IsA("Tool") or not child:IsA("HopperBin") then return end + + local slot = nil + for i = 1, #inventory do + if inventory[i] and inventory[i] == child then return end + if not inventory[i] then slot = i end + end + if slot then + inventory[slot] = child + elseif #inventory < 1 then + inventory[1] = child + else + inventory[#inventory + 1] = child + end +end + +function removeFromInventory(child) + for i = 1, #inventory do + if inventory[i] == child then + table.remove(inventory,i) + inventory[i] = nil + end + end +end + +local spreadOutGear = function() + loadoutChildren = currentLoadout:GetChildren() + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 0.5 + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + if slot == 0 then slot = 10 end + if IsSmallScreen() then + loadoutChildren[i]:TweenPosition(UDim2.new(0,(slot-1) * 60,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + else + loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end + end +end + +local centerGear = function() + loadoutChildren = currentLoadout:GetChildren() + local gearButtons = {} + local lastSlotAdd = nil + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + if #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + loadoutChildren[i].BackgroundTransparency = 1 + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + if IsSmallScreen() then + startPos = ( 0.5 - (#gearButtons * 0.333)/2 ) + gearButtons[i]:TweenPosition(UDim2.new(startPos + (i-1) * 0.33, 0, 0, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + else + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end +end + +function editLoadout() + backpackWasOpened = true + if inGearTab then + spreadOutGear() + end +end + +function readonlyLoadout() + if not inGearTab then + centerGear() + end +end + +function setupBackpackListener() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + backpackChildCon = player.Backpack.ChildAdded:connect(function(child) + if not firstInstanceOfLoadout then + firstInstanceOfLoadout = true + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + end + addingPlayerChild(child) + addToInventory(child) + end) +end + +function playerCharacterChildAdded(child) + addingPlayerChild(child,true) + addToInventory(child) +end + +function activateLoadout() + currentLoadout.Visible = true +end + +function deactivateLoadout() + currentLoadout.Visible = false +end + +function tabHandler(inFocus) + inGearTab = inFocus + if inFocus then + editLoadout() + else + readonlyLoadout() + end +end + +function coreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then + backpackButton.Visible = enabled + clBackground.Visible = enabled + backpackEnabled = enabled + + if enabled then + registerNumberKeys() + else + unregisterNumberKeys() + end + end + + if not useCoreHealthBar and coreGuiType == Enum.CoreGuiType.Health or coreGuiType == Enum.CoreGuiType.All then + setHealthBarVisible(game.Players.LocalPlayer.PlayerGui, enabled) + end +end +-- End Functions + + + + + + +-- Begin Script +registerNumberKeys() + +coreGuiChanged(Enum.CoreGuiType.Backpack, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) +if not useCoreHealthBar then + coreGuiChanged(Enum.CoreGuiType.Health, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health)) +end +Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) + +wait() -- let stuff initialize incase this is first heartbeat... + +waitForChild(player,"Backpack") +waitForProperty(player,"Character") + +-- not sure why this had no delay but the player.CharacterAdded one had one... this type of error would be easier to avoid with function reusage +delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() +end) + +delay(2, function() + --while true do + if not backpackWasOpened then + if IsSmallScreen() then + local cChildren = currentLoadout:GetChildren() + for i = 1, #cChildren do + local slotNum = tonumber(string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))) + if type(slotNum) == 'number' then + cChildren[i].Position = UDim2.new(0, (slotNum-1) * 60, 0, 0) + end + end + end + end + wait(0.25) + --end +end) + +if not useCoreHealthBar then + player.ChildAdded:connect(function(child) + if child:IsA('PlayerGui') then + moveHealthBar(child) + end + end) +end + +waitForProperty(player,"Character") +for i,v in ipairs(player.Character:GetChildren()) do + playerCharacterChildAdded(v) +end +characterChildAddedCon = player.Character.ChildAdded:connect(function(child) playerCharacterChildAdded(child) end) + +waitForChild(player.Character,"Humanoid") +humanoidDiedCon = player.Character.Humanoid.Died:connect(function() + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + deactivateLoadout() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + backpackWasOpened = false +end) + +player.CharacterRemoving:connect(function() + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" then + gearSlots[i].Parent = nil + gearSlots[i] = "empty" + end + end +end) + +player.CharacterAdded:connect(function() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer -- make sure we are still looking at the correct character + waitForChild(player,"Backpack") + + + delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() + end) + + activateLoadout() + + if characterChildAddedCon then + characterChildAddedCon:disconnect() + characterChildAddedCon = nil + end + + characterChildAddedCon = + player.Character.ChildAdded:connect(function(child) + addingPlayerChild(child,true) + end) + + waitForChild(player.Character,"Humanoid") + if backpack.Visible then + backpackOpenEvent:Fire() + end + humanoidDiedCon = + player.Character.Humanoid.Died:connect(function() + if backpackEnabled then + backpackButton.Visible = false + clBackground.Visible = false + end + firstInstanceOfLoadout = false + deactivateLoadout() + + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + end) + if not useCoreHealthBar then + waitForChild(player, 'PlayerGui') + moveHealthBar(player.PlayerGui) + end + delay(2, function() + --while true do + if not backpackWasOpened then + if IsSmallScreen() then + local cChildren = currentLoadout:GetChildren() + for i = 1, #cChildren do + local slotNum = tonumber(string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))) + if type(slotNum) == 'number' then + cChildren[i].Position = UDim2.new(0, (slotNum-1) * 60, 0, 0) + end + end + end + end + wait(0.25) + --end + end) +end) + +waitForChild(guiBackpack,"SwapSlot") +guiBackpack.SwapSlot.Changed:connect(function() + if guiBackpack.SwapSlot.Value then + local swapSlot = guiBackpack.SwapSlot + local pos = swapSlot.Slot.Value + if pos == 0 then pos = 10 end + if gearSlots[pos] then + reorganizeLoadout(gearSlots[pos],false) + end + if swapSlot.GearButton.Value then + addingPlayerChild(swapSlot.GearButton.Value.GearReference.Value,false,pos) + end + guiBackpack.SwapSlot.Value = false + end +end) + +game:GetService("GuiService").KeyPressed:connect(function(key) + if characterInWorkspace() then + activateGear(key) + end +end) + +backpackOpenEvent.Event:connect(editLoadout) +backpackCloseEvent.Event:connect(centerGear) +tabClickedEvent.Event:connect(function ( tabName ) + tabHandler(tabName == StaticTabName) +end) diff --git a/app/files/CoreGui/53878058 b/app/files/CoreGui/53878058 new file mode 100644 index 0000000..a763e8c --- /dev/null +++ b/app/files/CoreGui/53878058 @@ -0,0 +1,883 @@ +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +local currentLoadout = script.Parent +local StaticTabName = "gear" + +local robloxGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") +assert(robloxGui) +waitForChild(robloxGui,"CurrentLoadout") +waitForChild(robloxGui.CurrentLoadout,"TempSlot") +waitForChild(robloxGui.CurrentLoadout.TempSlot,"SlotNumber") + + +--- Begin Locals +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +waitForChild(game, "LocalBackpack") +game.LocalBackpack:SetOldSchoolBackpack(false) + +waitForChild(currentLoadout.Parent,"Backpack") +local guiBackpack = currentLoadout.Parent.Backpack + +local backpackManager = waitForChild(guiBackpack,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") + +local inGearTab = true + +local maxNumLoadoutItems = 10 + +local characterChildAddedCon = nil +local backpackChildCon = nil + +local debounce = false + +local enlargeFactor = 1.18 +local buttonSizeEnlarge = UDim2.new(1 * enlargeFactor,0,1 * enlargeFactor,0) +local buttonSizeNormal = UDim2.new(1,0,1,0) +local enlargeOverride = true +local guiTweenSpeed = 0.5 + +local inventory = {} + +for i = 0, 9 do + game:GetService("GuiService"):AddKey(tostring(i)) -- register our keys +end + +local gearSlots = {} +for i = 1, maxNumLoadoutItems do + gearSlots[i] = "empty" +end +--- End Locals + + + + + + +-- Begin Functions +local function kill(prop,con,gear) + if con then con:disconnect() end + if prop == true and gear then + reorganizeLoadout(gear,false) + end +end + +function characterInWorkspace() + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer["Character"] then + if game.Players.LocalPlayer.Character ~= nil then + if game.Players.LocalPlayer.Character.Parent ~= nil then + return true + end + end + end + end + + return false +end + +function removeGear(gear) + local emptySlot = nil + for i = 1, #gearSlots do + if gearSlots[i] == gear and gear.Parent ~= nil then + emptySlot = i + break + end + end + if emptySlot then + if gearSlots[emptySlot].GearReference.Value then + if gearSlots[emptySlot].GearReference.Value.Parent == game.Players.LocalPlayer.Character then -- if we currently have this equipped, unequip it + gearSlots[emptySlot].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + + if gearSlots[emptySlot].GearReference.Value:IsA("HopperBin") and gearSlots[emptySlot].GearReference.Value.Active then -- this is an active hopperbin + gearSlots[emptySlot].GearReference.Value:Disable() + gearSlots[emptySlot].GearReference.Value.Active = false + end + end + + gearSlots[emptySlot] = "empty" + + local centerizeX = gear.Size.X.Scale/2 + local centerizeY = gear.Size.Y.Scale/2 + gear:TweenSizeAndPosition(UDim2.new(0,0,0,0), + UDim2.new(gear.Position.X.Scale + centerizeX,gear.Position.X.Offset,gear.Position.Y.Scale + centerizeY,gear.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/4,true) + delay(guiTweenSpeed/2, + function() + gear:remove() + end) + end +end + +function insertGear(gear, addToSlot) + local pos = nil + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + pos = i + break + end + end + + if pos == 1 and gearSlots[1] ~= "empty" then gear:remove() return end -- we are currently full, can't add in + else + pos = addToSlot + -- push all gear down one slot + local start = 1 + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + start = i + break + end + end + for i = start, pos + 1, -1 do + gearSlots[i] = gearSlots[i - 1] + if i == 10 then + gearSlots[i].SlotNumber.Text = "0" + gearSlots[i].SlotNumberDownShadow.Text = "0" + gearSlots[i].SlotNumberUpShadow.Text = "0" + else + gearSlots[i].SlotNumber.Text = i + gearSlots[i].SlotNumberDownShadow.Text = i + gearSlots[i].SlotNumberUpShadow.Text = i + end + end + end + + gearSlots[pos] = gear + if pos ~= maxNumLoadoutItems then + if(type(tostring(pos)) == "string") then + local posString = tostring(pos) + gear.SlotNumber.Text = posString + gear.SlotNumberDownShadow.Text = posString + gear.SlotNumberUpShadow.Text = posString + end + else -- tenth gear doesn't follow mathematical pattern :( + gear.SlotNumber.Text = "0" + gear.SlotNumberDownShadow.Text = "0" + gear.SlotNumberUpShadow.Text = "0" + end + gear.Visible = true + + local con = nil + con = gear.Kill.Changed:connect(function(prop) kill(prop,con,gear) end) +end + + +function reorganizeLoadout(gear, inserting, equipped, addToSlot) + if inserting then -- add in gear + insertGear(gear, addToSlot) + else + removeGear(gear) + end + if gear ~= "empty" then gear.ZIndex = 1 end +end + +function checkToolAncestry(child,parent) + if child:FindFirstChild("RobloxBuildTool") then return end -- don't show roblox build tools + if child:IsA("Tool") or child:IsA("HopperBin") then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then + if parent == nil then + gearSlots[i].Kill.Value = true + return false + elseif child.Parent == player.Character then + gearSlots[i].Selected = true + return true + elseif child.Parent == player.Backpack then + if child:IsA("Tool") or child:IsA("HopperBin") then gearSlots[i].Selected = false end + return true + else + gearSlots[i].Kill.Value = true + return false + end + return true + end + end + end +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + if stuff[i]:IsA("Tool") then stuff[i].Parent = player.Backpack end + if stuff[i]:IsA("HopperBin") then + stuff[i]:Disable() + end + end + end +end + +function hopperBinSwitcher(numKey, physGear) + if not physGear then return end + + physGear:ToggleSelect() + + if gearSlots[numKey] == "empty" then return end + + if not physGear.Active then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + else + gearSlots[numKey].Selected = true + enlargeButton(gearSlots[numKey]) + end +end + +function toolSwitcher(numKey) + + if not gearSlots[numKey] then return end + local physGear = gearSlots[numKey].GearReference.Value + if physGear == nil then return end + + removeAllEquippedGear(physGear) -- we don't remove this gear, as then we get a double switcheroo + + local key = numKey + if numKey == 0 then key = 10 end + + for i = 1, #gearSlots do + if gearSlots[i] and gearSlots[i] ~= "empty" and i ~= key then + normalizeButton(gearSlots[i]) + gearSlots[i].Selected = false + if gearSlots[i].GearReference and gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value:IsA("HopperBin") and gearSlots[i].GearReference.Value.Active then + gearSlots[i].GearReference.Value:ToggleSelect() + end + end + end + + if physGear:IsA("HopperBin") then + hopperBinSwitcher(numKey,physGear) + else + if physGear.Parent == player.Character then + physGear.Parent = player.Backpack + + if gearSlots[numKey] ~= "empty" then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + end + else + --player.Character.Humanoid:EquipTool(physGear) + + physGear.Parent = player.Character + gearSlots[numKey].Selected = true + + enlargeButton(gearSlots[numKey]) + end + end +end + + +function activateGear(num) + local numKey = nil + if num == "0" then + numKey = 10 -- why do lua indexes have to start at 1? :( + else + numKey = tonumber(num) + end + + if(numKey == nil) then return end + + if gearSlots[numKey] ~= "empty" then + toolSwitcher(numKey) + end +end + + +enlargeButton = function(button) + if button.Size.Y.Scale > 1 then return end + if not button.Parent then return end + if not button.Selected then return end + + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i]) + end + end + + if not enlargeOverride then + return + end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 2 + local centerizeX = -(buttonSizeEnlarge.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeEnlarge.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeEnlarge, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/5,enlargeOverride) + end +end + +normalizeAllButtons = function() + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i],0.1) + end + end +end + + +normalizeButton = function(button, speed) + if not button then return end + if button.Size.Y.Scale <= 1 then return end + if button.Selected then return end + if not button.Parent then return end + + local moveSpeed = speed + if moveSpeed == nil or type(moveSpeed) ~= "number" then moveSpeed = guiTweenSpeed/5 end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 1 + local inverseEnlarge = 1/enlargeFactor + local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeNormal, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,moveSpeed,enlargeOverride) + end +end + +local waitForDebounce = function() + while debounce do + wait() + end +end + +function pointInRectangle(point,rectTopLeft,rectSize) + if point.x > rectTopLeft.x and point.x < (rectTopLeft.x + rectSize.x) then + if point.y > rectTopLeft.y and point.y < (rectTopLeft.y + rectSize.y) then + return true + end + end + return false +end + +function swapGear(gearClone,toFrame) + local toFrameChildren = toFrame:GetChildren() + if #toFrameChildren == 1 then + if toFrameChildren[1]:FindFirstChild("SlotNumber") then + + local toSlot = tonumber(toFrameChildren[1].SlotNumber.Text) + local gearCloneSlot = tonumber(gearClone.SlotNumber.Text) + if toSlot == 0 then toSlot = 10 end + if gearCloneSlot == 0 then gearCloneSlot = 10 end + + gearSlots[toSlot] = gearClone + gearSlots[gearCloneSlot] = toFrameChildren[1] + + toFrameChildren[1].SlotNumber.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberDownShadow.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberUpShadow.Text = gearClone.SlotNumber.Text + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + toFrameChildren[1].Position = UDim2.new(toFrameChildren[1].Position.X.Scale,0,toFrameChildren[1].Position.Y.Scale,0) + + toFrameChildren[1].Parent = gearClone.Parent + gearClone.Parent = toFrame + end + else + local slotNum = tonumber(gearClone.SlotNumber.Text) + if slotNum == 0 then slotNum = 10 end + gearSlots[slotNum] = "empty" -- reset this gear slot + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + local toSlotNum = tonumber(gearClone.SlotNumber.Text) + if toSlotNum == 0 then toSlotNum = 10 end + gearSlots[toSlotNum] = gearClone + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + gearClone.Parent = toFrame + end +end + +function resolveDrag(gearClone,x,y) + local mousePoint = Vector2.new(x,y) + + local frame = gearClone.Parent + local frames = frame.Parent:GetChildren() + + for i = 1, #frames do + if frames[i]:IsA("Frame") then + if pointInRectangle(mousePoint, frames[i].AbsolutePosition,frames[i].AbsoluteSize) then + swapGear(gearClone,frames[i]) + return true + end + end + end + + if x < frame.AbsolutePosition.x or x > ( frame.AbsolutePosition.x + frame.AbsoluteSize.x ) then + reorganizeLoadout(gearClone,false) + return false + elseif y < frame.AbsolutePosition.y or y > ( frame.AbsolutePosition.y + frame.AbsoluteSize.y ) then + reorganizeLoadout(gearClone,false) + return false + else + if dragBeginPos then gearClone.Position = dragBeginPos end + return -1 + end +end + +function unequipAllItems(dontEquipThis) + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value ~= dontEquipThis then + if gearSlots[i].GearReference.Value:IsA("HopperBin") then + gearSlots[i].GearReference.Value:Disable() + elseif gearSlots[i].GearReference.Value:IsA("Tool") then + gearSlots[i].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + gearSlots[i].Selected = false + end + end +end + +function showToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then + button.ToolTipLabel.Text = tostring(tip) + local xSize = button.ToolTipLabel.TextBounds.X + 6 + button.ToolTipLabel.Size = UDim2.new(0,xSize,0,20) + button.ToolTipLabel.Position = UDim2.new(0.5,-xSize/2,0,-30) + button.ToolTipLabel.Visible = true + end +end + +function hideToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then + button.ToolTipLabel.Visible = false + end +end + +local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButton) + waitForDebounce() + debounce = true + + if child:FindFirstChild("RobloxBuildTool") then debounce = false return end -- don't show roblox build tools + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + debounce = false + return -- we don't care about anything besides tools (sigh...) + end + end + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then -- we already have gear, do nothing + debounce = false + return + end + end + end + + + local gearClone = currentLoadout.TempSlot:clone() + gearClone.Name = child.Name + gearClone.GearImage.Image = child.TextureId + if gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + gearClone.GearReference.Value = child + + gearClone.MouseEnter:connect(function() + if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then + showToolTip(gearClone, gearClone.GearReference.Value.ToolTip) + end + end) + + gearClone.MouseLeave:connect(function() + if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then + hideToolTip(gearClone, gearClone.GearReference.Value.ToolTip) + end + end) + + gearClone.RobloxLocked = true + + local slotToMod = -1 + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + slotToMod = i + break + end + end + else + slotToMod = addToSlot + end + + if slotToMod == - 1 then -- No available slot to add in! + debounce = false + return + end + + local slotNum = slotToMod % 10 + local parent = currentLoadout:FindFirstChild("Slot"..tostring(slotNum)) + gearClone.Parent = parent + + if inventoryGearButton then + local absolutePositionFinal = inventoryGearButton.AbsolutePosition + local currentAbsolutePosition = gearClone.AbsolutePosition + local diff = absolutePositionFinal - currentAbsolutePosition + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,diff.x,gearClone.Position.Y.Scale,diff.y) + gearClone.ZIndex = 4 + end + + if addToSlot then + reorganizeLoadout(gearClone, true, equipped, addToSlot) + else + reorganizeLoadout(gearClone, true) + end + + if gearClone.Parent == nil then debounce = false return end -- couldn't fit in (hopper is full!) + + if equipped then + gearClone.Selected = true + unequipAllItems(child) + delay(guiTweenSpeed + 0.01,function() -- if our gear is equipped, we will want to enlarge it when done moving + if gearClone:FindFirstChild("GearReference") and ( (gearClone.GearReference.Value:IsA("Tool") and gearClone.GearReference.Value.Parent == player.Character) or + (gearClone.GearReference.Value:IsA("HopperBin") and gearClone.GearReference.Value.Active == true) ) then + enlargeButton(gearClone) + end + end) + end + + local dragBeginPos = nil + local clickCon, buttonDeleteCon, mouseEnterCon, mouseLeaveCon, dragStop, dragBegin = nil + clickCon = gearClone.MouseButton1Click:connect(function() + if characterInWorkspace() then + if not gearClone.Draggable then + activateGear(gearClone.SlotNumber.Text) + end + end + end) + mouseEnterCon = gearClone.MouseEnter:connect(function() + if guiBackpack.Visible then + gearClone.Draggable = true + end + end) + dragBegin = gearClone.DragBegin:connect(function(pos) + dragBeginPos = pos + gearClone.ZIndex = 7 + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 8 + else + children[i].ZIndex = 9 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 7 + end + end + end) + dragStop = gearClone.DragStopped:connect(function(x,y) + if gearClone.Selected then + gearClone.ZIndex = 2 + else + gearClone.ZIndex = 1 + end + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 3 + else + children[i].ZIndex = 4 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 2 + end + end + resolveDrag(gearClone,x,y) + end) + mouseLeaveCon = gearClone.MouseLeave:connect(function() + gearClone.Draggable = false + end) + buttonDeleteCon = gearClone.AncestryChanged:connect(function() + if gearClone.Parent and gearClone.Parent.Parent == currentLoadout then return end + if clickCon then clickCon:disconnect() end + if buttonDeleteCon then buttonDeleteCon:disconnect() end + if mouseEnterCon then mouseEnterCon:disconnect() end + if mouseLeaveCon then mouseLeaveCon:disconnect() end + if dragStop then dragStop:disconnect() end + if dragBegin then dragBegin:disconnect() end + end) -- this probably isn't necessary since objects are being deleted (probably), but this might still leak just in case + + local childCon = nil + local childChangeCon = nil + childCon = child.AncestryChanged:connect(function(newChild,parent) + if not checkToolAncestry(newChild,parent) then + if childCon then childCon:disconnect() end + if childChangeCon then childChangeCon:disconnect() end + removeFromInventory(child) + elseif parent == game.Players.LocalPlayer.Backpack then + normalizeButton(gearClone) + end + end) + + childChangeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if gearClone and gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + elseif prop == "Active" then + if child and child:IsA("HopperBin") then + if not child.Active then + gearClone.Selected = false + normalizeButton(gearClone) + end + end + elseif prop == "TextureId" then + gearClone.GearImage.Image = child.TextureId + end + end) + + debounce = false + +end + +function addToInventory(child) + if not child:IsA("Tool") or not child:IsA("HopperBin") then return end + + local slot = nil + for i = 1, #inventory do + if inventory[i] and inventory[i] == child then return end + if not inventory[i] then slot = i end + end + if slot then + inventory[slot] = child + elseif #inventory < 1 then + inventory[1] = child + else + inventory[#inventory + 1] = child + end +end + +function removeFromInventory(child) + for i = 1, #inventory do + if inventory[i] == child then + table.remove(inventory,i) + inventory[i] = nil + end + end +end + +local spreadOutGear = function() + loadoutChildren = currentLoadout:GetChildren() + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 0.5 + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + if slot == 0 then slot = 10 end + loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end +end + +local centerGear = function() + loadoutChildren = currentLoadout:GetChildren() + local gearButtons = {} + local lastSlotAdd = nlii + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + if #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + loadoutChildren[i].BackgroundTransparency = 1 + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function editLoadout() + if inGearTab then + spreadOutGear() + end +end + +function readonlyLoadout() + if not inGearTab then + centerGear() + end +end + +function setupBackpackListener() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + backpackChildCon = player.Backpack.ChildAdded:connect(function(child) + addingPlayerChild(child) + addToInventory(child) + end) +end + +function playerCharacterChildAdded(child) + addingPlayerChild(child,true) + addToInventory(child) +end + +function activateLoadout() + currentLoadout.Visible = true +end + +function deactivateLoadout() + currentLoadout.Visible = false +end + +function tabHandler(inFocus) + inGearTab = inFocus + if inFocus then + editLoadout() + else + readonlyLoadout() + end +end +-- End Functions + + + + + + +-- Begin Script +wait() -- let stuff initialize incase this is first heartbeat... + +waitForChild(player,"Backpack") +waitForProperty(player,"Character") + +-- not sure why this had no delay but the player.CharacterAdded one had one... this type of error would be easier to avoid with function reusage +delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() +end) + +waitForProperty(player,"Character") +for i,v in ipairs(player.Character:GetChildren()) do + playerCharacterChildAdded(v) +end +characterChildAddedCon = player.Character.ChildAdded:connect(function(child) playerCharacterChildAdded(child) end) + +waitForChild(player.Character,"Humanoid") +humanoidDiedCon = player.Character.Humanoid.Died:connect(function() + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + deactivateLoadout() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end +end) + +player.CharacterRemoving:connect(function() + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" then + gearSlots[i].Parent = nil + gearSlots[i] = "empty" + end + end +end) + +player.CharacterAdded:connect(function() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer -- make sure we are still looking at the correct character + waitForChild(player,"Backpack") + + + delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() + end) + + activateLoadout() + + if characterChildAddedCon then + characterChildAddedCon:disconnect() + characterChildAddedCon = nil + end + + characterChildAddedCon = + player.Character.ChildAdded:connect(function(child) + addingPlayerChild(child,true) + end) + + waitForChild(player.Character,"Humanoid") + humanoidDiedCon = + player.Character.Humanoid.Died:connect(function() + deactivateLoadout() + + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + end) + +end) + +waitForChild(guiBackpack,"SwapSlot") +guiBackpack.SwapSlot.Changed:connect(function() + if guiBackpack.SwapSlot.Value then + local swapSlot = guiBackpack.SwapSlot + local pos = swapSlot.Slot.Value + if pos == 0 then pos = 10 end + if gearSlots[pos] then + reorganizeLoadout(gearSlots[pos],false) + end + if swapSlot.GearButton.Value then + addingPlayerChild(swapSlot.GearButton.Value.GearReference.Value,false,pos) + end + guiBackpack.SwapSlot.Value = false + end +end) + +game:GetService("GuiService").KeyPressed:connect(function(key) + if characterInWorkspace() then + activateGear(key) + end +end) + +backpackOpenEvent.Event:connect(editLoadout) +backpackCloseEvent.Event:connect(centerGear) +tabClickedEvent.Event:connect(function ( tabName ) + tabHandler(tabName == StaticTabName) +end) \ No newline at end of file diff --git a/app/files/CoreGui/59002209 b/app/files/CoreGui/59002209 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/app/files/CoreGui/59002209 @@ -0,0 +1 @@ + diff --git a/app/files/CoreGui/59431535 b/app/files/CoreGui/59431535 new file mode 100644 index 0000000..4af06b4 --- /dev/null +++ b/app/files/CoreGui/59431535 @@ -0,0 +1,204 @@ +-- This script is responsible for loading in all build tools for build mode + +-- Script Globals +local buildTools = {} +local currentTools = {} + +local DeleteToolID = 73089190 +local PartSelectionID = 73089166 +local CloneToolID = 73089204 +local RecentPartToolID = 73089229 +local RotateToolID = 73089214 +local ConfigToolID = 73089239 +local WiringToolID = 73089259 +local classicToolID = 58921588 + +local player = nil +local backpack = nil + +-- Basic Functions +local function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end +end + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForProperty(game.Players,"LocalPlayer") +waitForProperty(game.Players.LocalPlayer,"userId") + +-- we aren't in a true build mode session, don't give build tools and delete this script +if game.Players.LocalPlayer.userId < 1 then + script:Destroy() + return -- this is probably not necessesary, doing it just in case +end + +-- Functions +function getLatestPlayer() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer + waitForChild(player,"Backpack") + backpack = player.Backpack +end + +function waitForCharacterLoad() + + local startTick = tick() + + local playerLoaded = false + + local success = pcall(function() playerLoaded = player.AppearanceDidLoad end) --TODO: remove pcall once this in client on prod + if not success then return false end + + while not playerLoaded do + player.Changed:wait() + playerLoaded = player.AppearanceDidLoad + end + + return true +end + +function showBuildToolsTutorial() + local tutorialKey = "BuildToolsTutorial" + if UserSettings().GameSettings:GetTutorialState(tutorialKey) == true then return end --already have shown tutorial + + local RbxGui = LoadLibrary("RbxGui") + + local frame, showTutorial, dismissTutorial, gotoPage = RbxGui.CreateTutorial("Build", tutorialKey, false) + local firstPage = RbxGui.CreateImageTutorialPage(" ", "http://www.nexium.fit/asset/?id=59162193", 359, 296, function() dismissTutorial() end, true) + + RbxGui.AddTutorialPage(frame, firstPage) + frame.Parent = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + + game:GetService("GuiService"):AddCenterDialog(frame, Enum.CenterDialogType.UnsolicitedDialog, + --showFunction + function() + frame.Visible = true + showTutorial() + end, + --hideFunction + function() + frame.Visible = false + end + ) + + wait(1) + showTutorial() +end + +function clearLoadout() + currentTools = {} + + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + if backpackChildren[i]:IsA("Tool") or backpackChildren[i]:IsA("HopperBin") then + table.insert(currentTools,backpackChildren[i]) + end + end + + if game.Players.LocalPlayer["Character"] then + local characterChildren = game.Players.LocalPlayer.Character:GetChildren() + for i = 1, #characterChildren do + if characterChildren[i]:IsA("Tool") or characterChildren[i]:IsA("HopperBin") then + table.insert(currentTools,characterChildren[i]) + end + end + end + + for i = 1, #currentTools do + currentTools[i].Parent = nil + end +end + +function giveToolsBack() + for i = 1, #currentTools do + currentTools[i].Parent = game.Players.LocalPlayer.Backpack + end +end + +function backpackHasTool(tool) + local backpackChildren = backpack:GetChildren() + for i = 1, #backpackChildren do + if backpackChildren[i] == tool then + return true + end + end + return false +end + +function getToolAssetID(assetID) + local newTool = game:GetService("InsertService"):LoadAsset(assetID) + local toolChildren = newTool:GetChildren() + for i = 1, #toolChildren do + if toolChildren[i]:IsA("Tool") then + return toolChildren[i] + end + end + return nil +end + +-- remove legacy identifiers +-- todo: determine if we still need this +function removeBuildToolTag(tool) + if tool:FindFirstChild("RobloxBuildTool") then + tool.RobloxBuildTool:Destroy() + end +end + +function giveAssetId(assetID,toolName) + local theTool = getToolAssetID(assetID,toolName) + if theTool and not backpackHasTool(theTool) then + removeBuildToolTag(theTool) + theTool.Parent = backpack + table.insert(buildTools,theTool) + end +end + +function loadBuildTools() + giveAssetId(PartSelectionID) + giveAssetId(DeleteToolID) + giveAssetId(CloneToolID) + giveAssetId(RotateToolID) + giveAssetId(RecentPartToolID) + giveAssetId(WiringToolID) + giveAssetId(ConfigToolID) + + -- deprecated tools + giveAssetId(classicToolID) +end + +function givePlayerBuildTools() + getLatestPlayer() + + clearLoadout() + + loadBuildTools() + + giveToolsBack() +end + +function takePlayerBuildTools() + for k,v in ipairs(buildTools) do + v.Parent = nil + end + buildTools = {} +end + + +-- Script start +getLatestPlayer() +waitForCharacterLoad() +givePlayerBuildTools() + +-- If player dies, we make sure to give them build tools again +player.CharacterAdded:connect(function() + takePlayerBuildTools() + givePlayerBuildTools() +end) + +showBuildToolsTutorial() diff --git a/app/files/CoreGui/60595411 b/app/files/CoreGui/60595411 new file mode 100644 index 0000000..f8318ee --- /dev/null +++ b/app/files/CoreGui/60595411 @@ -0,0 +1,1115 @@ +local t = {} + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------JSON Functions Begin---------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ + + --JSON Encoder and Parser for Lua 5.1 + -- + --Copyright 2007 Shaun Brown (http://www.chipmunkav.com) + --All Rights Reserved. + + --Permission is hereby granted, free of charge, to any person + --obtaining a copy of this 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. + --If you find this software useful please give www.chipmunkav.com a mention. + + --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. + +local string = string +local math = math +local table = table +local error = error +local tonumber = tonumber +local tostring = tostring +local type = type +local setmetatable = setmetatable +local pairs = pairs +local ipairs = ipairs +local assert = assert +local Chipmunk = Chipmunk + + +local StringBuilder = { + buffer = {} +} + +function StringBuilder:New() + local o = {} + setmetatable(o, self) + self.__index = self + o.buffer = {} + return o +end + +function StringBuilder:Append(s) + self.buffer[#self.buffer+1] = s +end + +function StringBuilder:ToString() + return table.concat(self.buffer) +end + +local JsonWriter = { + backslashes = { + ['\b'] = "\\b", + ['\t'] = "\\t", + ['\n'] = "\\n", + ['\f'] = "\\f", + ['\r'] = "\\r", + ['"'] = "\\\"", + ['\\'] = "\\\\", + ['/'] = "\\/" + } +} + +function JsonWriter:New() + local o = {} + o.writer = StringBuilder:New() + setmetatable(o, self) + self.__index = self + return o +end + +function JsonWriter:Append(s) + self.writer:Append(s) +end + +function JsonWriter:ToString() + return self.writer:ToString() +end + +function JsonWriter:Write(o) + local t = type(o) + if t == "nil" then + self:WriteNil() + elseif t == "boolean" then + self:WriteString(o) + elseif t == "number" then + self:WriteString(o) + elseif t == "string" then + self:ParseString(o) + elseif t == "table" then + self:WriteTable(o) + elseif t == "function" then + self:WriteFunction(o) + elseif t == "thread" then + self:WriteError(o) + elseif t == "userdata" then + self:WriteError(o) + end +end + +function JsonWriter:WriteNil() + self:Append("null") +end + +function JsonWriter:WriteString(o) + self:Append(tostring(o)) +end + +function JsonWriter:ParseString(s) + self:Append('"') + self:Append(string.gsub(s, "[%z%c\\\"/]", function(n) + local c = self.backslashes[n] + if c then return c end + return string.format("\\u%.4X", string.byte(n)) + end)) + self:Append('"') +end + +function JsonWriter:IsArray(t) + local count = 0 + local isindex = function(k) + if type(k) == "number" and k > 0 then + if math.floor(k) == k then + return true + end + end + return false + end + for k,v in pairs(t) do + if not isindex(k) then + return false, '{', '}' + else + count = math.max(count, k) + end + end + return true, '[', ']', count +end + +function JsonWriter:WriteTable(t) + local ba, st, et, n = self:IsArray(t) + self:Append(st) + if ba then + for i = 1, n do + self:Write(t[i]) + if i < n then + self:Append(',') + end + end + else + local first = true; + for k, v in pairs(t) do + if not first then + self:Append(',') + end + first = false; + self:ParseString(k) + self:Append(':') + self:Write(v) + end + end + self:Append(et) +end + +function JsonWriter:WriteError(o) + error(string.format( + "Encoding of %s unsupported", + tostring(o))) +end + +function JsonWriter:WriteFunction(o) + if o == Null then + self:WriteNil() + else + self:WriteError(o) + end +end + +local StringReader = { + s = "", + i = 0 +} + +function StringReader:New(s) + local o = {} + setmetatable(o, self) + self.__index = self + o.s = s or o.s + return o +end + +function StringReader:Peek() + local i = self.i + 1 + if i <= #self.s then + return string.sub(self.s, i, i) + end + return nil +end + +function StringReader:Next() + self.i = self.i+1 + if self.i <= #self.s then + return string.sub(self.s, self.i, self.i) + end + return nil +end + +function StringReader:All() + return self.s +end + +local JsonReader = { + escapes = { + ['t'] = '\t', + ['n'] = '\n', + ['f'] = '\f', + ['r'] = '\r', + ['b'] = '\b', + } +} + +function JsonReader:New(s) + local o = {} + o.reader = StringReader:New(s) + setmetatable(o, self) + self.__index = self + return o; +end + +function JsonReader:Read() + self:SkipWhiteSpace() + local peek = self:Peek() + if peek == nil then + error(string.format( + "Nil string: '%s'", + self:All())) + elseif peek == '{' then + return self:ReadObject() + elseif peek == '[' then + return self:ReadArray() + elseif peek == '"' then + return self:ReadString() + elseif string.find(peek, "[%+%-%d]") then + return self:ReadNumber() + elseif peek == 't' then + return self:ReadTrue() + elseif peek == 'f' then + return self:ReadFalse() + elseif peek == 'n' then + return self:ReadNull() + elseif peek == '/' then + self:ReadComment() + return self:Read() + else + return nil + end +end + +function JsonReader:ReadTrue() + self:TestReservedWord{'t','r','u','e'} + return true +end + +function JsonReader:ReadFalse() + self:TestReservedWord{'f','a','l','s','e'} + return false +end + +function JsonReader:ReadNull() + self:TestReservedWord{'n','u','l','l'} + return nil +end + +function JsonReader:TestReservedWord(t) + for i, v in ipairs(t) do + if self:Next() ~= v then + error(string.format( + "Error reading '%s': %s", + table.concat(t), + self:All())) + end + end +end + +function JsonReader:ReadNumber() + local result = self:Next() + local peek = self:Peek() + while peek ~= nil and string.find( + peek, + "[%+%-%d%.eE]") do + result = result .. self:Next() + peek = self:Peek() + end + result = tonumber(result) + if result == nil then + error(string.format( + "Invalid number: '%s'", + result)) + else + return result + end +end + +function JsonReader:ReadString() + local result = "" + assert(self:Next() == '"') + while self:Peek() ~= '"' do + local ch = self:Next() + if ch == '\\' then + ch = self:Next() + if self.escapes[ch] then + ch = self.escapes[ch] + end + end + result = result .. ch + end + assert(self:Next() == '"') + local fromunicode = function(m) + return string.char(tonumber(m, 16)) + end + return string.gsub( + result, + "u%x%x(%x%x)", + fromunicode) +end + +function JsonReader:ReadComment() + assert(self:Next() == '/') + local second = self:Next() + if second == '/' then + self:ReadSingleLineComment() + elseif second == '*' then + self:ReadBlockComment() + else + error(string.format( + "Invalid comment: %s", + self:All())) + end +end + +function JsonReader:ReadBlockComment() + local done = false + while not done do + local ch = self:Next() + if ch == '*' and self:Peek() == '/' then + done = true + end + if not done and + ch == '/' and + self:Peek() == "*" then + error(string.format( + "Invalid comment: %s, '/*' illegal.", + self:All())) + end + end + self:Next() +end + +function JsonReader:ReadSingleLineComment() + local ch = self:Next() + while ch ~= '\r' and ch ~= '\n' do + ch = self:Next() + end +end + +function JsonReader:ReadArray() + local result = {} + assert(self:Next() == '[') + local done = false + if self:Peek() == ']' then + done = true; + end + while not done do + local item = self:Read() + result[#result+1] = item + self:SkipWhiteSpace() + if self:Peek() == ']' then + done = true + end + if not done then + local ch = self:Next() + if ch ~= ',' then + error(string.format( + "Invalid array: '%s' due to: '%s'", + self:All(), ch)) + end + end + end + assert(']' == self:Next()) + return result +end + +function JsonReader:ReadObject() + local result = {} + assert(self:Next() == '{') + local done = false + if self:Peek() == '}' then + done = true + end + while not done do + local key = self:Read() + if type(key) ~= "string" then + error(string.format( + "Invalid non-string object key: %s", + key)) + end + self:SkipWhiteSpace() + local ch = self:Next() + if ch ~= ':' then + error(string.format( + "Invalid object: '%s' due to: '%s'", + self:All(), + ch)) + end + self:SkipWhiteSpace() + local val = self:Read() + result[key] = val + self:SkipWhiteSpace() + if self:Peek() == '}' then + done = true + end + if not done then + ch = self:Next() + if ch ~= ',' then + error(string.format( + "Invalid array: '%s' near: '%s'", + self:All(), + ch)) + end + end + end + assert(self:Next() == "}") + return result +end + +function JsonReader:SkipWhiteSpace() + local p = self:Peek() + while p ~= nil and string.find(p, "[%s/]") do + if p == '/' then + self:ReadComment() + else + self:Next() + end + p = self:Peek() + end +end + +function JsonReader:Peek() + return self.reader:Peek() +end + +function JsonReader:Next() + return self.reader:Next() +end + +function JsonReader:All() + return self.reader:All() +end + +function Encode(o) + local writer = JsonWriter:New() + writer:Write(o) + return writer:ToString() +end + +function Decode(s) + local reader = JsonReader:New(s) + return reader:Read() +end + +function Null() + return Null +end +-------------------- End JSON Parser ------------------------ + + +t.DecodeJSON = function(jsonString) + if type(jsonString) == "string" then + return Decode(jsonString) + end + print("RbxUtil.DecodeJSON expects string argument!") + return nil +end + +t.EncodeJSON = function(jsonTable) + return Encode(jsonTable) +end + + + + + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--------------------------------------------Terrain Utilities Begin----------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--makes a wedge at location x, y, z +--sets cell x, y, z to default material if parameter is provided, if not sets cell x, y, z to be whatever material it previously w +--returns true if made a wedge, false if the cell remains a block +t.MakeWedge = function(x, y, z, defaultmaterial) + return game:GetService("Terrain"):AutoWedgeCell(x,y,z) +end + +t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, selectionParent) + local terrain = game.Workspace:FindFirstChild("Terrain") + if not terrain then return end + + assert(regionToSelect) + assert(color) + + if not type(regionToSelect) == "Region3" then + error("regionToSelect (first arg), should be of type Region3, but is type",type(regionToSelect)) + end + if not type(color) == "BrickColor" then + error("color (second arg), should be of type BrickColor, but is type",type(color)) + end + + -- frequently used terrain calls (speeds up call, no lookup necessary) + local GetCell = terrain.GetCell + local WorldToCellPreferSolid = terrain.WorldToCellPreferSolid + local CellCenterToWorld = terrain.CellCenterToWorld + local emptyMaterial = Enum.CellMaterial.Empty + + -- container for all adornments, passed back to user + local selectionContainer = Instance.new("Model") + selectionContainer.Name = "SelectionContainer" + selectionContainer.Archivable = false + if selectionParent then + selectionContainer.Parent = selectionParent + else + selectionContainer.Parent = game.Workspace + end + + local updateSelection = nil -- function we return to allow user to update selection + local currentKeepAliveTag = nil -- a tag that determines whether adorns should be destroyed + local aliveCounter = 0 -- helper for currentKeepAliveTag + local lastRegion = nil -- used to stop updates that do nothing + local adornments = {} -- contains all adornments + local reusableAdorns = {} + + local selectionPart = Instance.new("Part") + selectionPart.Name = "SelectionPart" + selectionPart.Transparency = 1 + selectionPart.Anchored = true + selectionPart.Locked = true + selectionPart.CanCollide = false + selectionPart.FormFactor = Enum.FormFactor.Custom + selectionPart.Size = Vector3.new(4.2,4.2,4.2) + + local selectionBox = Instance.new("SelectionBox") + + -- srs translation from region3 to region3int16 + function Region3ToRegion3int16(region3) + local theLowVec = region3.CFrame.p - (region3.Size/2) + Vector3.new(2,2,2) + local lowCell = WorldToCellPreferSolid(terrain,theLowVec) + + local theHighVec = region3.CFrame.p + (region3.Size/2) - Vector3.new(2,2,2) + local highCell = WorldToCellPreferSolid(terrain, theHighVec) + + local highIntVec = Vector3int16.new(highCell.x,highCell.y,highCell.z) + local lowIntVec = Vector3int16.new(lowCell.x,lowCell.y,lowCell.z) + + return Region3int16.new(lowIntVec,highIntVec) + end + + -- helper function that creates the basis for a selection box + function createAdornment(theColor) + local selectionPartClone = nil + local selectionBoxClone = nil + + if #reusableAdorns > 0 then + selectionPartClone = reusableAdorns[1]["part"] + selectionBoxClone = reusableAdorns[1]["box"] + table.remove(reusableAdorns,1) + + selectionBoxClone.Visible = true + else + selectionPartClone = selectionPart:Clone() + selectionPartClone.Archivable = false + + selectionBoxClone = selectionBox:Clone() + selectionBoxClone.Archivable = false + + selectionBoxClone.Adornee = selectionPartClone + selectionBoxClone.Parent = selectionContainer + + selectionBoxClone.Adornee = selectionPartClone + + selectionBoxClone.Parent = selectionContainer + end + + if theColor then + selectionBoxClone.Color = theColor + end + + return selectionPartClone, selectionBoxClone + end + + -- iterates through all current adornments and deletes any that don't have latest tag + function cleanUpAdornments() + for cellPos, adornTable in pairs(adornments) do + + if adornTable.KeepAlive ~= currentKeepAliveTag then -- old news, we should get rid of this + adornTable.SelectionBox.Visible = false + table.insert(reusableAdorns,{part = adornTable.SelectionPart, box = adornTable.SelectionBox}) + adornments[cellPos] = nil + end + end + end + + -- helper function to update tag + function incrementAliveCounter() + aliveCounter = aliveCounter + 1 + if aliveCounter > 1000000 then + aliveCounter = 0 + end + return aliveCounter + end + + -- finds full cells in region and adorns each cell with a box, with the argument color + function adornFullCellsInRegion(region, color) + local regionBegin = region.CFrame.p - (region.Size/2) + Vector3.new(2,2,2) + local regionEnd = region.CFrame.p + (region.Size/2) - Vector3.new(2,2,2) + + local cellPosBegin = WorldToCellPreferSolid(terrain, regionBegin) + local cellPosEnd = WorldToCellPreferSolid(terrain, regionEnd) + + currentKeepAliveTag = incrementAliveCounter() + for y = cellPosBegin.y, cellPosEnd.y do + for z = cellPosBegin.z, cellPosEnd.z do + for x = cellPosBegin.x, cellPosEnd.x do + local cellMaterial = GetCell(terrain, x, y, z) + + if cellMaterial ~= emptyMaterial then + local cframePos = CellCenterToWorld(terrain, x, y, z) + local cellPos = Vector3int16.new(x,y,z) + + local updated = false + for cellPosAdorn, adornTable in pairs(adornments) do + if cellPosAdorn == cellPos then + adornTable.KeepAlive = currentKeepAliveTag + if color then + adornTable.SelectionBox.Color = color + end + updated = true + break + end + end + + if not updated then + local selectionPart, selectionBox = createAdornment(color) + selectionPart.Size = Vector3.new(4,4,4) + selectionPart.CFrame = CFrame.new(cframePos) + local adornTable = {SelectionPart = selectionPart, SelectionBox = selectionBox, KeepAlive = currentKeepAliveTag} + adornments[cellPos] = adornTable + end + end + end + end + end + cleanUpAdornments() + end + + + ------------------------------------- setup code ------------------------------ + lastRegion = regionToSelect + + if selectEmptyCells then -- use one big selection to represent the area selected + local selectionPart, selectionBox = createAdornment(color) + + selectionPart.Size = regionToSelect.Size + selectionPart.CFrame = regionToSelect.CFrame + + adornments.SelectionPart = selectionPart + adornments.SelectionBox = selectionBox + + updateSelection = + function (newRegion, color) + if newRegion and newRegion ~= lastRegion then + lastRegion = newRegion + selectionPart.Size = newRegion.Size + selectionPart.CFrame = newRegion.CFrame + end + if color then + selectionBox.Color = color + end + end + else -- use individual cell adorns to represent the area selected + adornFullCellsInRegion(regionToSelect, color) + updateSelection = + function (newRegion, color) + if newRegion and newRegion ~= lastRegion then + lastRegion = newRegion + adornFullCellsInRegion(newRegion, color) + end + end + + end + + local destroyFunc = function() + updateSelection = nil + if selectionContainer then selectionContainer:Destroy() end + adornments = nil + end + + return updateSelection, destroyFunc +end + +-----------------------------Terrain Utilities End----------------------------- + + + + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------Signal class begin------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--[[ +A 'Signal' object identical to the internal RBXScriptSignal object in it's public API and semantics. This function +can be used to create "custom events" for user-made code. +API: +Method :connect( function handler ) + Arguments: The function to connect to. + Returns: A new connection object which can be used to disconnect the connection + Description: Connects this signal to the function specified by |handler|. That is, when |fire( ... )| is called for + the signal the |handler| will be called with the arguments given to |fire( ... )|. Note, the functions + connected to a signal are called in NO PARTICULAR ORDER, so connecting one function after another does + NOT mean that the first will be called before the second as a result of a call to |fire|. + +Method :disconnect() + Arguments: None + Returns: None + Description: Disconnects all of the functions connected to this signal. + +Method :fire( ... ) + Arguments: Any arguments are accepted + Returns: None + Description: Calls all of the currently connected functions with the given arguments. + +Method :wait() + Arguments: None + Returns: The arguments given to fire + Description: This call blocks until +]] + +function t.CreateSignal() + local this = {} + + local mBindableEvent = Instance.new('BindableEvent') + local mAllCns = {} --all connection objects returned by mBindableEvent::connect + + --main functions + function this:connect(func) + if self ~= this then error("connect must be called with `:`, not `.`", 2) end + if type(func) ~= 'function' then + error("Argument #1 of connect must be a function, got a "..type(func), 2) + end + local cn = mBindableEvent.Event:connect(func) + mAllCns[cn] = true + local pubCn = {} + function pubCn:disconnect() + cn:disconnect() + mAllCns[cn] = nil + end + return pubCn + end + function this:disconnect() + if self ~= this then error("disconnect must be called with `:`, not `.`", 2) end + for cn, _ in pairs(mAllCns) do + cn:disconnect() + mAllCns[cn] = nil + end + end + function this:wait() + if self ~= this then error("wait must be called with `:`, not `.`", 2) end + return mBindableEvent.Event:wait() + end + function this:fire(...) + if self ~= this then error("fire must be called with `:`, not `.`", 2) end + mBindableEvent:Fire(...) + end + + return this +end + +------------------------------------------------- Sigal class End ------------------------------------------------------ + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +-----------------------------------------------Create Function Begins--------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--[[ +A "Create" function for easy creation of Roblox instances. The function accepts a string which is the classname of +the object to be created. The function then returns another function which either accepts accepts no arguments, in +which case it simply creates an object of the given type, or a table argument that may contain several types of data, +in which case it mutates the object in varying ways depending on the nature of the aggregate data. These are the +type of data and what operation each will perform: +1) A string key mapping to some value: + Key-Value pairs in this form will be treated as properties of the object, and will be assigned in NO PARTICULAR + ORDER. If the order in which properties is assigned matter, then they must be assigned somewhere else than the + |Create| call's body. + +2) An integral key mapping to another Instance: + Normal numeric keys mapping to Instances will be treated as children if the object being created, and will be + parented to it. This allows nice recursive calls to Create to create a whole hierarchy of objects without a + need for temporary variables to store references to those objects. + +3) A key which is a value returned from Create.Event( eventname ), and a value which is a function function + The Create.E( string ) function provides a limited way to connect to signals inside of a Create hierarchy + for those who really want such a functionality. The name of the event whose name is passed to + Create.E( string ) + +4) A key which is the Create function itself, and a value which is a function + The function will be run with the argument of the object itself after all other initialization of the object is + done by create. This provides a way to do arbitrary things involving the object from withing the create + hierarchy. + Note: This function is called SYNCHRONOUSLY, that means that you should only so initialization in + it, not stuff which requires waiting, as the Create call will block until it returns. While waiting in the + constructor callback function is possible, it is probably not a good design choice. + Note: Since the constructor function is called after all other initialization, a Create block cannot have two + constructor functions, as it would not be possible to call both of them last, also, this would be unnecessary. + + +Some example usages: + +A simple example which uses the Create function to create a model object and assign two of it's properties. +local model = Create'Model'{ + Name = 'A New model', + Parent = game.Workspace, +} + + +An example where a larger hierarchy of object is made. After the call the hierarchy will look like this: +Model_Container + |-ObjectValue + | | + | `-BoolValueChild + `-IntValue + +local model = Create'Model'{ + Name = 'Model_Container', + Create'ObjectValue'{ + Create'BoolValue'{ + Name = 'BoolValueChild', + }, + }, + Create'IntValue'{}, +} + + +An example using the event syntax: + +local part = Create'Part'{ + [Create.E'Touched'] = function(part) + print("I was touched by "..part.Name) + end, +} + + +An example using the general constructor syntax: + +local model = Create'Part'{ + [Create] = function(this) + print("Constructor running!") + this.Name = GetGlobalFoosAndBars(this) + end, +} + + +Note: It is also perfectly legal to save a reference to the function returned by a call Create, this will not cause + any unexpected behavior. EG: + local partCreatingFunction = Create'Part' + local part = partCreatingFunction() +]] + +--the Create function need to be created as a functor, not a function, in order to support the Create.E syntax, so it +--will be created in several steps rather than as a single function declaration. +local function Create_PrivImpl(objectType) + if type(objectType) ~= 'string' then + error("Argument of Create must be a string", 2) + end + --return the proxy function that gives us the nice Create'string'{data} syntax + --The first function call is a function call using Lua's single-string-argument syntax + --The second function call is using Lua's single-table-argument syntax + --Both can be chained together for the nice effect. + return function(dat) + --default to nothing, to handle the no argument given case + dat = dat or {} + + --make the object to mutate + local obj = Instance.new(objectType) + + --stored constructor function to be called after other initialization + local ctor = nil + + for k, v in pairs(dat) do + --add property + if type(k) == 'string' then + obj[k] = v + + + --add child + elseif type(k) == 'number' then + if type(v) ~= 'userdata' then + error("Bad entry in Create body: Numeric keys must be paired with children, got a: "..type(v), 2) + end + v.Parent = obj + + + --event connect + elseif type(k) == 'table' and k.__eventname then + if type(v) ~= 'function' then + error("Bad entry in Create body: Key `[Create.E\'"..k.__eventname.."\']` must have a function value\ + got: "..tostring(v), 2) + end + obj[k.__eventname]:connect(v) + + + --define constructor function + elseif k == t.Create then + if type(v) ~= 'function' then + error("Bad entry in Create body: Key `[Create]` should be paired with a constructor function, \ + got: "..tostring(v), 2) + elseif ctor then + --ctor already exists, only one allowed + error("Bad entry in Create body: Only one constructor function is allowed", 2) + end + ctor = v + + + else + error("Bad entry ("..tostring(k).." => "..tostring(v)..") in Create body", 2) + end + end + + --apply constructor function if it exists + if ctor then + ctor(obj) + end + + --return the completed object + return obj + end +end + +--now, create the functor: +t.Create = setmetatable({}, {__call = function(tb, ...) return Create_PrivImpl(...) end}) + +--and create the "Event.E" syntax stub. Really it's just a stub to construct a table which our Create +--function can recognize as special. +t.Create.E = function(eventName) + return {__eventname = eventName} +end + +-------------------------------------------------Create function End---------------------------------------------------- + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------Documentation Begin----------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "DecodeJSON" or funcNameOrFunc == t.DecodeJSON then + return "Function DecodeJSON. " .. + "Arguments: (string). " .. + "Side effect: returns a table with all parsed JSON values" + end + if funcNameOrFunc == "EncodeJSON" or funcNameOrFunc == t.EncodeJSON then + return "Function EncodeJSON. " .. + "Arguments: (table). " .. + "Side effect: returns a string composed of argument table in JSON data format" + end + if funcNameOrFunc == "MakeWedge" or funcNameOrFunc == t.MakeWedge then + return "Function MakeWedge. " .. + "Arguments: (x, y, z, [default material]). " .. + "Description: Makes a wedge at location x, y, z. Sets cell x, y, z to default material if ".. + "parameter is provided, if not sets cell x, y, z to be whatever material it previously was. ".. + "Returns true if made a wedge, false if the cell remains a block " + end + if funcNameOrFunc == "SelectTerrainRegion" or funcNameOrFunc == t.SelectTerrainRegion then + return "Function SelectTerrainRegion. " .. + "Arguments: (regionToSelect, color, selectEmptyCells, selectionParent). " .. + "Description: Selects all terrain via a series of selection boxes within the regionToSelect " .. + "(this should be a region3 value). The selection box color is detemined by the color argument " .. + "(should be a brickcolor value). SelectionParent is the parent that the selection model gets placed to (optional)." .. + "SelectEmptyCells is bool, when true will select all cells in the " .. + "region, otherwise we only select non-empty cells. Returns a function that can update the selection," .. + "arguments to said function are a new region3 to select, and the adornment color (color arg is optional). " .. + "Also returns a second function that takes no arguments and destroys the selection" + end + if funcNameOrFunc == "CreateSignal" or funcNameOrFunc == t.CreateSignal then + return "Function CreateSignal. ".. + "Arguments: None. ".. + "Returns: The newly created Signal object. This object is identical to the RBXScriptSignal class ".. + "used for events in Objects, but is a Lua-side object so it can be used to create custom events in".. + "Lua code. ".. + "Methods of the Signal object: :connect, :wait, :fire, :disconnect. ".. + "For more info you can pass the method name to the Help function, or view the wiki page ".. + "for this library. EG: Help('Signal:connect')." + end + if funcNameOrFunc == "Signal:connect" then + return "Method Signal:connect. ".. + "Arguments: (function handler). ".. + "Return: A connection object which can be used to disconnect the connection to this handler. ".. + "Description: Connectes a handler function to this Signal, so that when |fire| is called the ".. + "handler function will be called with the arguments passed to |fire|." + end + if funcNameOrFunc == "Signal:wait" then + return "Method Signal:wait. ".. + "Arguments: None. ".. + "Returns: The arguments passed to the next call to |fire|. ".. + "Description: This call does not return until the next call to |fire| is made, at which point it ".. + "will return the values which were passed as arguments to that |fire| call." + end + if funcNameOrFunc == "Signal:fire" then + return "Method Signal:fire. ".. + "Arguments: Any number of arguments of any type. ".. + "Returns: None. ".. + "Description: This call will invoke any connected handler functions, and notify any waiting code ".. + "attached to this Signal to continue, with the arguments passed to this function. Note: The calls ".. + "to handlers are made asynchronously, so this call will return immediately regardless of how long ".. + "it takes the connected handler functions to complete." + end + if funcNameOrFunc == "Signal:disconnect" then + return "Method Signal:disconnect. ".. + "Arguments: None. ".. + "Returns: None. ".. + "Description: This call disconnects all handlers attacched to this function, note however, it ".. + "does NOT make waiting code continue, as is the behavior of normal Roblox events. This method ".. + "can also be called on the connection object which is returned from Signal:connect to only ".. + "disconnect a single handler, as opposed to this method, which will disconnect all handlers." + end + if funcNameOrFunc == "Create" then + return "Function Create. ".. + "Arguments: A table containing information about how to construct a collection of objects. ".. + "Returns: The constructed objects. ".. + "Descrition: Create is a very powerfull function, whose description is too long to fit here, and ".. + "is best described via example, please see the wiki page for a description of how to use it." + end + end + +--------------------------------------------Documentation Ends---------------------------------------------------------- + +return t + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/files/CoreGui/60595695 b/app/files/CoreGui/60595695 new file mode 100644 index 0000000..dbec354 --- /dev/null +++ b/app/files/CoreGui/60595695 @@ -0,0 +1,26 @@ +-- Library Registration Script +-- This script is used to register RbxLua libraries on game servers, so game scripts have +-- access to all of the libraries (otherwise only local scripts do) + +local deepakTestingPlace = 3569749 +local sc = game:GetService("ScriptContext") +local tries = 0 + +while not sc and tries < 3 do + tries = tries + 1 + sc = game:GetService("ScriptContext") + wait(0.2) +end + +if sc then + sc:RegisterLibrary("Libraries/RbxGui", "45284430") + sc:RegisterLibrary("Libraries/RbxGear", "45374389") + if game.PlaceId == deepakTestingPlace then + sc:RegisterLibrary("Libraries/RbxStatus", "52177566") + end + sc:RegisterLibrary("Libraries/RbxUtility", "60595411") + sc:RegisterLibrary("Libraries/RbxStamper", "73157242") + sc:LibraryRegistrationComplete() +else + print("failed to find script context, libraries did not load") +end diff --git a/app/files/CoreGui/60595696 b/app/files/CoreGui/60595696 new file mode 100644 index 0000000..dbec354 --- /dev/null +++ b/app/files/CoreGui/60595696 @@ -0,0 +1,26 @@ +-- Library Registration Script +-- This script is used to register RbxLua libraries on game servers, so game scripts have +-- access to all of the libraries (otherwise only local scripts do) + +local deepakTestingPlace = 3569749 +local sc = game:GetService("ScriptContext") +local tries = 0 + +while not sc and tries < 3 do + tries = tries + 1 + sc = game:GetService("ScriptContext") + wait(0.2) +end + +if sc then + sc:RegisterLibrary("Libraries/RbxGui", "45284430") + sc:RegisterLibrary("Libraries/RbxGear", "45374389") + if game.PlaceId == deepakTestingPlace then + sc:RegisterLibrary("Libraries/RbxStatus", "52177566") + end + sc:RegisterLibrary("Libraries/RbxUtility", "60595411") + sc:RegisterLibrary("Libraries/RbxStamper", "73157242") + sc:LibraryRegistrationComplete() +else + print("failed to find script context, libraries did not load") +end diff --git a/app/files/CoreGui/64164692 b/app/files/CoreGui/64164692 new file mode 100644 index 0000000..4011edb --- /dev/null +++ b/app/files/CoreGui/64164692 @@ -0,0 +1,146 @@ +-- Responsible for giving out tools in personal servers + +-- first, lets see if buildTools have already been created +-- create the object in lighting (TODO: move to some sort of "container" object when we have one) +local toolsArray = game.Lighting:FindFirstChild("BuildToolsModel") +local ownerArray = game.Lighting:FindFirstChild("OwnerToolsModel") +local hasBuildTools = false + +function getIds(idTable, assetTable) + for i = 1, #idTable do + local model = game:GetService("InsertService"):LoadAsset(idTable[i]) + if model then + local children = model:GetChildren() + for i = 1, #children do + if children[i]:IsA("Tool") then + table.insert(assetTable,children[i]) + end + end + end + end +end + +function storeInLighting(modelName, assetTable) + local model = Instance.new("Model") + model.Archivable = false + model.Name = modelName + + for i = 1, #assetTable do + assetTable[i].Parent = model + end + + if not game.Lighting:FindFirstChild(modelName) then -- no one beat us to it, we get to insert + model.Parent = game.Lighting + end +end + +if not toolsArray then -- no one has made build tools yet, we get to! + local buildToolIds = {} + local ownerToolIds = {} + + table.insert(buildToolIds,73089166) -- PartSelectionTool + table.insert(buildToolIds,73089190) -- DeleteTool + table.insert(buildToolIds,73089204) -- CloneTool + table.insert(buildToolIds,73089214) -- RotateTool + table.insert(buildToolIds,73089239) -- ConfigTool + table.insert(buildToolIds,73089259) -- WiringTool + table.insert(buildToolIds,58921588) -- ClassicTool + + table.insert(ownerToolIds, 65347268) + + -- next, create array of our tools + local buildTools = {} + local ownerTools = {} + + getIds(buildToolIds, buildTools) + getIds(ownerToolIds, ownerTools) + + storeInLighting("BuildToolsModel",buildTools) + storeInLighting("OwnerToolsModel",ownerTools) + + toolsArray = game.Lighting:FindFirstChild("BuildToolsModel") + ownerArray = game.Lighting:FindFirstChild("OwnerToolsModel") +end + +local localBuildTools = {} + +function giveBuildTools() + if not hasBuildTools then + hasBuildTools = true + local theTools = toolsArray:GetChildren() + for i = 1, #theTools do + local toolClone = theTools[i]:clone() + if toolClone then + toolClone.Parent = game.Players.LocalPlayer.Backpack + table.insert(localBuildTools,toolClone) + end + end + end +end + +function giveOwnerTools() + local theOwnerTools = ownerArray:GetChildren() + for i = 1, #theOwnerTools do + local ownerToolClone = theOwnerTools[i]:clone() + if ownerToolClone then + ownerToolClone.Parent = game.Players.LocalPlayer.Backpack + table.insert(localBuildTools,ownerToolClone) + end + end +end + +function removeBuildTools() + if hasBuildTools then + hasBuildTools = false + for i = 1, #localBuildTools do + localBuildTools[i].Parent = nil + end + localBuildTools = {} + end +end + +if game.Players.LocalPlayer.HasBuildTools then + giveBuildTools() +end +if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() +end + +local debounce = false +game.Players.LocalPlayer.Changed:connect(function(prop) + if prop == "HasBuildTools" then + while debounce do + wait(0.5) + end + + debounce = true + + if game.Players.LocalPlayer.HasBuildTools then + giveBuildTools() + else + removeBuildTools() + end + + if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() + end + + debounce = false + elseif prop == "PersonalServerRank" then + if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() + elseif game.Players.LocalPlayer.PersonalServerRank <= 0 then + game.Players.LocalPlayer:Remove() -- you're banned, goodbye! + end + end +end) + +game.Players.LocalPlayer.CharacterAdded:connect(function() + hasBuildTools = false + if game.Players.LocalPlayer.HasBuildTools then + giveBuildTools() + end + if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() + end +end) \ No newline at end of file diff --git a/app/files/CoreGui/73157242 b/app/files/CoreGui/73157242 new file mode 100644 index 0000000..0b481e9 --- /dev/null +++ b/app/files/CoreGui/73157242 @@ -0,0 +1,2207 @@ +local t = {} + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +-- Do a line/plane intersection. The line starts at the camera. The plane is at y == 0, normal(0, 1, 0) +-- +-- vectorPos - End point of the line. +-- +-- Return: +-- cellPos - The terrain cell intersection point if there is one, vectorPos if there isn't. +-- hit - Whether there was a plane intersection. Value is true if there was, false if not. +function PlaneIntersection(vectorPos) + local hit = false + local currCamera = game.Workspace.CurrentCamera + local startPos = Vector3.new(currCamera.CoordinateFrame.p.X, currCamera.CoordinateFrame.p.Y, currCamera.CoordinateFrame.p.Z) + local endPos = Vector3.new(vectorPos.X, vectorPos.Y, vectorPos.Z) + local normal = Vector3.new(0, 1, 0) + local p3 = Vector3.new(0, 0, 0) + local startEndDot = normal:Dot(endPos - startPos) + local cellPos = vectorPos + if startEndDot ~= 0 then + local t = normal:Dot(p3 - startPos) / startEndDot + if(t >=0 and t <=1) then + local intersection = ((endPos - startPos) * t) + startPos + cellPos = game.Workspace.Terrain:WorldToCell(intersection) + hit = true + end + end + + return cellPos, hit +end + + +-- Purpose: +-- Checks for terrain touched by the mouse hit. +-- Will do a plane intersection if no terrain is touched. +-- +-- mouse - Mouse to check the .hit for. +-- +-- Return: +-- cellPos - Cell position hit. Nil if none. +function GetTerrainForMouse(mouse) + -- There was no target, so all it could be is a plane intersection. + -- Check for a plane intersection. If there isn't one then nothing will get hit. + local cell = game.Workspace.Terrain:WorldToCellPreferSolid(Vector3.new(mouse.hit.x, mouse.hit.y, mouse.hit.z)) + local planeLoc = nil + -- If nothing was hit, do the plane intersection. + if 0 == game.Workspace.Terrain:GetCell(cell.X, cell.Y, cell.Z).Value then + cell = nil + planeLoc, hit = PlaneIntersection(Vector3.new(mouse.hit.x, mouse.hit.y, mouse.hit.z)) + if hit then + cell = planeLoc + end + end + return cell +end + +-- setup helper functions +local insertBoundingBoxOverlapVector = Vector3.new(.3, .3, .3) -- we can still stamp if our character extrudes into the target stamping space by .3 or fewer units + +-- rotates a model by yAngle radians about the global y-axis +local function rotatePartAndChildren(part, rotCF, offsetFromOrigin) + -- rotate this thing, if it's a part + if part:IsA("BasePart") then + part.CFrame = (rotCF * (part.CFrame - offsetFromOrigin)) + offsetFromOrigin + end + + -- recursively do the same to all children + local partChildren = part:GetChildren() + for c = 1, #partChildren do rotatePartAndChildren(partChildren[c], rotCF, offsetFromOrigin) end +end + +local function modelRotate(model, yAngle) + local rotCF = CFrame.Angles(0, yAngle, 0) + local offsetFromOrigin = model:GetModelCFrame().p + + rotatePartAndChildren(model, rotCF, offsetFromOrigin) +end + + +local function collectParts(object, baseParts, scripts, decals) + if object:IsA("BasePart") then + baseParts[#baseParts+1] = object + elseif object:IsA("Script") then + scripts[#scripts+1] = object + elseif object:IsA("Decal") then + decals[#decals+1] = object + end + + for index,child in pairs(object:GetChildren()) do + collectParts(child, baseParts, scripts, decals) + end +end + +local function clusterPartsInRegion(startVector, endVector) + local cluster = game.Workspace:FindFirstChild("Terrain") + + local startCell = cluster:WorldToCell(startVector) + local endCell = cluster:WorldToCell(endVector) + + local startX = startCell.X + local startY = startCell.Y + local startZ = startCell.Z + + local endX = endCell.X + local endY = endCell.Y + local endZ = endCell.Z + + if startX < cluster.MaxExtents.Min.X then startX = cluster.MaxExtents.Min.X end + if startY < cluster.MaxExtents.Min.Y then startY = cluster.MaxExtents.Min.Y end + if startZ < cluster.MaxExtents.Min.Z then startZ = cluster.MaxExtents.Min.Z end + + if endX > cluster.MaxExtents.Max.X then endX = cluster.MaxExtents.Max.X end + if endY > cluster.MaxExtents.Max.Y then endY = cluster.MaxExtents.Max.Y end + if endZ > cluster.MaxExtents.Max.Z then endZ = cluster.MaxExtents.Max.Z end + + for x = startX, endX do + for y = startY, endY do + for z = startZ, endZ do + if (cluster:GetCell(x, y, z).Value) > 0 then return true end + end + end + end + + return false +end + +local function findSeatsInModel(parent, seatTable) + if not parent then return end + + if parent.className == "Seat" or parent.className == "VehicleSeat" then + table.insert(seatTable, parent) + end + local myChildren = parent:GetChildren() + for j = 1, #myChildren do + findSeatsInModel(myChildren[j], seatTable) + end +end + +local function setSeatEnabledStatus(model, isEnabled) + local seatList = {} + findSeatsInModel(model, seatList) + + if isEnabled then + -- remove any welds called "SeatWeld" in seats + for i = 1, #seatList do + local nextSeat = seatList[i]:FindFirstChild("SeatWeld") + while nextSeat do nextSeat:Remove() nextSeat = seatList[i]:FindFirstChild("SeatWeld") end + end + else + -- put a weld called "SeatWeld" in every seat + -- this tricks it into thinking there's already someone sitting there, and it won't make you sit XD + for i = 1, #seatList do + local fakeWeld = Instance.new("Weld") + fakeWeld.Name = "SeatWeld" + fakeWeld.Parent = seatList[i] + end + end +end + +local function autoAlignToFace(parts) + local aatf = parts:FindFirstChild("AutoAlignToFace") + if aatf then return aatf.Value else return false end +end + +local function getClosestAlignedWorldDirection(aVector3InWorld) + local xDir = Vector3.new(1,0,0) + local yDir = Vector3.new(0,1,0) + local zDir = Vector3.new(0,0,1) + local xDot = aVector3InWorld.x * xDir.x + aVector3InWorld.y * xDir.y + aVector3InWorld.z * xDir.z + local yDot = aVector3InWorld.x * yDir.x + aVector3InWorld.y * yDir.y + aVector3InWorld.z * yDir.z + local zDot = aVector3InWorld.x * zDir.x + aVector3InWorld.y * zDir.y + aVector3InWorld.z * zDir.z + + if math.abs(xDot) > math.abs(yDot) and math.abs(xDot) > math.abs(zDot) then + if xDot > 0 then + return 0 + else + return 3 + end + elseif math.abs(yDot) > math.abs(xDot) and math.abs(yDot) > math.abs(zDot) then + if yDot > 0 then + return 1 + else + return 4 + end + else + if zDot > 0 then + return 2 + else + return 5 + end + end +end + +local function positionPartsAtCFrame3(aCFrame, currentParts) + local insertCFrame = nil + if not currentParts then return currentParts end + if currentParts and (currentParts:IsA("Model") or currentParts:IsA("Tool")) then + insertCFrame = currentParts:GetModelCFrame() + currentParts:TranslateBy(aCFrame.p - insertCFrame.p) + else + currentParts.CFrame = aCFrame + end + return currentParts +end + +local function calcRayHitTime(rayStart, raySlope, intersectionPlane) + if math.abs(raySlope) < .01 then return 0 end -- 0 slope --> we just say intersection time is 0, and sidestep this dimension + return (intersectionPlane - rayStart) / raySlope +end + +local function modelTargetSurface(partOrModel, rayStart, rayEnd) + if not partOrModel then + return 0 + end + + local modelCFrame = nil + local modelSize = nil + if partOrModel:IsA("Model") then + modelCFrame = partOrModel:GetModelCFrame() + modelSize = partOrModel:GetModelSize() + else + modelCFrame = partOrModel.CFrame + modelSize = partOrModel.Size + end + + local mouseRayStart = modelCFrame:pointToObjectSpace(rayStart) + local mouseRayEnd = modelCFrame:pointToObjectSpace(rayEnd) + local mouseSlope = mouseRayEnd - mouseRayStart + + local xPositive = 1 + local yPositive = 1 + local zPositive = 1 + if mouseSlope.X > 0 then xPositive = -1 end + if mouseSlope.Y > 0 then yPositive = -1 end + if mouseSlope.Z > 0 then zPositive = -1 end + + -- find which surface the transformed mouse ray hits (using modelSize): + local xHitTime = calcRayHitTime(mouseRayStart.X, mouseSlope.X, modelSize.X/2 * xPositive) + local yHitTime = calcRayHitTime(mouseRayStart.Y, mouseSlope.Y, modelSize.Y/2 * yPositive) + local zHitTime = calcRayHitTime(mouseRayStart.Z, mouseSlope.Z, modelSize.Z/2 * zPositive) + + local hitFace = 0 + + --if xHitTime >= 0 and yHitTime >= 0 and zHitTime >= 0 then + if xHitTime > yHitTime then + if xHitTime > zHitTime then + -- xFace is hit + hitFace = 1*xPositive + else + -- zFace is hit + hitFace = 3*zPositive + end + else + if yHitTime > zHitTime then + -- yFace is hit + hitFace = 2*yPositive + else + -- zFace is hit + hitFace = 3*zPositive + end + end + + return hitFace +end + +local function getBoundingBox2(partOrModel) + + -- for models, the bounding box is defined as the minimum and maximum individual part bounding boxes + -- relative to the first part's coordinate frame. + local minVec = Vector3.new(math.huge, math.huge, math.huge) + local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge) + + if partOrModel:IsA("Terrain") then + minVec = Vector3.new(-2, -2, -2) + maxVec = Vector3.new(2, 2, 2) + elseif partOrModel:IsA("BasePart") then + minVec = -0.5 * partOrModel.Size + maxVec = -minVec + else + maxVec = partOrModel:GetModelSize()*0.5 + minVec = -maxVec + end + + -- Adjust bounding box to reflect what the model or part author wants in terms of justification + local justifyValue = partOrModel:FindFirstChild("Justification") + if justifyValue ~= nil then + -- find the multiple of 4 that contains the model + justify = justifyValue.Value + two = Vector3.new(2, 2, 2) + actualBox = maxVec - minVec - Vector3.new(0.01, 0.01, 0.01) + containingGridBox = Vector3.new(4 * math.ceil(actualBox.x/4), 4 * math.ceil(actualBox.y/4), 4 * math.ceil(actualBox.z/4)) + adjustment = containingGridBox - actualBox + minVec = minVec - 0.5 * adjustment * justify + maxVec = maxVec + 0.5 * adjustment * (two - justify) + end + + return minVec, maxVec +end + +local function getBoundingBoxInWorldCoordinates(partOrModel) + local minVec = Vector3.new(math.huge, math.huge, math.huge) + local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge) + + if partOrModel:IsA("BasePart") and not partOrModel:IsA("Terrain") then + vec1 = partOrModel.CFrame:pointToWorldSpace(-0.5 * partOrModel.Size) + vec2 = partOrModel.CFrame:pointToWorldSpace(0.5 * partOrModel.Size) + minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z)) + maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) + elseif partOrModel:IsA("Terrain") then + -- we shouldn't have to deal with this case + --minVec = Vector3.new(-2, -2, -2) + --maxVec = Vector3.new(2, 2, 2) + else + vec1 = partOrModel:GetModelCFrame():pointToWorldSpace(-0.5 * partOrModel:GetModelSize()) + vec2 = partOrModel:GetModelCFrame():pointToWorldSpace(0.5 * partOrModel:GetModelSize()) + minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z)) + maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) + end + + return minVec, maxVec +end + +local function getTargetPartBoundingBox(targetPart) + if targetPart.Parent:FindFirstChild("RobloxModel") ~= nil then + return getBoundingBox2(targetPart.Parent) + else + return getBoundingBox2(targetPart) + end +end + +local function getMouseTargetCFrame(targetPart) + if targetPart.Parent:FindFirstChild("RobloxModel") ~= nil then + if targetPart.Parent:IsA("Tool") then return targetPart.Parent.Handle.CFrame + else return targetPart.Parent:GetModelCFrame() end + else + return targetPart.CFrame + end +end + +local function isBlocker(part) -- returns whether or not we want to cancel the stamp because we're blocked by this part + if not part then return false end + if not part.Parent then return false end + if part:FindFirstChild("Humanoid") then return false end + if part:FindFirstChild("RobloxStamper") or part:FindFirstChild("RobloxModel") then return true end + if part:IsA("Part") and not part.CanCollide then return false end + if part == game.Lighting then return false end + return isBlocker(part.Parent) +end + +-- helper function to determine if a character can be pushed upwards by a certain amount +-- character is 5 studs tall, we'll check a 1.5 x 1.5 x 4.5 box around char, with center .5 studs below torsocenter +local function spaceAboveCharacter(charTorso, newTorsoY, stampData) + local partsAboveChar = game.Workspace:FindPartsInRegion3( + Region3.new(Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) - Vector3.new(.75, 2.75, .75), + Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) + Vector3.new(.75, 1.75, .75)), + charTorso.Parent, + 100) + + for j = 1, #partsAboveChar do + if partsAboveChar[j].CanCollide and not partsAboveChar[j]:IsDescendantOf(stampData.CurrentParts) then return false end + end + + if clusterPartsInRegion(Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) - Vector3.new(.75, 2.75, .75), + Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) + Vector3.new(.75, 1.75, .75)) then + return false + end + + return true +end + + +local function findConfigAtMouseTarget(Mouse, stampData) + -- *Critical Assumption* : + -- This function assumes the target CF axes are orthogonal with the target bounding box faces + -- And, it assumes the insert CF axes are orthongonal with the insert bounding box faces + -- Therefore, insertion will not work with angled faces on wedges or other "non-block" parts, nor + -- will it work for parts in a model that are not orthogonally aligned with the model's CF. + + if not Mouse then return nil end -- This can happen sometimes, return if so + if not stampData then error("findConfigAtMouseTarget: stampData is nil") return nil end + if not stampData["CurrentParts"] then return nil end + + local grid = 4.0 + local admissibleConfig = false + local targetConfig = CFrame.new(0,0,0) + + local minBB, maxBB = getBoundingBox2(stampData.CurrentParts) + local diagBB = maxBB - minBB + + local insertCFrame + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + insertCFrame = stampData.CurrentParts:GetModelCFrame() + else + insertCFrame = stampData.CurrentParts.CFrame + end + + if Mouse then + if stampData.CurrentParts:IsA("Tool") then + Mouse.TargetFilter = stampData.CurrentParts.Handle + else + Mouse.TargetFilter = stampData.CurrentParts + end + end + + local hitPlane = false + local targetPart = nil + local success = pcall(function() targetPart = Mouse.Target end) + + if not success then-- or targetPart == nil then + return admissibleConfig, targetConfig + end + + local mouseHitInWorld = Vector3.new(0, 0, 0) + if Mouse then + mouseHitInWorld = Vector3.new(Mouse.Hit.x, Mouse.Hit.y, Mouse.Hit.z) + end + + local cellPos = nil + + -- Nothing was hit, so check for the default plane. + if nil == targetPart then + cellPos = GetTerrainForMouse(Mouse) + if nil == cellPos then + hitPlane = false + return admissibleConfig, targetConfig + else + targetPart = game.Workspace.Terrain + hitPlane = true + -- Take into account error that will occur. + cellPos = Vector3.new(cellPos.X - 1, cellPos.Y, cellPos.Z) + mouseHitInWorld = game.Workspace.Terrain:CellCenterToWorld(cellPos.x, cellPos.y, cellPos.z) + end + end + + -- test mouse hit location + local minBBTarget, maxBBTarget = getTargetPartBoundingBox(targetPart) + local diagBBTarget = maxBBTarget - minBBTarget + local targetCFrame = getMouseTargetCFrame(targetPart) + + if targetPart:IsA("Terrain") then + if not cluster then cluster = game.Workspace:FindFirstChild("Terrain") end + local cellID = cluster:WorldToCellPreferSolid(mouseHitInWorld) + if hitPlane then + cellID = cellPos + end + + targetCFrame = CFrame.new(game.Workspace.Terrain:CellCenterToWorld(cellID.x, cellID.y, cellID.z)) + end + + local mouseHitInTarget = targetCFrame:pointToObjectSpace(mouseHitInWorld) + local targetVectorInWorld = Vector3.new(0,0,0) + if Mouse then + -- DON'T WANT THIS IN TERMS OF THE MODEL CFRAME! (.TargetSurface is in terms of the part CFrame, so this would break, right? [HotThoth]) + -- (ideally, we would want to make the Mouse.TargetSurface a model-targetsurface instead, but for testing will be using the converse) + --targetVectorInWorld = targetCFrame:vectorToWorldSpace(Vector3.FromNormalId(Mouse.TargetSurface)) + targetVectorInWorld = targetPart.CFrame:vectorToWorldSpace(Vector3.FromNormalId(Mouse.TargetSurface)) -- better, but model cframe would be best + --[[if targetPart.Parent:IsA("Model") then + local hitFace = modelTargetSurface(targetPart.Parent, Mouse.Hit.p, game.Workspace.CurrentCamera.CoordinateFrame.p) -- best, if you get it right + local WORLD_AXES = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} + if hitFace > 0 then + targetVectorInWorld = targetCFrame:vectorToWorldSpace(WORLD_AXES[hitFace]) + elseif hitFace < 0 then + targetVectorInWorld = targetCFrame:vectorToWorldSpace(-WORLD_AXES[-hitFace]) + end + end]] + end + + local targetRefPointInTarget + local clampToSurface + + if getClosestAlignedWorldDirection(targetVectorInWorld) == 0 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(1, -1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + clampToSurface = Vector3.new(0,1,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 3 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, -1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(1, -1, -1)) + clampToSurface = Vector3.new(0,1,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 1 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, 1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + clampToSurface = Vector3.new(1,0,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 4 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, 1, 1)) + clampToSurface = Vector3.new(1,0,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 2 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, -1)) + clampToSurface = Vector3.new(1,1,0) + else + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(1, -1, -1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(1, -1, 1)) + clampToSurface = Vector3.new(1,1,0) + end + + targetRefPointInTarget = targetRefPointInTarget * (0.5 * diagBBTarget) + 0.5 * (maxBBTarget + minBBTarget) + insertRefPointInInsert = insertRefPointInInsert * (0.5 * diagBB) + 0.5 * (maxBB + minBB) + + -- To Do: For cases that are not aligned to the world grid, account for the minimal rotation + -- needed to bring the Insert part(s) into alignment with the Target Part + -- Apply the rotation here + + local delta = mouseHitInTarget - targetRefPointInTarget + local deltaClamped = Vector3.new(grid * math.modf(delta.x/grid), grid * math.modf(delta.y/grid), grid * math.modf(delta.z/grid)) + deltaClamped = deltaClamped * clampToSurface + local targetTouchInTarget = deltaClamped + targetRefPointInTarget + + local TargetTouchRelToWorld = targetCFrame:pointToWorldSpace(targetTouchInTarget) + local InsertTouchInWorld = insertCFrame:vectorToWorldSpace(insertRefPointInInsert) + local posInsertOriginInWorld = TargetTouchRelToWorld - InsertTouchInWorld + + local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = insertCFrame:components() + targetConfig = CFrame.new(posInsertOriginInWorld.x, posInsertOriginInWorld.y, posInsertOriginInWorld.z, R00, R01, R02, R10, R11, R12, R20, R21, R22) + admissibleConfig = true + + return admissibleConfig, targetConfig, getClosestAlignedWorldDirection(targetVectorInWorld) +end + +local function truncateToCircleEighth(bigValue, littleValue) + local big = math.abs(bigValue) + local little = math.abs(littleValue) + local hypotenuse = math.sqrt(big*big + little*little) + local frac = little / hypotenuse + + local bigSign = 1 + local littleSign = 1 + if bigValue < 0 then bigSign = -1 end + if littleValue < 0 then littleSign = -1 end + + if frac > .382683432 then + -- between 22.5 and 45 degrees, so truncate to 45-degree tilt + return .707106781 * hypotenuse * bigSign, .707106781 * hypotenuse * littleSign + else + -- between 0 and 22.5 degrees, so truncate to 0-degree tilt + return hypotenuse * bigSign, 0 + end +end + + +local function saveTheWelds(object, manualWeldTable, manualWeldParentTable) + if object:IsA("ManualWeld") or object:IsA("Rotate") then + table.insert(manualWeldTable, object) + table.insert(manualWeldParentTable, object.Parent) + else + local children = object:GetChildren() + for i = 1, #children do + saveTheWelds(children[i], manualWeldTable, manualWeldParentTable) + end + end +end + +local function restoreTheWelds(manualWeldTable, manualWeldParentTable) + for i = 1, #manualWeldTable do + manualWeldTable[i].Parent = manualWeldParentTable[i] + end +end + +t.CanEditRegion = function(partOrModel, EditRegion) -- todo: use model and stamper metadata + if not EditRegion then return true, false end + + local minBB, maxBB = getBoundingBoxInWorldCoordinates(partOrModel) + + if minBB.X < EditRegion.CFrame.p.X - EditRegion.Size.X/2 or + minBB.Y < EditRegion.CFrame.p.Y - EditRegion.Size.Y/2 or + minBB.Z < EditRegion.CFrame.p.Z - EditRegion.Size.Z/2 then + return false, false + end + + if maxBB.X > EditRegion.CFrame.p.X + EditRegion.Size.X/2 or + maxBB.Y > EditRegion.CFrame.p.Y + EditRegion.Size.Y/2 or + maxBB.Z > EditRegion.CFrame.p.Z + EditRegion.Size.Z/2 then + return false, false + end + + return true, false +end + +t.GetStampModel = function(assetId, terrainShape, useAssetVersionId) + if assetId == 0 then + return nil, "No Asset" + end + if assetId < 0 then + return nil, "Negative Asset" + end + + local function UnlockInstances(object) + if object:IsA("BasePart") then + object.Locked = false + end + for index,child in pairs(object:GetChildren()) do + UnlockInstances(child) + end + end + + local function getClosestColorToTerrainMaterial(terrainValue) + if terrainValue == 1 then + return BrickColor.new("Bright green") + elseif terrainValue == 2 then + return BrickColor.new("Bright yellow") + elseif terrainValue == 3 then + return BrickColor.new("Bright red") + elseif terrainValue == 4 then + return BrickColor.new("Sand red") + elseif terrainValue == 5 then + return BrickColor.new("Black") + elseif terrainValue == 6 then + return BrickColor.new("Dark stone grey") + elseif terrainValue == 7 then + return BrickColor.new("Sand blue") + elseif terrainValue == 8 then + return BrickColor.new("Deep orange") + elseif terrainValue == 9 then + return BrickColor.new("Dark orange") + elseif terrainValue == 10 then + return BrickColor.new("Reddish brown") + elseif terrainValue == 11 then + return BrickColor.new("Light orange") + elseif terrainValue == 12 then + return BrickColor.new("Light stone grey") + elseif terrainValue == 13 then + return BrickColor.new("Sand green") + elseif terrainValue == 14 then + return BrickColor.new("Medium stone grey") + elseif terrainValue == 15 then + return BrickColor.new("Really red") + elseif terrainValue == 16 then + return BrickColor.new("Really blue") + elseif terrainValue == 17 then + return BrickColor.new("Bright blue") + else + return BrickColor.new("Bright green") + end + end + + local function setupFakeTerrainPart(cellMat, cellType, cellOrient) + local newTerrainPiece = nil + if (cellType == 1 or cellType == 4) then newTerrainPiece = Instance.new("WedgePart") newTerrainPiece.formFactor = "Custom" + elseif (cellType == 2) then newTerrainPiece = Instance.new("CornerWedgePart") + else newTerrainPiece = Instance.new("Part") newTerrainPiece.formFactor = "Custom" end + newTerrainPiece.Name = "MegaClusterCube" + newTerrainPiece.Size = Vector3.new(4, 4, 4) + newTerrainPiece.BottomSurface = "Smooth" + newTerrainPiece.TopSurface = "Smooth" + + -- can add decals or textures here if feeling particularly adventurous... for now, can make a table of look-up colors + newTerrainPiece.BrickColor = getClosestColorToTerrainMaterial(cellMat) + + local sideways = 0 + local flipped = math.pi + if cellType == 4 then sideways = -math.pi/2 end + if cellType == 2 or cellType == 3 then flipped = 0 end + newTerrainPiece.CFrame = CFrame.Angles(0, math.pi/2*cellOrient + flipped, sideways) + + if cellType == 3 then + local inverseCornerWedgeMesh = Instance.new("SpecialMesh") + inverseCornerWedgeMesh.MeshType = "FileMesh" + inverseCornerWedgeMesh.MeshId = "http://www.nexium.fit/asset?id=66832495" + inverseCornerWedgeMesh.Scale = Vector3.new(2, 2, 2) + inverseCornerWedgeMesh.Parent = newTerrainPiece + end + + local materialTag = Instance.new("Vector3Value") + materialTag.Value = Vector3.new(cellMat, cellType, cellOrient) + materialTag.Name = "ClusterMaterial" + materialTag.Parent = newTerrainPiece + + return newTerrainPiece + end + + -- This call will cause a "wait" until the data comes back + -- below we wait a max of 8 seconds before deciding to bail out on loading + local root + local loader + loading = true + if useAssetVersionId then + loader = coroutine.create(function() + root = game:GetService("InsertService"):LoadAssetVersion(assetId) + loading = false + end) + coroutine.resume(loader) + else + loader = coroutine.create(function() + root = game:GetService("InsertService"):LoadAsset(assetId) + loading = false + end) + coroutine.resume(loader) + end + + local lastGameTime = 0 + local totalTime = 0 + local maxWait = 8 + while loading and totalTime < maxWait do + lastGameTime = tick() + wait(1) + totalTime = totalTime + tick() - lastGameTime + end + loading = false + + if totalTime >= maxWait then + return nil, "Load Time Fail" + end + + + if root == nil then + return nil, "Load Asset Fail" + end + + if not root:IsA("Model") then + return nil, "Load Type Fail" + end + + local instances = root:GetChildren() + if #instances == 0 then + return nil, "Empty Model Fail" + end + + --Unlock all parts that are inserted, to make sure they are editable + UnlockInstances(root) + + --Continue the insert process + root = root:GetChildren()[1] + + --Examine the contents and decide what it looks like + for pos, instance in pairs(instances) do + if instance:IsA("Team") then + instance.Parent = game:GetService("Teams") + elseif instance:IsA("Sky") then + local lightingService = game:GetService("Lighting") + for index,child in pairs(lightingService:GetChildren()) do + if child:IsA("Sky") then + child:Remove(); + end + end + instance.Parent = lightingService + return + end + end + + -- ...and tag all inserted models for subsequent origin identification + -- if no RobloxModel tag already exists, then add it. + if root:FindFirstChild("RobloxModel") == nil then + local stringTag = Instance.new("BoolValue", root) + stringTag.Name = "RobloxModel" + + if root:FindFirstChild("RobloxStamper") == nil then + local stringTag2 = Instance.new("BoolValue", root) + stringTag2.Name = "RobloxStamper" + end + end + + if terrainShape then + if root.Name == "MegaClusterCube" then + if (terrainShape == 6) then -- insert an autowedging tag + local autowedgeTag = Instance.new("BoolValue") + autowedgeTag.Name = "AutoWedge" + autowedgeTag.Parent = root + else + local clusterTag = root:FindFirstChild("ClusterMaterial") + if clusterTag then + if clusterTag:IsA("Vector3Value") then + root = setupFakeTerrainPart(clusterTag.Value.X, terrainShape, clusterTag.Value.Z) + else + root = setupFakeTerrainPart(clusterTag.Value, terrainShape, 0) + end + else + root = setupFakeTerrainPart(1, terrainShape, 0) + end + end + end + end + + return root +end + + + +t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStampRegion, StampFailedFunc) + if not modelToStamp then + error("SetupStamperDragger: modelToStamp (first arg) is nil! Should be a stamper model") + return nil + end + if not modelToStamp:IsA("Model") and not modelToStamp:IsA("BasePart") then + error("SetupStamperDragger: modelToStamp (first arg) is neither a Model or Part!") + return nil + end + if not Mouse then + error("SetupStamperDragger: Mouse (second arg) is nil! Should be a mouse object") + return nil + end + if not Mouse:IsA("Mouse") then + error("SetupStamperDragger: Mouse (second arg) is not of type Mouse!") + return nil + end + + local stampInModel = nil + local allowedStampRegion = nil + local stampFailedFunc = nil + if StampInModel then + if not StampInModel:IsA("Model") then + error("SetupStamperDragger: StampInModel (optional third arg) is not of type 'Model'") + return nil + end + if not AllowedStampRegion then + error("SetupStamperDragger: AllowedStampRegion (optional fourth arg) is nil when StampInModel (optional third arg) is defined") + return nil + end + stampFailedFunc = StampFailedFunc + stampInModel = StampInModel + allowedStampRegion = AllowedStampRegion + end + + -- Init all state variables + local gInitial90DegreeRotations = 0 + local stampData = nil + local mouseTarget = nil + + local errorBox = Instance.new("SelectionBox") + errorBox.Color = BrickColor.new("Bright red") + errorBox.Transparency = 0 + errorBox.Archivable = false + + -- for megacluster MEGA STAMPING + local adornPart = Instance.new("Part") + adornPart.Parent = nil + adornPart.formFactor = "Custom" + adornPart.Size = Vector3.new(4, 4, 4) + adornPart.CFrame = CFrame.new() + adornPart.Archivable = false + + local adorn = Instance.new("SelectionBox") + adorn.Color = BrickColor.new("Toothpaste") + adorn.Adornee = adornPart + adorn.Visible = true + adorn.Transparency = 0 + adorn.Name = "HighScalabilityStamperLine" + adorn.Archivable = false + + local HighScalabilityLine = {} + HighScalabilityLine.Start = nil + HighScalabilityLine.End = nil + HighScalabilityLine.Adorn = adorn + HighScalabilityLine.AdornPart = adornPart + HighScalabilityLine.InternalLine = nil + HighScalabilityLine.NewHint = true + + HighScalabilityLine.MorePoints = {nil, nil} + HighScalabilityLine.MoreLines = {nil, nil} + HighScalabilityLine.Dimensions = 1 + + local control = {} + local movingLock = false + local stampUpLock = false + local unstampableSurface = false + local mouseCons = {} + local keyCon = nil + + local stamped = Instance.new("BoolValue") + stamped.Archivable = false + stamped.Value = false + + local lastTarget = {} + lastTarget.TerrainOrientation = 0 + lastTarget.CFrame = 0 + + local cellInfo = {} + cellInfo.Material = 1 + cellInfo.clusterType = 0 + cellInfo.clusterOrientation = 0 + + local function isMegaClusterPart() + if not stampData then return false end + if not stampData.CurrentParts then return false end + + return ( stampData.CurrentParts:FindFirstChild("ClusterMaterial",true) or (stampData.CurrentParts.Name == "MegaClusterCube") ) + end + + local function DoHighScalabilityRegionSelect() + local megaCube = stampData.CurrentParts:FindFirstChild("MegaClusterCube") + if not megaCube then + if not stampData.CurrentParts.Name == "MegaClusterCube" then + return + else + megaCube = stampData.CurrentParts + end + end + + HighScalabilityLine.End = megaCube.CFrame.p + local line = nil + local line2 = Vector3.new(0, 0, 0) + local line3 = Vector3.new(0, 0, 0) + + if HighScalabilityLine.Dimensions == 1 then + -- extract the line from these positions and limit to a 2D plane made from 2 of the world axes + -- then use dominating axis to limit line to be at 45-degree intervals + -- will use this internal representation of the line for the actual stamping + line = (HighScalabilityLine.End - HighScalabilityLine.Start) + + if math.abs(line.X) < math.abs(line.Y) then + if math.abs(line.X) < math.abs(line.Z) then + -- limit to Y/Z plane, domination unknown + local newY, newZ + if (math.abs(line.Y) > math.abs(line.Z)) then + newY, newZ = truncateToCircleEighth(line.Y, line.Z) + else + newZ, newY = truncateToCircleEighth(line.Z, line.Y) + end + line = Vector3.new(0, newY, newZ) + else + -- limit to X/Y plane, with Y dominating + local newY, newX = truncateToCircleEighth(line.Y, line.X) + line = Vector3.new(newX, newY, 0) + end + else + if math.abs(line.Y) < math.abs(line.Z) then + -- limit to X/Z plane, domination unknown + local newX, newZ + if math.abs(line.X) > math.abs(line.Z) then + newX, newZ = truncateToCircleEighth(line.X, line.Z) + else + newZ, newX = truncateToCircleEighth(line.Z, line.X) + end + line = Vector3.new(newX, 0, newZ) + else + -- limit to X/Y plane, with X dominating + local newX, newY = truncateToCircleEighth(line.X, line.Y) + line = Vector3.new(newX, newY, 0) + end + end + HighScalabilityLine.InternalLine = line + + elseif HighScalabilityLine.Dimensions == 2 then + line = HighScalabilityLine.MoreLines[1] + line2 = HighScalabilityLine.End - HighScalabilityLine.MorePoints[1] + + -- take out any component of line2 along line1, so you get perpendicular to line1 component + line2 = line2 - line.unit*line.unit:Dot(line2) + + tempCFrame = CFrame.new(HighScalabilityLine.Start, HighScalabilityLine.Start + line) + + -- then zero out whichever is the smaller component + local yAxis = tempCFrame:vectorToWorldSpace(Vector3.new(0, 1, 0)) + local xAxis = tempCFrame:vectorToWorldSpace(Vector3.new(1, 0, 0)) + + local xComp = xAxis:Dot(line2) + local yComp = yAxis:Dot(line2) + + if math.abs(yComp) > math.abs(xComp) then + line2 = line2 - xAxis * xComp + else + line2 = line2 - yAxis * yComp + end + + HighScalabilityLine.InternalLine = line2 + + elseif HighScalabilityLine.Dimensions == 3 then + line = HighScalabilityLine.MoreLines[1] + line2 = HighScalabilityLine.MoreLines[2] + line3 = HighScalabilityLine.End - HighScalabilityLine.MorePoints[2] + + -- zero out all components of previous lines + line3 = line3 - line.unit * line.unit:Dot(line3) + line3 = line3 - line2.unit * line2.unit:Dot(line3) + + HighScalabilityLine.InternalLine = line3 + end + + -- resize the "line" graphic to be the correct size and orientation + tempCFrame = CFrame.new(HighScalabilityLine.Start, HighScalabilityLine.Start + line) + + if HighScalabilityLine.Dimensions == 1 then -- faster calculation for line + HighScalabilityLine.AdornPart.Size = Vector3.new(4, 4, line.magnitude + 4) + HighScalabilityLine.AdornPart.CFrame = tempCFrame + tempCFrame:vectorToWorldSpace(Vector3.new(2, 2, 2) - HighScalabilityLine.AdornPart.Size/2) + else + local boxSize = tempCFrame:vectorToObjectSpace(line + line2 + line3) + HighScalabilityLine.AdornPart.Size = Vector3.new(4, 4, 4) + Vector3.new(math.abs(boxSize.X), math.abs(boxSize.Y), math.abs(boxSize.Z)) + HighScalabilityLine.AdornPart.CFrame = tempCFrame + tempCFrame:vectorToWorldSpace(boxSize/2) + end + + -- make player able to see this ish + + local gui = nil + if game.Players["LocalPlayer"] then + gui = game.Players.LocalPlayer:FindFirstChild("PlayerGui") + if gui and gui:IsA("PlayerGui") then + if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough + HighScalabilityLine.Adorn.Parent = gui + elseif HighScalabilityLine.Dimensions > 1 then + HighScalabilityLine.Adorn.Parent = gui + end + end + end + + if gui == nil then -- we are in studio + gui = game:GetService("CoreGui") + if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough + HighScalabilityLine.Adorn.Parent = gui + elseif HighScalabilityLine.Dimensions > 1 then + HighScalabilityLine.Adorn.Parent = gui + end + end + end + + + local function DoStamperMouseMove(Mouse) + if not Mouse then + error("Error: RbxStamper.DoStamperMouseMove: Mouse is nil") + return + end + if not Mouse:IsA("Mouse") then + error("Error: RbxStamper.DoStamperMouseMove: Mouse is of type", Mouse.className,"should be of type Mouse") + return + end + + -- There wasn't a target (no part or terrain), so check for plane intersection. + if not Mouse.Target then + local cellPos = GetTerrainForMouse(Mouse) + if nil == cellPos then + return + end + end + + if not stampData then + return + end + + -- don't move with dragger - will move in one step on mouse down + -- draw ghost at acceptable positions + configFound, targetCFrame, targetSurface = findConfigAtMouseTarget(Mouse, stampData) + if not configFound then + error("RbxStamper.DoStamperMouseMove No configFound, returning") + return + end + + local numRotations = 0 -- update this according to how many rotations you need to get it to target surface + if autoAlignToFace(stampData.CurrentParts) and targetSurface ~= 1 and targetSurface ~= 4 then -- pre-rotate the flag or portrait so it's aligned correctly + if targetSurface == 3 then numRotations = 0 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + elseif targetSurface == 0 then numRotations = 2 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + elseif targetSurface == 5 then numRotations = 3 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + elseif targetSurface == 2 then numRotations = 1 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + end + end + + local ry = math.pi/2 + gInitial90DegreeRotations = gInitial90DegreeRotations + numRotations + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + --stampData.CurrentParts:Rotate(0, ry*numRotations, 0) + modelRotate(stampData.CurrentParts, ry*numRotations) + else + stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry*numRotations, 0) * stampData.CurrentParts.CFrame + end + + -- CODE TO CHECK FOR DRAGGING GHOST PART INTO A COLLIDING STATE + local minBB, maxBB = getBoundingBoxInWorldCoordinates(stampData.CurrentParts) + + -- need to offset by distance to be dragged + local currModelCFrame = nil + if stampData.CurrentParts:IsA("Model") then + currModelCFrame = stampData.CurrentParts:GetModelCFrame() + else + currModelCFrame = stampData.CurrentParts.CFrame + end + + minBB = minBB + targetCFrame.p - currModelCFrame.p + maxBB = maxBB + targetCFrame.p - currModelCFrame.p + + -- don't drag into terrain + if clusterPartsInRegion(minBB + insertBoundingBoxOverlapVector, maxBB - insertBoundingBoxOverlapVector) then + if lastTarget.CFrame then + if (stampData.CurrentParts:FindFirstChild("ClusterMaterial", true)) then + local theClusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if theClusterMaterial:IsA("Vector3Value") then + local stampClusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if stampClusterMaterial then + stampClusterMaterial = clusterMat + end + end + end + end + return + end + + -- if we are stamping a terrain part, make sure it goes on the grid! Otherwise preview block could be placed off grid, but stamped on grid + if isMegaClusterPart() then + local cellToStamp = game.Workspace.Terrain:WorldToCell(targetCFrame.p) + local newCFramePosition = game.Workspace.Terrain:CellCenterToWorld(cellToStamp.X, cellToStamp.Y, cellToStamp.Z) + local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = targetCFrame:components() + targetCFrame = CFrame.new(newCFramePosition.X,newCFramePosition.Y,newCFramePosition.Z,R00, R01, R02, R10, R11, R12, R20, R21, R22) + end + + positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) + lastTarget.CFrame = targetCFrame -- successful positioning, so update 'dat cframe + if stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) then + local clusterMat = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterMat:IsA("Vector3Value") then + lastTarget.TerrainOrientation = clusterMat.Value.Z + end + end + + + -- auto break joints code + if Mouse and Mouse.Target and Mouse.Target.Parent then + local modelInfo = Mouse.Target:FindFirstChild("RobloxModel") + if not modelInfo then modelInfo = Mouse.Target.Parent:FindFirstChild("RobloxModel") end + + local myModelInfo = stampData.CurrentParts:FindFirstChild("UnstampableFaces") + + --if (modelInfo and modelInfo.Parent:FindFirstChild("UnstampableFaces")) or (modelInfo and myModelInfo) then -- need better targetSurface calcs + if (true) then + local breakingFaces = "" + local myBreakingFaces = "" + if modelInfo and modelInfo.Parent:FindFirstChild("UnstampableFaces") then breakingFaces = modelInfo.Parent.UnstampableFaces.Value end + if myModelInfo then myBreakingFaces = myModelInfo.Value end + local hitFace = 0 + + if modelInfo then hitFace = modelTargetSurface(modelInfo.Parent, game.Workspace.CurrentCamera.CoordinateFrame.p, Mouse.Hit.p) end + + -- are we stamping TO an unstampable surface? + for bf in string.gmatch(breakingFaces, "[^,]+") do + if hitFace == tonumber(bf) then + -- return before we hit the JointsService code below! + unstampableSurface = true + game.JointsService:ClearJoinAfterMoveJoints() -- clear the JointsService cache + return + end + end + + -- now we have to cast the ray back in the other direction to find the surface we're stamping FROM + hitFace = modelTargetSurface(stampData.CurrentParts, Mouse.Hit.p, game.Workspace.CurrentCamera.CoordinateFrame.p) + + -- are we stamping WITH an unstampable surface? + for bf in string.gmatch(myBreakingFaces, "[^,]+") do + if hitFace == tonumber(bf) then + unstampableSurface = true + game.JointsService:ClearJoinAfterMoveJoints() -- clear the JointsService cache + return + end + end + + -- just need to match breakingFace against targetSurface using rotation supplied by modelCFrame + -- targetSurface: 1 is top, 4 is bottom, + end + end + + -- to show joints during the mouse move + unstampableSurface = false + game.JointsService:SetJoinAfterMoveInstance(stampData.CurrentParts) + + -- most common mouse inactive error occurs here, so check mouse active one more time in a pcall + if not pcall(function() + if Mouse and Mouse.Target and Mouse.Target.Parent:FindFirstChild("RobloxModel") == nil then + return + else + return + end + end) + then + error("Error: RbxStamper.DoStamperMouseMove Mouse is nil on second check") + game.JointsService:ClearJoinAfterMoveJoints() + Mouse = nil + return + end + + if Mouse and Mouse.Target and Mouse.Target.Parent:FindFirstChild("RobloxModel") == nil then + game.JointsService:SetJoinAfterMoveTarget(Mouse.Target) + else + game.JointsService:SetJoinAfterMoveTarget(nil) + end + game.JointsService:ShowPermissibleJoints() + + -- here we allow for a line of high-scalability parts + if isMegaClusterPart() and HighScalabilityLine and HighScalabilityLine.Start then + DoHighScalabilityRegionSelect() + end + end + + local function setupKeyListener(key, Mouse) + if control and control["Paused"] then return end -- don't do this if we have no stamp + + key = string.lower(key) + if key == 'r' and not autoAlignToFace(stampData.CurrentParts) then -- rotate the model + gInitial90DegreeRotations = gInitial90DegreeRotations + 1 + + -- Update orientation value if this is a fake terrain part + local clusterValues = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterValues and clusterValues:IsA("Vector3Value") then + clusterValues.Value = Vector3.new(clusterValues.Value.X, clusterValues.Value.Y, (clusterValues.Value.Z + 1) % 4) + end + + -- Rotate the parts or all the parts in the model + local ry = math.pi/2 + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + --stampData.CurrentParts:Rotate(0, ry, 0) + modelRotate(stampData.CurrentParts, ry) + else + stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry, 0) * stampData.CurrentParts.CFrame + end + + -- After rotating, update the position + configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) + if configFound then + positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) + + -- update everything else in MouseMove + DoStamperMouseMove(Mouse) + end + elseif key == 'c' then -- try to expand our high scalability dragger dimension + if HighScalabilityLine.InternalLine and HighScalabilityLine.InternalLine.magnitude > 0 and HighScalabilityLine.Dimensions < 3 then + HighScalabilityLine.MorePoints[HighScalabilityLine.Dimensions] = HighScalabilityLine.End + HighScalabilityLine.MoreLines[HighScalabilityLine.Dimensions] = HighScalabilityLine.InternalLine + HighScalabilityLine.Dimensions = HighScalabilityLine.Dimensions + 1 + HighScalabilityLine.NewHint = true + end + end + end + + keyCon = Mouse.KeyDown:connect(function(key) -- init key connection (keeping code close to func) + setupKeyListener(key, Mouse) + end) + + local function resetHighScalabilityLine() + if HighScalabilityLine then + HighScalabilityLine.Start = nil + HighScalabilityLine.End = nil + HighScalabilityLine.InternalLine = nil + HighScalabilityLine.NewHint = true + end + end + + local function flashRedBox() + local gui = game.CoreGui + if game:FindFirstChild("Players") then + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer:FindFirstChild("PlayerGui") then + gui = game.Players.LocalPlayer.PlayerGui + end + end + end + if not stampData["ErrorBox"] then return end + + stampData.ErrorBox.Parent = gui + if stampData.CurrentParts:IsA("Tool") then + stampData.ErrorBox.Adornee = stampData.CurrentParts.Handle + else + stampData.ErrorBox.Adornee = stampData.CurrentParts + end + + delay(0,function() + for i = 1, 3 do + if stampData["ErrorBox"] then stampData.ErrorBox.Visible = true end + wait(0.13) + if stampData["ErrorBox"] then stampData.ErrorBox.Visible = false end + wait(0.13) + end + if stampData["ErrorBox"] then + stampData.ErrorBox.Adornee = nil + stampData.ErrorBox.Parent = Tool + end + end) + end + + local function DoStamperMouseDown(Mouse) + if not Mouse then + error("Error: RbxStamper.DoStamperMouseDown: Mouse is nil") + return + end + if not Mouse:IsA("Mouse") then + error("Error: RbxStamper.DoStamperMouseDown: Mouse is of type", Mouse.className,"should be of type Mouse") + return + end + if not stampData then + return + end + + if isMegaClusterPart() then + if Mouse and HighScalabilityLine then + local megaCube = stampData.CurrentParts:FindFirstChild("MegaClusterCube", true) + local terrain = game.Workspace.Terrain + if megaCube then + HighScalabilityLine.Dimensions = 1 + local tempCell = terrain:WorldToCell(megaCube.CFrame.p) + HighScalabilityLine.Start = terrain:CellCenterToWorld(tempCell.X, tempCell.Y, tempCell.Z) + return + else + HighScalabilityLine.Dimensions = 1 + local tempCell = terrain:WorldToCell(stampData.CurrentParts.CFrame.p) + HighScalabilityLine.Start = terrain:CellCenterToWorld(tempCell.X, tempCell.Y, tempCell.Z) + return + end + end + end + end + + local function loadSurfaceTypes(part, surfaces) + part.TopSurface = surfaces[1] + part.BottomSurface = surfaces[2] + part.LeftSurface = surfaces[3] + part.RightSurface = surfaces[4] + part.FrontSurface = surfaces[5] + part.BackSurface = surfaces[6] + end + + local function saveSurfaceTypes(part, myTable) + local tempTable = {} + tempTable[1] = part.TopSurface + tempTable[2] = part.BottomSurface + tempTable[3] = part.LeftSurface + tempTable[4] = part.RightSurface + tempTable[5] = part.FrontSurface + tempTable[6] = part.BackSurface + + myTable[part] = tempTable + end + + local function makeSurfaceUnjoinable(part, surface) + -- TODO: FILL OUT! + end + + local function prepareModel(model) + if not model then return nil end + + local gDesiredTrans = 0.7 + local gStaticTrans = 1 + + local clone = model:Clone() + local scripts = {} + local parts = {} + local decals = {} + + stampData = {} + stampData.DisabledScripts = {} + stampData.TransparencyTable = {} + stampData.MaterialTable = {} + stampData.CanCollideTable = {} + stampData.AnchoredTable = {} + stampData.ArchivableTable = {} + stampData.DecalTransparencyTable = {} + stampData.SurfaceTypeTable = {} + + collectParts(clone, parts, scripts, decals) + + if #parts <= 0 then return nil, "no parts found in modelToStamp" end + + for index,script in pairs(scripts) do + if not(script.Disabled) then + script.Disabled = true + stampData.DisabledScripts[#stampData.DisabledScripts + 1] = script + end + end + for index, part in pairs(parts) do + stampData.TransparencyTable[part] = part.Transparency + part.Transparency = gStaticTrans + (1 - gStaticTrans) * part.Transparency + stampData.MaterialTable[part] = part.Material + part.Material = Enum.Material.Plastic + stampData.CanCollideTable[part] = part.CanCollide + part.CanCollide = false + stampData.AnchoredTable[part] = part.Anchored + part.Anchored = true + stampData.ArchivableTable[part] = part.Archivable + part.Archivable = false + + saveSurfaceTypes(part, stampData.SurfaceTypeTable) + + local fadeInDelayTime = 0.5 + local transFadeInTime = 0.5 + delay(0,function() + wait(fadeInDelayTime) -- give it some time to be completely transparent + + local begTime = tick() + local currTime = begTime + while (currTime - begTime) < transFadeInTime and part and part:IsA("BasePart") and part.Transparency > gDesiredTrans do + local newTrans = 1 - (((currTime - begTime)/transFadeInTime) * (gStaticTrans - gDesiredTrans)) + if stampData["TransparencyTable"] and stampData.TransparencyTable[part] then + part.Transparency = newTrans + (1 - newTrans) * stampData.TransparencyTable[part] + end + wait(0.03) + currTime = tick() + end + if part and part:IsA("BasePart") then + if stampData["TransparencyTable"] and stampData.TransparencyTable[part] then + part.Transparency = gDesiredTrans + (1 - gDesiredTrans) * stampData.TransparencyTable[part] + end + end + end) + end + + for index, decal in pairs(decals) do + stampData.DecalTransparencyTable[decal] = decal.Transparency + decal.Transparency = gDesiredTrans + (1 - gDesiredTrans) * decal.Transparency + end + + -- disable all seats + setSeatEnabledStatus(clone, true) + setSeatEnabledStatus(clone, false) + + stampData.CurrentParts = clone + + -- if auto-alignable, we enforce a pre-rotation to the canonical "0-frame" + if autoAlignToFace(clone) then + stampData.CurrentParts:ResetOrientationToIdentity() + gInitial90DegreeRotations = 0 + else -- pre-rotate if necessary + local ry = gInitial90DegreeRotations * math.pi/2 + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + --stampData.CurrentParts:Rotate(0, ry, 0) + modelRotate(stampData.CurrentParts, ry) + else + stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry, 0) * stampData.CurrentParts.CFrame + end + end + + -- since we're cloning the old model instead of the new one, we will need to update the orientation based on the original value AND how many more + -- rotations we expect since then [either that or we need to store the just-stamped clusterMaterial.Value.Z somewhere]. This should fix the terrain rotation + -- issue (fingers crossed) [HotThoth] + + local clusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterMaterial and clusterMaterial:IsA("Vector3Value") then + clusterMaterial.Value = Vector3.new(clusterMaterial.Value.X, clusterMaterial.Value.Y, (clusterMaterial.Value.Z + gInitial90DegreeRotations) % 4) + end + + -- After rotating, update the position + local configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) + if configFound then + stampData.CurrentParts = positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) + end + + -- to show joints during the mouse move + game.JointsService:SetJoinAfterMoveInstance(stampData.CurrentParts) + + return clone, parts + end + + local function checkTerrainBlockCollisions(cellPos, checkHighScalabilityStamp) + local cellCenterToWorld = game.Workspace.Terrain.CellCenterToWorld + local cellCenter = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z) + local cellBlockingParts = game.Workspace:FindPartsInRegion3(Region3.new(cellCenter - Vector3.new(2, 2, 2) + insertBoundingBoxOverlapVector, cellCenter + Vector3.new(2, 2, 2) - insertBoundingBoxOverlapVector), stampData.CurrentParts, 100) + + local skipThisCell = false + + for b = 1, #cellBlockingParts do + if isBlocker(cellBlockingParts[b]) then skipThisCell = true break end + end + + if not skipThisCell then + -- pop players up above any set cells + local alreadyPushedUp = {} + -- if no blocking model below, then see if stamping on top of a character + for b = 1, #cellBlockingParts do + if cellBlockingParts[b].Parent and + not alreadyPushedUp[cellBlockingParts[b].Parent] and + cellBlockingParts[b].Parent:FindFirstChild("Humanoid") and + cellBlockingParts[b].Parent:FindFirstChild("Humanoid"):IsA("Humanoid") then + ----------------------------------------------------------------------------------- + local blockingPersonTorso = cellBlockingParts[b].Parent:FindFirstChild("Torso") + alreadyPushedUp[cellBlockingParts[b].Parent] = true + + if blockingPersonTorso then + -- if so, let's push the person upwards so they pop on top of the stamped model/part (but only if there's space above them) + local newY = cellCenter.Y + 5 + if spaceAboveCharacter(blockingPersonTorso, newY, stampData) then + blockingPersonTorso.CFrame = blockingPersonTorso.CFrame + Vector3.new(0, newY - blockingPersonTorso.CFrame.p.Y, 0) + else + -- if no space, we just skip this one + skipThisCell = true + break + end + end + ----------------------------------------------------------------------------------- + end + end + end + + if not skipThisCell then -- if we STILL aren't skipping... then we're good to go! + local canSetCell = true + + if checkHighScalabilityStamp then -- check to see if cell is in region, if not we'll skip set + if allowedStampRegion then + local cellPos = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z) + if cellPos.X + 2 > allowedStampRegion.CFrame.p.X + allowedStampRegion.Size.X/2 then + canSetCell = false + elseif cellPos.X - 2 < allowedStampRegion.CFrame.p.X - allowedStampRegion.Size.X/2 then + canSetCell = false + elseif cellPos.Y + 2 > allowedStampRegion.CFrame.p.Y + allowedStampRegion.Size.Y/2 then + canSetCell = false + elseif cellPos.Y - 2 < allowedStampRegion.CFrame.p.Y - allowedStampRegion.Size.Y/2 then + canSetCell = false + elseif cellPos.Z + 2 > allowedStampRegion.CFrame.p.Z + allowedStampRegion.Size.Z/2 then + canSetCell = false + elseif cellPos.Z - 2 < allowedStampRegion.CFrame.p.Z - allowedStampRegion.Size.Z/2 then + canSetCell = false + end + end + end + + return canSetCell + end + return false + end + + + local function ResolveMegaClusterStamp(checkHighScalabilityStamp) + local cellSet = false + + local cluser = game.Workspace.Terrain + + local line = HighScalabilityLine.InternalLine + local cMax = game.Workspace.Terrain.MaxExtents.Max + local cMin = game.Workspace.Terrain.MaxExtents.Min + + local clusterMaterial = 1 -- default is grass + local clusterType = 0 -- default is brick + local clusterOrientation = 0 -- default is 0 rotation + + local autoWedgeClusterParts = false + if stampData.CurrentParts:FindFirstChild("AutoWedge") then autoWedgeClusterParts = true end + + if stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) then + clusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterMaterial:IsA("Vector3Value") then + clusterType = clusterMaterial.Value.Y + clusterOrientation = clusterMaterial.Value.Z + clusterMaterial = clusterMaterial.Value.X + elseif clusterMaterial:IsA("IntValue") then + clusterMaterial = clusterMaterial.Value + end + end + + if HighScalabilityLine.Adorn.Parent and HighScalabilityLine.Start and ((HighScalabilityLine.Dimensions > 1) or (line and line.magnitude > 0)) then + local startCell = game.Workspace.Terrain:WorldToCell(HighScalabilityLine.Start) + local xInc = {0,0,0} + local yInc = {0,0,0} + local zInc = {0,0,0} + + local cluster = game.Workspace.Terrain + + local incrementVect = {nil, nil, nil} + local stepVect = {Vector3.new(0, 0, 0), Vector3.new(0, 0, 0), Vector3.new(0, 0, 0)} + + local worldAxes = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} + + local lines = {} + if HighScalabilityLine.Dimensions > 1 then table.insert(lines, HighScalabilityLine.MoreLines[1]) end + if line and line.magnitude > 0 then table.insert(lines, line) end + if HighScalabilityLine.Dimensions > 2 then table.insert(lines, HighScalabilityLine.MoreLines[2]) end + + for i = 1, #lines do + lines[i] = Vector3.new(math.floor(lines[i].X+.5), math.floor(lines[i].Y+.5), math.floor(lines[i].Z+.5)) -- round to integers + + if lines[i].X > 0 then xInc[i] = 1 elseif lines[i].X < 0 then xInc[i] = -1 end + if lines[i].Y > 0 then yInc[i] = 1 elseif lines[i].Y < 0 then yInc[i] = -1 end + if lines[i].Z > 0 then zInc[i] = 1 elseif lines[i].Z < 0 then zInc[i] = -1 end + + incrementVect[i] = Vector3.new(xInc[i], yInc[i], zInc[i]) + if incrementVect[i].magnitude < .9 then incrementVect[i] = nil end + end + + + if not lines[2] then lines[2] = Vector3.new(0, 0, 0) end + if not lines[3] then lines[3] = Vector3.new(0, 0, 0) end + + local waterForceTag = stampData.CurrentParts:FindFirstChild("WaterForceTag", true) + local waterForceDirectionTag = stampData.CurrentParts:FindFirstChild("WaterForceDirectionTag", true) + + while (stepVect[3].magnitude*4 <= lines[3].magnitude) do + local outerStepVectIndex = 1 + while outerStepVectIndex < 4 do + stepVect[2] = Vector3.new(0, 0, 0) + while (stepVect[2].magnitude*4 <= lines[2].magnitude) do + local innerStepVectIndex = 1 + while innerStepVectIndex < 4 do + stepVect[1] = Vector3.new(0, 0, 0) + while (stepVect[1].magnitude*4 <= lines[1].magnitude) do + local stepVectSum = stepVect[1] + stepVect[2] + stepVect[3] + local cellPos = Vector3int16.new(startCell.X + stepVectSum.X, startCell.Y + stepVectSum.Y, startCell.Z + stepVectSum.Z) + if cellPos.X >= cMin.X and cellPos.Y >= cMin.Y and cellPos.Z >= cMin.Z and cellPos.X < cMax.X and cellPos.Y < cMax.Y and cellPos.Z < cMax.Z then + -- check if overlaps player or part + local okToStampTerrainBlock = checkTerrainBlockCollisions(cellPos, checkHighScalabilityStamp) + + if okToStampTerrainBlock then + if waterForceTag then + cluster:SetWaterCell(cellPos.X, cellPos.Y, cellPos.Z, Enum.WaterForce[waterForceTag.Value], Enum.WaterDirection[waterForceDirectionTag.Value]) + else + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterMaterial, clusterType, clusterOrientation) + end + cellSet = true + + -- auto-wedge it? + if (autoWedgeClusterParts) then + game.Workspace.Terrain:AutowedgeCells(Region3int16.new(Vector3int16.new(cellPos.x - 1, cellPos.y - 1, cellPos.z - 1), + Vector3int16.new(cellPos.x + 1, cellPos.y + 1, cellPos.z + 1))) + end + end + end + stepVect[1] = stepVect[1] + incrementVect[1] + end + if incrementVect[2] then + while innerStepVectIndex < 4 and worldAxes[innerStepVectIndex]:Dot(incrementVect[2]) == 0 do + innerStepVectIndex = innerStepVectIndex + 1 + end + if innerStepVectIndex < 4 then + stepVect[2] = stepVect[2] + worldAxes[innerStepVectIndex] * worldAxes[innerStepVectIndex]:Dot(incrementVect[2]) + end + innerStepVectIndex = innerStepVectIndex + 1 + else + stepVect[2] = Vector3.new(1, 0, 0) + innerStepVectIndex = 4 -- skip all remaining loops + end + if (stepVect[2].magnitude*4 > lines[2].magnitude) then innerStepVectIndex = 4 end + end + end + if incrementVect[3] then + while outerStepVectIndex < 4 and worldAxes[outerStepVectIndex]:Dot(incrementVect[3]) == 0 do + outerStepVectIndex = outerStepVectIndex + 1 + end + if outerStepVectIndex < 4 then + stepVect[3] = stepVect[3] + worldAxes[outerStepVectIndex] * worldAxes[outerStepVectIndex]:Dot(incrementVect[3]) + end + outerStepVectIndex = outerStepVectIndex + 1 + else -- skip all remaining loops + stepVect[3] = Vector3.new(1, 0, 0) outerStepVectIndex = 4 + end + if (stepVect[3].magnitude*4 > lines[3].magnitude) then outerStepVectIndex = 4 end + end + end + end + + -- and also get rid of any HighScalabilityLine stuff if it's there + HighScalabilityLine.Start = nil + HighScalabilityLine.Adorn.Parent = nil + + -- Mark for undo. + if cellSet then + stampData.CurrentParts.Parent = nil + pcall(function() game:GetService("ChangeHistoryService"): SetWaypoint("StamperMulti") end) + end + + return cellSet + end + + local function DoStamperMouseUp(Mouse) + if not Mouse then + error("Error: RbxStamper.DoStamperMouseUp: Mouse is nil") + return false + end + if not Mouse:IsA("Mouse") then + error("Error: RbxStamper.DoStamperMouseUp: Mouse is of type", Mouse.className,"should be of type Mouse") + return false + end + + if not stampData.Dragger then + error("Error: RbxStamper.DoStamperMouseUp: stampData.Dragger is nil") + return false + end + + if not HighScalabilityLine then + return false + end + + local checkHighScalabilityStamp = nil + if stampInModel then + local canStamp = nil + local isHSLPart = isMegaClusterPart() + + if isHSLPart and + HighScalabilityLine and + HighScalabilityLine.Start and + HighScalabilityLine.InternalLine and + HighScalabilityLine.InternalLine.magnitude > 0 then -- we have an HSL line, test later + canStamp = true + checkHighScalabilityStamp = true + else + canStamp, checkHighScalabilityStamp = t.CanEditRegion(stampData.CurrentParts, allowedStampRegion) + end + + if not canStamp then + if stampFailedFunc then + stampFailedFunc() + end + return false + end + end + + -- if unstampable face, then don't let us stamp there! + if unstampableSurface then + flashRedBox() + return false + end + + -- recheck if we can stamp, as we just moved part + canStamp, checkHighScalabilityStamp = t.CanEditRegion(stampData.CurrentParts, allowedStampRegion) + if not canStamp then + if stampFailedFunc then + stampFailedFunc() + end + return false + end + + -- Prevent part from being stamped on top of a player + + local minBB, maxBB = getBoundingBoxInWorldCoordinates(stampData.CurrentParts) + + -- HotThoth's note: Now that above CurrentParts positioning has been commented out, to be truly correct, we would need to use the + -- value of configFound from the previous onStamperMouseMove call which moved the CurrentParts + -- Shouldn't this be true when lastTargetCFrame has been set and false otherwise? + configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) + + if configFound and not HighScalabilityLine.Adorn.Parent then + if clusterPartsInRegion(minBB + insertBoundingBoxOverlapVector, maxBB - insertBoundingBoxOverlapVector) then + flashRedBox() + return false + end + + local blockingParts = game.Workspace:FindPartsInRegion3(Region3.new(minBB + insertBoundingBoxOverlapVector, + maxBB - insertBoundingBoxOverlapVector), + stampData.CurrentParts, + 100) + + + for b = 1, #blockingParts do + if isBlocker(blockingParts[b]) then + flashRedBox() + return false + end + end + + local alreadyPushedUp = {} + -- if no blocking model below, then see if stamping on top of a character + for b = 1, #blockingParts do + if blockingParts[b].Parent and + not alreadyPushedUp[blockingParts[b].Parent] and + blockingParts[b].Parent:FindFirstChild("Humanoid") and + blockingParts[b].Parent:FindFirstChild("Humanoid"):IsA("Humanoid") then + --------------------------------------------------------------------------- + local blockingPersonTorso = blockingParts[b].Parent:FindFirstChild("Torso") + alreadyPushedUp[blockingParts[b].Parent] = true + + if blockingPersonTorso then + -- if so, let's push the person upwards so they pop on top of the stamped model/part (but only if there's space above them) + local newY = maxBB.Y + 3 + if spaceAboveCharacter(blockingPersonTorso, newY, stampData) then + blockingPersonTorso.CFrame = blockingPersonTorso.CFrame + Vector3.new(0, newY - blockingPersonTorso.CFrame.p.Y, 0) + else + -- if no space, we just error + flashRedBox() + return false + end + end + --------------------------------------------------------------------------- + end + end + + elseif (not configFound) and not (HighScalabilityLine.Start and HighScalabilityLine.Adorn.Parent) then -- if no config then only stamp if it's a real HSL! + resetHighScalabilityLine() + return false + end + + -- something will be stamped! so set the "StampedSomething" toggle to true + if game:FindFirstChild("Players") then + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer["Character"] then + local localChar = game.Players.LocalPlayer.Character + local stampTracker = localChar:FindFirstChild("StampTracker") + if stampTracker and not stampTracker.Value then + stampTracker.Value = true + end + end + end + end + + -- if we drew a line of mega parts, stamp them out + if HighScalabilityLine.Start and HighScalabilityLine.Adorn.Parent and isMegaClusterPart() then + if ResolveMegaClusterStamp(checkHighScalabilityStamp) or checkHighScalabilityStamp then + -- kill the ghost part + stampData.CurrentParts.Parent = nil + return true + end + end + + -- not High-Scalability-Line-Based, so behave normally [and get rid of any HSL stuff] + HighScalabilityLine.Start = nil + HighScalabilityLine.Adorn.Parent = nil + + local cluster = game.Workspace.Terrain + + -- if target point is in cluster, just use cluster:SetCell + if isMegaClusterPart() then + -- if targetCFrame is inside cluster, just set that cell to 1 and return + --local cellPos = cluster:WorldToCell(targetCFrame.p) + + local cellPos + if stampData.CurrentParts:IsA("Model") then cellPos = cluster:WorldToCell(stampData.CurrentParts:GetModelCFrame().p) + else cellPos = cluster:WorldToCell(stampData.CurrentParts.CFrame.p) end + + local cMax = game.Workspace.Terrain.MaxExtents.Max + local cMin = game.Workspace.Terrain.MaxExtents.Min + + if checkTerrainBlockCollisions(cellPos, false) then + + local clusterValues = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + local waterForceTag = stampData.CurrentParts:FindFirstChild("WaterForceTag", true) + local waterForceDirectionTag = stampData.CurrentParts:FindFirstChild("WaterForceDirectionTag", true) + + if cellPos.X >= cMin.X and cellPos.Y >= cMin.Y and cellPos.Z >= cMin.Z and cellPos.X < cMax.X and cellPos.Y < cMax.Y and cellPos.Z < cMax.Z then + + if waterForceTag then + cluster:SetWaterCell(cellPos.X, cellPos.Y, cellPos.Z, Enum.WaterForce[waterForceTag.Value], Enum.WaterDirection[waterForceDirectionTag.Value]) + elseif not clusterValues then + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, cellInfo.Material, cellInfo.clusterType, gInitial90DegreeRotations % 4) + elseif clusterValues:IsA("Vector3Value") then + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterValues.Value.X, clusterValues.Value.Y, clusterValues.Value.Z) + else + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterValues.Value, 0, 0) + end + + local autoWedgeClusterParts = false + if stampData.CurrentParts:FindFirstChild("AutoWedge") then autoWedgeClusterParts = true end + + -- auto-wedge it + if (autoWedgeClusterParts) then + game.Workspace.Terrain:AutowedgeCells( + Region3int16.new( + Vector3int16.new(cellPos.x - 1, cellPos.y - 1, cellPos.z - 1), + Vector3int16.new(cellPos.x + 1, cellPos.y + 1, cellPos.z + 1) + ) + ) + end + + -- kill the ghost part + stampData.CurrentParts.Parent = nil + + -- Mark for undo. It has to happen here or the selection display will come back also. + pcall(function() game:GetService("ChangeHistoryService"):SetWaypoint("StamperSingle") end) + return true + end + else + -- you tried to stamp a HSL-single part where one does not belong! + flashRedBox() + return false + end + end + + local function getPlayer() + if game:FindFirstChild("Players") then + if game.Players["LocalPlayer"] then + return game.Players.LocalPlayer + end + end + return nil + end + + + -- Post process: after positioning the part or model, restore transparency, material, anchored and collide states and create joints + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + if stampData.CurrentParts:IsA("Model") then + -- Tyler's magical hack-code for allowing/preserving clones of both Surface and Manual Welds... just don't ask X< + local manualWeldTable = {} + local manualWeldParentTable = {} + saveTheWelds(stampData.CurrentParts, manualWeldTable, manualWeldParentTable) + stampData.CurrentParts:BreakJoints() + stampData.CurrentParts:MakeJoints() + restoreTheWelds(manualWeldTable, manualWeldParentTable) + end + + -- if it's a model, we also want to fill in the playerID and playerName tags, if it has those (e.g. for the friend-only door) + playerIdTag = stampData.CurrentParts:FindFirstChild("PlayerIdTag") + playerNameTag = stampData.CurrentParts:FindFirstChild("PlayerNameTag") + if playerIdTag ~= nil then + tempPlayerValue = getPlayer() + if tempPlayerValue ~= nil then playerIdTag.Value = tempPlayerValue.userId end + end + if playerNameTag ~= nil then + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + tempPlayerValue = game.Players.LocalPlayer + if tempPlayerValue ~= nil then playerNameTag.Value = tempPlayerValue.Name end + end + end + -- ...and tag all inserted models for subsequent origin identification + -- if no RobloxModel tag already exists, then add it. + if stampData.CurrentParts:FindFirstChild("RobloxModel") == nil then + local stringTag = Instance.new("BoolValue", stampData.CurrentParts) + stringTag.Name = "RobloxModel" + + if stampData.CurrentParts:FindFirstChild("RobloxStamper") == nil then + local stringTag2 = Instance.new("BoolValue", stampData.CurrentParts) + stringTag2.Name = "RobloxStamper" + end + end + + else + stampData.CurrentParts:BreakJoints() + if stampData.CurrentParts:FindFirstChild("RobloxStamper") == nil then + local stringTag2 = Instance.new("BoolValue", stampData.CurrentParts) + stringTag2.Name = "RobloxStamper" + end + end + + -- make sure all the joints are activated before restoring anchor states + if not createJoints then game.JointsService:CreateJoinAfterMoveJoints() end + + -- Restore the original properties for all parts being stamped + for part, transparency in pairs(stampData.TransparencyTable) do + part.Transparency = transparency + end + for part, archivable in pairs(stampData.ArchivableTable) do + part.Archivable = archivable + end + for part, material in pairs(stampData.MaterialTable) do + part.Material = material + end + for part, collide in pairs(stampData.CanCollideTable) do + part.CanCollide = collide + end + for part, anchored in pairs(stampData.AnchoredTable) do + part.Anchored = anchored + end + for decal, transparency in pairs(stampData.DecalTransparencyTable) do + decal.Transparency = transparency + end + + for part, surfaces in pairs(stampData.SurfaceTypeTable) do + loadSurfaceTypes(part, surfaces) + end + + if isMegaClusterPart() then + stampData.CurrentParts.Transparency = 0 + end + + -- re-enable all seats + setSeatEnabledStatus(stampData.CurrentParts, true) + + stampData.TransparencyTable = nil + stampData.ArchivableTable = nil + stampData.MaterialTable = nil + stampData.CanCollideTable = nil + stampData.AnchoredTable = nil + stampData.SurfaceTypeTable = nil + + -- ...and tag all inserted models for subsequent origin identification + -- if no RobloxModel tag already exists, then add it. + if stampData.CurrentParts:FindFirstChild("RobloxModel") == nil then + local stringTag = Instance.new("BoolValue", stampData.CurrentParts) + stringTag.Name = "RobloxModel" + end + + -- and make sure we don't delete it, now that it's not a ghost part + if ghostRemovalScript then ghostRemovalScript.Parent = nil end + + --Re-enable the scripts + for index,script in pairs(stampData.DisabledScripts) do + script.Disabled = false + end + + --Now that they are all marked enabled, reinsert them into the world so they start running + for index,script in pairs(stampData.DisabledScripts) do + local oldParent = script.Parent + script.Parent = nil + script:Clone().Parent = oldParent + end + + -- clear out more data + stampData.DisabledScripts = nil + stampData.Dragger = nil + stampData.CurrentParts = nil + + pcall(function() game:GetService("ChangeHistoryService"): SetWaypoint("StampedObject") end) + return true + end + + local function pauseStamper() + for i = 1, #mouseCons do -- stop the mouse from doing anything + mouseCons[i]:disconnect() + mouseCons[i] = nil + end + mouseCons = {} + + if stampData and stampData.CurrentParts then -- remove our ghost part + stampData.CurrentParts.Parent = nil + stampData.CurrentParts:Remove() + end + + resetHighScalabilityLine() + + game.JointsService:ClearJoinAfterMoveJoints() + end + + + local function prepareUnjoinableSurfaces(modelCFrame, parts, whichSurface) + local AXIS_VECTORS = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} -- maybe last one is negative? TODO: check this! + local isPositive = 1 + if whichSurface < 0 then isPositive = isPositive * -1 whichSurface = whichSurface*-1 end + local surfaceNormal = isPositive * modelCFrame:vectorToWorldSpace(AXIS_VECTORS[whichSurface]) + + for i = 1, #parts do + local currPart = parts[i] + + -- now just need to find which surface of currPart most closely match surfaceNormal and then set that to Unjoinable + local surfaceNormalInLocalCoords = currPart.CFrame:vectorToObjectSpace(surfaceNormal) + if math.abs(surfaceNormalInLocalCoords.X) > math.abs(surfaceNormalInLocalCoords.Y) then + if math.abs(surfaceNormalInLocalCoords.X) > math.abs(surfaceNormalInLocalCoords.Z) then + if surfaceNormalInLocalCoords.X > 0 then currPart.RightSurface = "Unjoinable" else currPart.LeftSurface = "Unjoinable" end + else + if surfaceNormalInLocalCoords.Z > 0 then currPart.BackSurface = "Unjoinable" else currPart.FrontSurface = "Unjoinable" end + end + else + if math.abs(surfaceNormalInLocalCoords.Y) > math.abs(surfaceNormalInLocalCoords.Z) then + if surfaceNormalInLocalCoords.Y > 0 then currPart.TopSurface = "Unjoinable" else currPart.BottomSurface = "Unjoinable" end + else + if surfaceNormalInLocalCoords.Z > 0 then currPart.BackSurface = "Unjoinable" else currPart.FrontSurface = "Unjoinable" end + end + end + end + end + + local function resumeStamper() + clone, parts = prepareModel(modelToStamp) + + if not clone or not parts then + return + end + + -- if we have unjoinable faces, then we want to change those surfaces to be Unjoinable + local unjoinableTag = clone:FindFirstChild("UnjoinableFaces", true) + if unjoinableTag then + for unjoinableSurface in string.gmatch(unjoinableTag.Value, "[^,]*") do + if tonumber(unjoinableSurface) then + if clone:IsA("Model") then + prepareUnjoinableSurfaces(clone:GetModelCFrame(), parts, tonumber(unjoinableSurface)) + else + prepareUnjoinableSurfaces(clone.CFrame, parts, tonumber(unjoinableSurface)) + end + end + end + end + + stampData.ErrorBox = errorBox + if stampInModel then + clone.Parent = stampInModel + else + clone.Parent = game.Workspace + end + + if clone:FindFirstChild("ClusterMaterial", true) then -- extract all info from vector + clusterMaterial = clone:FindFirstChild("ClusterMaterial", true) + if (clusterMaterial:IsA("Vector3Value")) then + cellInfo.Material = clusterMaterial.Value.X + cellInfo.clusterType = clusterMaterial.Value.Y + cellInfo.clusterOrientation = clusterMaterial.Value.Z + elseif clusterMaterial:IsA("IntValue") then + cellInfo.Material = clusterMaterial.Value + end + end + + pcall(function() mouseTarget = Mouse.Target end) + + if mouseTarget and mouseTarget.Parent:FindFirstChild("RobloxModel") == nil then + game.JointsService:SetJoinAfterMoveTarget(mouseTarget) + else + game.JointsService:SetJoinAfterMoveTarget(nil) + end + game.JointsService:ShowPermissibleJoints() + + for index, object in pairs(stampData.DisabledScripts) do + if object.Name == "GhostRemovalScript" then + object.Parent = stampData.CurrentParts + end + end + + stampData.Dragger = Instance.new("Dragger") + + --Begin a movement by faking a MouseDown signal + stampData.Dragger:MouseDown(parts[1], Vector3.new(0,0,0), parts) + stampData.Dragger:MouseUp() + + DoStamperMouseMove(Mouse) + + table.insert(mouseCons,Mouse.Move:connect(function() + if movingLock or stampUpLock then return end + movingLock = true + DoStamperMouseMove(Mouse) + movingLock = false + end)) + + table.insert(mouseCons,Mouse.Button1Down:connect(function() + DoStamperMouseDown(Mouse) + end)) + + table.insert(mouseCons,Mouse.Button1Up:connect(function() + stampUpLock = true + while movingLock do wait() end + stamped.Value = DoStamperMouseUp(Mouse) + resetHighScalabilityLine() + stampUpLock = false + end)) + + stamped.Value = false + end + + local function resetStamperState(newModelToStamp) + + -- if we have a new model, swap it out + if newModelToStamp then + if not newModelToStamp:IsA("Model") and not newModelToStamp:IsA("BasePart") then + error("resetStamperState: newModelToStamp (first arg) is not nil, but not a model or part!") + end + modelToStamp = newModelToStamp + end + + -- first clear our state + pauseStamper() + -- now lets load in the new model + resumeStamper() + + end + + -- load the model initially + resetStamperState() + + + -- setup the control table we pass back to the user + control.Stamped = stamped -- BoolValue that fires when user stamps + control.Paused = false + + control.LoadNewModel = function(newStampModel) -- allows us to specify a new stamper model to be used with this stamper + if newStampModel and not newStampModel:IsA("Model") and not newStampModel:IsA("BasePart") then + error("Control.LoadNewModel: newStampModel (first arg) is not a Model or Part!") + return nil + end + resetStamperState(newStampModel) + end + + control.ReloadModel = function() -- will automatically set stamper to get a new model of current model and start stamping with new model + resetStamperState() + end + + control.Pause = function() -- temporarily stops stamping, use resume to start up again + if not control.Paused then + pauseStamper() + control.Paused = true + else + print("RbxStamper Warning: Tried to call Control.Pause() when already paused") + end + end + + control.Resume = function() -- resumes stamping, if currently paused + if control.Paused then + resumeStamper() + control.Paused = false + else + print("RbxStamper Warning: Tried to call Control.Resume() without Pausing First") + end + end + + control.ResetRotation = function() -- resets the model rotation so new models are at default orientation + -- gInitial90DegreeRotations = 0 + -- Note: This function will not always work quite the way we want it to; we will have to build this out further so it works with + -- High-Scalability and with the new model orientation setting methods (model:ResetOrientationToIdentity()) [HotThoth] + end + + control.Destroy = function() -- Stops current Stamp operation and destroys control construct + for i = 1, #mouseCons do + mouseCons[i]:disconnect() + mouseCons[i] = nil + end + + if keyCon then + keyCon:disconnect() + end + + game.JointsService:ClearJoinAfterMoveJoints() + + if adorn then adorn:Destroy() end + if adornPart then adornPart:Destroy() end + if errorBox then errorBox:Destroy() end + if stampData then + if stampData["Dragger"] then + stampData.Dragger:Destroy() + end + if stampData.CurrentParts then + stampData.CurrentParts:Destroy() + end + end + if control and control["Stamped"] then + control.Stamped:Destroy() + end + control = nil + end + + return control +end + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "GetStampModel" or funcNameOrFunc == t.GetStampModel then + return "Function GetStampModel. Arguments: assetId, useAssetVersionId. assetId is the asset to load in, define useAssetVersionId as true if assetId is a version id instead of a relative assetId. Side effect: returns a model of the assetId, or a string with error message if something fails" + end + if funcNameOrFunc == "SetupStamperDragger" or funcNameOrFunc == t.SetupStamperDragger then + return "Function SetupStamperDragger. Side Effect: Creates 4x4 stamping mechanism for building out parts quickly. Arguments: ModelToStamp, Mouse, LegalStampCheckFunction. ModelToStamp should be a Model or Part, preferrably loaded from RbxStamper.GetStampModel and should have extents that are multiples of 4. Mouse should be a mouse object (obtained from things such as Tool.OnEquipped), used to drag parts around 'stamp' them out. LegalStampCheckFunction is optional, used as a callback with a table argument (table is full of instances about to be stamped). Function should return either true or false, false stopping the stamp action." + end + end + +return t diff --git a/app/files/CoreGui/89449008 b/app/files/CoreGui/89449008 new file mode 100644 index 0000000..1ecbd88 --- /dev/null +++ b/app/files/CoreGui/89449008 @@ -0,0 +1,876 @@ +-- A couple of necessary functions +local function waitForChild(instance, name) + assert(instance) + assert(name) + while not instance:FindFirstChild(name) do + print('Waiting for ...', instance, name) + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + assert(instance) + assert(property) + while not instance[property] do + instance.Changed:wait() + end +end + +local function IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) + return touchEnabled +end + + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +local RbxGui, msg = LoadLibrary("RbxGui") +if not RbxGui then print("could not find RbxGui!") return end + +--- Begin Locals +local StaticTabName = "gear" + +local backpack = script.Parent +local screen = script.Parent.Parent + +local backpackItems = {} +local buttons = {} + +local debounce = false +local browsingMenu = false + +local mouseEnterCons = {} +local mouseClickCons = {} + +local characterChildAddedCon = nil +local characterChildRemovedCon = nil +local backpackAddCon = nil + +local playerBackpack = waitForChild(player,"Backpack") + +waitForChild(backpack,"Tabs") + +waitForChild(backpack,"Gear") +local gearPreview = waitForChild(backpack.Gear,"GearPreview") + +local scroller = waitForChild(backpack.Gear,"GearGridScrollingArea") + +local currentLoadout = waitForChild(backpack.Parent,"CurrentLoadout") + +local grid = waitForChild(backpack.Gear,"GearGrid") +local gearButton = waitForChild(grid,"GearButton") + +local swapSlot = waitForChild(script.Parent,"SwapSlot") + +local backpackManager = waitForChild(script.Parent,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") +local searchRequestedEvent = waitForChild(backpackManager,"SearchRequestedEvent") +local tellBackpackReadyFunc = waitForChild(backpackManager,"BackpackReady") + +-- creating scroll bar early as to make sure items get placed correctly +local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil, "grid", Vector2.new(6, 6)) + +scrollFrame.Position = UDim2.new(0,0,0,30) +scrollFrame.Size = UDim2.new(1,0,1,-30) +scrollFrame.Parent = backpack.Gear.GearGrid + +local scrollBar = Instance.new("Frame") +scrollBar.Name = "ScrollBar" +scrollBar.BackgroundTransparency = 0.9 +scrollBar.BackgroundColor3 = Color3.new(1,1,1) +scrollBar.BorderSizePixel = 0 +scrollBar.Size = UDim2.new(0, 17, 1, -36) +scrollBar.Position = UDim2.new(0,0,0,18) +scrollBar.Parent = scroller + +scrollDown.Position = UDim2.new(0,0,1,-17) + +scrollUp.Parent = scroller +scrollDown.Parent = scroller + +local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() + +scrollFrameLoadout.Position = UDim2.new(0,0,0,0) +scrollFrameLoadout.Size = UDim2.new(1,0,1,0) +scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList + +local LoadoutButton = Instance.new("TextButton") +LoadoutButton.RobloxLocked = true +LoadoutButton.Name = "LoadoutButton" +LoadoutButton.Font = Enum.Font.ArialBold +LoadoutButton.FontSize = Enum.FontSize.Size14 +LoadoutButton.Position = UDim2.new(0,0,0,0) +LoadoutButton.Size = UDim2.new(1,0,0,32) +LoadoutButton.Style = Enum.ButtonStyle.RobloxButton +LoadoutButton.Text = "Loadout #1" +LoadoutButton.TextColor3 = Color3.new(1,1,1) +LoadoutButton.Parent = scrollFrameLoadout + +local LoadoutButtonTwo = LoadoutButton:clone() +LoadoutButtonTwo.Text = "Loadout #2" +LoadoutButtonTwo.Parent = scrollFrameLoadout + +local LoadoutButtonThree = LoadoutButton:clone() +LoadoutButtonThree.Text = "Loadout #3" +LoadoutButtonThree.Parent = scrollFrameLoadout + +local LoadoutButtonFour = LoadoutButton:clone() +LoadoutButtonFour.Text = "Loadout #4" +LoadoutButtonFour.Parent = scrollFrameLoadout + +local scrollBarLoadout = Instance.new("Frame") +scrollBarLoadout.Name = "ScrollBarLoadout" +scrollBarLoadout.BackgroundTransparency = 0.9 +scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) +scrollBarLoadout.BorderSizePixel = 0 +scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) +scrollBarLoadout.Position = UDim2.new(0,0,0,18) +scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + +scrollDownLoadout.Position = UDim2.new(0,0,1,-17) + +scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea +scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + + +-- Begin Functions +function removeFromMap(map,object) + for i = 1, #map do + if map[i] == object then + table.remove(map,i) + break + end + end +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resize() + local size = 0 + if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then + size = gearPreview.AbsoluteSize.X * 0.75 + else + size = gearPreview.AbsoluteSize.Y * 0.75 + end + + waitForChild(gearPreview,"GearImage") + gearPreview.GearImage.Size = UDim2.new(0,size,0,size) + gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) + + resizeGrid() +end + +function addToGrid(child) + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + return + end + end + if child:FindFirstChild("RobloxBuildTool") then return end + + for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered + if v == child then return end + end + + table.insert(backpackItems,child) + + local changeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if buttons[child] then + if buttons[child].Image == "" then + buttons[child].GearText.Text = child.Name + end + end + end + end) + local ancestryCon = nil + ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) + local thisObject = nil + for k,v in pairs(backpackItems) do + if v == child then + thisObject = v + break + end + end + + waitForProperty(player,"Character") + waitForChild(player,"Backpack") + if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then + if ancestryCon then ancestryCon:disconnect() end + if changeCon then changeCon:disconnect() end + + for k,v in pairs(backpackItems) do + if v == thisObject then + if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end + if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end + buttons[v].Parent = nil + buttons[v] = nil + break + end + end + + removeFromMap(backpackItems,thisObject) + + resizeGrid() + else + resizeGrid() + end + updateGridActive() + end) + resizeGrid() +end + +function buttonClick(button) + if button:FindFirstChild("UnequipContextMenu") and not button.Active then + button.UnequipContextMenu.Visible = true + browsingMenu = true + end +end + +function previewGear(button) + if not browsingMenu then + gearPreview.Visible = false + gearPreview.GearImage.Image = button.Image + gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name + end +end + +function findEmptySlot() + local smallestNum = nil + local loadout = currentLoadout:GetChildren() + for i = 1, #loadout do + if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then + local frameNum = tonumber(string.sub(loadout[i].Name,5)) + if frameNum == 0 then frameNum = 10 end + if not smallestNum or (smallestNum > frameNum) then + smallestNum = frameNum + end + end + end + if smallestNum == 10 then smallestNum = 0 end + return smallestNum +end + +function checkForSwap(button,x,y) + local loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then + if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + swapGearSlot(slot,button) + return true + end + end + end + end + return false +end + +function resizeGrid() + for k,v in pairs(backpackItems) do + if not v:FindFirstChild("RobloxBuildTool") then + if not buttons[v] then + local buttonClone = gearButton:clone() + buttonClone.Parent = grid.ScrollingFrame + buttonClone.Visible = true + buttonClone.Image = v.TextureId + if buttonClone.Image == "" then + buttonClone.GearText.Text = v.Name + end + + buttonClone.GearReference.Value = v + buttonClone.Draggable = true + buttons[v] = buttonClone + + + if not IsTouchDevice() then + local unequipMenu = getGearContextMenu() + + + unequipMenu.Visible = false + unequipMenu.Parent = buttonClone + end + + local beginPos = nil + buttonClone.DragBegin:connect(function(value) + waitForChild(buttonClone, 'Background') + buttonClone['Background'].ZIndex = 10 + buttonClone.ZIndex = 10 + beginPos = value + end) + buttonClone.DragStopped:connect(function(x,y) + waitForChild(buttonClone, 'Background') + buttonClone['Background'].ZIndex = 1.0 + buttonClone.ZIndex = 2 + if beginPos ~= buttonClone.Position then + if not checkForSwap(buttonClone,x,y) then + buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) + buttonClone.Draggable = false + delay(0.5,function() + buttonClone.Draggable = true + end) + else + buttonClone.Position = beginPos + end + end + end) + local clickTime = tick() + mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) + mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() + local newClickTime = tick() + if buttonClone.Active and (newClickTime - clickTime) < 0.5 then + local slot = findEmptySlot() + if slot then + buttonClone.ZIndex = 1 + swapGearSlot(slot,buttonClone) + end + else + buttonClick(buttonClone) + end + clickTime = newClickTime + end) + end + end + end + recalculateScroll() +end + +function showPartialGrid(subset) + for k,v in pairs(buttons) do + v.Parent = nil + end + if subset then + for k,v in pairs(subset) do + v.Parent = grid.ScrollingFrame + end + end + recalculateScroll() +end + +function showEntireGrid() + for k,v in pairs(buttons) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function inLoadout(gear) + local children = currentLoadout:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + local button = children[i]:GetChildren() + if #button > 0 then + if button[1].GearReference.Value and button[1].GearReference.Value == gear then + return true + end + end + end + end + return false +end + +function updateGridActive() + for k,v in pairs(backpackItems) do + if buttons[v] then + local gear = nil + local gearRef = buttons[v]:FindFirstChild("GearReference") + + if gearRef then gear = gearRef.Value end + + if not gear then + buttons[v].Active = false + elseif inLoadout(gear) then + buttons[v].Active = false + else + buttons[v].Active = true + end + end + end +end + +function centerGear(loadoutChildren) + local gearButtons = {} + local lastSlotAdd = nil + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function tabClickHandler(tabName) + if tabName == StaticTabName then + backpackOpenHandler(tabName) + else + backpackCloseHandler(tabName) + end +end + +function backpackOpenHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = true + updateGridActive() + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function backpackCloseHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = false + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function loadoutCheck(child, selectState) + if not child:IsA("ImageButton") then return end + for k,v in pairs(backpackItems) do + if buttons[v] then + if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then + if buttons[v].GearReference.Value == child.GearReference.Value then + buttons[v].Active = selectState + break + end + end + end + end +end + +function clearPreview() + gearPreview.GearImage.Image = "" + gearPreview.GearStats.GearName.Text = "" +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + stuff[i].Parent = playerBackpack + end + end +end + +function equipGear(physGear) + removeAllEquippedGear(physGear) + physGear.Parent = player.Character + updateGridActive() +end + +function unequipGear(physGear) + physGear.Parent = playerBackpack + updateGridActive() +end + +function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) +end +function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function swapGearSlot(slot,gearButton) + if not swapSlot.Value then -- signal loadout to swap a gear out + swapSlot.Slot.Value = slot + swapSlot.GearButton.Value = gearButton + swapSlot.Value = true + updateGridActive() + end +end + + +local UnequipGearMenuClick = function(element, menu) + if type(element.Action) ~= "number" then return end + local num = element.Action + if num == 1 then -- remove from loadout + unequipGear(menu.Parent.GearReference.Value) + local inventoryButton = menu.Parent + local gearToUnequip = inventoryButton.GearReference.Value + local loadoutChildren = currentLoadout:GetChildren() + local slot = -1 + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local button = loadoutChildren[i]:GetChildren() + if button[1] and button[1].GearReference.Value == gearToUnequip then + slot = button[1].SlotNumber.Text + break + end + end + end + swapGearSlot(slot,nil) + end +end + +function setupCharacterConnections() + + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + + -- make sure we get all the children + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) + end + + if characterChildAddedCon then characterChildAddedCon:disconnect() end + characterChildAddedCon = + game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) + addToGrid(child) + updateGridActive() + end) + + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + characterChildRemovedCon = + game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) + updateGridActive() + end) + + wait() + centerGear(currentLoadout:GetChildren()) +end + +function removeCharacterConnections() + if characterChildAddedCon then characterChildAddedCon:disconnect() end + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + if backpackAddCon then backpackAddCon:disconnect() end +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function filterGear(terms) + local filteredGear = {} + for k,v in pairs(backpackItems) do + if buttons[v] then + local gearString = string.lower(buttons[v].GearReference.Value.Name) + gearString = trim(gearString) + for i = 1, #terms do + if string.match(gearString,terms[i]) then + table.insert(filteredGear,buttons[v]) + break + end + end + end + end + + return filteredGear +end +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end +function showSearchGear(searchTerms) + if not backpack.Gear.Visible then return end -- currently not active tab + + local searchTermTable = splitByWhitespace(searchTerms) + if searchTermTable and (#searchTermTable > 0) then + currSearchTerms = searchTermTable + else + currSearchTerms = nil + end + + if searchTermTable == nil then + showEntireGrid() + return + end + + local filteredButtons = filterGear(currSearchTerms) + showPartialGrid(filteredButtons) +end + +function nukeBackpack() + while #buttons > 0 do + table.remove(buttons) + end + buttons = {} + while #backpackItems > 0 do + table.remove(backpackItems) + end + backpackItems = {} + local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() + for i = 1, #scrollingFrameChildren do + scrollingFrameChildren[i]:remove() + end +end + +function getGearContextMenu() + local gearContextMenu = Instance.new("Frame") + gearContextMenu.Active = true + gearContextMenu.Name = "UnequipContextMenu" + gearContextMenu.Size = UDim2.new(0,115,0,70) + gearContextMenu.Position = UDim2.new(0,-16,0,-16) + gearContextMenu.BackgroundTransparency = 1 + gearContextMenu.Visible = false + + local gearContextMenuButton = Instance.new("TextButton") + gearContextMenuButton.Name = "UnequipContextMenuButton" + gearContextMenuButton.Text = "" + gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault + gearContextMenuButton.ZIndex = 8 + gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) + gearContextMenuButton.Visible = true + gearContextMenuButton.Parent = gearContextMenu + + local elementHeight = 12 + + local contextMenuElements = {} + local contextMenuElementsName = {"Remove Hotkey"} + + for i = 1, #contextMenuElementsName do + local element = {} + element.Type = "Button" + element.Text = contextMenuElementsName[i] + element.Action = i + element.DoIt = UnequipGearMenuClick + table.insert(contextMenuElements,element) + end + + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + if element.Type == "Button" then + local button = Instance.new("TextButton") + button.Name = "UnequipContextButton" .. i + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderSizePixel = 0 + button.TextXAlignment = Enum.TextXAlignment.Left + button.Text = " " .. contextElement.Text + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size14 + button.Size = UDim2.new(1, 8, 0, elementHeight) + button.Position = UDim2.new(0,0,0,elementHeight * i) + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 9 + button.Parent = gearContextMenuButton + + if not IsTouchDevice() then + + button.MouseButton1Click:connect(function() + if button.Active and not gearContextMenu.Parent.Active then + local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) + browsingMenu = false + gearContextMenu.Visible = false + clearHighlight(button) + clearPreview() + end + end) + + button.MouseEnter:connect(function() + if button.Active and gearContextMenu.Parent.Active then + highlight(button) + end + end) + button.MouseLeave:connect(function() + if button.Active and gearContextMenu.Parent.Active then + clearHighlight(button) + end + end) + end + + contextElement.Button = button + contextElement.Element = button + elseif element.Type == "Label" then + local frame = Instance.new("Frame") + frame.Name = "ContextLabel" .. i + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1, 8, 0, elementHeight) + + local label = Instance.new("TextLabel") + label.Name = "Text1" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.0, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label1 = label + + if element.GetText2 then + label = Instance.new("TextLabel") + label.Name = "Text2" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Right + label.Font = Enum.Font.Arial + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.5, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label2 = label + end + frame.Parent = gearContextMenuButton + element.Label = frame + element.Element = frame + end + end + + gearContextMenu.ZIndex = 4 + gearContextMenu.MouseLeave:connect(function() + browsingMenu = false + gearContextMenu.Visible = false + clearPreview() + end) + robloxLock(gearContextMenu) + + return gearContextMenu +end + +function coreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then + if not enabled then + backpack.Gear.Visible = false + end + end +end + + +local backpackChildren = player.Backpack:GetChildren() +for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) +end + +------------------------- Start Lifelong Connections ----------------------- + + +resizeEvent.Event:connect(function(absSize) + if debounce then return end + + debounce = true + wait() + resize() + resizeGrid() + debounce = false +end) + +currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) +currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) + +currentLoadout.DescendantAdded:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + centerGear(currentLoadout:GetChildren()) + end +end) +currentLoadout.DescendantRemoving:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + wait() + centerGear(currentLoadout:GetChildren()) + end +end) + +grid.MouseEnter:connect(function() clearPreview() end) +grid.MouseLeave:connect(function() clearPreview() end) + +player.CharacterRemoving:connect(function() + removeCharacterConnections() + nukeBackpack() +end) +player.CharacterAdded:connect(function() setupCharacterConnections() end) + +player.ChildAdded:connect(function(child) + if child:IsA("Backpack") then + playerBackpack = child + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + end +end) + +swapSlot.Changed:connect(function() + if not swapSlot.Value then + updateGridActive() + end +end) + +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + loadoutChildren[i].ChildRemoved:connect(function() + updateGridActive() + end) + loadoutChildren[i].ChildAdded:connect(function() + updateGridActive() + end) + end +end +------------------------- End Lifelong Connections ----------------------- + +pcall(function() + coreGuiChanged(Enum.CoreGuiType.Backpack, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) + Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) +end) + +resize() +resizeGrid() + +-- make sure any items in the loadout are accounted for in inventory +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + loadoutCheck(loadoutChildren[i], false) +end +if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end + +-- make sure that inventory is listening to gear reparenting +if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then + setupCharacterConnections() +end +if not backpackAddCon then + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) +end + +backpackOpenEvent.Event:connect(backpackOpenHandler) +backpackCloseEvent.Event:connect(backpackCloseHandler) +tabClickedEvent.Event:connect(tabClickHandler) +searchRequestedEvent.Event:connect(showSearchGear) + +recalculateScrollLoadout() \ No newline at end of file diff --git a/app/files/CoreGui/89449009 b/app/files/CoreGui/89449009 new file mode 100644 index 0000000..2100eb3 --- /dev/null +++ b/app/files/CoreGui/89449009 @@ -0,0 +1,842 @@ +-- A couple of necessary functions +local function waitForChild(instance, name) + assert(instance) + assert(name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + assert(instance) + assert(property) + while not instance[property] do + instance.Changed:wait() + end +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +local RbxGui, msg = LoadLibrary("RbxGui") +if not RbxGui then print("could not find RbxGui!") return end + +--- Begin Locals +local StaticTabName = "gear" + +local backpack = script.Parent +local screen = script.Parent.Parent + +local backpackItems = {} +local buttons = {} + +local debounce = false +local browsingMenu = false + +local mouseEnterCons = {} +local mouseClickCons = {} + +local characterChildAddedCon = nil +local characterChildRemovedCon = nil +local backpackAddCon = nil + +local playerBackpack = waitForChild(player,"Backpack") + +waitForChild(backpack,"Tabs") + +waitForChild(backpack,"Gear") +local gearPreview = waitForChild(backpack.Gear,"GearPreview") + +local scroller = waitForChild(backpack.Gear,"GearGridScrollingArea") + +local currentLoadout = waitForChild(backpack.Parent,"CurrentLoadout") + +local grid = waitForChild(backpack.Gear,"GearGrid") +local gearButton = waitForChild(grid,"GearButton") + +local swapSlot = waitForChild(script.Parent,"SwapSlot") + +local backpackManager = waitForChild(script.Parent,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") +local searchRequestedEvent = waitForChild(backpackManager,"SearchRequestedEvent") +local tellBackpackReadyFunc = waitForChild(backpackManager,"BackpackReady") + +-- creating scroll bar early as to make sure items get placed correctly +local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil,"grid") + +scrollFrame.Position = UDim2.new(0,0,0,30) +scrollFrame.Size = UDim2.new(1,0,1,-30) +scrollFrame.Parent = backpack.Gear.GearGrid + +local scrollBar = Instance.new("Frame") +scrollBar.Name = "ScrollBar" +scrollBar.BackgroundTransparency = 0.9 +scrollBar.BackgroundColor3 = Color3.new(1,1,1) +scrollBar.BorderSizePixel = 0 +scrollBar.Size = UDim2.new(0, 17, 1, -36) +scrollBar.Position = UDim2.new(0,0,0,18) +scrollBar.Parent = scroller + +scrollDown.Position = UDim2.new(0,0,1,-17) + +scrollUp.Parent = scroller +scrollDown.Parent = scroller + +local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() + +scrollFrameLoadout.Position = UDim2.new(0,0,0,0) +scrollFrameLoadout.Size = UDim2.new(1,0,1,0) +scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList + +local LoadoutButton = Instance.new("TextButton") +LoadoutButton.RobloxLocked = true +LoadoutButton.Name = "LoadoutButton" +LoadoutButton.Font = Enum.Font.ArialBold +LoadoutButton.FontSize = Enum.FontSize.Size14 +LoadoutButton.Position = UDim2.new(0,0,0,0) +LoadoutButton.Size = UDim2.new(1,0,0,32) +LoadoutButton.Style = Enum.ButtonStyle.RobloxButton +LoadoutButton.Text = "Loadout #1" +LoadoutButton.TextColor3 = Color3.new(1,1,1) +LoadoutButton.Parent = scrollFrameLoadout + +local LoadoutButtonTwo = LoadoutButton:clone() +LoadoutButtonTwo.Text = "Loadout #2" +LoadoutButtonTwo.Parent = scrollFrameLoadout + +local LoadoutButtonThree = LoadoutButton:clone() +LoadoutButtonThree.Text = "Loadout #3" +LoadoutButtonThree.Parent = scrollFrameLoadout + +local LoadoutButtonFour = LoadoutButton:clone() +LoadoutButtonFour.Text = "Loadout #4" +LoadoutButtonFour.Parent = scrollFrameLoadout + +local scrollBarLoadout = Instance.new("Frame") +scrollBarLoadout.Name = "ScrollBarLoadout" +scrollBarLoadout.BackgroundTransparency = 0.9 +scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) +scrollBarLoadout.BorderSizePixel = 0 +scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) +scrollBarLoadout.Position = UDim2.new(0,0,0,18) +scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + +scrollDownLoadout.Position = UDim2.new(0,0,1,-17) + +scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea +scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + + +-- Begin Functions +function removeFromMap(map,object) + for i = 1, #map do + if map[i] == object then + table.remove(map,i) + break + end + end +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resize() + local size = 0 + if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then + size = gearPreview.AbsoluteSize.X * 0.75 + else + size = gearPreview.AbsoluteSize.Y * 0.75 + end + + waitForChild(gearPreview,"GearImage") + gearPreview.GearImage.Size = UDim2.new(0,size,0,size) + gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) + + resizeGrid() +end + +function addToGrid(child) + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + return + end + end + if child:FindFirstChild("RobloxBuildTool") then return end + + for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered + if v == child then return end + end + + table.insert(backpackItems,child) + + local changeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if buttons[child] then + if buttons[child].Image == "" then + buttons[child].GearText.Text = child.Name + end + end + end + end) + local ancestryCon = nil + ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) + local thisObject = nil + for k,v in pairs(backpackItems) do + if v == child then + thisObject = v + break + end + end + + waitForProperty(player,"Character") + waitForChild(player,"Backpack") + if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then + if ancestryCon then ancestryCon:disconnect() end + if changeCon then changeCon:disconnect() end + + for k,v in pairs(backpackItems) do + if v == thisObject then + if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end + if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end + buttons[v].Parent = nil + buttons[v] = nil + break + end + end + + removeFromMap(backpackItems,thisObject) + + resizeGrid() + else + resizeGrid() + end + updateGridActive() + end) + resizeGrid() +end + +function buttonClick(button) + if button:FindFirstChild("UnequipContextMenu") and not button.Active then + button.UnequipContextMenu.Visible = true + browsingMenu = true + end +end + +function previewGear(button) + if not browsingMenu then + gearPreview.GearImage.Image = button.Image + gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name + end +end + +function findEmptySlot() + local smallestNum = nil + local loadout = currentLoadout:GetChildren() + for i = 1, #loadout do + if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then + local frameNum = tonumber(string.sub(loadout[i].Name,5)) + if frameNum == 0 then frameNum = 10 end + if not smallestNum or (smallestNum > frameNum) then + smallestNum = frameNum + end + end + end + if smallestNum == 10 then smallestNum = 0 end + return smallestNum +end + +function checkForSwap(button,x,y) + local loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then + if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + swapGearSlot(slot,button) + return true + end + end + end + end + return false +end + +function resizeGrid() + for k,v in pairs(backpackItems) do + if not v:FindFirstChild("RobloxBuildTool") then + if not buttons[v] then + local buttonClone = gearButton:clone() + buttonClone.Parent = grid.ScrollingFrame + buttonClone.Visible = true + buttonClone.Image = v.TextureId + if buttonClone.Image == "" then + buttonClone.GearText.Text = v.Name + end + + buttonClone.GearReference.Value = v + buttonClone.Draggable = true + buttons[v] = buttonClone + + local unequipMenu = getGearContextMenu() + + unequipMenu.Visible = false + unequipMenu.Parent = buttonClone + + local beginPos = nil + buttonClone.DragBegin:connect(function(value) + buttonClone.ZIndex = 9 + beginPos = value + end) + buttonClone.DragStopped:connect(function(x,y) + buttonClone.ZIndex = 1 + if beginPos ~= buttonClone.Position then + if not checkForSwap(buttonClone,x,y) then + buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) + buttonClone.Draggable = false + delay(0.5,function() + buttonClone.Draggable = true + end) + else + buttonClone.Position = beginPos + end + end + end) + local clickTime = tick() + mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) + mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() + local newClickTime = tick() + if buttonClone.Active and (newClickTime - clickTime) < 0.5 then + local slot = findEmptySlot() + if slot then + buttonClone.ZIndex = 1 + swapGearSlot(slot,buttonClone) + end + else + buttonClick(buttonClone) + end + clickTime = newClickTime + end) + end + end + end + recalculateScroll() +end + +function showPartialGrid(subset) + for k,v in pairs(buttons) do + v.Parent = nil + end + if subset then + for k,v in pairs(subset) do + v.Parent = grid.ScrollingFrame + end + end + recalculateScroll() +end + +function showEntireGrid() + for k,v in pairs(buttons) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function inLoadout(gear) + local children = currentLoadout:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + local button = children[i]:GetChildren() + if #button > 0 then + if button[1].GearReference.Value and button[1].GearReference.Value == gear then + return true + end + end + end + end + return false +end + +function updateGridActive() + for k,v in pairs(backpackItems) do + if buttons[v] then + local gear = nil + local gearRef = buttons[v]:FindFirstChild("GearReference") + + if gearRef then gear = gearRef.Value end + + if not gear then + buttons[v].Active = false + elseif inLoadout(gear) then + buttons[v].Active = false + else + buttons[v].Active = true + end + end + end +end + +function centerGear(loadoutChildren) + local gearButtons = {} + local lastSlotAdd = nil + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function tabClickHandler(tabName) + if tabName == StaticTabName then + backpackOpenHandler(tabName) + else + backpackCloseHandler(tabName) + end +end + +function backpackOpenHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = true + updateGridActive() + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function backpackCloseHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = false + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function loadoutCheck(child, selectState) + if not child:IsA("ImageButton") then return end + for k,v in pairs(backpackItems) do + if buttons[v] then + if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then + if buttons[v].GearReference.Value == child.GearReference.Value then + buttons[v].Active = selectState + break + end + end + end + end +end + +function clearPreview() + gearPreview.GearImage.Image = "" + gearPreview.GearStats.GearName.Text = "" +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + stuff[i].Parent = playerBackpack + end + end +end + +function equipGear(physGear) + removeAllEquippedGear(physGear) + physGear.Parent = player.Character + updateGridActive() +end + +function unequipGear(physGear) + physGear.Parent = playerBackpack + updateGridActive() +end + +function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) +end +function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function swapGearSlot(slot,gearButton) + if not swapSlot.Value then -- signal loadout to swap a gear out + swapSlot.Slot.Value = slot + swapSlot.GearButton.Value = gearButton + swapSlot.Value = true + updateGridActive() + end +end + + +local UnequipGearMenuClick = function(element, menu) + if type(element.Action) ~= "number" then return end + local num = element.Action + if num == 1 then -- remove from loadout + unequipGear(menu.Parent.GearReference.Value) + local inventoryButton = menu.Parent + local gearToUnequip = inventoryButton.GearReference.Value + local loadoutChildren = currentLoadout:GetChildren() + local slot = -1 + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local button = loadoutChildren[i]:GetChildren() + if button[1] and button[1].GearReference.Value == gearToUnequip then + slot = button[1].SlotNumber.Text + break + end + end + end + swapGearSlot(slot,nil) + end +end + +function setupCharacterConnections() + + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + + -- make sure we get all the children + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) + end + + if characterChildAddedCon then characterChildAddedCon:disconnect() end + characterChildAddedCon = + game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) + addToGrid(child) + updateGridActive() + end) + + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + characterChildRemovedCon = + game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) + updateGridActive() + end) + + wait() + centerGear(currentLoadout:GetChildren()) +end + +function removeCharacterConnections() + if characterChildAddedCon then characterChildAddedCon:disconnect() end + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + if backpackAddCon then backpackAddCon:disconnect() end +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function filterGear(terms) + local filteredGear = {} + for k,v in pairs(backpackItems) do + if buttons[v] then + local gearString = string.lower(buttons[v].GearReference.Value.Name) + gearString = trim(gearString) + for i = 1, #terms do + if string.match(gearString,terms[i]) then + table.insert(filteredGear,buttons[v]) + break + end + end + end + end + + return filteredGear +end +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end +function showSearchGear(searchTerms) + if not backpack.Gear.Visible then return end -- currently not active tab + + local searchTermTable = splitByWhitespace(searchTerms) + if searchTermTable and (#searchTermTable > 0) then + currSearchTerms = searchTermTable + else + currSearchTerms = nil + end + + if searchTermTable == nil then + showEntireGrid() + return + end + + local filteredButtons = filterGear(currSearchTerms) + showPartialGrid(filteredButtons) +end + +function nukeBackpack() + while #buttons > 0 do + table.remove(buttons) + end + buttons = {} + while #backpackItems > 0 do + table.remove(backpackItems) + end + backpackItems = {} + local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() + for i = 1, #scrollingFrameChildren do + scrollingFrameChildren[i]:remove() + end +end + +function getGearContextMenu() + local gearContextMenu = Instance.new("Frame") + gearContextMenu.Active = true + gearContextMenu.Name = "UnequipContextMenu" + gearContextMenu.Size = UDim2.new(0,115,0,70) + gearContextMenu.Position = UDim2.new(0,-16,0,-16) + gearContextMenu.BackgroundTransparency = 1 + gearContextMenu.Visible = false + + local gearContextMenuButton = Instance.new("TextButton") + gearContextMenuButton.Name = "UnequipContextMenuButton" + gearContextMenuButton.Text = "" + gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault + gearContextMenuButton.ZIndex = 8 + gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) + gearContextMenuButton.Visible = true + gearContextMenuButton.Parent = gearContextMenu + + local elementHeight = 12 + + local contextMenuElements = {} + local contextMenuElementsName = {"Remove Hotkey"} + + for i = 1, #contextMenuElementsName do + local element = {} + element.Type = "Button" + element.Text = contextMenuElementsName[i] + element.Action = i + element.DoIt = UnequipGearMenuClick + table.insert(contextMenuElements,element) + end + + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + if element.Type == "Button" then + local button = Instance.new("TextButton") + button.Name = "UnequipContextButton" .. i + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderSizePixel = 0 + button.TextXAlignment = Enum.TextXAlignment.Left + button.Text = " " .. contextElement.Text + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size14 + button.Size = UDim2.new(1, 8, 0, elementHeight) + button.Position = UDim2.new(0,0,0,elementHeight * i) + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 9 + button.Parent = gearContextMenuButton + + button.MouseButton1Click:connect(function() + if button.Active and not gearContextMenu.Parent.Active then + local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) + browsingMenu = false + gearContextMenu.Visible = false + clearHighlight(button) + clearPreview() + end + end) + + button.MouseEnter:connect(function() + if button.Active and gearContextMenu.Parent.Active then + highlight(button) + end + end) + button.MouseLeave:connect(function() + if button.Active and gearContextMenu.Parent.Active then + clearHighlight(button) + end + end) + + contextElement.Button = button + contextElement.Element = button + elseif element.Type == "Label" then + local frame = Instance.new("Frame") + frame.Name = "ContextLabel" .. i + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1, 8, 0, elementHeight) + + local label = Instance.new("TextLabel") + label.Name = "Text1" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.0, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label1 = label + + if element.GetText2 then + label = Instance.new("TextLabel") + label.Name = "Text2" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Right + label.Font = Enum.Font.Arial + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.5, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label2 = label + end + frame.Parent = gearContextMenuButton + element.Label = frame + element.Element = frame + end + end + + gearContextMenu.ZIndex = 4 + gearContextMenu.MouseLeave:connect(function() + browsingMenu = false + gearContextMenu.Visible = false + clearPreview() + end) + robloxLock(gearContextMenu) + + return gearContextMenu +end + +local backpackChildren = player.Backpack:GetChildren() +for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) +end + +------------------------- Start Lifelong Connections ----------------------- + + +resizeEvent.Event:connect(function(absSize) + if debounce then return end + + debounce = true + wait() + resize() + resizeGrid() + debounce = false +end) + +currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) +currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) + +currentLoadout.DescendantAdded:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + centerGear(currentLoadout:GetChildren()) + end +end) +currentLoadout.DescendantRemoving:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + wait() + centerGear(currentLoadout:GetChildren()) + end +end) + +grid.MouseEnter:connect(function() clearPreview() end) +grid.MouseLeave:connect(function() clearPreview() end) + +player.CharacterRemoving:connect(function() + removeCharacterConnections() + nukeBackpack() +end) +player.CharacterAdded:connect(function() setupCharacterConnections() end) + +player.ChildAdded:connect(function(child) + if child:IsA("Backpack") then + playerBackpack = child + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + end +end) + +swapSlot.Changed:connect(function() + if not swapSlot.Value then + updateGridActive() + end +end) + +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + loadoutChildren[i].ChildRemoved:connect(function() + updateGridActive() + end) + loadoutChildren[i].ChildAdded:connect(function() + updateGridActive() + end) + end +end +------------------------- End Lifelong Connections ----------------------- + +resize() +resizeGrid() + +-- make sure any items in the loadout are accounted for in inventory +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + loadoutCheck(loadoutChildren[i], false) +end +if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end + +-- make sure that inventory is listening to gear reparenting +if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then + setupCharacterConnections() +end +if not backpackAddCon then + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) +end + +backpackOpenEvent.Event:connect(backpackOpenHandler) +backpackCloseEvent.Event:connect(backpackCloseHandler) +tabClickedEvent.Event:connect(tabClickHandler) +searchRequestedEvent.Event:connect(showSearchGear) + +recalculateScrollLoadout() \ No newline at end of file diff --git a/app/files/CoreGui/89449093 b/app/files/CoreGui/89449093 new file mode 100644 index 0000000..6150aaa --- /dev/null +++ b/app/files/CoreGui/89449093 @@ -0,0 +1,443 @@ +-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search) +if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client + +-- basic functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- don't do anything if we are in an empty game +waitForChild(game,"Players") +if #game.Players:GetChildren() < 1 then + game.Players.ChildAdded:wait() +end +-- make sure everything is loaded in before we do anything +-- get our local player +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + + + +------------------------ Locals ------------------------------ +local backpack = script.Parent +waitForChild(backpack,"Gear") + +local screen = script.Parent.Parent +assert(screen:IsA("ScreenGui")) + +waitForChild(backpack, "Tabs") +waitForChild(backpack.Tabs, "CloseButton") +local closeButton = backpack.Tabs.CloseButton + +waitForChild(backpack.Tabs, "InventoryButton") +local inventoryButton = backpack.Tabs.InventoryButton +if game.CoreGui.Version >= 8 then + waitForChild(backpack.Tabs, "WardrobeButton") + local wardrobeButton = backpack.Tabs.WardrobeButton +end +waitForChild(backpack.Parent,"ControlFrame") +local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton") +local currentTab = "gear" + +local searchFrame = waitForChild(backpack,"SearchFrame") +waitForChild(backpack.SearchFrame,"SearchBoxFrame") +local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox") +local searchButton = waitForChild(backpack.SearchFrame,"SearchButton") +local resetButton = waitForChild(backpack.SearchFrame,"ResetButton") + +local robloxGui = waitForChild(Game.CoreGui, 'RobloxGui') +local currentLoadout = waitForChild(robloxGui, 'CurrentLoadout') +local loadoutBackground = waitForChild(currentLoadout, 'Background') + +local canToggle = true +local readyForNextEvent = true +local backpackIsOpen = false +local active = true +local disabledByDeveloper = false + +local humanoidDiedCon = nil + +local backpackButtonPos + +local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack + +local searchDefaultText = "Search..." +local tilde = "~" +local backquote = "`" + +local backpackSize = UDim2.new(0, 600, 0, 400) + +if robloxGui.AbsoluteSize.Y <= 320 then + backpackSize = UDim2.new(0, 200, 0, 140) +end + + +------------------------ End Locals --------------------------- + + +---------------------------------------- Public Event Setup ---------------------------------------- + +function createPublicEvent(eventName) + assert(eventName, "eventName is nil") + assert(tostring(eventName),"eventName is not a string") + + local newEvent = Instance.new("BindableEvent") + newEvent.Name = tostring(eventName) + newEvent.Parent = script + + return newEvent +end + +function createPublicFunction(funcName, invokeFunc) + assert(funcName, "funcName is nil") + assert(tostring(funcName), "funcName is not a string") + assert(invokeFunc, "invokeFunc is nil") + assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'") + + local newFunction = Instance.new("BindableFunction") + newFunction.Name = tostring(funcName) + newFunction.OnInvoke = invokeFunc + newFunction.Parent = script + + return newFunction +end + +-- Events +local resizeEvent = createPublicEvent("ResizeEvent") +local backpackOpenEvent = createPublicEvent("BackpackOpenEvent") +local backpackCloseEvent = createPublicEvent("BackpackCloseEvent") +local tabClickedEvent = createPublicEvent("TabClickedEvent") +local searchRequestedEvent = createPublicEvent("SearchRequestedEvent") +---------------------------------------- End Public Event Setup ---------------------------------------- + + + +--------------------------- Internal Functions ---------------------------------------- + +function deactivateBackpack() + backpack.Visible = false + active = false +end + +function activateBackpack() + initHumanoidDiedConnections() + active = true + backpack.Visible = backpackIsOpen + if backpackIsOpen then + toggleBackpack() + end +end + +function initHumanoidDiedConnections() + if humanoidDiedCon then + humanoidDiedCon:disconnect() + end + waitForProperty(game.Players.LocalPlayer,"Character") + waitForChild(game.Players.LocalPlayer.Character,"Humanoid") + humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack) +end + +local hideBackpack = function() + backpackIsOpen = false + readyForNextEvent = false + backpackButton.Selected = false + resetSearch() + backpackCloseEvent:Fire(currentTab) + backpack.Tabs.Visible = false + searchFrame.Visible = false + backpack:TweenSizeAndPosition(UDim2.new(0, backpackSize.X.Offset,0, 0), UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -85), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true, + function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + end) + delay(guiTweenSpeed,function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + readyForNextEvent = true + canToggle = true + end) +end + +function showBackpack() + game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + backpack.Visible = true + backpackButton.Selected = true + end, + function() + backpack.Visible = false + backpackButton.Selected = false + end) + backpack.Visible = true + backpackButton.Selected = true + backpack:TweenSizeAndPosition(backpackSize, UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -backpackSize.Y.Offset - 88), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true) + delay(guiTweenSpeed,function() + backpack.Tabs.Visible = false + searchFrame.Visible = true + backpackOpenEvent:Fire(currentTab) + canToggle = true + readyForNextEvent = true + backpackButton.Image = 'http://www.nexium.fit/asset/?id=97644093' + backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103) + end) +end + +function toggleBackpack() + if not game.Players.LocalPlayer then return end + if not game.Players.LocalPlayer["Character"] then return end + if not canToggle then return end + if not readyForNextEvent then return end + readyForNextEvent = false + canToggle = false + + backpackIsOpen = not backpackIsOpen + + if backpackIsOpen then + loadoutBackground.Image = 'http://www.nexium.fit/asset/?id=97623721' + loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0) + loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0) + loadoutBackground.ZIndex = 2.0 + loadoutBackground.Visible = true + showBackpack() + else + backpackButton.Position = UDim2.new(0.5, -60, 1, -44) + loadoutBackground.Visible = false + backpackButton.Selected = false + backpackButton.Image = "http://www.nexium.fit/asset/?id=97617958" + loadoutBackground.Image = 'http://www.nexium.fit/asset/?id=96536002' + loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0) + loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0) + hideBackpack() + + + local clChildren = currentLoadout:GetChildren() + for i = 1, #clChildren do + if clChildren[i] and clChildren[i]:IsA('Frame') then + local frame = clChildren[i] + if #frame:GetChildren() > 0 then + backpackButton.Position = UDim2.new(0.5, -60, 1, -108) + backpackButton.Visible = true + loadoutBackground.Visible = true + if frame:GetChildren()[1]:IsA('ImageButton') then + local imgButton = frame:GetChildren()[1] + imgButton.Active = true + imgButton.Draggable = false + end + end + end + end + + end +end + +function closeBackpack() + if backpackIsOpen then + toggleBackpack() + end +end + +function setSelected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(1,1,1) + tab.TextColor3 = Color3.new(0,0,0) + tab.Selected = true + tab.ZIndex = 3 +end + +function setUnselected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(0,0,0) + tab.TextColor3 = Color3.new(1,1,1) + tab.Selected = false + tab.ZIndex = 1 +end + +function updateTabGui(selectedTab) + assert(selectedTab) + + if selectedTab == "gear" then + setSelected(inventoryButton) + setUnselected(wardrobeButton) + elseif selectedTab == "wardrobe" then + setSelected(wardrobeButton) + setUnselected(inventoryButton) + end +end + +function mouseLeaveTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function mouseOverTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(39/255,39/255,39/255) +end + +function newTabClicked(tabName) + assert(tabName) + tabName = string.lower(tabName) + currentTab = tabName + + updateTabGui(tabName) + tabClickedEvent:Fire(tabName) + resetSearch() +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end + +function resetSearchBoxGui() + resetButton.Visible = false + searchBox.Text = searchDefaultText +end + +function doSearch() + local searchText = searchBox.Text + if searchText == "" then + resetSearch() + return + end + searchText = trim(searchText) + resetButton.Visible = true + termTable = splitByWhitespace(searchText) + searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible +end + +function resetSearch() + resetSearchBoxGui() + searchRequestedEvent:Fire() +end + +local backpackReady = function() + readyForNextEvent = true +end + +function coreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then + active = enabled + disabledByDeveloper = not enabled + + if disabledByDeveloper then + pcall(function() + game:GetService("GuiService"):RemoveKey(tilde) + game:GetService("GuiService"):RemoveKey(backquote) + end) + else + game:GetService("GuiService"):AddKey(tilde) + game:GetService("GuiService"):AddKey(backquote) + end + + resetSearch() + searchFrame.Visible = enabled and backpackIsOpen + + currentLoadout.Visible = enabled + backpack.Visible = enabled + backpackButton.Visible = enabled + end +end + +--------------------------- End Internal Functions ------------------------------------- + + +------------------------------ Public Functions Setup ------------------------------------- +createPublicFunction("CloseBackpack", hideBackpack) +createPublicFunction("BackpackReady", backpackReady) +------------------------------ End Public Functions Setup --------------------------------- + + +------------------------ Connections/Script Main ------------------------------------------- + +pcall(function() + coreGuiChanged(Enum.CoreGuiType.Backpack, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) + Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) +end) + +inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end) +inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end) +inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end) + +if game.CoreGui.Version >= 8 then + wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end) + wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end) + wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end) +end + +closeButton.MouseButton1Click:connect(closeBackpack) + +screen.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + resizeEvent:Fire(screen.AbsoluteSize) + end +end) + +-- GuiService key setup +game:GetService("GuiService"):AddKey(tilde) +game:GetService("GuiService"):AddKey(backquote) +game:GetService("GuiService").KeyPressed:connect(function(key) + if not active or disabledByDeveloper then return end + if key == tilde or key == backquote then + toggleBackpack() + end +end) +backpackButton.MouseButton1Click:connect(function() + if not active or disabledByDeveloper then return end + toggleBackpack() +end) + +if game.Players.LocalPlayer["Character"] then + activateBackpack() +end + +game.Players.LocalPlayer.CharacterAdded:connect(activateBackpack) + +-- search functions +searchBox.FocusLost:connect(function(enterPressed) + if enterPressed or searchBox.Text ~= "" then + doSearch() + elseif searchBox.Text == "" then + resetSearch() + end +end) +searchButton.MouseButton1Click:connect(doSearch) +resetButton.MouseButton1Click:connect(resetSearch) + +if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then + searchFrame.RobloxLocked = false + searchFrame:Destroy() +end \ No newline at end of file diff --git a/app/files/CoreGui/89449094 b/app/files/CoreGui/89449094 new file mode 100644 index 0000000..3c14c16 --- /dev/null +++ b/app/files/CoreGui/89449094 @@ -0,0 +1,360 @@ +-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search) +if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client + +-- basic functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- don't do anything if we are in an empty game +waitForChild(game,"Players") +if #game.Players:GetChildren() < 1 then + game.Players.ChildAdded:wait() +end +-- make sure everything is loaded in before we do anything +-- get our local player +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + + + +------------------------ Locals ------------------------------ +local backpack = script.Parent +waitForChild(backpack,"Gear") + +local screen = script.Parent.Parent +assert(screen:IsA("ScreenGui")) + +waitForChild(backpack, "Tabs") +waitForChild(backpack.Tabs, "CloseButton") +local closeButton = backpack.Tabs.CloseButton + +waitForChild(backpack.Tabs, "InventoryButton") +local inventoryButton = backpack.Tabs.InventoryButton +if game.CoreGui.Version >= 8 then + waitForChild(backpack.Tabs, "WardrobeButton") + local wardrobeButton = backpack.Tabs.WardrobeButton +end +waitForChild(backpack.Parent,"ControlFrame") +local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton") +local currentTab = "gear" + +local searchFrame = waitForChild(backpack,"SearchFrame") +waitForChild(backpack.SearchFrame,"SearchBoxFrame") +local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox") +local searchButton = waitForChild(backpack.SearchFrame,"SearchButton") +local resetButton = waitForChild(backpack.SearchFrame,"ResetButton") + +local canToggle = true +local readyForNextEvent = true +local backpackIsOpen = false +local active = true + +local humanoidDiedCon = nil + +local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack + +local searchDefaultText = "Search..." +local tilde = "~" +local backquote = "`" + +------------------------ End Locals --------------------------- + + +---------------------------------------- Public Event Setup ---------------------------------------- + +function createPublicEvent(eventName) + assert(eventName, "eventName is nil") + assert(tostring(eventName),"eventName is not a string") + + local newEvent = Instance.new("BindableEvent") + newEvent.Name = tostring(eventName) + newEvent.Parent = script + + return newEvent +end + +function createPublicFunction(funcName, invokeFunc) + assert(funcName, "funcName is nil") + assert(tostring(funcName), "funcName is not a string") + assert(invokeFunc, "invokeFunc is nil") + assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'") + + local newFunction = Instance.new("BindableFunction") + newFunction.Name = tostring(funcName) + newFunction.OnInvoke = invokeFunc + newFunction.Parent = script + + return newFunction +end + +-- Events +local resizeEvent = createPublicEvent("ResizeEvent") +local backpackOpenEvent = createPublicEvent("BackpackOpenEvent") +local backpackCloseEvent = createPublicEvent("BackpackCloseEvent") +local tabClickedEvent = createPublicEvent("TabClickedEvent") +local searchRequestedEvent = createPublicEvent("SearchRequestedEvent") +---------------------------------------- End Public Event Setup ---------------------------------------- + + + +--------------------------- Internal Functions ---------------------------------------- + +function deactivateBackpack() + backpack.Visible = false + active = false +end + +function activateBackpack() + initHumanoidDiedConnections() + active = true + backpack.Visible = backpackIsOpen +end + +function initHumanoidDiedConnections() + if humanoidDiedCon then + humanoidDiedCon:disconnect() + end + waitForProperty(game.Players.LocalPlayer,"Character") + waitForChild(game.Players.LocalPlayer.Character,"Humanoid") + humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack) +end + +local hideBackpack = function() + backpackIsOpen = false + readyForNextEvent = false + backpackButton.Selected = false + resetSearch() + backpackCloseEvent:Fire(currentTab) + backpack.Tabs.Visible = false + searchFrame.Visible = false + backpack:TweenSizeAndPosition(UDim2.new(0,0,0,0),UDim2.new(0.5,0,0.5,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true, + function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + end) + delay(guiTweenSpeed,function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + canToggle = true + end) +end + +function showBackpack() + game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + backpack.Visible = true + backpackButton.Selected = true + end, + function() + backpack.Visible = false + backpackButton.Selected = false + end) + backpack.Visible = true + backpackButton.Selected = true + backpack:TweenSizeAndPosition(UDim2.new(0.55, 0, 0.76, 0),UDim2.new(0.225, 0, 0.09, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true) + delay(guiTweenSpeed,function() + backpack.Tabs.Visible = true + searchFrame.Visible = true + backpackOpenEvent:Fire(currentTab) + canToggle = true + end) +end + +function toggleBackpack() + if not game.Players.LocalPlayer then return end + if not game.Players.LocalPlayer["Character"] then return end + + if not canToggle then return end + if not readyForNextEvent then return end + readyForNextEvent = false + canToggle = false + + backpackIsOpen = not backpackIsOpen + + if backpackIsOpen then + showBackpack() + else + backpackButton.Selected = false + hideBackpack() + end +end + +function closeBackpack() + if backpackIsOpen then + toggleBackpack() + end +end + +function setSelected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(1,1,1) + tab.TextColor3 = Color3.new(0,0,0) + tab.Selected = true + tab.ZIndex = 3 +end + +function setUnselected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(0,0,0) + tab.TextColor3 = Color3.new(1,1,1) + tab.Selected = false + tab.ZIndex = 1 +end + +function updateTabGui(selectedTab) + assert(selectedTab) + + if selectedTab == "gear" then + setSelected(inventoryButton) + setUnselected(wardrobeButton) + elseif selectedTab == "wardrobe" then + setSelected(wardrobeButton) + setUnselected(inventoryButton) + end +end + +function mouseLeaveTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function mouseOverTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(39/255,39/255,39/255) +end + +function newTabClicked(tabName) + assert(tabName) + tabName = string.lower(tabName) + currentTab = tabName + + updateTabGui(tabName) + tabClickedEvent:Fire(tabName) + resetSearch() +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end + +function resetSearchBoxGui() + resetButton.Visible = false + searchBox.Text = searchDefaultText +end + +function doSearch() + local searchText = searchBox.Text + if searchText == "" then + resetSearch() + return + end + searchText = trim(searchText) + resetButton.Visible = true + termTable = splitByWhitespace(searchText) + searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible +end + +function resetSearch() + resetSearchBoxGui() + searchRequestedEvent:Fire() +end + +local backpackReady = function() + readyForNextEvent = true +end + +--------------------------- End Internal Functions ------------------------------------- + + +------------------------------ Public Functions Setup ------------------------------------- +createPublicFunction("CloseBackpack", hideBackpack) +createPublicFunction("BackpackReady", backpackReady) +------------------------------ End Public Functions Setup --------------------------------- + + +------------------------ Connections/Script Main ------------------------------------------- + +inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end) +inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end) +inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end) + +if game.CoreGui.Version >= 8 then + wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end) + wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end) + wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end) +end + +closeButton.MouseButton1Click:connect(closeBackpack) + +screen.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + resizeEvent:Fire(screen.AbsoluteSize) + end +end) + +-- GuiService key setup +game:GetService("GuiService"):AddKey(tilde) +game:GetService("GuiService"):AddKey(backquote) +game:GetService("GuiService").KeyPressed:connect(function(key) + if not active then return end + if key == tilde or key == backquote then + toggleBackpack() + end +end) +backpackButton.MouseButton1Click:connect(function() + if not active then return end + toggleBackpack() +end) + +if game.Players.LocalPlayer["Character"] then + activateBackpack() +end +game.Players.LocalPlayer.CharacterAdded:connect(activateBackpack) + +-- search functions +searchBox.FocusLost:connect(function(enterPressed) + if enterPressed or searchBox.Text ~= "" then + doSearch() + elseif searchBox.Text == "" then + resetSearch() + end +end) +searchButton.MouseButton1Click:connect(doSearch) +resetButton.MouseButton1Click:connect(resetSearch) + +backpackButton.Visible = true diff --git a/app/files/CoreGui/97188756 b/app/files/CoreGui/97188756 new file mode 100644 index 0000000..8138149 --- /dev/null +++ b/app/files/CoreGui/97188756 @@ -0,0 +1,1376 @@ +--[[ + //FileName: ChatScript.LUA + //Written by: Sorcus + //Description: Code for lua side chat on ROBLOX. Supports Scrolling. + //NOTE: If you find any bugs or inaccuracies PM Sorcus on ROBLOX or @Canavus on Twitter +]] + +local forceChatGUI = false + +-- Utility functions + Globals +local function WaitForChild(parent, childName) + while parent:FindFirstChild(childName) == nil do + parent.ChildAdded:wait(0.03) + end + return parent[childName] +end + +local function typedef(obj) + return obj +end + +local function IsPhone() + local cGui = Game:GetService('CoreGui') + local rGui = WaitForChild(cGui, 'RobloxGui') + if rGui.AbsoluteSize.Y < 600 then + return true + end + return false +end + +-- Users can use enough white spaces to spoof chatting as other players +-- This function removes trailing and leading white spaces +-- AFAIK, there is no reason for spam white spaces +local function StringTrim(str) + -- %S is whitespaces + -- When we find the first non space character defined by ^%s + -- we yank out anything in between that and the end of the string + -- Everything else is replaced with %1 which is essentially nothing + return (str:gsub("^%s*(.-)%s*$", "%1")) +end + +while Game.Players.LocalPlayer == nil do wait(0.03) end + +local Player = Game.Players.LocalPlayer +while Player.Character == nil do wait(0.03) end +local RbxUtility = LoadLibrary('RbxUtility') +local Gui = typedef(RbxUtility) +local Camera = Game.Workspace.CurrentCamera + +-- Services +local CoreGuiService = Game:GetService('CoreGui') +local PlayersService = Game:GetService('Players') +local DebrisService= Game:GetService('Debris') +local GuiService = Game:GetService('GuiService') +local inputService = game:GetService("UserInputService") + +-- Lua Enums +local Enums do + Enums = {} + local EnumName = {} -- used as unique key for enum name + local enum_mt = { + __call = function(self,value) + return self[value] or self[tonumber(value)] + end; + __index = { + GetEnumItems = function(self) + local t = {} + for i,item in pairs(self) do + if type(i) == 'number' then + t[#t+1] = item + end + end + table.sort(t,function(a,b) return a.Value < b.Value end) + return t + end; + }; + __tostring = function(self) + return "Enum." .. self[EnumName] + end; + } + local item_mt = { + __call = function(self,value) + return value == self or value == self.Name or value == self.Value + end; + __tostring = function(self) + return "Enum." .. self[EnumName] .. "." .. self.Name + end; + } + function CreateEnum(enumName) + return function(t) + local e = {[EnumName] = enumName} + for i,name in pairs(t) do + local item = setmetatable({Name=name,Value=i,Enum=e,[EnumName]=enumName},item_mt) + e[i] = item + e[name] = item + e[item] = item + end + Enums[enumName] = e + return setmetatable(e, enum_mt) + end + end +end +--------------------------------------------------- +------------------ Input class -------------------- +local Input = { + Mouse = Player:GetMouse(), + Speed = 0, + Simulating = false, + + Configuration = { + DefaultSpeed = 1 + }, + UserIsScrolling = false + } + +--------------------------------------------------- +------------------ Chat class -------------------- +local Chat = { + + ChatColors = { + BrickColor.new("Bright red"), + BrickColor.new("Bright blue"), + BrickColor.new("Earth green"), + BrickColor.new("Bright violet"), + BrickColor.new("Bright orange"), + BrickColor.new("Bright yellow"), + BrickColor.new("Light reddish violet"), + BrickColor.new("Brick yellow"), + }, + + Gui = nil, + Frame = nil, + RenderFrame = nil, + TapToChatLabel = nil, + ClickToChatButton = nil, + + ScrollingLock = false, + EventListener = nil, + + -- This is actually a ring buffer + -- Meaning at hitting the historyLength it wraps around + -- Reuses the text objects, so chat atmost uses 100 text objects + MessageQueue = {}, + + -- Stores all the values for configuring chat + Configuration = { + FontSize = Enum.FontSize.Size12, -- 10 is good + -- Also change this when you are changing the above, this is suboptimal but so is our interface to find FontSize + NumFontSize = 12, + HistoryLength = 20, -- stores up to 50 of the last chat messages for you to scroll through, + Size = UDim2.new(0.38, 0, 0.20, 0), + MessageColor = Color3.new(1, 1, 1), + AdminMessageColor = Color3.new(1, 215/255, 0), + XScale = 0.025, + LifeTime = 45, + Position = UDim2.new(0, 2, 0.05, 0), + DefaultTweenSpeed = 0.15, + }, + + -- This could be redone by just using the previous and next fields of the Queue + -- But the iterators cause issues, will be optimized later + SlotPositions_List = {}, + -- To precompute and store all player null strings since its an expensive process + CachedSpaceStrings_List = {}, + MouseOnFrame = false, + GotFocus = false, + + Messages_List = {}, + MessageThread = nil, + + Admins_List = { + 'Rbadam', 'Adamintygum', 'androidtest', 'RobloxFrenchie', 'JacksSmirkingRevenge', 'LindaPepita', 'vaiobot', 'Goddessnoob', 'effward', 'Blockhaak', 'Drewbda', '659223', 'Tone', 'fasterbuilder19', 'Zeuxcg', 'concol2', + 'ReeseMcBlox', 'Jeditkacheff', 'whkm1980', 'ChiefJustus', 'Ellissar', 'Arbolito', 'Noob007', 'Limon', 'cmed', 'hawkington', 'Tabemono', 'autoconfig', 'BrightEyes', 'Monsterinc3D', 'MrDoomBringer', 'IsolatedEvent', + 'CountOnConnor', 'Scubasomething', 'OnlyTwentyCharacters', 'LordRugdumph', 'bellavour', 'david.baszucki', 'ibanez2189', 'Sorcus', 'DeeAna00', 'TheLorekt', 'NiqueMonster', 'Thorasaur', 'MSE6', 'CorgiParade', 'Varia', + '4runningwolves', 'pulmoesflor', 'Olive71', 'groundcontroll2', 'GuruKrish', 'Countvelcro', 'IltaLumi', 'juanjuan23', 'OstrichSized', 'jackintheblox', 'SlingshotJunkie', 'gordonrox24', 'sharpnine', 'Motornerve', 'Motornerve', + 'watchmedogood', 'jmargh', 'JayKorean', 'Foyle', 'MajorTom4321', 'Shedletsky', 'supernovacaine', 'FFJosh', 'Sickenedmonkey', 'Doughtless', 'KBUX', 'totallynothere', 'ErzaStar', 'Keith', 'Chro', 'SolarCrane', 'GloriousSalt', + 'UristMcSparks', 'ITOlaurEN', 'Malcomso', 'Stickmasterluke', 'windlight13', 'yumyumcheerios', 'Stravant', 'ByteMe', 'imaginationsensation', 'Matt.Dusek', 'Mcrtest', 'Seranok', 'maxvee', 'Coatp0cketninja', 'Screenme', + 'b1tsh1ft', 'Totbl', 'Aquabot8', 'grossinger', 'Merely', 'CDakkar', 'Siekiera', 'Robloxkidsaccount', 'flotsamthespork', 'Soggoth', 'Phil', 'OrcaSparkles', 'skullgoblin', 'RickROSStheB0SS', 'ArgonPirate', 'NobleDragon', + 'Squidcod', 'Raeglyn', 'RobloxSai', 'Briarroze', 'hawkeyebandit', 'DapperBuffalo', 'Vukota', 'swiftstone', 'Gemlocker', 'Loopylens', 'Tarabyte', 'Timobius', 'Tobotrobot', 'Foster008', 'Twberg', 'DarthVaden', 'Khanovich', + 'CodeWriter', 'VladTheFirst', 'Phaedre', 'gorroth', 'SphinxShen', 'jynj1984', 'RoboYZ', 'ZodiacZak' + }, + + + SafeChat_List = { + ['Use the Chat menu to talk to me.'] = {'/sc 0', true}, + ['I can only see menu chats.'] = {'/sc 1', true}, + ['Hello'] = { + ['Hi'] = {'/sc 2_0', true, ['Hi there!'] = true, ['Hi everyone'] = true}, + ['Howdy'] = {'/sc 2_1', true, ['Howdy partner!'] = true}, + ['Greetings'] = {'/sc 2_2', true, ['Greetings everyone'] = true, ['Greetings Robloxians!'] = true, ['Seasons greetings!'] = true}, + ['Welcome'] = {'/sc 2_3', true, ['Welcome to my place'] = true, ['Welcome to my barbeque'] = true, ['Welcome to our base'] = true}, + ['Hey there!'] = {'/sc 2_4', true}, + ['What\'s up?'] = {'/sc 2_5', true, ['How are you doing?'] = true, ['How\'s it going?'] = true, ['What\'s new?'] = true}, + ['Good day'] = {'/sc 2_6', true, ['Good morning'] = true, ['Good evening'] = true, ['Good afternoon'] = true, ['Good night'] = true}, + ['Silly'] = {'/sc 2_7', true, ['Waaaaaaaz up?!'] = true, ['Hullo!'] = true, ['Behold greatness, mortals!'] = true, ['Pardon me, is this Sparta?'] = true, ['THIS IS SPARTAAAA!'] = true}, + ['Happy Holidays!'] = {'/sc 2_8', true, ['Happy New Year!'] = true, + ['Happy Valentine\'s Day!'] = true, + ['Beware the Ides of March!'] = true, + ['Happy St. Patrick\'s Day!'] = true, + ['Happy Easter!'] = true, + ['Happy Earth Day!'] = true, + ['Happy 4th of July!'] = true, + ['Happy Thanksgiving!'] = true, + ['Happy Halloween!'] = true, + ['Happy Hanukkah!'] = true, + ['Merry Christmas!'] = true, + ['Happy Halloween!'] = true, + ['Happy Earth Day!'] = true, + ['Happy May Day!'] = true, + ['Happy Towel Day!'] = true, + ['Happy ROBLOX Day!'] = true, + ['Happy LOL Day!'] = true }, + + [1] = '/sc 2' + }, + ['Goodbye'] = { + ['Good Night']= {'/sc 3_0', true, + ['Sweet dreams'] = true, + ['Go to sleep!'] = true, + ['Lights out!'] = true, + ['Bedtime'] = true, + ['Going to bed now'] = true}, + + ['Later']= {'/sc 3_1', true, + ['See ya later'] = true, + ['Later gator!'] = true, + ['See you tomorrow'] = true}, + + ['Bye'] = {'/sc 3_2', true, ['Hasta la bye bye!'] = true}, + ['I\'ll be right back'] = {'/sc 3_3', true}, + ['I have to go'] = {'/sc 3_4', true}, + ['Farewell'] = {'/sc 3_5', true, ['Take care'] = true, ['Have a nice day'] = true, ['Goodluck!'] = true, ['Ta-ta for now!'] = true}, + ['Peace'] = {'/sc 3_6', true, ['Peace out!'] = true, ['Peace dudes!'] = true, ['Rest in pieces!'] = true}, + ['Silly'] = {'/sc 3_7', true, + ['To the batcave!'] = true, + ['Over and out!'] = true, + ['Happy trails!'] = true, + ['I\'ve got to book it!'] = true, + ['Tootles!'] = true, + ['Smell you later!'] = true, + ['GG!'] = true, + ['My house is on fire! gtg.'] = true}, + [1] = '/sc 3' + }, + ['Friend'] ={ + ['Wanna be friends?'] = {'/sc 4_0', true}, + ['Follow me'] = {'/sc 4_1', true, ['Come to my place!'] = true, ['Come to my base!'] = true, ['Follow me, team!'] = true, ['Follow me'] = true}, + ['Your place is cool'] = {'/sc 4_2', true, ['Your place is fun'] = true, ['Your place is awesome'] = true, ['Your place looks good'] = true, ['This place is awesome!'] = true}, + ['Thank you'] = {'/sc 4_3', true, ['Thanks for playing'] = true, ['Thanks for visiting'] = true, ['Thanks for everything'] = true, ['No, thank you'] = true, ['Thanx'] = true}, + ['No problem'] = {'/sc 4_4', true, ['Don\'t worry'] = true, ['That\'s ok'] = true, ['np'] = true}, + ['You are ...'] = {'/sc 4_5', true, + ['You are great!'] = true, + ['You are good!'] = true, + ['You are cool!'] = true, + ['You are funny!'] = true, + ['You are silly!'] = true, + ['You are awesome!'] = true, + ['You are doing something I don\'t like, please stop'] = true + }, + ['I like ...'] = {'/sc 4_6', true, ['I like your name'] = true, ['I like your shirt'] = true, ['I like your place'] = true, ['I like your style'] = true, + ['I like you'] = true, ['I like items'] = true, ['I like money'] = true}, + ['Sorry'] = {'/sc 4_7', true, ['My bad!'] = true, ['I\'m sorry'] = true, ['Whoops!'] = true, ['Please forgive me.'] = true, ['I forgive you.'] = true, + ['I didn\'t mean to do that.'] = true, ['Sorry, I\'ll stop now.'] = true}, + [1] = '/sc 4' + }, + ['Questions'] = { + ['Who?'] = {'/sc 5_0', true, ['Who wants to be my friend?'] = true, ['Who wants to be on my team?'] = true, ['Who made this brilliant game?'] = true}, + ['What?'] = {'/sc 5_1', true, ['What is your favorite animal?'] = true, ['What is your favorite game?'] = true, ['What is your favorite movie?'] = true, + ['What is your favorite TV show?'] = true, ['What is your favorite music?'] = true, ['What are your hobbies?'] = true, ['LOLWUT?'] = true}, + ['When?'] = {'/sc 5_2', true, ['When are you online?'] = true, ['When is the new version coming out?'] = true, ['When can we play again?'] = true, ['When will your place be done?'] = true}, + ['Where?'] = {'/sc 5_3', true, ['Where do you want to go?'] = true, ['Where are you going?'] = true, ['Where am I?!'] = true, ['Where did you go?'] = true}, + ['How?'] = {'/sc 5_4', true, ['How are you today?'] = true, ['How did you make this cool place?'] = true, ['LOLHOW?'] = true}, + ['Can I...'] = {'/sc 5_5', true, ['Can I have a tour?'] = true, ['Can I be on your team?'] = true, ['Can I be your friend?'] = true, ['Can I try something?'] = true, + ['Can I have that please?'] = true, ['Can I have that back please?'] = true, ['Can I have borrow your hat?'] = true, ['Can I have borrow your gear?'] = true}, + [1] = '/sc 5' + }, + ['Answers'] = { + ['You need help?'] = {'/sc 6_0', true, ['Check out the news section'] = true, ['Check out the help section'] = true, ['Read the wiki!'] = true, + ['All the answers are in the wiki!'] = true, ['I will help you with this.'] = true}, + ['Some people ...'] = {'/sc 6_1', true, ['Me'] = true, ['Not me'] = true, ['You'] = true, ['All of us'] = true, ['Everyone but you'] = true, ['Builderman!'] = true, + ['Telamon!'] = true, ['My team'] = true, ['My group'] = true, ['Mom'] = true, ['Dad'] = true, ['Sister'] = true, ['Brother'] = true, ['Cousin'] = true, + ['Grandparent'] = true, ['Friend'] = true}, + ['Time ...'] = {'/sc 6_2', true, ['In the morning'] = true, ['In the afternoon'] = true, ['At night'] = true, ['Tomorrow'] = true, ['This week'] = true, ['This month'] = true, + ['Sometime'] = true, ['Sometimes'] = true, ['Whenever you want'] = true, ['Never'] = true, ['After this'] = true, ['In 10 minutes'] = true, ['In a couple hours'] = true, + ['In a couple days'] = true}, + ['Animals'] = {'/sc 6_3', true, + ['Cats'] = {['Lion'] = true, ['Tiger'] = true, ['Leopard'] = true, ['Cheetah'] = true}, + ['Dogs'] = {['Wolves'] = true, ['Beagle'] = true, ['Collie'] = true, ['Dalmatian'] = true, ['Poodle'] = true, ['Spaniel'] = true, + ['Shepherd'] = true, ['Terrier'] = true, ['Retriever'] = true}, + ['Horses'] = {['Ponies'] = true, ['Stallions'] = true, ['Pwnyz'] = true}, + ['Reptiles'] = {['Dinosaurs'] = true, ['Lizards'] = true, ['Snakes'] = true, ['Turtles!'] = true}, + ['Hamster'] = true, + ['Monkey'] = true, + ['Bears'] = true, + ['Fish'] = {['Goldfish'] = true, ['Sharks'] = true, ['Sea Bass'] = true, ['Halibut'] = true, ['Tropical Fish'] = true}, + ['Birds'] = {['Eagles'] = true, ['Penguins'] = true, ['Parakeets'] = true, ['Owls'] = true, ['Hawks'] = true, ['Pidgeons'] = true}, + ['Elephants'] = true, + ['Mythical Beasts'] = {['Dragons'] = true, ['Unicorns'] = true, ['Sea Serpents'] = true, ['Sphinx'] = true, ['Cyclops'] = true, + ['Minotaurs'] = true, ['Goblins'] = true, ['Honest Politicians'] = true, ['Ghosts'] = true, ['Scylla and Charybdis'] = true} + }, + ['Games'] = {'/sc 6_4', true, + ['Action'] = true, ['Puzzle'] = true, ['Strategy'] = true, ['Racing'] = true, ['RPG'] = true, ['Obstacle Course'] = true, ['Tycoon'] = true, + ['Roblox'] = { ['BrickBattle'] = true, ['Community Building'] = true, ['Roblox Minigames'] = true, ['Contest Place'] = true}, + ['Board games'] = { ['Chess'] = true, ['Checkers'] = true, ['Settlers of Catan'] = true, ['Tigris and Euphrates'] = true, ['El Grande'] = true, + ['Stratego'] = true, ['Carcassonne'] = true} + }, + ['Sports'] = {'/sc 6_5', true, ['Hockey'] = true, ['Soccer'] = true, ['Football'] = true, ['Baseball'] = true, ['Basketball'] = true, + ['Volleyball'] = true, ['Tennis'] = true, ['Sports team practice'] = true, + ['Watersports'] = { ['Surfing'] = true,['Swimming'] = true, ['Water Polo'] = true}, + ['Winter sports'] = { ['Skiing'] = true, ['Snowboarding'] = true, ['Sledding'] = true, ['Skating'] = true}, + ['Adventure'] = {['Rock climbing'] = true, ['Hiking'] = true, ['Fishing'] = true, ['Horseback riding'] = true}, + ['Wacky'] = {['Foosball'] = true, ['Calvinball'] = true, ['Croquet'] = true, ['Cricket'] = true, ['Dodgeball'] = true, + ['Squash'] = true, ['Trampoline'] = true} + }, + ['Movies/TV'] = {'/sc 6_6', true, ['Science Fiction'] = true, ['Animated'] = {['Anime'] = true}, ['Comedy'] = true, ['Romantic'] = true, + ['Action'] = true, ['Fantasy'] = true}, + ['Music'] = {'/sc 6_7', true, ['Country'] = true, ['Jazz'] = true, ['Rap'] = true, ['Hip-hop'] = true, ['Techno'] = true, ['Classical'] = true, + ['Pop'] = true, ['Rock'] = true}, + ['Hobbies'] = {'/sc 6_8', true, + ['Computers'] = { ['Building computers'] = true, ['Videogames'] = true, ['Coding'] = true, ['Hacking'] = true}, + ['The Internet'] = { ['lol. teh internets!'] = true, ['Watching vids'] = true}, + ['Dance'] = true, ['Gymnastics'] = true, ['Listening to music'] = true, ['Arts and crafts'] = true, + ['Martial Arts'] = {['Karate'] = true, ['Judo'] = true, ['Taikwon Do'] = true, ['Wushu'] = true, ['Street fighting'] = true}, + ['Music lessons'] = {['Playing in my band'] = true, ['Playing piano'] = true, ['Playing guitar'] = true, + ['Playing violin'] = true, ['Playing drums'] = true, ['Playing a weird instrument'] = true} + }, + ['Location'] = {'/sc 6_9', true, + ['USA'] = { + ['West'] = { ['Alaska'] = true, ['Arizona'] = true, ['California'] = true, ['Colorado'] = true, ['Hawaii'] = true, + ['Idaho'] = true, ['Montana'] = true, ['Nevada'] = true, ['New Mexico'] = true, ['Oregon'] = true, + ['Utah'] = true, ['Washington'] = true, ['Wyoming'] = true + }, + ['South'] = { ['Alabama'] = true, ['Arkansas'] = true, ['Florida'] = true, ['Georgia'] = true, ['Kentucky'] = true, + ['Louisiana'] = true, ['Mississippi'] = true, ['North Carolina'] = true, ['Oklahoma'] = true, + ['South Carolina'] = true, ['Tennessee'] = true, ['Texas'] = true, ['Virginia'] = true, ['West Virginia'] = true + }, + ['Northeast'] = {['Connecticut'] = true, ['Delaware'] = true, ['Maine'] = true, ['Maryland'] = true, ['Massachusetts'] = true, + ['New Hampshire'] = true, ['New Jersey'] = true, ['New York'] = true, ['Pennsylvania'] = true, ['Rhode Island'] = true, + ['Vermont'] = true + }, + ['Midwest'] = {['Illinois'] = true, ['Indiana'] = true, ['Iowa'] = true, ['Kansas'] = true, ['Michigan'] = true, ['Minnesota'] = true, + ['Missouri'] = true, ['Nebraska'] = true, ['North Dakota'] = true, ['Ohio'] = true, ['South Dakota'] = true, ['Wisconsin'] = true} + }, + ['Canada'] = {['Alberta'] = true, ['British Columbia'] = true, ['Manitoba'] = true, ['New Brunswick'] = true, ['Newfoundland'] = true, + ['Northwest Territories'] = true, ['Nova Scotia'] = true, ['Nunavut'] = true, ['Ontario'] = true, ['Prince Edward Island'] = true, + ['Quebec'] = true, ['Saskatchewan'] = true, ['Yukon'] = true}, + ['Mexico'] = true, + ['Central America'] = true, + ['Europe'] = {['France'] = true, ['Germany'] = true, ['Spain'] = true, ['Italy'] = true, ['Poland'] = true, ['Switzerland'] = true, + ['Greece'] = true, ['Romania'] = true, ['Netherlands'] = true, + ['Great Britain'] = {['England'] = true, ['Scotland'] = true, ['Wales'] = true, ['Northern Ireland'] = true} + }, + ['Asia'] = { ['China'] = true, ['India'] = true, ['Japan'] = true, ['Korea'] = true, ['Russia'] = true, ['Vietnam'] = true}, + ['South America'] = { ['Argentina'] = true, ['Brazil'] = true}, + ['Africa'] = { ['Eygpt'] = true, ['Swaziland'] = true}, + ['Australia'] = true, ['Middle East'] = true, ['Antarctica'] = true, ['New Zealand'] = true + }, + ['Age'] = {'/sc 6_10', true, ['Rugrat'] = true, ['Kid'] = true, ['Tween'] = true, ['Teen'] = true, ['Twenties'] = true, + ['Old'] = true, ['Ancient'] = true, ['Mesozoic'] = true, ['I don\'t want to say my age. Don\'t ask.'] = true}, + ['Mood'] = {'/sc 6_11', true, ['Good'] = true, ['Great!'] = true, ['Not bad'] = true, ['Sad'] = true, ['Hyper'] = true, + ['Chill'] = true, ['Happy'] = true, ['Kind of mad'] = true}, + ['Boy'] = {'/sc 6_12', true}, + ['Girl'] = {'/sc 6_13', true}, + ['I don\'t want to say boy or girl. Don\'t ask.'] = {'/sc 6_14', true}, + [1] = '/sc 6' + }, + ['Game'] = { + ['Let\'s build'] = {'/sc 7_0', true}, + ['Let\'s battle'] = {'/sc 7_1', true}, + ['Nice one!'] = {'/sc 7_2', true}, + ['So far so good'] = {'/sc 7_3', true}, + ['Lucky shot!'] = {'/sc 7_4', true}, + ['Oh man!'] = {'/sc 7_5', true}, + ['I challenge you to a fight!'] = {'/sc 7_6', true}, + ['Help me with this'] = {'/sc 7_7', true}, + ['Let\'s go to your game'] = {'/sc 7_8', true}, + ['Can you show me how do to that?'] = {'/sc 7_9', true}, + ['Backflip!'] = {'/sc 7_10', true}, + ['Frontflip!'] = {'/sc 7_11', true}, + ['Dance!'] = {'/sc 7_12', true}, + ['I\'m on your side!'] = {'/sc 7_13', true}, + ['Game Commands'] = {'/sc 7_14', true, ['regen'] = true, ['reset'] = true, ['go'] = true, ['fix'] = true, ['respawn'] = true}, + [1] = '/sc 7' + }; + ['Silly'] = { + ['Muahahahaha!'] = true, + ['all your base are belong to me!'] = true, + ['GET OFF MAH LAWN'] = true, + ['TEH EPIK DUCK IS COMING!!!'] = true, + ['ROFL'] = true, + ['1337'] = {true, ['i r teh pwnz0r!'] = true, ['w00t!'] = true, ['z0mg h4x!'] = true, ['ub3rR0xXorzage!'] = true} + }, + ['Yes'] = { + ['Absolutely!'] = true, + ['Rock on!'] = true, + ['Totally!'] = true, + ['Juice!'] = true, + ['Yay!'] = true, + ['Yesh'] = true + }, + ['No'] = { + ['Ummm. No.'] = true, + ['...'] = true, + ['Stop!'] = true, + ['Go away!'] = true, + ['Don\'t do that'] = true, + ['Stop breaking the rules'] = true, + ['I don\'t want to'] = true + }, + ['Ok'] = { + ['Well... ok'] = true, + ['Sure'] = true + }, + ['Uncertain'] = { + ['Maybe'] = true, + ['I don\'t know'] = true, + ['idk'] = true, + ['I can\'t decide'] = true, + ['Hmm...'] = true + }, + [':-)'] = { + [':-('] = true, + [':D'] = true, + [':-O'] = true, + ['lol'] = true, + ['=D'] = true, + ['D='] = true, + ['XD'] = true, + [';D'] = true, + [';)'] = true, + ['O_O'] = true, + ['=)'] = true, + ['@_@'] = true, + ['>_<'] = true, + ['T_T'] = true, + ['^_^'] = true, + ['<(0_0<) <(0_0)> (>0_0)> KIRBY DANCE'] = true, + [')\';'] = true, + [':3'] = true + }, + ['Ratings'] = { + ['Rate it!'] = true, + ['I give it a 1 out of 10'] = true, + ['I give it a 2 out of 10'] = true, + ['I give it a 3 out of 10'] = true, + ['I give it a 4 out of 10'] = true, + ['I give it a 5 out of 10'] = true, + ['I give it a 6 out of 10'] = true, + ['I give it a 7 out of 10'] = true, + ['I give it a 8 out of 10'] = true, + ['I give it a 9 out of 10'] = true, + ['I give it a 10 out of 10!'] = true, + } + }, + CreateEnum('SafeChat'){'Level1', 'Level2', 'Level3'}, + SafeChatTree = {}, + TempSpaceLabel = nil + } +--------------------------------------------------- + +local function GetNameValue(pName) + local value = 0 + for index = 1, #pName do + local cValue = string.byte(string.sub(pName, index, index)) + local reverseIndex = #pName - index + 1 + if #pName%2 == 1 then + reverseIndex = reverseIndex - 1 + end + if reverseIndex%4 >= 2 then + cValue = -cValue + end + value = value + cValue + end + return value%8 +end + +function Chat:ComputeChatColor(pName) + return self.ChatColors[GetNameValue(pName) + 1].Color +end + +-- This is context based scrolling +function Chat:EnableScrolling(toggle) + -- Genius idea gone to fail, if we switch the camera type we can effectively lock the + -- camera and do no click scrolling + self.MouseOnFrame = false + if self.RenderFrame then + self.RenderFrame.MouseEnter:connect(function() + local character = Player.Character + local torso = WaitForChild(character, 'Torso') + local humanoid = WaitForChild(character, 'Humanoid') + local head = WaitForChild(character, 'Head') + if toggle then + self.MouseOnFrame = true + Camera.CameraType = 'Scriptable' + -- Get relative position of camera and keep to it + Spawn(function() + local currentRelativePos = Camera.CoordinateFrame.p - torso.Position + while Chat.MouseOnFrame do + Camera.CoordinateFrame = CFrame.new(torso.Position + currentRelativePos, head.Position) + wait(0.015) + end + end) + end + end) + + self.RenderFrame.MouseLeave:connect(function() + Camera.CameraType = 'Custom' + self.MouseOnFrame = false + end) + end +end + +-- TODO: Scrolling using Mouse wheel +function Chat:OnScroll(speed) + if self.MouseOnFrame then + -- + end +end + +-- Check if we are running on a touch device +function Chat:IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = inputService.TouchEnabled end) + return touchEnabled +end + +-- Scrolling +function Chat:ScrollQueue(value) + --[[for i = 1, #self.MessageQueue do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + local next = self.MessageQueue[i].Next + local previous = self.MessageQueue[i].Previous + if label and label:IsA('TextLabel') or label:IsA('TextButton') then + if value > 0 and previous and previous['Message'] then + label.Position = previous['Message'].Position + elseif value < 1 and next['Message'] then + label.Position = previous['Message'].Position + end + end + end + end + end ]] +end + +-- Handles the rendering of the text objects in their appropriate places +function Chat:UpdateQueue(field, diff) + -- Have to do some sort of correction here + for i = #self.MessageQueue, 1, -1 do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + if label and type(label) ~= 'table' and type(label) ~= 'number' then + if label:IsA('TextLabel') or label:IsA('TextButton') then + if diff then + label.Position = label.Position - UDim2.new(0, 0, diff, 0) + else + if field == self.MessageQueue[i] then + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale - field['Message'].Size.Y.Scale , 0) + -- Just to show up popping effect for the latest message in chat + Spawn(function() + wait(0.05) + while label.TextTransparency >= 0 do + label.TextTransparency = label.TextTransparency - 0.2 + wait(0.03) + end + if label == field['Message'] then + label.TextStrokeTransparency = 0.8 + else + label.TextStrokeTransparency = 1.0 + end + end) + else + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale - field['Message'].Size.Y.Scale, 0) + end + if label.Position.Y.Scale < -0.01 then + -- NOTE: Remove this fix when Textbounds is fixed + label.Visible = false + label:Destroy() + end + end + end + end + end + end + end +end + +function Chat:CreateScrollBar() + -- Code for scrolling is in here, partially, but scroll bar drawing isn't drawn + -- TODO: Implement +end + +-- For scrolling, to see if we hit the bounds so that we can stop it from scrolling anymore +function Chat:CheckIfInBounds(value) + if #Chat.MessageQueue < 3 then + return true + end + + if value > 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale == 0 then + return true + elseif value < 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale < 0 then + return true + else + return false + end + return false +end + +-- This is to precompute all playerName space strings +-- This is used to offset the message by exactly this + 2 spacestrings +function Chat:ComputeSpaceString(pLabel) + local nString = " " + if not self.TempSpaceLabel then + self.TempSpaceLabel = Gui.Create'TextButton' + { + Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y); + FontSize = self.Configuration.FontSize; + Parent = self.RenderFrame; + BackgroundTransparency = 1.0; + Text = nString; + Name = 'SpaceButton' + }; + else + self.TempSpaceLabel.Text = nString + end + + while self.TempSpaceLabel.TextBounds.X < pLabel.TextBounds.X do + nString = nString .. " " + self.TempSpaceLabel.Text = nString + end + nString = nString .. " " + self.CachedSpaceStrings_List[pLabel.Text] = nString + self.TempSpaceLabel.Text = "" + return nString +end + +-- When the playerChatted event fires +-- The message is what the player chatted +function Chat:UpdateChat(cPlayer, message) + local messageField = { + ['Player'] = cPlayer, + ['Message'] = message + } + if coroutine.status(Chat.MessageThread) == 'dead' then + --Chat.Messages_List = {} + table.insert(Chat.Messages_List, messageField) + Chat.MessageThread = coroutine.create(function() + for i = 1, #Chat.Messages_List do + local field = Chat.Messages_List[i] + Chat:CreateMessage(field['Player'], field['Message']) + end + Chat.Messages_List = {} + end) + coroutine.resume(Chat.MessageThread) + else + table.insert(Chat.Messages_List, messageField) + end +end + +function Chat:RecalculateSpacing() + --[[for i = 1, #self.MessageQueue do + local pLabel = self.MessageQueue[i]['Player'] + local mLabel = self.MessageQueue[i]['Message'] + + local prevYScale = mLabel.Size.Y.Scale + local prevText = mLabel.Text + mLabel.Text = prevText + + local heightField = mLabel.TextBounds.Y + + mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0) + pLabel.Size = mLabel.Size + + local diff = mLabel.Size.Y.Scale - prevYScale + + Chat:UpdateQueue(self.MessageQueue[i], diff) + end ]] +end + +function Chat:ApplyFilter(str) + --[[for _, word in pair(self.Filter_List) do + if string.find(str, word) then + str:gsub(word, '@#$^') + end + end ]] +end + +-- NOTE: Temporarily disabled ring buffer to allow for chat to always wrap around +function Chat:CreateMessage(cPlayer, message) + local pName + if not cPlayer then + pName = '' + else + pName = cPlayer.Name + end + message = StringTrim(message) + local pLabel + local mLabel + -- Our history stores upto 50 messages that is 100 textlabels + -- If we ever hit the mark, which would be in every popular game btw + -- we wrap around and reuse the labels + if #self.MessageQueue > self.Configuration.HistoryLength then + --[[pLabel = self.MessageQueue[#self.MessageQueue]['Player'] + mLabel = self.MessageQueue[#self.MessageQueue]['Message'] + + pLabel.Text = pName .. ':' + pLabel.Name = pName + + local pColor + if cPlayer.Neutral then + pLabel.TextColor3 = Chat:ComputeChatColor(pName) + else + pLabel.TextColor3 = cPlayer.TeamColor.Color + end + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel.Text = "" + mLabel.Name = pName .. " - message" + mLabel.Text = nString .. message; + + mLabel.Parent = nil + mLabel.Parent = self.RenderFrame + + mLabel.Position = UDim2.new(0, 0, 1, 0); + pLabel.Position = UDim2.new(0, 0, 1, 0);]] + + -- Reinserted at the beginning, ring buffer + self.MessageQueue[#self.MessageQueue] = nil + end + --else + -- Haven't hit the mark yet, so keep creating + pLabel = Gui.Create'TextLabel' + { + Name = pName; + Text = pName .. ":"; + TextColor3 = pColor; + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Parent = self.RenderFrame; + TextWrapped = false; + Size = UDim2.new(1, 0, 0.1, 0); + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + TextStrokeColor3 = Color3.new(0.5, 0.5, 0.5); + TextStrokeTransparency = 0.75; + --Active = false; + }; + local pColor + if cPlayer.Neutral then + pLabel.TextColor3 = Chat:ComputeChatColor(pName) + else + pLabel.TextColor3 = cPlayer.TeamColor.Color + end + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel = Gui.Create'TextLabel' + { + Name = pName .. ' - message'; + -- Max is 3 lines + Size = UDim2.new(1, 0, 0.5, 0); + TextColor3 = Chat.Configuration.MessageColor; + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Text = ""; -- this is to stop when the engine reverts the swear words to default, which is button, ugh + Parent = self.RenderFrame; + TextWrapped = true; + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + TextStrokeColor3 = Color3.new(0, 0, 0); + --TextStrokeTransparency = 0.8; + --Active = false; + }; + mLabel.Text = nString .. message; + + if not pName then + pLabel.Text = '' + mLabel.TextColor3 = Color3.new(0, 0.4, 1.0) + end + --end + + for _, adminName in pairs(self.Admins_List) do + if string.lower(adminName) == string.lower(pName) then + mLabel.TextColor3 = self.Configuration.AdminMessageColor + end + end + + pLabel.Visible = true + mLabel.Visible = true + + -- This will give beautiful multilines as well + local heightField = mLabel.TextBounds.Y + + mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0) + pLabel.Size = mLabel.Size + + local yPixels = self.RenderFrame.AbsoluteSize.Y + local yFieldSize = mLabel.TextBounds.Y + + local queueField = {} + queueField['Player'] = pLabel + queueField['Message'] = mLabel + queueField['SpawnTime'] = tick() -- Used for identifying when to make the message invisible + + table.insert(self.MessageQueue, 1, queueField) + Chat:UpdateQueue(queueField) +end + +function Chat:ScreenSizeChanged() + wait() + while self.Frame.AbsoluteSize.Y > 120 do + self.Frame.Size = self.Frame.Size - UDim2.new(0, 0, 0.005, 0) + end + Chat:RecalculateSpacing() +end + + +function Chat:FindButtonTree(scButton, rootList) + local list = {} + rootList = rootList or self.SafeChatTree + for button, _ in pairs(rootList) do + if button == scButton then + list = rootList[button] + elseif type(rootList[button]) == 'table' then + list = Chat:FindButtonTree(scButton, rootList[button]) + end + end + return list +end + +function Chat:ToggleSafeChatMenu(scButton) + local list = Chat:FindButtonTree(scButton, self.SafeChatTree) + if list then + for button, _ in pairs(list) do + if button:IsA('TextButton') or button:IsA('ImageButton') then + button.Visible = not button.Visible + end + end + return true + end + return false +end + +function Chat:CreateSafeChatOptions(list, rootButton) + local text_List = {} + level = level or 0 + local count = 0 + text_List[rootButton] = {} + text_List[rootButton][1] = list[1] + rootButton = rootButton or self.SafeChatButton + for msg, _ in pairs(list) do + if type(msg) == 'string' then + local chatText = Gui.Create'TextButton' + { + Name = msg; + Text = msg; + Size = UDim2.new(0, 100, 0, 20); + TextXAlignment = Enum.TextXAlignment.Center; + TextColor3 = Color3.new(0.2, 0.1, 0.1); + BackgroundTransparency = 0.5; + BackgroundColor3 = Color3.new(1, 1, 1); + Parent = self.SafeChatFrame; + Visible = false; + Position = UDim2.new(0, rootButton.Position.X.Scale + 105, 0, rootButton.Position.Y.Scale - ((count - 3) * 100)); + }; + + count = count + 1 + + if type(list[msg]) == 'table' then + text_List[rootButton][chatText] = Chat:CreateSafeChatOptions(list[msg], chatText) + else + --table.insert(text_List[chatText], true) + end + chatText.MouseEnter:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseLeave:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseButton1Click:connect(function() + local lList = Chat:FindButtonTree(chatText) + if lList then + for i, v in pairs(lList) do + end + else + end + pcall(function() PlayersService:Chat(lList[1]) end) + end) + end + end + return text_List +end + +function Chat:CreateSafeChatGui() + self.SafeChatFrame = Gui.Create'Frame' + { + Name = 'SafeChatFrame'; + Size = UDim2.new(1, 0, 1, 0); + Parent = self.Gui; + BackgroundTransparency = 1.0; + + Gui.Create'ImageButton' + { + Name = 'SafeChatButton'; + Size = UDim2.new(0, 44, 0, 31); + Position = UDim2.new(0, 1, 0.35, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.nexium.fit/asset/?id=97080365'; + }; + } + + self.SafeChatButton = self.SafeChatFrame.SafeChatButton + -- safe chat button is the root of this tree + self.SafeChatTree[self.SafeChatButton] = Chat:CreateSafeChatOptions(self.SafeChat_List, self.SafeChatButton) + + self.SafeChatButton.MouseButton1Click:connect(function() + Chat:ToggleSafeChatMenu(self.SafeChatButton) + end) +end + + +function Chat:FocusOnChatBar() + if self.ClickToChatButton then + self.ClickToChatButton.Visible = false + end + + self.GotFocus = true + if self.Frame['Background'] then + self.Frame.Background.Visible = false + end + self.ChatBar:CaptureFocus() +end + +-- For touch devices we create a button instead +function Chat:CreateTouchButton() + self.ChatTouchFrame = Gui.Create'Frame' + { + Name = 'ChatTouchFrame'; + Size = UDim2.new(0, 128, 0, 32); + Position = UDim2.new(0, 88, 0, 0); + BackgroundTransparency = 1.0; + Parent = self.Gui; + + Gui.Create'ImageButton' + { + Name = 'ChatLabel'; + Size = UDim2.new(0, 74, 0, 28); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + }; + Gui.Create'ImageLabel' + { + Name = 'Background'; + Size = UDim2.new(1, 0, 1, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.nexium.fit/asset/?id=97078724' + }; + + } + self.TapToChatLabel = self.ChatTouchFrame.ChatLabel + self.TouchLabelBackground = self.ChatTouchFrame.Background + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0.2, 0); + Position = UDim2.new(0, 0, 0.8, 800); + Text = ""; + ZIndex = 1.0; + BackgroundTransparency = 1.0; + Parent = self.Frame; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + ClearTextOnFocus = false; + }; + + self.TapToChatLabel.MouseButton1Click:connect(function() + self.TapToChatLabel.Visible = false + --self.ChatBar.Visible = true + --self.Frame.Background.Visible = true + self.ChatBar:CaptureFocus() + self.GotFocus = true + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = false + end + end) +end + +-- Non touch devices, create the bottom chat bar +function Chat:CreateChatBar() + -- okay now we do + local status, result = pcall(function() return GuiService.UseLuaChat end) + if forceChatGUI or (status and result) then + self.ClickToChatButton = Gui.Create'TextButton' + { + Name = 'ClickToChat'; + Size = UDim2.new(1, 0, 0, 20); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + Parent = self.Gui; + Text = "To chat click here or press \"/\" key"; + TextColor3 = Color3.new(1, 1, 0.9); + Position = UDim2.new(0, 0, 1, 0); + TextXAlignment = Enum.TextXAlignment.Left; + FontSize = Enum.FontSize.Size12; + } + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0, 20); + Position = UDim2.new(0, 0, 1, 0); + Text = ""; + ZIndex = 1.0; + BackgroundColor3 = Color3.new(0, 0, 0); + BackgroundTransparency = 0.25; + Parent = self.Gui; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + FontSize = Enum.FontSize.Size12; + ClearTextOnFocus = false; + Text = ''; + }; + + -- Engine has code to offset the entire world, so if we do it by -20 pixels nothing gets in our chat's way + --GuiService:SetGlobalSizeOffsetPixel(0, -20) + local success, error = pcall(function() GuiService:SetGlobalGuiInset(0, 0, 0, 20) end) + if not success then + pcall(function() GuiService:SetGlobalSizeOffsetPixel(0, -20) end) -- Doesn't hurt to throw a non-existent function into a pcall + end + -- ChatHotKey is '/' + GuiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + GuiService.SpecialKeyPressed:connect(function(key) + if key == Enum.SpecialKey.ChatHotkey then + Chat:FocusOnChatBar() + end + end) + + self.ClickToChatButton.MouseButton1Click:connect(function() + Chat:FocusOnChatBar() + end) + end +end + +-- Create the initial Chat stuff +-- Done only once +function Chat:CreateGui() + self.Gui = WaitForChild(CoreGuiService, 'RobloxGui') + self.Frame = Gui.Create'Frame' + { + Name = 'ChatFrame'; + --Size = self.Configuration.Size; + Size = UDim2.new(0, 500, 0, 120); + Position = UDim2.new(0, 0, 0, 5); + BackgroundTransparency = 1.0; + --ClipsDescendants = true; + ZIndex = 0.0; + Parent = self.Gui; + Active = false; + + Gui.Create'ImageLabel' + { + Name = 'Background'; + Image = 'http://www.nexium.fit/asset/?id=97120937'; --96551212'; + Size = UDim2.new(1.3, 0, 1.64, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 0.0; + Visible = false + }; + + Gui.Create'Frame' + { + Name = 'Border'; + Size = UDim2.new(1, 0, 0, 1); + Position = UDim2.new(0, 0, 0.8, 0); + BackgroundTransparency = 0.0; + BackgroundColor3 = Color3.new(236/255, 236/255, 236/255); + BorderSizePixel = 0.0; + Visible = false; + }; + + Gui.Create'Frame' + { + Name = 'ChatRenderFrame'; + Size = UDim2.new(1.02, 0, 1.01, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + --ClipsDescendants = true; + ZIndex = 0.0; + Active = false; + + }; + }; + + Spawn(function() + wait(0.5) + if IsPhone() then + self.Frame.Size = UDim2.new(0, 280, 0, 120) + end + end) + + self.RenderFrame = self.Frame.ChatRenderFrame + if Chat:IsTouchDevice() then + self.Frame.Position = self.Configuration.Position; + self.RenderFrame.Size = UDim2.new(1, 0, 1, 0) + elseif self.Frame.AbsoluteSize.Y > 120 then + Chat:ScreenSizeChanged() + self.Gui.Changed:connect(function(property) + if property == 'AbsoluteSize' then + Chat:ScreenSizeChanged() + end + end) + end + + if forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu then + if Chat:IsTouchDevice() then + Chat:CreateTouchButton() + else + Chat:CreateChatBar() + --Chat:CreateSafeChatGui() + end + + if self.ChatBar then + self.ChatBar.FocusLost:connect(function(enterPressed) + Chat.GotFocus = false + if Chat:IsTouchDevice() then + self.ChatBar.Visible = false + self.TapToChatLabel.Visible = true + + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = true + end + end + if enterPressed and self.ChatBar.Text ~= "" then + + local cText = self.ChatBar.Text + if string.sub(self.ChatBar.Text, 1, 1) == '%' then + cText = '(TEAM) ' .. string.sub(cText, 2, #cText) + pcall(function() PlayersService:TeamChat(cText) end) + else + pcall(function() PlayersService:Chat(cText) end) + end + + if self.ClickToChatButton then + self.ClickToChatButton.Visible = true + end + self.ChatBar.Text = "" + end + Spawn(function() + wait(5.0) + if not Chat.GotFocus then + Chat.Frame.Background.Visible = false + end + end) + end) + + -- Make the escape key clear the chat box (like it used to) + inputService.InputBegan:connect(function(input) + if (input.KeyCode == Enum.KeyCode.Escape) then + if self.ClickToChatButton then + self.ClickToChatButton.Visible = true + end + + self.ChatBar.Text = "" + end + end) + end + end +end + +-- Scrolling function +-- Applies a speed(velocity) to have nice scrolling effect +function Input:OnMouseScroll() + Spawn(function() + -- How long should the speed last? + while Input.Speed ~=0 do + if Input.Speed > 1 then + while Input.Speed > 0 do + Input.Speed = Input.Speed - 1 + wait(0.25) + end + elseif Input.Speed < 0 then + while Input.Speed < 0 do + Input.Speed = Input.Speed + 1 + wait(0.25) + end + end + wait(0.03) + end + end) + if Chat:CheckIfInBounds(Input.Speed) then + return + end + Chat:ScrollQueue() +end + +function Input:ApplySpeed(value) + Input.Speed = Input.Speed + value + if not self.Simulating then + Input:OnMouseScroll() + end +end + +function Input:Initialize() + self.Mouse.WheelBackward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) + + self.Mouse.WheelForward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) +end + +function Chat:FindMessageInSafeChat(message, list) + local foundMessage = false + for msg, _ in pairs(list) do + if msg == message then + return true + end + if type(list[msg]) == 'table' then + foundMessage = Chat:FindMessageInSafeChat(message, list[msg]) + if foundMessage then + return true + end + end + end + return foundMessage +end + +-- Just a wrapper around our PlayerChatted event +function Chat:PlayerChatted(...) + local args = {...} + local argCount = select('#', ...) + local player + local message + -- This doesn't look very good, but what else to do? + if args[2] then + player = args[2] + end + if args[3] then + message = args[3] + if string.sub(message, 1, 1) == '%' then + message = '(TEAM) ' .. string.sub(message, 2, #message) + end + end + + if PlayersService.ClassicChat then + if string.sub(message, 1, 3) == '/e ' or string.sub(message, 1, 7) == '/emote ' then + -- don't do anything right now + elseif forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu then + Chat:UpdateChat(player, message) + elseif Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 1, 3) == '/sc' then + Chat:UpdateChat(player, message) + else + if Chat:FindMessageInSafeChat(message, self.SafeChat_List) then + Chat:UpdateChat(player, message) + end + end + end +end + +-- After Chat.Configuration.Lifetime seconds of existence, the labels become invisible +-- Runs only every 5 seconds and has to loop through 50 values +-- Shouldn't be too expensive +function Chat:CullThread() + while true do + if #self.MessageQueue > 0 then + for _, field in pairs(self.MessageQueue) do + if field['SpawnTime'] and field['Player'] and field['Message'] and tick() - field['SpawnTime'] > self.Configuration.LifeTime then + field['Player'].Visible = false + field['Message'].Visible = false + end + end + end + wait(5.0) + end +end + +-- RobloxLock everything so users can't delete them(?) +function Chat:LockAllFields(gui) + local children = gui:GetChildren() + for i = 1, #children do + children[i].RobloxLocked = true + if #children[i]:GetChildren() > 0 then + Chat:LockAllFields(children[i]) + end + end +end + +function Chat:CoreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Chat or coreGuiType == Enum.CoreGuiType.All then + if self.Frame then self.Frame.Visible = enabled end + if self.TapToChatLabel then self.TapToChatLabel.Visible = enabled end + + if not Chat:IsTouchDevice() and self.ChatBar then + self.ChatBar.Visible = enabled + if enabled then + GuiService:SetGlobalGuiInset(0, 0, 0, 20) + else + GuiService:SetGlobalGuiInset(0, 0, 0, 0) + end + end + end +end + +-- Constructor +-- This function initializes everything +function Chat:Initialize() + + Chat:CreateGui() + + pcall(function() + Chat:CoreGuiChanged(Enum.CoreGuiType.Chat, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Chat)) + Game.StarterGui.CoreGuiChangedSignal:connect(function(coreGuiType,enabled) Chat:CoreGuiChanged(coreGuiType,enabled) end) + end) + + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + + end) + + self.MessageThread = coroutine.create(function() end) + coroutine.resume(self.MessageThread) + + -- Initialize input for us + Input:Initialize() + -- Eww, everytime a player is added, you have to redo the connection + -- Seems this is not automatic + -- NOTE: PlayerAdded only fires on the server, hence ChildAdded is used here + PlayersService.ChildAdded:connect(function() + Chat.EventListener:disconnect() + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + end) + end) + + Spawn(function() + Chat:CullThread() + end) + + self.Frame.RobloxLocked = true + Chat:LockAllFields(self.Frame) + self.Frame.DescendantAdded:connect(function(descendant) + Chat:LockAllFields(descendant) + end) +end + +Chat:Initialize() diff --git a/app/files/CoreGui/97188757 b/app/files/CoreGui/97188757 new file mode 100644 index 0000000..7b3dfa5 --- /dev/null +++ b/app/files/CoreGui/97188757 @@ -0,0 +1,1211 @@ +--[[ + //FileName: ChatScript.LUA + //Written by: Sorcus + //Description: Code for lua side chat on ROBLOX. Supports Scrolling. + //NOTE: If you find any bugs or inaccuracies PM Sorcus on ROBLOX or @Canavus on Twitter +]] + +-- Utility functions + Globals +local function WaitForChild(parent, childName) + while parent:FindFirstChild(childName) == nil do + wait() + end + return parent[childName] +end + +local function typedef(obj) + return obj +end + +while Game.Players.LocalPlayer == nil do wait() end + +local Player = Game.Players.LocalPlayer +while Player.Character == nil do wait() end +local RbxUtility = LoadLibrary('RbxUtility') +local Gui = typedef(RbxUtility) +local Camera = Game.Workspace.CurrentCamera + +-- Services +local CoreGuiService = Game:GetService('CoreGui') +local PlayersService = Game:GetService('Players') +local DebrisService= Game:GetService('Debris') +local GuiService = Game:GetService('GuiService') + +-- Lua Enums +local Enums do + Enums = {} + local EnumName = {} -- used as unique key for enum name + local enum_mt = { + __call = function(self,value) + return self[value] or self[tonumber(value)] + end; + __index = { + GetEnumItems = function(self) + local t = {} + for i,item in pairs(self) do + if type(i) == 'number' then + t[#t+1] = item + end + end + table.sort(t,function(a,b) return a.Value < b.Value end) + return t + end; + }; + __tostring = function(self) + return "Enum." .. self[EnumName] + end; + } + local item_mt = { + __call = function(self,value) + return value == self or value == self.Name or value == self.Value + end; + __tostring = function(self) + return "Enum." .. self[EnumName] .. "." .. self.Name + end; + } + function CreateEnum(enumName) + return function(t) + local e = {[EnumName] = enumName} + for i,name in pairs(t) do + local item = setmetatable({Name=name,Value=i,Enum=e,[EnumName]=enumName},item_mt) + e[i] = item + e[name] = item + e[item] = item + end + Enums[enumName] = e + return setmetatable(e, enum_mt) + end + end +end +--------------------------------------------------- +------------------ Input class -------------------- +local Input = { + Mouse = Player:GetMouse(), + Speed = 0, + Simulating = false, + + Configuration = { + DefaultSpeed = 1 + }, + UserIsScrolling = false + } + +--------------------------------------------------- +------------------ Chat class -------------------- +local Chat = { + + ChatColors = { + BrickColor.new("Bright red"), + BrickColor.new("Bright blue"), + BrickColor.new("Earth green"), + BrickColor.new("Bright violet"), + BrickColor.new("Bright orange"), + BrickColor.new("Bright yellow"), + BrickColor.new("Light reddish violet"), + BrickColor.new("Brick yellow"), + }, + + Gui = nil, + Frame = nil, + RenderFrame = nil, + TapToChatLabel = nil, + ClickToChatButton = nil, + + ScrollingLock = false, + EventListener = nil, + + -- This is actually a ring buffer + -- Meaning at hitting the historyLength it wraps around + -- Reuses the text objects, so chat atmost uses 100 text objects + MessageQueue = {}, + + -- Stores all the values for configuring chat + Configuration = { + FontSize = Enum.FontSize.Size10, -- 10 is good + -- Also change this when you are changing the above, this is suboptimal but so is our interface to find FontSize + NumFontSize = 10, + HistoryLength = 50, -- stores up to 50 of the last chat messages for you to scroll through, + Size = UDim2.new(0.38, 0, 0.20, 0), + MessageColor = Color3.new(1, 1, 1), + XScale = 0.025, + LifeTime = 45, + Position = UDim2.new(0, 2, 0.05, 0), + DefaultTweenSpeed = 0.15, + }, + + -- This could be redone by just using the previous and next fields of the Queue + -- But the iterators cause issues, will be optimized later + SlotPositions_List = {}, + -- To precompute and store all player null strings since its an expensive process + CachedSpaceStrings_List = {}, + MouseOnFrame = false, + GotFocus = false, + + SafeChat_List = { + ['Use the Chat menu to talk to me.'] = {'/sc 0', true}, + ['I can only see menu chats.'] = {'/sc 1', true}, + ['Hello'] = { + ['Hi'] = {'/sc 2_0', true, ['Hi there!'] = true, ['Hi everyone'] = true}, + ['Howdy'] = {'/sc 2_1', true, ['Howdy partner!'] = true}, + ['Greetings'] = {'/sc 2_2', true, ['Greetings everyone'] = true, ['Greetings Robloxians!'] = true, ['Seasons greetings!'] = true}, + ['Welcome'] = {'/sc 2_3', true, ['Welcome to my place'] = true, ['Welcome to my barbeque'] = true, ['Welcome to our base'] = true}, + ['Hey there!'] = {'/sc 2_4', true}, + ['What\'s up?'] = {'/sc 2_5', true, ['How are you doing?'] = true, ['How\'s it going?'] = true, ['What\'s new?'] = true}, + ['Good day'] = {'/sc 2_6', true, ['Good morning'] = true, ['Good evening'] = true, ['Good afternoon'] = true, ['Good night'] = true}, + ['Silly'] = {'/sc 2_7', true, ['Waaaaaaaz up?!'] = true, ['Hullo!'] = true, ['Behold greatness, mortals!'] = true, ['Pardon me, is this Sparta?'] = true, ['THIS IS SPARTAAAA!'] = true}, + ['Happy Holidays!'] = {'/sc 2_8', true, ['Happy New Year!'] = true, + ['Happy Valentine\'s Day!'] = true, + ['Beware the Ides of March!'] = true, + ['Happy St. Patrick\'s Day!'] = true, + ['Happy Easter!'] = true, + ['Happy Earth Day!'] = true, + ['Happy 4th of July!'] = true, + ['Happy Thanksgiving!'] = true, + ['Happy Halloween!'] = true, + ['Happy Hanukkah!'] = true, + ['Merry Christmas!'] = true, + ['Happy Halloween!'] = true, + ['Happy Earth Day!'] = true, + ['Happy May Day!'] = true, + ['Happy Towel Day!'] = true, + ['Happy ROBLOX Day!'] = true, + ['Happy LOL Day!'] = true }, + + [1] = '/sc 2' + }, + ['Goodbye'] = { + ['Good Night']= {'/sc 3_0', true, + ['Sweet dreams'] = true, + ['Go to sleep!'] = true, + ['Lights out!'] = true, + ['Bedtime'] = true, + ['Going to bed now'] = true}, + + ['Later']= {'/sc 3_1', true, + ['See ya later'] = true, + ['Later gator!'] = true, + ['See you tomorrow'] = true}, + + ['Bye'] = {'/sc 3_2', true, ['Hasta la bye bye!'] = true}, + ['I\'ll be right back'] = {'/sc 3_3', true}, + ['I have to go'] = {'/sc 3_4', true}, + ['Farewell'] = {'/sc 3_5', true, ['Take care'] = true, ['Have a nice day'] = true, ['Goodluck!'] = true, ['Ta-ta for now!'] = true}, + ['Peace'] = {'/sc 3_6', true, ['Peace out!'] = true, ['Peace dudes!'] = true, ['Rest in pieces!'] = true}, + ['Silly'] = {'/sc 3_7', true, + ['To the batcave!'] = true, + ['Over and out!'] = true, + ['Happy trails!'] = true, + ['I\'ve got to book it!'] = true, + ['Tootles!'] = true, + ['Smell you later!'] = true, + ['GG!'] = true, + ['My house is on fire! gtg.'] = true}, + [1] = '/sc 3' + }, + ['Friend'] ={ + ['Wanna be friends?'] = {'/sc 4_0', true}, + ['Follow me'] = {'/sc 4_1', true, ['Come to my place!'] = true, ['Come to my base!'] = true, ['Follow me, team!'] = true, ['Follow me'] = true}, + ['Your place is cool'] = {'/sc 4_2', true, ['Your place is fun'] = true, ['Your place is awesome'] = true, ['Your place looks good'] = true, ['This place is awesome!'] = true}, + ['Thank you'] = {'/sc 4_3', true, ['Thanks for playing'] = true, ['Thanks for visiting'] = true, ['Thanks for everything'] = true, ['No, thank you'] = true, ['Thanx'] = true}, + ['No problem'] = {'/sc 4_4', true, ['Don\'t worry'] = true, ['That\'s ok'] = true, ['np'] = true}, + ['You are ...'] = {'/sc 4_5', true, + ['You are great!'] = true, + ['You are good!'] = true, + ['You are cool!'] = true, + ['You are funny!'] = true, + ['You are silly!'] = true, + ['You are awesome!'] = true, + ['You are doing something I don\'t like, please stop'] = true + }, + ['I like ...'] = {'/sc 4_6', true, ['I like your name'] = true, ['I like your shirt'] = true, ['I like your place'] = true, ['I like your style'] = true, + ['I like you'] = true, ['I like items'] = true, ['I like money'] = true}, + ['Sorry'] = {'/sc 4_7', true, ['My bad!'] = true, ['I\'m sorry'] = true, ['Whoops!'] = true, ['Please forgive me.'] = true, ['I forgive you.'] = true, + ['I didn\'t mean to do that.'] = true, ['Sorry, I\'ll stop now.'] = true}, + [1] = '/sc 4' + }, + ['Questions'] = { + ['Who?'] = {'/sc 5_0', true, ['Who wants to be my friend?'] = true, ['Who wants to be on my team?'] = true, ['Who made this brilliant game?'] = true}, + ['What?'] = {'/sc 5_1', true, ['What is your favorite animal?'] = true, ['What is your favorite game?'] = true, ['What is your favorite movie?'] = true, + ['What is your favorite TV show?'] = true, ['What is your favorite music?'] = true, ['What are your hobbies?'] = true, ['LOLWUT?'] = true}, + ['When?'] = {'/sc 5_2', true, ['When are you online?'] = true, ['When is the new version coming out?'] = true, ['When can we play again?'] = true, ['When will your place be done?'] = true}, + ['Where?'] = {'/sc 5_3', true, ['Where do you want to go?'] = true, ['Where are you going?'] = true, ['Where am I?!'] = true, ['Where did you go?'] = true}, + ['How?'] = {'/sc 5_4', true, ['How are you today?'] = true, ['How did you make this cool place?'] = true, ['LOLHOW?'] = true}, + ['Can I...'] = {'/sc 5_5', true, ['Can I have a tour?'] = true, ['Can I be on your team?'] = true, ['Can I be your friend?'] = true, ['Can I try something?'] = true, + ['Can I have that please?'] = true, ['Can I have that back please?'] = true, ['Can I have borrow your hat?'] = true, ['Can I have borrow your gear?'] = true}, + [1] = '/sc 5' + }, + ['Answers'] = { + ['You need help?'] = {'/sc 6_0', true, ['Check out the news section'] = true, ['Check out the help section'] = true, ['Read the wiki!'] = true, + ['All the answers are in the wiki!'] = true, ['I will help you with this.'] = true}, + ['Some people ...'] = {'/sc 6_1', true, ['Me'] = true, ['Not me'] = true, ['You'] = true, ['All of us'] = true, ['Everyone but you'] = true, ['Builderman!'] = true, + ['Telamon!'] = true, ['My team'] = true, ['My group'] = true, ['Mom'] = true, ['Dad'] = true, ['Sister'] = true, ['Brother'] = true, ['Cousin'] = true, + ['Grandparent'] = true, ['Friend'] = true}, + ['Time ...'] = {'/sc 6_2', true, ['In the morning'] = true, ['In the afternoon'] = true, ['At night'] = true, ['Tomorrow'] = true, ['This week'] = true, ['This month'] = true, + ['Sometime'] = true, ['Sometimes'] = true, ['Whenever you want'] = true, ['Never'] = true, ['After this'] = true, ['In 10 minutes'] = true, ['In a couple hours'] = true, + ['In a couple days'] = true}, + ['Animals'] = {'/sc 6_3', true, + ['Cats'] = {['Lion'] = true, ['Tiger'] = true, ['Leopard'] = true, ['Cheetah'] = true}, + ['Dogs'] = {['Wolves'] = true, ['Beagle'] = true, ['Collie'] = true, ['Dalmatian'] = true, ['Poodle'] = true, ['Spaniel'] = true, + ['Shepherd'] = true, ['Terrier'] = true, ['Retriever'] = true}, + ['Horses'] = {['Ponies'] = true, ['Stallions'] = true, ['Pwnyz'] = true}, + ['Reptiles'] = {['Dinosaurs'] = true, ['Lizards'] = true, ['Snakes'] = true, ['Turtles!'] = true}, + ['Hamster'] = true, + ['Monkey'] = true, + ['Bears'] = true, + ['Fish'] = {['Goldfish'] = true, ['Sharks'] = true, ['Sea Bass'] = true, ['Halibut'] = true, ['Tropical Fish'] = true}, + ['Birds'] = {['Eagles'] = true, ['Penguins'] = true, ['Parakeets'] = true, ['Owls'] = true, ['Hawks'] = true, ['Pidgeons'] = true}, + ['Elephants'] = true, + ['Mythical Beasts'] = {['Dragons'] = true, ['Unicorns'] = true, ['Sea Serpents'] = true, ['Sphinx'] = true, ['Cyclops'] = true, + ['Minotaurs'] = true, ['Goblins'] = true, ['Honest Politicians'] = true, ['Ghosts'] = true, ['Scylla and Charybdis'] = true} + }, + ['Games'] = {'/sc 6_4', true, + ['Action'] = true, ['Puzzle'] = true, ['Strategy'] = true, ['Racing'] = true, ['RPG'] = true, ['Obstacle Course'] = true, ['Tycoon'] = true, + ['Roblox'] = { ['BrickBattle'] = true, ['Community Building'] = true, ['Roblox Minigames'] = true, ['Contest Place'] = true}, + ['Board games'] = { ['Chess'] = true, ['Checkers'] = true, ['Settlers of Catan'] = true, ['Tigris and Euphrates'] = true, ['El Grande'] = true, + ['Stratego'] = true, ['Carcassonne'] = true} + }, + ['Sports'] = {'/sc 6_5', true, ['Hockey'] = true, ['Soccer'] = true, ['Football'] = true, ['Baseball'] = true, ['Basketball'] = true, + ['Volleyball'] = true, ['Tennis'] = true, ['Sports team practice'] = true, + ['Watersports'] = { ['Surfing'] = true,['Swimming'] = true, ['Water Polo'] = true}, + ['Winter sports'] = { ['Skiing'] = true, ['Snowboarding'] = true, ['Sledding'] = true, ['Skating'] = true}, + ['Adventure'] = {['Rock climbing'] = true, ['Hiking'] = true, ['Fishing'] = true, ['Horseback riding'] = true}, + ['Wacky'] = {['Foosball'] = true, ['Calvinball'] = true, ['Croquet'] = true, ['Cricket'] = true, ['Dodgeball'] = true, + ['Squash'] = true, ['Trampoline'] = true} + }, + ['Movies/TV'] = {'/sc 6_6', true, ['Science Fiction'] = true, ['Animated'] = {['Anime'] = true}, ['Comedy'] = true, ['Romantic'] = true, + ['Action'] = true, ['Fantasy'] = true}, + ['Music'] = {'/sc 6_7', true, ['Country'] = true, ['Jazz'] = true, ['Rap'] = true, ['Hip-hop'] = true, ['Techno'] = true, ['Classical'] = true, + ['Pop'] = true, ['Rock'] = true}, + ['Hobbies'] = {'/sc 6_8', true, + ['Computers'] = { ['Building computers'] = true, ['Videogames'] = true, ['Coding'] = true, ['Hacking'] = true}, + ['The Internet'] = { ['lol. teh internets!'] = true, ['Watching vids'] = true}, + ['Dance'] = true, ['Gymnastics'] = true, ['Listening to music'] = true, ['Arts and crafts'] = true, + ['Martial Arts'] = {['Karate'] = true, ['Judo'] = true, ['Taikwon Do'] = true, ['Wushu'] = true, ['Street fighting'] = true}, + ['Music lessons'] = {['Playing in my band'] = true, ['Playing piano'] = true, ['Playing guitar'] = true, + ['Playing violin'] = true, ['Playing drums'] = true, ['Playing a weird instrument'] = true} + }, + ['Location'] = {'/sc 6_9', true, + ['USA'] = { + ['West'] = { ['Alaska'] = true, ['Arizona'] = true, ['California'] = true, ['Colorado'] = true, ['Hawaii'] = true, + ['Idaho'] = true, ['Montana'] = true, ['Nevada'] = true, ['New Mexico'] = true, ['Oregon'] = true, + ['Utah'] = true, ['Washington'] = true, ['Wyoming'] = true + }, + ['South'] = { ['Alabama'] = true, ['Arkansas'] = true, ['Florida'] = true, ['Georgia'] = true, ['Kentucky'] = true, + ['Louisiana'] = true, ['Mississippi'] = true, ['North Carolina'] = true, ['Oklahoma'] = true, + ['South Carolina'] = true, ['Tennessee'] = true, ['Texas'] = true, ['Virginia'] = true, ['West Virginia'] = true + }, + ['Northeast'] = {['Connecticut'] = true, ['Delaware'] = true, ['Maine'] = true, ['Maryland'] = true, ['Massachusetts'] = true, + ['New Hampshire'] = true, ['New Jersey'] = true, ['New York'] = true, ['Pennsylvania'] = true, ['Rhode Island'] = true, + ['Vermont'] = true + }, + ['Midwest'] = {['Illinois'] = true, ['Indiana'] = true, ['Iowa'] = true, ['Kansas'] = true, ['Michigan'] = true, ['Minnesota'] = true, + ['Missouri'] = true, ['Nebraska'] = true, ['North Dakota'] = true, ['Ohio'] = true, ['South Dakota'] = true, ['Wisconsin'] = true} + }, + ['Canada'] = {['Alberta'] = true, ['British Columbia'] = true, ['Manitoba'] = true, ['New Brunswick'] = true, ['Newfoundland'] = true, + ['Northwest Territories'] = true, ['Nova Scotia'] = true, ['Nunavut'] = true, ['Ontario'] = true, ['Prince Edward Island'] = true, + ['Quebec'] = true, ['Saskatchewan'] = true, ['Yukon'] = true}, + ['Mexico'] = true, + ['Central America'] = true, + ['Europe'] = {['France'] = true, ['Germany'] = true, ['Spain'] = true, ['Italy'] = true, ['Poland'] = true, ['Switzerland'] = true, + ['Greece'] = true, ['Romania'] = true, ['Netherlands'] = true, + ['Great Britain'] = {['England'] = true, ['Scotland'] = true, ['Wales'] = true, ['Northern Ireland'] = true} + }, + ['Asia'] = { ['China'] = true, ['India'] = true, ['Japan'] = true, ['Korea'] = true, ['Russia'] = true, ['Vietnam'] = true}, + ['South America'] = { ['Argentina'] = true, ['Brazil'] = true}, + ['Africa'] = { ['Eygpt'] = true, ['Swaziland'] = true}, + ['Australia'] = true, ['Middle East'] = true, ['Antarctica'] = true, ['New Zealand'] = true + }, + ['Age'] = {'/sc 6_10', true, ['Rugrat'] = true, ['Kid'] = true, ['Tween'] = true, ['Teen'] = true, ['Twenties'] = true, + ['Old'] = true, ['Ancient'] = true, ['Mesozoic'] = true, ['I don\'t want to say my age. Don\'t ask.'] = true}, + ['Mood'] = {'/sc 6_11', true, ['Good'] = true, ['Great!'] = true, ['Not bad'] = true, ['Sad'] = true, ['Hyper'] = true, + ['Chill'] = true, ['Happy'] = true, ['Kind of mad'] = true}, + ['Boy'] = {'/sc 6_12', true}, + ['Girl'] = {'/sc 6_13', true}, + ['I don\'t want to say boy or girl. Don\'t ask.'] = {'/sc 6_14', true}, + [1] = '/sc 6' + }, + ['Game'] = { + ['Let\'s build'] = {'/sc 7_0', true}, + ['Let\'s battle'] = {'/sc 7_1', true}, + ['Nice one!'] = {'/sc 7_2', true}, + ['So far so good'] = {'/sc 7_3', true}, + ['Lucky shot!'] = {'/sc 7_4', true}, + ['Oh man!'] = {'/sc 7_5', true}, + ['I challenge you to a fight!'] = {'/sc 7_6', true}, + ['Help me with this'] = {'/sc 7_7', true}, + ['Let\'s go to your game'] = {'/sc 7_8', true}, + ['Can you show me how do to that?'] = {'/sc 7_9', true}, + ['Backflip!'] = {'/sc 7_10', true}, + ['Frontflip!'] = {'/sc 7_11', true}, + ['Dance!'] = {'/sc 7_12', true}, + ['I\'m on your side!'] = {'/sc 7_13', true}, + ['Game Commands'] = {'/sc 7_14', true, ['regen'] = true, ['reset'] = true, ['go'] = true, ['fix'] = true, ['respawn'] = true}, + [1] = '/sc 7' + }; + ['Silly'] = { + ['Muahahahaha!'] = true, + ['all your base are belong to me!'] = true, + ['GET OFF MAH LAWN'] = true, + ['TEH EPIK DUCK IS COMING!!!'] = true, + ['ROFL'] = true, + ['1337'] = {true, ['i r teh pwnz0r!'] = true, ['w00t!'] = true, ['z0mg h4x!'] = true, ['ub3rR0xXorzage!'] = true} + }, + ['Yes'] = { + ['Absolutely!'] = true, + ['Rock on!'] = true, + ['Totally!'] = true, + ['Juice!'] = true, + ['Yay!'] = true, + ['Yesh'] = true + }, + ['No'] = { + ['Ummm. No.'] = true, + ['...'] = true, + ['Stop!'] = true, + ['Go away!'] = true, + ['Don\'t do that'] = true, + ['Stop breaking the rules'] = true, + ['I don\'t want to'] = true + }, + ['Ok'] = { + ['Well... ok'] = true, + ['Sure'] = true + }, + ['Uncertain'] = { + ['Maybe'] = true, + ['I don\'t know'] = true, + ['idk'] = true, + ['I can\'t decide'] = true, + ['Hmm...'] = true + }, + [':-)'] = { + [':-('] = true, + [':D'] = true, + [':-O'] = true, + ['lol'] = true, + ['=D'] = true, + ['D='] = true, + ['XD'] = true, + [';D'] = true, + [';)'] = true, + ['O_O'] = true, + ['=)'] = true, + ['@_@'] = true, + ['>_<'] = true, + ['T_T'] = true, + ['^_^'] = true, + ['<(0_0<) <(0_0)> (>0_0)> KIRBY DANCE'] = true, + [')\';'] = true, + [':3'] = true + }, + ['Ratings'] = { + ['Rate it!'] = true, + ['I give it a 1 out of 10'] = true, + ['I give it a 2 out of 10'] = true, + ['I give it a 3 out of 10'] = true, + ['I give it a 4 out of 10'] = true, + ['I give it a 5 out of 10'] = true, + ['I give it a 6 out of 10'] = true, + ['I give it a 7 out of 10'] = true, + ['I give it a 8 out of 10'] = true, + ['I give it a 9 out of 10'] = true, + ['I give it a 10 out of 10!'] = true, + } + }, + CreateEnum('SafeChat'){'Level1', 'Level2', 'Level3'}, + SafeChatTree = {} + } +--------------------------------------------------- + +local function GetNameValue(pName) + local value = 0 + for index = 1, #pName do + local cValue = string.byte(string.sub(pName, index, index)) + local reverseIndex = #pName - index + 1 + if #pName%2 == 1 then + reverseIndex = reverseIndex - 1 + end + if reverseIndex%4 >= 2 then + cValue = -cValue + end + value = value + cValue + end + return value%8 +end + +function Chat:ComputeChatColor(pName) + return self.ChatColors[GetNameValue(pName) + 1].Color +end + +-- This is context based scrolling +function Chat:EnableScrolling(toggle) + -- Genius idea gone to fail, if we switch the camera type we can effectively lock the + -- camera and do no click scrolling + self.MouseOnFrame = false + if self.RenderFrame then + self.RenderFrame.MouseEnter:connect(function() + local character = Player.Character + local torso = WaitForChild(character, 'Torso') + local humanoid = WaitForChild(character, 'Humanoid') + local head = WaitForChild(character, 'Head') + if toggle then + self.MouseOnFrame = true + Camera.CameraType = 'Scriptable' + -- Get relative position of camera and keep to it + Spawn(function() + local currentRelativePos = Camera.CoordinateFrame.p - torso.Position + while Chat.MouseOnFrame do + Camera.CoordinateFrame = CFrame.new(torso.Position + currentRelativePos, head.Position) + wait(0.015) + end + end) + end + end) + + self.RenderFrame.MouseLeave:connect(function() + Camera.CameraType = 'Custom' + self.MouseOnFrame = false + end) + end +end + +-- TODO: Scrolling using Mouse wheel +function Chat:OnScroll(speed) + if self.MouseOnFrame then + -- + end +end + +-- Check if we are running on a touch device +function Chat:IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) + return touchEnabled +end + +-- Scrolling +function Chat:ScrollQueue(value) + for i = 1, #self.MessageQueue do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + local next = self.MessageQueue[i].Next + local previous = self.MessageQueue[i].Previous + if label and label:IsA('TextLabel') or label:IsA('TextButton') then + if value > 0 and previous and previous['Message'] then + label.Position = previous['Message'].Position + elseif value < 1 and next['Message'] then + label.Position = previous['Message'].Position + end + end + end + end + end +end + +-- Handles the rendering of the text objects in their appropriate places +function Chat:UpdateQueue(field) + -- Have to do some sort of correction here + for i = #self.MessageQueue, 1, -1 do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + if label and type(label) ~= 'table' and type(label) ~= 'number' then + if label:IsA('TextLabel') or label:IsA('TextButton') then + if self.SlotPositions_List[i] and self.MessageQueue[i] ~= field then + label.Position = self.SlotPositions_List[i][1] - UDim2.new(0, 0, field['Message'].Size.Y.Scale, 0) + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale, 0) + else + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale - field['Message'].Size.Y.Scale , 0) + end + if field == self.MessageQueue[i] then + -- Just to show up popping effect for the latest message in chat + Spawn(function() + wait(0.15) + while label.TextTransparency > 0 do + label.TextTransparency = label.TextTransparency - 0.2 + wait() + end + end) + end + if label.Position.Y.Scale < -0.05 or label.Position.Y.Scale > 1.0 then + label.TextTransparency = 1.0 + else + label.TextTransparency = 0.0 + end + end + end + end + end + end +end + +function Chat:InsertIntoQueue(field) + -- This is a ring buffer where insertions happen at the beginning + -- One optimization here would be to not copy the queue by reference + -- And reuse the same queue and do the insertion in place + -- But rendering code must be changed accordingly and this becomes rather hard to manage + -- plus the effects are minimal + -- TODO: Revist if this becomes a problem for optimization + local tmpQueue = self.MessageQueue + self.MessageQueue = {} + self.MessageQueue[1] = field + self.MessageQueue[1].Previous = tmpQueue[i] + self.MessageQueue[1].Next = nil + + self.SlotPositions_List = {} + self.SlotPositions_List[1] = {field.Position, field.Size} + + if tmpQueue[self.Configuration.HistoryLength] then + if tmpQueue[self.Configuration.HistoryLength]['Player'] then + tmpQueue[self.Configuration.HistoryLength]['Player']:Destroy() + end + if tmpQueue[self.Configuration.HistoryLength]['Message'] then + tmpQueue[self.Configuration.HistoryLength]['Message']:Destroy() + end + tmpQueue[self.Configuration.HistoryLength] = nil + end + + for i = 1, self.Configuration.HistoryLength - 1 do + if tmpQueue[i] and tmpQueue[i]['Player'] and tmpQueue[i]['Player'].Parent then + table.insert(self.MessageQueue, tmpQueue[i]) + self.MessageQueue[#self.MessageQueue].Previous = tmpQueue[i+1] or nil + self.MessageQueue[#self.MessageQueue].Next = tmpQueue[i-1] or nil + + self.SlotPositions_List[#self.MessageQueue] = {tmpQueue[i]['Message'].Position, tmpQueue[i]['Message'].Size} + end + end + -- Now, render the queue + Chat:UpdateQueue(field) +end + +function Chat:CreateScrollBar() + -- Code for scrolling is in here, partially, but scroll bar drawing isn't drawn + -- TODO: Implement +end + +function Chat:FocusOnChatBar() + if self.ClickToChatButton then + self.ClickToChatButton.Visible = false + end + + self.GotFocus = true + if self.Frame['Background'] then + self.Frame.Background.Visible = false + end + self.ChatBar:CaptureFocus() +end + +-- For touch devices we create a button instead +function Chat:CreateTouchButton() + self.ChatTouchFrame = Gui.Create'Frame' + { + Name = 'ChatTouchFrame'; + Size = UDim2.new(0, 128, 0, 32); + Position = UDim2.new(0, 88, 0, 0); + BackgroundTransparency = 1.0; + Parent = self.Gui; + + Gui.Create'ImageButton' + { + Name = 'ChatLabel'; + Size = UDim2.new(0, 74, 0, 28); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + }; + + Gui.Create'ImageLabel' + { + Name = 'Background'; + Size = UDim2.new(1, 0, 1, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.roblox.com/asset/?id=97078724' + }; + } + self.TapToChatLabel = self.ChatTouchFrame.ChatLabel + self.TouchLabelBackground = self.ChatTouchFrame.Background + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0.2, 0); + Position = UDim2.new(0, 0, 0.8, 0); + Text = ""; + ZIndex = 1.0; + BackgroundTransparency = 1.0; + Parent = self.Frame; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + ClearTextOnFocus = false; + }; + + self.TapToChatLabel.MouseButton1Click:connect(function() + self.TapToChatLabel.Visible = false + --self.ChatBar.Visible = true + self.Frame.Background.Visible = true + self.ChatBar:CaptureFocus() + self.GotFocus = true + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = false + end + end) +end + +-- Non touch devices, create the bottom chat bar +function Chat:CreateChatBar() + -- okay now we do + local status, result = pcall(function() return GuiService.UseLuaChat end) + if status and result then + self.ClickToChatButton = Gui.Create'TextButton' + { + Name = 'ClickToChat'; + Size = UDim2.new(1, 0, 0, 20); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + Parent = self.Gui; + Text = "To chat click here or press \"/\" key"; + TextColor3 = Color3.new(1, 1, 0.9); + Position = UDim2.new(0, 0, 1, 0); + TextXAlignment = Enum.TextXAlignment.Left; + FontSize = Enum.FontSize.Size12; + } + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0, 20); + Position = UDim2.new(0, 0, 1, 0); + Text = ""; + ZIndex = 1.0; + BackgroundColor3 = Color3.new(0, 0, 0); + BackgroundTransparency = 0.25; + Parent = self.Gui; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + FontSize = Enum.FontSize.Size12; + ClearTextOnFocus = false; + Text = ''; + }; + + -- Engine has code to offset the entire world, so if we do it by -20 pixels nothing gets in our chat's way + GuiService:SetGlobalSizeOffsetPixel(0, -20) + -- CHatHotKey is '/' + GuiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + GuiService.SpecialKeyPressed:connect(function(key) + if key == Enum.SpecialKey.ChatHotkey then + Chat:FocusOnChatBar() + end + end) + + self.ClickToChatButton.MouseButton1Click:connect(function() + Chat:FocusOnChatBar() + end) + end +end + +-- For scrolling, to see if we hit the bounds so that we can stop it from scrolling anymore +function Chat:CheckIfInBounds(value) + if #Chat.MessageQueue < 3 then + return true + end + + if value > 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale == 0 then + return true + elseif value < 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale < 0 then + return true + else + return false + end + return false +end + +-- This is to precompute all playerName space strings +-- This is used to offset the message by exactly this + 2 spacestrings +function Chat:ComputeSpaceString(pLabel) + local tLabel = Gui.Create'TextButton' + { + Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y); + FontSize = self.Configuration.FontSize; + Parent = self.RenderFrame; + BackgroundTransparency = 1.0; + Text = nString; + }; + local nString = " " + while tLabel.TextBounds.X < pLabel.TextBounds.X do + nString = nString .. " " + tLabel.Text = nString + end + self.CachedSpaceStrings_List[pLabel.Text] = nString + return nString +end + +-- When the playerChatted event fires +-- The message is what the player chatted +function Chat:UpdateChat(cPlayer, message) + local pName = cPlayer.Name + local pLabel + local mLabel + -- Our history stores upto 50 messages that is 100 textlabels + -- If we ever hit the mark, which would be in every popular game btw + -- we wrap around and reuse the labels + if #self.MessageQueue > self.Configuration.HistoryLength then + pLabel = self.MessageQueue[#self.MessageQueue]['Player'] + mLabel = self.MessageQueue[#self.MessageQueue]['Message'] + + pLabel.Text = pName + pLabel.Name = pName + pLabel.TextColor3 = Chat:ComputeChatColor(pName) + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel.Name = pName .. " - message" + mLabel.Text = nString .. message; + + -- Reinserted at the beginning, ring buffer + self.MessageQueue[#self.MessageQueue] = nil + else + -- Haven't hit the mark yet, so keep creating + pLabel = Gui.Create'TextButton' + { + Name = pName; + Text = pName .. ":"; + TextColor3 = Chat:ComputeChatColor(pName); + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Parent = self.RenderFrame; + TextWrapped = false; + Size = UDim2.new(1, 0, 0.1, 0); + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + }; + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel = Gui.Create'TextButton' + { + Name = pName .. ' - message'; + -- Max is 3 lines + Size = UDim2.new(1, 0, 0.5, 0); + Text = nString .. message; + TextColor3 = Chat.Configuration.MessageColor; + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Parent = self.RenderFrame; + TextWrapped = true; + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + }; + end + + -- This is to find if we need to wrap the text around + -- Expensive, but works well and worthwhile + -- This will give beautiful multilines as well + local heightField = 0.1 * self.RenderFrame.AbsoluteSize.Y + + while heightField < mLabel.TextBounds.Y do + heightField = heightField + 1 + end + + pLabel.Visible = true + mLabel.Visible = true + + mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0) + pLabel.Size = mLabel.Size + local yPixels = self.RenderFrame.AbsoluteSize.Y + local yFieldSize = mLabel.TextBounds.Y + + local queueField = {} + queueField['Player'] = pLabel + queueField['Message'] = mLabel + queueField['SpawnTime'] = tick() -- Used for identifying when to make the message invisible + + Chat:InsertIntoQueue(queueField) +end + +function Chat:ScreenSizeChanged() + while self.Frame.AbsoluteSize.Y > 120 do + self.Frame.Size = self.Frame.Size - UDim2.new(0, 0, 0.005, 0) + end +end + +-- Create the initial Chat stuff +-- Done only once +function Chat:CreateGui() + self.Gui = WaitForChild(CoreGuiService, 'RobloxGui') + self.Frame = Gui.Create'Frame' + { + Name = 'ChatFrame'; + Size = self.Configuration.Size; + Position = UDim2.new(0, 0, 0, 5); + BackgroundTransparency = 1.0; + --ClipsDescendants = true; + ZIndex = 0.0; + Parent = self.Gui; + + Gui.Create'ImageLabel' + { + Name = 'Background'; + Image = 'http://www.roblox.com/asset/?id=97120937'; --96551212'; + Size = UDim2.new(1.3, 0, 1.64, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 0.0; + Visible = false + }; + + Gui.Create'Frame' + { + Name = 'Border'; + Size = UDim2.new(1, 0, 0, 1); + Position = UDim2.new(0, 0, 0.8, 0); + BackgroundTransparency = 0.0; + BackgroundColor3 = Color3.new(236/255, 236/255, 236/255); + BorderSizePixel = 0.0; + Visible = false; + }; + + Gui.Create'Frame' + { + Name = 'ChatRenderFrame'; + Size = UDim2.new(1.02, 0, 1.01, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ClipsDescendants = true; + ZIndex = 0.0; + + }; + }; + + + self.RenderFrame = self.Frame.ChatRenderFrame + if Chat:IsTouchDevice() then + self.Frame.Position = self.Configuration.Position; + self.RenderFrame.Size = UDim2.new(1, 0, 1, 0) + elseif self.Frame.AbsoluteSize.Y > 120 then + Chat:ScreenSizeChanged() + self.Gui.Changed:connect(function(property) + if property == 'AbsoluteSize' then + Chat:ScreenSizeChanged() + end + end) + end + + if Player.ChatMode == Enum.ChatMode.TextAndMenu then + if Chat:IsTouchDevice() then + Chat:CreateTouchButton() + else + Chat:CreateChatBar() + --Chat:CreateSafeChatGui() + end + + if self.ChatBar then + self.ChatBar.FocusLost:connect(function(enterPressed) + Chat.GotFocus = false + if Chat:IsTouchDevice() then + self.ChatBar.Visible = false + self.TapToChatLabel.Visible = true + + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = true + end + end + if enterPressed and self.ChatBar.Text ~= "" then + if PlayersService.ClassicChat then + pcall(function() PlayersService:Chat(self.ChatBar.Text) end) + elseif PlayersService.BubbleChat then + -- do nothing + end + if self.ClickToChatButton then + self.ClickToChatButton.Visible = true + end + self.ChatBar.Text = "" + end + Spawn(function() + wait(5.0) + if not Chat.GotFocus then + Chat.Frame.Background.Visible = false + end + end) + end) + end + end +end + +function Chat:FindButtonTree(scButton, rootList) + local list = {} + rootList = rootList or self.SafeChatTree + for button, _ in pairs(rootList) do + if button == scButton then + list = rootList[button] + elseif type(rootList[button]) == 'table' then + list = Chat:FindButtonTree(scButton, rootList[button]) + end + end + return list +end + +function Chat:ToggleSafeChatMenu(scButton) + local list = Chat:FindButtonTree(scButton, self.SafeChatTree) + if list then + for button, _ in pairs(list) do + if button:IsA('TextButton') or button:IsA('ImageButton') then + button.Visible = not button.Visible + end + end + return true + end + return false +end + +function Chat:CreateSafeChatOptions(list, rootButton) + local text_List = {} + level = level or 0 + local count = 0 + text_List[rootButton] = {} + text_List[rootButton][1] = list[1] + rootButton = rootButton or self.SafeChatButton + for msg, _ in pairs(list) do + if type(msg) == 'string' then + local chatText = Gui.Create'TextButton' + { + Name = msg; + Text = msg; + Size = UDim2.new(0, 100, 0, 20); + TextXAlignment = Enum.TextXAlignment.Center; + TextColor3 = Color3.new(0.2, 0.1, 0.1); + BackgroundTransparency = 0.5; + BackgroundColor3 = Color3.new(1, 1, 1); + Parent = self.SafeChatFrame; + Visible = false; + Position = UDim2.new(0, rootButton.Position.X.Scale + 105, 0, rootButton.Position.Y.Scale - ((count - 3) * 100)); + }; + + count = count + 1 + + if type(list[msg]) == 'table' then + text_List[rootButton][chatText] = Chat:CreateSafeChatOptions(list[msg], chatText) + else + --table.insert(text_List[chatText], true) + end + chatText.MouseEnter:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseLeave:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseButton1Click:connect(function() + local lList = Chat:FindButtonTree(chatText) + if lList then + for i, v in pairs(lList) do + end + else + end + pcall(function() PlayersService:Chat(lList[1]) end) + end) + end + end + return text_List +end + +function Chat:CreateSafeChatGui() + self.SafeChatFrame = Gui.Create'Frame' + { + Name = 'SafeChatFrame'; + Size = UDim2.new(1, 0, 1, 0); + Parent = self.Gui; + BackgroundTransparency = 1.0; + + Gui.Create'ImageButton' + { + Name = 'SafeChatButton'; + Size = UDim2.new(0, 44, 0, 31); + Position = UDim2.new(0, 1, 0.35, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.roblox.com/asset/?id=97080365'; + }; + } + + self.SafeChatButton = self.SafeChatFrame.SafeChatButton + -- safe chat button is the root of this tree + self.SafeChatTree[self.SafeChatButton] = Chat:CreateSafeChatOptions(self.SafeChat_List, self.SafeChatButton) + + self.SafeChatButton.MouseButton1Click:connect(function() + Chat:ToggleSafeChatMenu(self.SafeChatButton) + end) + +end + +-- Scrolling function +-- Applies a speed(velocity) to have nice scrolling effect +function Input:OnMouseScroll() + Spawn(function() + -- How long should the speed last? + while Input.Speed ~=0 do + if Input.Speed > 1 then + while Input.Speed > 0 do + Input.Speed = Input.Speed - 1 + wait(0.25) + end + elseif Input.Speed < 0 then + while Input.Speed < 0 do + Input.Speed = Input.Speed + 1 + wait(0.25) + end + end + wait() + end + end) + if Chat:CheckIfInBounds(Input.Speed) then + return + end + Chat:ScrollQueue() +end + +function Input:ApplySpeed(value) + Input.Speed = Input.Speed + value + if not self.Simulating then + Input:OnMouseScroll() + end +end + +function Input:Initialize() + self.Mouse.WheelBackward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) + + self.Mouse.WheelForward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) +end + +function Chat:FindMessageInSafeChat(message, list) + local foundMessage = false + for msg, _ in pairs(list) do + if msg == message then + return true + end + if type(list[msg]) == 'table' then + foundMessage = Chat:FindMessageInSafeChat(message, list[msg]) + if foundMessage then + return true + end + end + end + return foundMessage +end + +-- Just a wrapper around our PlayerChatted event +function Chat:PlayerChatted(...) + local args = {...} + local argCount = select('#', ...) + local player + local message + -- This doesn't look very good, but what else to do? + if args[2] then + player = args[2] + end + if args[3] then + message = args[3] + end + if PlayersService.ClassicChat then + if Player.ChatMode == Enum.ChatMode.TextAndMenu then + Chat:UpdateChat(player, message) + elseif Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 3) == '/sc' then + Chat:UpdateChat(player, message) + else + if Chat:FindMessageInSafeChat(message, self.SafeChat_List) then + Chat:UpdateChat(player, message) + end + end + end +end + +-- After 5 minutes of existence, the labels become invisible +-- Runs only every 5 seconds and has to loop through 50 values +-- Shouldn't be too expensive +function Chat:CullThread() + while true do + if #self.MessageQueue > 0 then + for _, field in pairs(self.MessageQueue) do + if tick() - field['SpawnTime'] > self.Configuration.LifeTime and field['Player'] and field['Message'] then + field['Player'].Visible = false + field['Message'].Visible = false + end + end + end + wait(5.0) + end +end + +-- RobloxLock everything so users can't delete them(?) +function Chat:LockAllFields(gui) + local children = gui:GetChildren() + for i = 1, #children do + children[i].RobloxLocked = true + if #children[i]:GetChildren() > 0 then + Chat:LockAllFields(children[i]) + end + end +end + +-- Constructor +-- This function initializes everything +function Chat:Initialize() + Chat:CreateGui() + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + + end) + + -- Initialize input for us + Input:Initialize() + -- Eww, everytime a player is added, you have to redo the connection + -- Seems this is not automatic + Game.Players.ChildAdded:connect(function() + Chat.EventListener:disconnect() + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + end) + end) + + Spawn(function() + Chat:CullThread() + end) + + self.Frame.RobloxLocked = true + Chat:LockAllFields(self.Frame) + self.Frame.DescendantAdded:connect(function(descendant) + Chat:LockAllFields(descendant) + end) +end + +Chat:Initialize() + + + + + diff --git a/app/files/LuaThumbnail.png b/app/files/LuaThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..b481fdfe4a54932ce1be23f626b7f0dc0b3d7537 GIT binary patch literal 56304 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 gmh>F6AH&B6D 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 Rx3sVT;qKz?Tz4oq?cbIkA8`Nx literal 0 HcmV?d00001 diff --git a/app/files/NoRender.png b/app/files/NoRender.png new file mode 100644 index 0000000000000000000000000000000000000000..f2fda92b565f9eb77e43d1d702654d729b6b2349 GIT binary patch literal 4621 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 PnE(JYgd2Q>Jc#%&2$n;E literal 0 HcmV?d00001 diff --git a/app/files/Old2014Join.lua b/app/files/Old2014Join.lua new file mode 100644 index 0000000..92411c3 --- /dev/null +++ b/app/files/Old2014Join.lua @@ -0,0 +1,418 @@ + +-- functions -------------------------- +function onPlayerAdded(player) + -- override +end +-- MultiplayerSharedScript.lua inserted here ------ Prepended to GroupBuild.lua and Join.lua -- + +-- log app init time +pcall(function() + local t = ElapsedTime() + local platform = settings().Diagnostics.OsPlatform + game:HttpGet("http://www.nexium.fit/Game/JoinRate.ashx?st=0&i=0&p=-1&c=GameAppInit&r=Success&d=" .. (math.floor(t*1000)) .. "&ip=localhost&errorType=&platform=" .. platform, false) +end) + +pcall(function() game:SetPlaceID(-1, false) end) + +local startTime = tick() +local connectResolved = false +local loadResolved = false +local joinResolved = false +local playResolved = true +local playStartTime = 0 + +local cdnSuccess = 0 +local cdnFailure = 0 + +settings()["Game Options"].CollisionSoundEnabled = true +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings().Physics.Is30FpsThrottleEnabled = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) +pcall(function() settings().Physics.PhysicsEnvironmentalThrottle = Enum.EnviromentalPhysicsThrottle.DefaultAuto end) + +function reportContentProvider(time, queueLength, blocking) + pcall(function() + game:HttpGet("http://www.nexium.fit/Analytics/ContentProvider.ashx?t=" .. time .. "&ql=" .. queueLength, blocking) + end) +end +function reportCdn(blocking) + pcall(function() + local newCdnSuccess = settings().Diagnostics.CdnSuccessCount + local newCdnFailure = settings().Diagnostics.CdnFailureCount + local successDelta = newCdnSuccess - cdnSuccess + local failureDelta = newCdnFailure - cdnFailure + cdnSuccess = newCdnSuccess + cdnFailure = newCdnFailure + if successDelta > 0 or failureDelta > 0 then + game:HttpGet("http://www.nexium.fit/Game/Cdn.ashx?source=client&success=" .. successDelta .. "&failure=" .. failureDelta, blocking) + end + end) +end + +function reportDuration(category, result, duration, blocking,errorType) + if not errorType then + errorType = '' + end + local platform = settings().Diagnostics.OsPlatform + local bytesReceived = -1 + if stats().Network:getChildren()[2] ~= nil then + bytesReceived = stats().Network:getChildren()[2].Stats.totalBytesReceived:GetValue() + end + pcall(function() game:HttpGet("http://www.nexium.fit/Game/JoinRate.ashx?st=0&i=0&p=-1&c=" .. category .. "&r=" .. result .. "&d=" .. (math.floor(duration*1000)) .. "&b=" .. bytesReceived .. "&ip=localhost&errorType=" .. errorType .. "&platform=" .. platform, blocking) end) +end +-- arguments --------------------------------------- +local threadSleepTime = ... + +if threadSleepTime==nil then + threadSleepTime = 15 +end + +local test = true + +print("! Joining game '' place -1 at localhost") +local closeConnection = game.Close:connect(function() + if 0 then + reportCdn(true) + if not connectResolved then + local duration = tick() - startTime; + reportDuration("GameConnect", "Failure", duration, true) + elseif (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + reportDuration("GameLoad","Cancel", duration, true) + end + if not joinResolved then + joinResolved = true + reportDuration("GameJoin","Cancel", duration, true) + end + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + reportDuration("GameDuration","Success", duration, true) + end + pcall(function() game:HttpGet("&disconnect=true", true) end) + if true then pcall(function() game:HttpPost("https://api.nexium.fit/auth/invalidate", "invalidate") end) end + end +end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +game:GetService("ContentProvider"):SetThreadPool(16) +game:GetService("InsertService"):SetBaseSetsUrl("http://www.nexium.fit/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("http://www.nexium.fit/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("http://www.nexium.fit/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("http://www.nexium.fit/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("http://www.nexium.fit/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("http://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("http://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("http://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("http://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("http://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("http://www.nexium.fit/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl("https://api.nexium.fit/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl("https://api.nexium.fit/ownership/hasasset?userId=%d&assetId=%d") end) +pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end) + +-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting +pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.Classic) end) + +local waitingForCharacter = false +local waitingForCharacterGuid = "26c3de03-3381-4ab6-8e60-e415fa757eba"; +pcall( function() + if settings().Network.MtuOverride == 0 then + settings().Network.MtuOverride = 1400 + end +end) + + +-- globals ----------------------------------------- + +client = game:GetService("NetworkClient") +visit = game:GetService("Visit") + +-- functions --------------------------------------- +function ifSeleniumThenSetCookie(key, value) + if false then + game:GetService("CookiesService"):SetCookieValue(key, value) + end +end + +function setMessage(message) + -- todo: animated "..." + if not false then + game:SetMessage(message) + else + -- hack, good enought for now + game:SetMessage("Teleporting ...") + end +end +setMessage("Connecting to SYNTAX...") +function showErrorWindow(message, errorType, errorCategory) + if 0 then + if (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + reportDuration("GameLoad","Failure", duration, false,errorType) + end + if not joinResolved then + joinResolved = true + reportDuration("GameJoin",errorCategory, duration, false,errorType) + end + + pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=JoinFailure", false) end) + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + reportDuration("GameDuration",errorCategory, duration, false,errorType) + + pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=GameDisconnect", false) end) + end + end + + game:SetMessage(message) +end + +function registerPlay(key) + return +end + +function analytics(name) + return +end + +function analyticsGuid(name, guid) + return +end + +function reportError(err, message) + print("***ERROR*** " .. err) + if not test then visit:SetUploadUrl("") end + client:Disconnect() + wait(4) + showErrorWindow("Error: " .. err, message, "Other") +end + +-- called when the client connection closes +function onDisconnection(peer, lostConnection) + if lostConnection then + if waitingForCharacter then analyticsGuid("Waiting for Character Lost Connection",waitingForCharacterGuid) end + showErrorWindow("You have lost the connection to the game", "LostConnection", "LostConnection") + else + if waitingForCharacter then analyticsGuid("Waiting for Character Game Shutdown",waitingForCharacterGuid) end + showErrorWindow("This game has shut down", "Kick", "Kick") + end + pcall(function() game:HttpGet("&disconnect=true", true) end) + if true then pcall(function() game:HttpPost("https://api.nexium.fit/auth/invalidate", "invalidate") end) end +end + +function requestCharacter(replicator) + + -- prepare code for when the Character appears + local connection + connection = player.Changed:connect(function (property) + if property=="Character" then + game:ClearMessage() + waitingForCharacter = false + analyticsGuid("Waiting for Character Success", waitingForCharacterGuid) + + connection:disconnect() + + if 0 then + if not joinResolved then + local duration = tick() - startTime; + joinResolved = true + reportDuration("GameJoin","Success", duration, false) + + playStartTime = tick() + playResolved = false + end + end + end + end) + + setMessage("Requesting character") + + if 0 and not loadResolved then + local duration = tick() - startTime; + loadResolved = true + reportDuration("GameLoad","Success", duration, false) + end + + local success, err = pcall(function() + replicator:RequestCharacter() + setMessage("Waiting for character") + waitingForCharacter = true + analyticsGuid("Waiting for Character Begin",waitingForCharacterGuid); + end) + if not success then + reportError(err,"W4C") + return + end +end + +-- called when the client connection is established +function onConnectionAccepted(url, replicator) + connectResolved = true + --reportDuration("GameConnect", "Success", tick() - startTime, false) + + local waitingForMarker = true + + local success, err = pcall(function() + if not test then + visit:SetPing("", 300) + end + + if not false then + game:SetMessageBrickCount() + else + setMessage("Teleporting ...") + end + + replicator.Disconnection:connect(onDisconnection) + + -- Wait for a marker to return before creating the Player + local marker = replicator:SendMarker() + + marker.Received:connect(function() + waitingForMarker = false + requestCharacter(replicator) + end) + end) + + if not success then + reportError(err,"ConnectionAccepted") + return + end + + -- TODO: report marker progress + + while waitingForMarker do + workspace:ZoomToExtents() + wait(0.5) + end +end + +-- called when the client connection fails +function onConnectionFailed(_, error) + showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error, "Other") +end + +-- called when the client connection is rejected +function onConnectionRejected() + connectionFailed:disconnect() + showErrorWindow("This game is not available. Please try another", "WrongVersion", "WrongVersion") +end + +idled = false +function onPlayerIdled(time) + if time > 20*60 then + showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle", "Idle") + client:Disconnect() + if not idled then + idled = true + end + end +end + + +-- main ------------------------------------------------------------ + +--analytics("Start Join Script") + +--ifSeleniumThenSetCookie("SeleniumTest1", "Started join script") + +pcall(function() settings().Diagnostics:LegacyScriptMode() end) +local success, err = pcall(function() + + game:SetRemoteBuildMode(true) + + setMessage("Connecting to SYNTAX...") + client.ConnectionAccepted:connect(onConnectionAccepted) + client.ConnectionRejected:connect(onConnectionRejected) + connectionFailed = client.ConnectionFailed:connect(onConnectionFailed) + client.Ticket = "" + ifSeleniumThenSetCookie("SeleniumTest2", "Successfully connected to server") + + playerConnectSucces, player = pcall(function() return client:PlayerConnect(0, "localhost", 53640, 0, threadSleepTime) end) + if not playerConnectSucces then + --Old player connection scheme + player = game:GetService("Players"):CreateLocalPlayer(0) + analytics("Created Player") + client:Connect("localhost", 53640, 0, threadSleepTime) + else + analytics("Created Player") + end + + pcall(function() + registerPlay("rbx_evt_ftp") + delay(60*5, function() registerPlay("rbx_evt_fmp") end) + end) + + -- negotiate an auth token + if true then + pcall(function() game:HttpPost("https://api.nexium.fit/auth/negotiate?ticket=", "negotiate") end) + delay(300, function() + while true do + pcall(function() game:HttpPost("https://api.nexium.fit/auth/renew", "renew") end) + wait(300) + end + end) + end + + player:SetSuperSafeChat(false) + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(Enum.MembershipType.OutrageousBuildersClub) end) + pcall(function() player:SetAccountAge(365) end) + player.Idled:connect(onPlayerIdled) + + -- Overriden + onPlayerAdded(player) + + pcall(function() player.Name = [========[Player]========] end) + player.CharacterAppearance = "http://www.nexium.fit/Asset/CharacterFetch.ashx?userId=1" + if not test then visit:SetUploadUrl("")end + + analytics("Connect Client") + +end) + +if not success then + reportError(err,"CreatePlayer") +end + +--[[ +ifSeleniumThenSetCookie("SeleniumTest3", "Successfully created player") + +if not test then + -- TODO: Async get? + loadfile("")("", -1, 0) +end + +if 0 then + delay(60*5, function() + while true do + reportCdn(false) + wait(60*5) + end + end) + local cpTime = 30 + delay(cpTime, function() + while cpTime <= 480 do + reportContentProvider(cpTime, game:GetService("ContentProvider").RequestQueueSize, false) + wait(cpTime) + cpTime = cpTime * 2 + end + end) +end +]] + +pcall(function() game:SetScreenshotInfo("") end) +pcall(function() game:SetVideoInfo('GamesROBLOX, video, free game, online virtual world') end) +-- use single quotes here because the video info string may have unescaped double quotes +--[[ +analytics("Join Finished") + +ifSeleniumThenSetCookie("SeleniumTest4", "Finished join") +]] \ No newline at end of file diff --git a/app/files/PCDesktopClient.json b/app/files/PCDesktopClient.json new file mode 100644 index 0000000..e0917b3 --- /dev/null +++ b/app/files/PCDesktopClient.json @@ -0,0 +1,4256 @@ +{ + "applicationSettings": { + "AllowVideoPreRoll": "True", + "FFlagAvatarChatServiceExposeClientFeaturesForVoiceChat": "True", + "FFlagAvatarChatServiceExposeClientFeaturesForVoiceChat_PlaceFilter": "True;10057672346;12806190892;12806247258;12806262789;12806270326;12806279894;10787386927;12867018908;10001514317;12867047376;12867089300;11460402982;12500012844;11402255591;12796376276;12991298352;9793123004;13178556380;12123120785;12339044345;13344085926;13344098671;13344101574;13344102517;13344103529;13344104459;13344106084;13344107172;13344107492;13344120626;5064251723;13978152178;9709838535;14030887154;13989579574;14066075418;14121274475;13621732500;13621737323;13621742117;13621746770;11766336272;14203104746", + "FFlagVoiceChatServiceManagerUseAvatarChat": "True", + "FFlagVoiceChatServiceManagerUseAvatarChat_PlaceFilter": "True;10057672346;12806190892;12806247258;12806262789;12806270326;12806279894;10787386927;12867018908;10001514317;12867047376;12867089300;11460402982;12500012844;11402255591;12796376276;12991298352;9793123004;13178556380;12123120785;12339044345;13344085926;13344098671;13344101574;13344102517;13344103529;13344104459;13344106084;13344107172;13344107492;13344120626;5064251723;13978152178;9709838535;14030887154;13989579574;14066075418;14121274475;13621732500;13621737323;13621742117;13621746770;11766336272;14203104746", + "FFlagVoiceChatWaitForSignalRJoinStageMetrics": "True", + "FFlagEnableVoiceChatSpeakerIcons": "True", + "DFIntVoiceChatJoinTimeoutMs": "120000", + "DFIntSendJoinHttpBytesToDiag_HundredthsPercentage": "100", + "FFlagCMSUploadAccessoryMeshPartFormat2": "True", + "FFlagVoiceChatRecordMetricsForSubPeerConnected": "True", + "AndroidSwipeGestureUseStartingPosition": "True", + "AxisAdornmentGrabSize": "12", + + "CaptureCountersIntervalInMinutes": "5", + "CaptureQTStudioCountersEnabled": "True", + "DFFlagAccoutrementWeldingFilteringEnabled": "False", + "DFFlagAddOSToPlayerInfoTable": "True", + "DFFlagAddSoundEnabledInitializationParam": "True", + "DFFlagAddStreamingAdornDebugger": "True", + "DFFlagAddStreamingAndResourceUsageUrlParams": "True", + "DFFlagAdminServerLogs": "True", + "DFFlagAllowAnimateScripts": "True", + "DFFlagAllowJoinsToWait": "True", + "DFFlagAllowLuauUpdates": "True", + "DFFlagAllowPackageLinkAncestoryClone": "True", + "DFFlagAllowTicketSig42": "True", + "DFFlagAlwaysLogTcDisco": "True", + "DFFlagAlwaysLongStep": "True", + "DFFlagAnalyticsCDNProbeOnlyQueryOneHost": "True", + "DFFlagAnalyticsNS1BeaconSupportLimitedRobloxUrls": "True", + "DFFlagAnalyticsReportHttpStatsAtExit": "True", + "DFFlagAnalyticsServiceMonitoring": "True", + "DFFlagAnalyticsServiceMonitoring2": "False", + "DFFlagAngularVelocityReactionTorqueEnabled": "True", + "DFFlagAniCombinedServerPassthrough": "True", + "DFFlagAnimationLoadSimplification": "False", + "DFFlagAnimationLoadSimplification2": "True", + "DFFlagAnimatorAnimationPlayed": "True", + "DFFlagAnimatorApplyJointVelocities": "True", + "DFFlagAnimatorEnableBone_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "DFFlagAnimatorNewModelSearchAnalytics": "False", + "DFFlagAnimatorOnSteppedKeepAlive": "True", + "DFFlagAssetManagerPackageSymbolicLinkFix": "True", + "DFFlagAssumeNoBreakableJoints": "True", + "DFFlagAsyncPublishImprovement": "True", + "DFFlagAttemptFixXBoxCrash": "True", + "DFFlagAvoidResetCurrentRegion4": "True", + "DFFlagAvoidVelBufWhenGC": "True", + "DFFlagAvoidVelBufWhenGC2": "True", + "DFFlagBackPressureThrottlingEnabled": "True", + "DFFlagBackupStreamingFocusLastPlayerPosition": "True", + "DFFlagBallSocketMaxFrictionTorqueEnabled": "False", + "DFFlagBallSocketMaxFrictionTorqueEnabled2": "True", + "DFFlagBallSocketMaxFrictionTorqueEnabled_PlaceFilter": "True;4588303397", + "DFFlagBatchApiAssetArchiving": "False", + "DFFlagBatchAssetApiNoFallbackOnFail": "True", + "DFFlagBatchAssetApiTrackFailedUrls2": "True", + "DFFlagBetterAddInstance": "True", + "DFFlagBetterStreamingHumanoidSimulationFiltering": "True", + "DFFlagBetterTimeStamp": "True", + "DFFlagBetterTypeErrors": "True", + "DFFlagBodyAtomicUpdate": "True", + "DFFlagBodySafeUpdatePVEnabled": "True", + "DFFlagBoxMappedMeshLODFix_v2": "True", + "DFFlagBroadphaseReportOnlyUnthrottled": "True", + "DFFlagCLI120342": "False", + "DFFlagCLI120342p7": "True", + "DFFlagCLI120342p72": "True", + "DFFlagCSGMeshDeserializationFix": "True", + "DFFlagCSGMeshLevelOfDetailV2": "True", + "DFFlagCSGMeshLevelOfDetailV2_PlaceFilter": "True;2434889832;2568147212", + "DFFlagCSGMeshLevelOfDetail_Fix2": "True", + "DFFlagCSGMeshV4DeserializerEnabled": "True", + "DFFlagCSGOperationStatisticsGA": "True", + "DFFlagCSGOperationsGetCommonParentOrWorkspaceCrashFix": "True", + "DFFlagCSGOperationsRespectsCollisionFidelityAtCreation": "True", + "DFFlagCSGv2NormalSmoothing": "True", + "DFFlagCSGv2SkipDegenerateTriangles": "True", + "DFFlagCSGv2StatisticsFix": "True", + "DFFlagCSGv2UseMegaAssetFetcher": "True", + "DFFlagCSGv2UsePositionClustering": "True", + "DFFlagCacheAverageClientPing": "True", + "DFFlagCacheExistingPackageVersionData": "True", + "DFFlagCacheInAssemblyForSending": "True", + "DFFlagCacheSoundStats": "True", + "DFFlagCantSendTheseAnymore": "True", + "DFFlagCatchBuildRigFromAttachmentsExceptions": "True", + "DFFlagCatchCharacterLoadingErrors": "True", + "DFFlagCheckAssemblyWhenWakeFromContactRemove": "True", + "DFFlagCheckCoreLocalizationLoading": "True", + "DFFlagCheckDecryptionResults": "True", + "DFFlagCheckFMODInitThreading": "False", + "DFFlagCheckFMODInitThreading2": "True", + "DFFlagCheckForNullSoundChannel": "True", + "DFFlagCheckForNullWhenCloningInstances": "True", + "DFFlagCheckGameValidityInDoTeleport": "True", + "DFFlagCheckMultipleLoadCharacterCalls": "True", + "DFFlagCheckPVDifferencesForInterpolationChoice": "True", + "DFFlagCheckParentInJoinCacheInsteadOfWalkingDMTree2": "True", + "DFFlagCheckTeamCreateReplicatorQueue": "True", + "DFFlagClampPitch2": "True", + "DFFlagCleanCacheMoveMutex": "True", + "DFFlagClearUnusedLuaRefsWithJob": "True", + "DFFlagClientDisableLuaTicket": "True", + "DFFlagClientHappyNewYear1": "True", + "DFFlagClientJoinProcessToEventIngest": "True", + "DFFlagClientNetworkReportGameInstanceId": "False", + "DFFlagClientNetworkReportIpVersion": "True", + "DFFlagClientNetworkSendGameInstanceId": "True", + "DFFlagClientStopSendJdiAtJoin": "True", + "DFFlagClientStreamingRadiusRoundConsistency": "True", + "DFFlagCloseRedirectedLocalAssetIds": "True", + "DFFlagCloudTablesEnforceAccountAge": "True", + "DFFlagCloudTablesPhase2_AddCloudTableToListOnCreate": "True", + "DFFlagCloudTablesPhase2_CreateTableEarly": "True", + "DFFlagCloudTablesPhase2_IgnoreEmptyManifestReport": "True", + "DFFlagCloudTablesPhase2_MissingSourceTextScraperFix": "True", + "DFFlagCloudTablesPhase2_TrackAndTimeoutHangingThreads": "True", + "DFFlagCloudTablesPhase2_TrackLocaleFetchCallsites": "True", + "DFFlagCloudTablesPhase2_WaitForSourceFix": "True", + "DFFlagCollectSoundInfo": "True", + "DFFlagCompletenessClientCreatesInstanceFix": "True", + "DFFlagCompletenessDeadParentRemovingChildFix": "True", + "DFFlagCompletenessParentMFDFix": "True", + "DFFlagComputeSolverDisplacementForWake": "True", + "DFFlagComputeSolverDisplacementForWake_PlaceFilter": "True;679715583", + "DFFlagConnectIPv6ServerInLAN": "True", + "DFFlagConsiderDSPHeadAsOutput": "True", + "DFFlagConsumePlatformNameOverAlternateName": "False", + "DFFlagContactManifoldCountReportingEnabled": "True", + "DFFlagContactStepAsyncFaster": "True", + "DFFlagContentProviderAssetdeliveryRolloutEnabled2": "True", + "DFFlagContentProviderLocalAssetPath": "True", + "DFFlagContentProviderLocalAssetPath3": "True", + "DFFlagContentProviderLocalAssetPathRCCFix": "True", + "DFFlagContentProviderUseLambdas": "True", + "DFFlagCreateServerPlayerSetsIdAndName": "True", + "DFFlagCurlReportResolvedIp": "False", + "DFFlagCyclicExecutiveThrottlingCancelWorldStepAccum": "False", + "DFFlagDarwinIncludeMemReusable": "True", + "DFFlagDataModelSetAnalyticsDatacenterId": "True", + "DFFlagDataStoreAutoHttpRetry": "False", + "DFFlagDataStoreDontTouchCachedRecordOnGetAsync": "True", + "DFFlagDataStoreInitialThrottlingBudgetFix": "True", + "DFFlagDataStoreLargeValueError": "True", + "DFFlagDataStoreLargeValueError_PlaceFilter": "True;2910792538;69184822", + "DFFlagDataStoreMoreInfoForVagueError": "True", + "DFFlagDataStoreNoSerializedDataInCache": "False", + "DFFlagDataStoreNoSerializedDataInCache_PlaceFilter": "True;1052132952", + "DFFlagDataStoreUpdateGetAPI_PlaceFilter": "True;2432005634;70501379;2910792538", + "DFFlagDataStoreUpdateGetSortedAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateIncrementAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateOnUpdateAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateRemoveAPI_PlaceFilter": "True;2910792538", + "DFFlagDataStoreUpdateSetAPI_PlaceFilter": "True;2432005634;70501379;2910792538", + "DFFlagDataStoreUpdateSetIfAPI_PlaceFilter": "True;2910792538", + "DFFlagDebugAnalyticsForXBoxCrash": "True", + "DFFlagDebugAnalyticsForXBoxCrashOnSuccessAlso": "True", + "DFFlagDebugCurlOption12": "True", + "DFFlagDebugCurlOption22": "True", + "DFFlagDebugCurlOption32": "True", + "DFFlagDebugCurlOption42": "True", + "DFFlagDebugEnableRemoteProfiling2": "True", + "DFFlagDebugForcePubKeyExchange": "True", + "DFFlagDebugGAReportThrottledSessions": "True", + "DFFlagDebugLaunchTimeByCountryPlaceSpecific_PlaceFilter": "true;189707", + "DFFlagDebugRakPeerReceive": "True", + "DFFlagDebugRakPeerReceiveCountDistributedPackets": "True", + "DFFlagDebugRealityCheck3": "True", + "DFFlagDebugReportSoundAssetsFromList": "True", + "DFFlagDebugVisualizerTrackRotationPredictions": "True", + "DFFlagDeferTickleAssemblyWakes": "False", + "DFFlagDeferTickleAssemblyWakes2": "True", + "DFFlagDeferTickleAssemblyWakes2_PlaceFilter": "False;441585237", + "DFFlagDeferTickleAssemblyWakes_PlaceFilter": "False;679715583", + "DFFlagDeleteEventInvocationArgsSerially": "True", + "DFFlagDeprecateConnectionRejected": "True", + "DFFlagDeprecateRakNetRand": "True", + "DFFlagDetailedBandwidthStatsInflux_PlaceFilter": "true;4599786547", + "DFFlagDidNotEatPizzaToday": "True", + "DFFlagDisableAllJoinToolJoining": "True", + "DFFlagDisableAncientNetworkSettings": "True", + "DFFlagDisableDebuggerDisconnect": "True", + "DFFlagDisableEmoteFetchForNonPositiveUserId": "True", + "DFFlagDisableLegacyPlayerJoin": "True", + "DFFlagDisablePackageRequestCache": "True", + "DFFlagDisableReplicatorLuaCloseConnection": "True", + "DFFlagDisableReplicatorLuaGetRakStatsString": "True", + "DFFlagDisableRotateJointFromJoinToOutsiders2": "True", + "DFFlagDistributeSoundLoadingAcrossAsyncThreads": "True", + "DFFlagDoNotCreatePlaybackChannelForNullSoundChannel": "True", + "DFFlagDoNotDecrementPendingNewInstancesWhenProcessingDelete": "True", + "DFFlagDoNotInvalidateMe": "True", + "DFFlagDoNotRenderMeshLODByDefault": "True", + "DFFlagDoNotRepeatRedundantPlayingEvents": "True", + "DFFlagDoNotRepeatRedundantVideoPlayingEvents": "True", + "DFFlagDoNotRepositionSeated": "True", + "DFFlagDoNotRunAnimationEditorInPlayMode": "True", + "DFFlagDoParallelInterpolationFixUnguardedBufferClear": "True", + "DFFlagDoParallelInterpolationSetPV2": "True", + "DFFlagDontCallOnMovingAssemblyRoot": "False", + "DFFlagDontClearForwardRefMapOnGC": "True", + "DFFlagDontClearTouchEventsDuringInterpolation": "True", + "DFFlagDontEnforceChildOrderAtJoin": "False", + "DFFlagDontHandlePlayerReplicationDataAsSpecialCase": "False", + "DFFlagDontHandlePlayerReplicationDataAsSpecialCase2": "True", + "DFFlagDontImmediatelyDeparentReplicator": "True", + "DFFlagDontSendEmptyTouchPackets": "True", + "DFFlagDontWalkOnReparent": "False", + "DFFlagDontWhitelistUserInputConnectionCounts": "True", + "DFFlagDressInLayers2": "True", + "DFFlagDynamicFastVariableSupportFileSource": "True", + "DFFlagDynamicLocalizationTablesNonBlocking2": "True", + "DFFlagDynamicReloaderDoWork": "True", + "DFFlagESGamePerfMonitorEnabled": "True", + "DFFlagEasingRefactor": "True", + "DFFlagEconomyCreatorStatsApiWhitelist": "True", + "DFFlagEmoteLoadingEnabled": "True", + "DFFlagEmoteThumbnailsRotationEnabled": "True", + "DFFlagEmotesApiEnabled": "True", + "DFFlagEnable17sNotifications": "True", + "DFFlagEnableAnalyticsSeriveEventIngest_PlaceFilter": "False;5184420076", + "DFFlagEnableAnalyticsServiceSetApiKeyEventSteam": "False", + "DFFlagEnableCallingWakeUpMechanicalJointsForAssembly": "True", + "DFFlagEnableDateTimeInReplicator": "True", + "DFFlagEnableExtendedAnalytics": "True", + "DFFlagEnableFillCylinder": "True", + "DFFlagEnableFillWedge": "True", + "DFFlagEnableGetPlayFabTitleFromService": "True", + "DFFlagEnableHttpProxy": "False", + "DFFlagEnableHumanoidControllerSubstepping": "False", + "DFFlagEnableHumanoidControllerSubstepping_PlaceFilter": "True;20907", + "DFFlagEnableInfluxTestInProductionTag": "True", + "DFFlagEnableInfluxTestInProductionTag_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnableLowerFrequencyWorldSteps": "False", + "DFFlagEnableLowerFrequencyWorldSteps_PlaceFilter": "True;4306999063", + "DFFlagEnableLuaApiToRegisterEncryptedAssets": "False", + "DFFlagEnableLuaApiToRegisterEncryptedAssets_PlaceFilter": "True;5646917919;5535247402;5650743011;5732185084;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5180703112;5036207802;5947859215;5968314783;5976554489;5967514178;5762783081;4927429832;5271804927", + "DFFlagEnableMacWindowCloseButton": "True", + "DFFlagEnableMeshHeadAttachments": "True", + "DFFlagEnableMeshHeadNative": "True", + "DFFlagEnableMessagingService": "True", + "DFFlagEnableMessagingServiceAnalysis": "True", + "DFFlagEnablePerfAudioCollection": "False", + "DFFlagEnablePerfAudioCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataCollection": "True", + "DFFlagEnablePerfDataCoreCategoryTimersCollection": "False", + "DFFlagEnablePerfDataCoreTimersCollection": "False", + "DFFlagEnablePerfDataCoreTimersCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataExtendedMemoryCollection": "False", + "DFFlagEnablePerfDataExtendedMemoryCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataGatherTelemetry": "False", + "DFFlagEnablePerfDataGatherTelemetry_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataMemoryCategoriesCollection": "False", + "DFFlagEnablePerfDataMemoryCategoriesCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataMemoryCollection": "True", + "DFFlagEnablePerfDataSubsystemTimersCollection": "False", + "DFFlagEnablePerfDataSubsystemTimersCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfDataTimerCollection": "False", + "DFFlagEnablePerfDataTimerCollection_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePerfStatsCollection2": "False", + "DFFlagEnablePerfStatsCollection2_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnablePlayFabBatchEventCompression": "False", + "DFFlagEnablePlayFabRequestSizeLimit": "True", + "DFFlagEnablePrintJoinSizeBreakdown": "True", + "DFFlagEnableRemoteProfiling": "True", + "DFFlagEnableRemoteProfilingForDevConsole": "True", + "DFFlagEnableSSEClamp": "True", + "DFFlagEnableSessionCount": "True", + "DFFlagEnableSessionCount_PlaceFilter": "True;4599786547;5064251723", + "DFFlagEnableSoapMicroprofiles": "True", + "DFFlagEnableStrictRiffParsing": "True", + "DFFlagEnableTelegrafPriorityTag": "True", + "DFFlagEnableThirdPartyTeleportProtection": "True", + "DFFlagEnableUsersEndpoint": "True", + "DFFlagEnableWakingPGSJointsForNonSolverPrimitives": "True", + "DFFlagEnforceSlaveStateEnabledStatus": "True", + "DFFlagEnsureNullCheckOnDisconnect": "True", + "DFFlagEphemeralCounterInfluxReportingEnabled": "True", + "DFFlagEphemeralStatsInfluxReportingEnabled": "True", + "DFFlagEvenBetterTimeStamp": "True", + "DFFlagEvenMorePhysicsSenderStats": "True", + "DFFlagEventUseStaticWrite": "True", + "DFFlagEveryJointIsManualJoint": "True", + "DFFlagExposeAttributesEarly": "True", + "DFFlagExternalWakeOtherAssembly2": "False", + "DFFlagExternalWakesWholeMechanism": "True", + "DFFlagFastVisuallyMovingCounters": "False", + "DFFlagFastVisuallyMovingCounters2": "False", + "DFFlagFasterDataModelPatcherRollbacks": "True", + "DFFlagFasterHasNanInf": "True", + "DFFlagFasterResetRoot": "True", + "DFFlagFasterVectorIndex": "True", + "DFFlagFavorIPV4Connections": "False", + "DFFlagFileSystemCheckReadSize": "True", + "DFFlagFileSystemReadDirFix": "True", + "DFFlagFileWatcherMultipleEventPerUpdateCall": "True", + "DFFlagFindClosestHandleHitTestFixEnabled": "True", + "DFFlagFireHealthChangedLater": "True", + "DFFlagFixAnalyticsServiceSetApiKey": "True", + "DFFlagFixAnchoredConveyors": "True", + "DFFlagFixCLI28389": "True", + "DFFlagFixCharPosNaNCompare": "True", + "DFFlagFixCharacterAppearanceLoadedEvent2": "True", + "DFFlagFixClientNetworkMetricsForParallelConnection": "True", + "DFFlagFixCoreScriptModuleDebuggerDataNotMappingOnBaseLevelScript": "True", + "DFFlagFixCutAndUndoAfterSavingCSGUnionToNewFile": "True", + "DFFlagFixDataStoreWarningKeyEmpty": "True", + "DFFlagFixEmotesInventoryOverwrite": "True", + "DFFlagFixEquipToolAssertWhenHumanoidNotInDataModel": "True", + "DFFlagFixExtraMemoryComputation": "True", + "DFFlagFixExtractFirstLOD": "True", + "DFFlagFixFailoverFailure": "True", + "DFFlagFixFreefallFrictionResetAfterBodyPartChange": "True", + "DFFlagFixGetPropertyChangedSignalMemoryLeak": "True", + "DFFlagFixGuardTiming": "True", + "DFFlagFixInvalidateCache": "True", + "DFFlagFixManualJointAdornCrash": "False", + "DFFlagFixManualJointAdornCrash2": "True", + "DFFlagFixMasslessInertiaContribution": "True", + "DFFlagFixMeshNormalsForNonUniformScaling": "True", + "DFFlagFixMoveToSlowAfterAnalogControls": "True", + "DFFlagFixNewTriangleMeshCreation": "True", + "DFFlagFixNullTask": "True", + "DFFlagFixPVSpaceTransform": "True", + "DFFlagFixPackageModificationCheckForPendingState": "True", + "DFFlagFixParallelCoarseMovementCallbacks": "True", + "DFFlagFixPerSecDivideStats": "True", + "DFFlagFixPhysSenderParallelSimDistanceUpdateValue": "True", + "DFFlagFixPlayFabDuplicateEvents": "True", + "DFFlagFixPlayerGetTeamNeutral": "True", + "DFFlagFixPreloadAsyncCallbackBlocking": "True", + "DFFlagFixPreloadAsyncCallbackCrash": "True", + "DFFlagFixPrintJoinSizeBreakdown": "True", + "DFFlagFixPriorityAscDesc": "True", + "DFFlagFixReadCache": "True", + "DFFlagFixRijndaelCBC": "True", + "DFFlagFixRootPartCollisionForR6": "True", + "DFFlagFixScalingValueReplicationWarn": "True", + "DFFlagFixSetupAnimationWeights": "True", + "DFFlagFixSoundReplicationForTeamCreate": "True", + "DFFlagFixSpawningPerformanceAndInaccuracies": "True", + "DFFlagFixSpm": "True", + "DFFlagFixStudioDegenerateMouseRaycast": "True", + "DFFlagFixTerrainStreamOutOptOrder": "True", + "DFFlagFixThrottlingCalculationForRot": "True", + "DFFlagFixTimeConversion": "True", + "DFFlagFixUncaughtModuleContentSetParentException": "True", + "DFFlagForceNoBloomInThumbnail": "True", + "DFFlagForcePubKeyExchange33": "True", + "DFFlagForceTypeCheckOnRequire": "True", + "DFFlagForwardRefCheckMegaReplicator": "True", + "DFFlagFreeDSPsIfUnusable": "True", + "DFFlagFreeFmodGroupIfUnusuable": "True", + "DFFlagFriendsV2BadAccessFix": "True", + "DFFlagGCJobInitNegativeLastSentServerRadius": "True", + "DFFlagGCNotAlwaysMemory": "True", + "DFFlagGCReducesQuota2": "True", + "DFFlagGenerateMeshLOD_Fix1": "True", + "DFFlagGenericPublicKeyIndex2": "True", + "DFFlagGetAutoTranslationEntriesEnabled2": "True", + "DFFlagGetBundleDetailsAPI": "True", + "DFFlagGetContextFreeDSPs": "True", + "DFFlagGetContextFreeSoundGroup": "True", + "DFFlagGetCountryRegionForPlayerAsyncEnabled": "True", + "DFFlagGetFriendsOnlineCachingEnabled": "True", + "DFFlagGetPolicyInfoForPlayerAsyncEnabled": "True", + "DFFlagGetPolicyInfoForPlayerAsyncEnabledClient": "True", + "DFFlagGetRidOfPointlessSytemCheck": "True", + "DFFlagGetRobloxSecurityCookieFix": "True", + "DFFlagGetTeamLazyEvaluation": "True", + "DFFlagGetTranslatorForLocaleAsyncEnabled2": "True", + "DFFlagGlobalToggle17sApis": "True", + "DFFlagGoodbyeChoiceActiveProperty": "True", + "DFFlagGroupTeleportAddTeleportIdParameter": "True", + "DFFlagGroupTeleportJoinDataOverWrite": "True", + "DFFlagGuiTrackInsertionOrder": "True", + "DFFlagGuidDebugStringIgnoreScopeLength": "True", + "DFFlagGuidsGetGood2": "False", + "DFFlagHACDFixCrashCoplanarFaceCrash": "True", + "DFFlagHACDUseDistancePlaneChecks": "True", + "DFFlagHandleFMODConstructorReturningNonNullInvalidPtr": "True", + "DFFlagHandleLowTriggerStreamingGC": "True", + "DFFlagHidePartSurfaceProperties": "True", + "DFFlagHideProxySettings": "True", + "DFFlagHideStreamingPropsWhenNotStreaming": "True", + "DFFlagHideThirdPartyTeleportErrorDialog": "True", + "DFFlagHoldTrottleValue": "True", + "DFFlagHttpAddSetMethodPatch": "True", + "DFFlagHttpAdditionalBandwidthMetrics": "True", + "DFFlagHttpAssetArchiveWarning": "False", + "DFFlagHttpBatchApiSupportAssetdeliveryInputUrls": "True", + "DFFlagHttpBatchCompress": "True", + "DFFlagHttpCacheAsync": "True", + "DFFlagHttpCacheCleanupNew": "True", + "DFFlagHttpCacheMissingRedirects": "True", + "DFFlagHttpCleanupRbxCurl": "False", + "DFFlagHttpClientCacheStatsLock": "True", + "DFFlagHttpClientCleanTimedCallbacks": "True", + "DFFlagHttpClientDisabledSkipCache": "True", + "DFFlagHttpDynamicSuccessStatusCode": "True", + "DFFlagHttpErrMessageFix": "True", + "DFFlagHttpErrorNestingFix": "True", + "DFFlagHttpFixCookieParsing": "True", + "DFFlagHttpManualRedirect": "True", + "DFFlagHttpMarkExternalRequests": "True", + "DFFlagHttpMoveCacheStatistics": "True", + "DFFlagHttpNetworkType": "False", + "DFFlagHttpRbxApiEnable17sApis": "True", + "DFFlagHttpRbxApiServiceDontRetryOn429": "True", + "DFFlagHttpRequestClearRes": "True", + "DFFlagHttpServiceBetterUserAgent": "False", + "DFFlagHttpServiceErrorEventLog": "False", + "DFFlagHttpServiceGetPostTls": "True", + "DFFlagHttpServiceResultMetrics": "True", + "DFFlagHttpServiceTlsProbe": "True", + "DFFlagHttpServiceTlsProbeRetry": "False", + "DFFlagHttpServiceUseIpBlacklist": "True", + "DFFlagHttpStatisticsFix": "True", + "DFFlagHttpTcpKeepalive": "True", + "DFFlagHttpTlsVerificationErrorCode": "True", + "DFFlagHttpsTextFilter": "True", + "DFFlagHumanoidBetterFindLadder": "False", + "DFFlagHumanoidBetterFindLadder2": "True", + "DFFlagHumanoidDisplayNameEnabled": "True", + "DFFlagHumanoidInstanceGuard": "True", + "DFFlagHumanoidOnlyStepInWorkspace": "False", + "DFFlagHumanoidWithPGSConstraintsUsePhysicsState": "True", + "DFFlagIPV6RobloxStudioCleanUp1": "True", + "DFFlagInWithTheNew_PlaceFilter": "true;20907", + "DFFlagInfluxAddLocationField": "True", + "DFFlagInfluxBlankFieldFix": "True", + "DFFlagInfluxEnableTypeEventTag": "True", + "DFFlagInfluxReportLastVisitedUrl": "False", + "DFFlagInfluxTagRefactor": "True", + "DFFlagInitialSourceHashConsistencyFix": "True", + "DFFlagInitiateMultipleParallelConnection": "False", + "DFFlagInstanceGuard": "True", + "DFFlagInstanceOrderCheck": "False", + "DFFlagInstanceOrderCheck2": "True", + "DFFlagInventoryFetchUseInventoryApi": "True", + "DFFlagInvokePreloadCallbackFromDMJob": "True", + "DFFlagJoinDataCacheChecksClientOwnedParts": "True", + "DFFlagJointInstanceEnabled": "True", + "DFFlagJsonParsePrimitives": "True", + "DFFlagJumpScaresP2": "True", + "DFFlagLDLBuildProgramTimeReportEnabled": "True", + "DFFlagLDLEliminationPerformanceFixEnabled": "True", + "DFFlagLDLPGSAdditionalStatsEnabled": "True", + "DFFlagLDLPGSCollisionStatsEnabled": "True", + "DFFlagLDLPGSReportCachedMemory": "True", + "DFFlagLDLPGSStatsEnabled": "True", + "DFFlagLDLProgramOpsReportingEnabled": "True", + "DFFlagLDLUseMinimalLocalFillElimination": "True", + "DFFlagLSRemoveFilePathUsingRegEx": "True", + "DFFlagLaterPlayerTeamRemovingSignal": "True", + "DFFlagLetTouchFlush": "True", + "DFFlagLinkedSourceLoadSimplification": "True", + "DFFlagLoadLibraryError": "True", + "DFFlagLoadLibraryTrack": "True", + "DFFlagLoadLibraryWarn": "True", + "DFFlagLocServiceTrackPlayerTextScraping1": "True", + "DFFlagLocService_InvalidateTranslationsOnChildAdded": "True", + "DFFlagLocTableNormalizeLocaleAttemptTranslation": "True", + "DFFlagLocalThrottlingPerDomainMetrics": "True", + "DFFlagLocalThrottlingReportStatistics": "True", + "DFFlagLocalizationLanguageDelimiterFix": "True", + "DFFlagLocalizationServiceGetCountryCodeAPINullptrCheckFix": "True", + "DFFlagLockTheftInstanceCrash": "True", + "DFFlagLockViolationInstanceCrash": "False", + "DFFlagLockViolationScriptCrash": "False", + "DFFlagLogIsAPVAdornment": "False", + "DFFlagLogMemoryStatsOnCompressionError": "True", + "DFFlagLogsChunked": "True", + "DFFlagLuaDebuggerDoNotResetStackForLuaThreadWithError": "True", + "DFFlagLuaFastToFloat": "True", + "DFFlagLuaMathLog2": "True", + "DFFlagLuaNoResetStack": "True", + "DFFlagLuaTableExts": "True", + "DFFlagLuaTableMove": "True", + "DFFlagLuauFailFaster": "True", + "DFFlagLuauFasterTableLibrary": "True", + "DFFlagLuauFasterUnpack": "True", + "DFFlagLuauFixFenv": "True", + "DFFlagMapLocalhostTo127Address": "True", + "DFFlagMechanismInterpolationLikesLocalSpace": "True", + "DFFlagMegaRepOnlyClearWhenNewlyAlive": "True", + "DFFlagMegaReplicatorDisconnectSwapAndPop": "False", + "DFFlagMegaReplicatorOnlyTrackReplicatableProperties": "True", + "DFFlagMegaReplicatorOptimizePendingNewInstanceItemTracking": "True", + "DFFlagMegaReplicatorParallelDisconnect": "True", + "DFFlagMeshLODVertexNormalFix": "True", + "DFFlagMeshLoDV22": "True", + "DFFlagMeshLoDV22_PlaceFilter": "True;5505305045;5438291517;5423642405;4656923017;4657384818;4599786547", + "DFFlagMessagingServiceFixErrorMessage": "True", + "DFFlagMessagingServiceFixUnsubscribeTwiceOnClose": "True", + "DFFlagMessagingServiceForTest": "True", + "DFFlagMessagingServiceSentUtcTime2": "True", + "DFFlagMessagingServiceSuggestedErrorMessage": "True", + "DFFlagMessagingServiceTopicEmptyChecking": "True", + "DFFlagMicroprofileGroupAtLastStack": "True", + "DFFlagMiscIndividualAssetRequestUseAssetdelivery2": "True", + "DFFlagModelMeshComputer": "False", + "DFFlagModelMeshComputer2_PlaceFilter": "True;20907", + "DFFlagModelMeshComputer_PlaceFilter": "True;20907", + "DFFlagModelMeshPlaceholder": "True", + "DFFlagModifySoundAssetsAssetListStringSeparator": "True", + "DFFlagMoreDataModelPatcherTelemetry": "True", + "DFFlagMoreNfPlayer": "True", + "DFFlagMoreRaData": "True", + "DFFlagMoreWeldRestrictions": "False", + "DFFlagMotor6DCframeDeltaAbs": "True", + "DFFlagMotor6DDesiredAngleAbsoluteTolerance": "True", + "DFFlagMotor6DParentNameEnabled": "True", + "DFFlagMotor6DTransformFix": "True", + "DFFlagMoveAssetFetchEndpointToAssetDelivery": "True", + "DFFlagMoveAudioDeviceReporting": "True", + "DFFlagMpsRateLimit": "True", + "DFFlagMpsRateLimitReport": "True", + "DFFlagMpsRateLimitReport_PlaceFilter": "false;370731277", + "DFFlagMpsRateLimitWarn": "True", + "DFFlagNPCUnequipTools": "True", + "DFFlagNaivePacking": "True", + "DFFlagNamesOccludedAsDefault": "True", + "DFFlagNavigationServiceAnalytics": "True", + "DFFlagNetworkAuditEn2": "True", + "DFFlagNetworkPacketCacheScopedMutex": "True", + "DFFlagNetworkParallelPhysicsOut": "True", + "DFFlagNetworkUseSharedStreamingObserver2": "False", + "DFFlagNetworkUseSharedStreamingObserver4": "False", + "DFFlagNetworkUseSharedStreamingObserver6": "True", + "DFFlagNetworkUseSharedStreamingObserver6_PlaceFilter": "True;2096931771;900578327;2096931771;2293712847;4498778926", + "DFFlagNewInstanceItemClientDoNotEchoPlayer": "True", + "DFFlagNewJoinStorage": "True", + "DFFlagNewMemoryLevelCheck": "True", + "DFFlagNewRejoinMessage_PlaceFilter": "True;20907", + "DFFlagNewShowStreamedRegionDiag": "True", + "DFFlagNewSortAndFilter": "True", + "DFFlagNoExceptionForSimulatingOwnCharacterOutsideStreamingRegion2": "True", + "DFFlagNoExceptionsToPartsInStreaming": "True", + "DFFlagNoFaceHeadMeshTagR6": "True", + "DFFlagNoInfiniteLoopOnChatInfoLoadFailure": "True", + "DFFlagNoMoreSinglePhysicsSenderJob": "True", + "DFFlagNoSharedPinocchio": "True", + "DFFlagNoStringDump": "True", + "DFFlagNoYieldCaptured": "True", + "DFFlagNonBlockingAnalyticsExit": "True", + "DFFlagNotifyModelCompleteness3": "True", + "DFFlagOnlyFireHealthChangedWhenHealthChanges": "True", + "DFFlagOnlyOneRightGrip": "True", + "DFFlagOnlyOneRightGrip_PlaceFilter": "True;189707;4837595186;4586741827;3487742603;2747834912;4388574342", + "DFFlagOnlyReadPlayerOsOnServer": "True", + "DFFlagOnlyUpdateSoundChannelsThatHaveValidPlayingChannel": "False", + "DFFlagOnlyUpdateSoundChannelsThatNeedUpdate": "False", + "DFFlagOptimizeTerrainStreamOut": "False", + "DFFlagOptimizeTerrainStreamOut2": "True", + "DFFlagOrder66": "False", + "DFFlagOwnershipDistributionCheckIgnoredJoint": "True", + "DFFlagPGSConstraintThreadSafeUpdatePVEnabled": "True", + "DFFlagPGSSolverSimIslandsEnabled2": "True", + "DFFlagPGSWakeOtherAssemblyForJoints": "True", + "DFFlagPGSWakeOtherIfOneAssemblyIsAwake": "False", + "DFFlagPLTIGetLocaleFallback": "True", + "DFFlagPackageBlockPublishAnalytics": "True", + "DFFlagPackageCleanUp": "True", + "DFFlagPackageFixDragSlow": "True", + "DFFlagPackageFixDragSlow2": "True", + "DFFlagPackageFixJsonParserCrash": "True", + "DFFlagPackageFixSourceAssetIdHash": "True", + "DFFlagPackageMoveModificationToRCCStage3": "True", + "DFFlagPackageMoveModificationToRCCStage4": "True", + "DFFlagPackageMoveModificationToRCCStage5": "True", + "DFFlagPackageRefactorAutoUpdatePermission": "True", + "DFFlagPackageRemoveAssetVersionId": "True", + "DFFlagPackageSecureAssetOnRCC": "True", + "DFFlagParallelAddInstanceWhenParalleStream": "True", + "DFFlagParallelBroadPhaseWithoutTerrain": "True", + "DFFlagParallelCollisionDoNothingFaster": "True", + "DFFlagParallelCollisions2": "True", + "DFFlagParallelCollisionsFaster": "True", + "DFFlagParallelCollisionsUseBetterGImpactCaching": "True", + "DFFlagParallelPhysicsReceive": "True", + "DFFlagParallelSendTouches": "False", + "DFFlagParallelSendTouches2": "True", + "DFFlagParallelSendTouches2_PlaceFilter": "True;4599786547", + "DFFlagParameterValidationForLoadSoundForChannel": "True", + "DFFlagParameterizeHandlerNamedParameterEnabled": "True", + "DFFlagParameterizeHandlerPureUsernameFix": "True", + "DFFlagParameterizeInThread": "True", + "DFFlagPartInstanceCofMPropertyExposed": "True", + "DFFlagPartMassEnabled": "True", + "DFFlagPerformAssetDecryptionOnAnAsyncTask": "True", + "DFFlagPhysicsPacketCountUnderLimit": "False", + "DFFlagPhysicsSenderByteBudget": "False", + "DFFlagPhysicsSenderByteBudget2": "True", + "DFFlagPhysicsSenderNoEmptyPackets": "True", + "DFFlagPhysicsServiceCorrectPlayerCountForTouch_PlaceFilter": "True;4599786547;467050215", + "DFFlagPlayFabEmitMarketplaceEvents": "False", + "DFFlagPlayFabEmitMarketplaceEvents2": "True", + "DFFlagPlayFabEmitTeleportEvents": "True", + "DFFlagPlayFabEventsV2": "True", + "DFFlagPlayFabPlayerLoginLogoutAsServerEvents": "False", + "DFFlagPlayHereFix": "True", + "DFFlagPlayerConfigurerDoCDNProbe2": "True", + "DFFlagPlayerPolicyGetApiUrlForRequestPolicyInfoFix": "True", + "DFFlagPlayerPolicyGetDMFromService": "True", + "DFFlagPlayerPolicyHttpRequestRetryEnabled": "True", + "DFFlagPlayerPolicyNotSwallowingError": "True", + "DFFlagPlayerPolicyReportHttpFailureOnEveryAttempt": "True", + "DFFlagPlayerPolicyReportHttpFailureToInfluxOnEveryAttempt": "True", + "DFFlagPlayerPolicyUseClientIpAddressFromSessionId": "True", + "DFFlagPolicyServiceLuaApiAdaptiveToHttpResponse": "True", + "DFFlagPolicyServicePlayerCallbackQueuesEnabled": "True", + "DFFlagPostPremiumUpsells": "True", + "DFFlagPreloadAsyncCallbackFunction": "True", + "DFFlagPremiumGameIdFix": "True", + "DFFlagPremiumUpsellEnabledV2": "True", + "DFFlagPremiumUpsellRecheckPremium": "True", + "DFFlagPremiumUpsellUserId": "True", + "DFFlagPreventDeepTuples": "True", + "DFFlagPreventLuaFunctionMigration": "True", + "DFFlagPreventMeshLODV2WhenFlagOff": "True", + "DFFlagPreventReturnOfElevatedPhysicsFPS": "True", + "DFFlagProcessFullSig42": "True", + "DFFlagProfileAvoidRecordingEmptyFrames": "False", + "DFFlagPubKeyExchange": "True", + "DFFlagPubKeyExchange22": "False", + "DFFlagPubKeyExchange32": "False", + "DFFlagPubKeyExchange33": "True", + "DFFlagPubKeyMtu16": "True", + "DFFlagPugiCrashOnUnhandledXml": "True", + "DFFlagRCC29411p3": "True", + "DFFlagRCCMonitoringCustomTimeouts": "True", + "DFFlagRCCMonitoringInitializeCpuVariables": "True", + "DFFlagRCCTeamCreateSaveOnZeroPlayers": "True", + "DFFlagRaiseCorrectException": "True", + "DFFlagRakNetDetectNetUnreachable": "True", + "DFFlagRakNetUseSelect": "True", + "DFFlagRaknetBandwidthAddDataCenterId": "False", + "DFFlagRaknetBandwidthAddPhyPacketsLossPercent": "True", + "DFFlagRaknetBandwidthMetrics": "False", + "DFFlagRaknetBandwidthMetricsAddServerIp": "False", + "DFFlagRaknetBandwidthMetricsReportValidPing": "False", + "DFFlagRaknetBandwidthMetricsV2": "True", + "DFFlagRbxFormatMultiByteSizeFix": "True", + "DFFlagRccAbandonOnSecondDm": "True", + "DFFlagRccDoNotSetZeroPlaceIdFilter": "True", + "DFFlagRccPassThroughMatchmakingMetadata": "True", + "DFFlagRccRemoveMaxGameInstances": "True", + "DFFlagRccSetDataCenterFiltersEarly": "True", + "DFFlagRccUse64BitAppearanceId": "True", + "DFFlagRccUseCmdLineLimits": "True", + "DFFlagRccUseHttpRequestForPlaceFetch": "True", + "DFFlagRebuildR6AccoutrementsWhenEnteringWorkspace": "True", + "DFFlagRecursionGuard": "True", + "DFFlagRedirectHasBadgeToAsyncMethod": "True", + "DFFlagRedirectLocalAssetId": "True", + "DFFlagReduceSendDataCriticalSection": "True", + "DFFlagReduceTrussSearchDistance2": "False", + "DFFlagRefactoredIkSolve": "True", + "DFFlagReflectionLoggingEnabledClientWin32_3": "False", + "DFFlagReflectionLoggingEnabledGlobal": "False", + "DFFlagReflectionLoggingpPlacelauncherInitialization": "False", + "DFFlagRejectEarlyHumanoidChanges": "False", + "DFFlagRejectEarlyHumanoidChanges2": "True", + "DFFlagRejectInvalidToolParentChanges2": "True", + "DFFlagRejectRebelReceipt": "True", + "DFFlagReleaseOriginalSizeOnAccessoryRemoved": "True", + "DFFlagRemoveFMODProfilingOption": "True", + "DFFlagRemoveOldNFWL": "True", + "DFFlagRemovePGSSolverActivatedAnalytics": "True", + "DFFlagRemovePackageSymbolicLinkKId": "True", + "DFFlagRemovePrepareInstancesLocks": "True", + "DFFlagRemoveRedundantQueryParams": "True", + "DFFlagRemoveSharedStringMD5": "True", + "DFFlagRemoveUsesOfIsAutoJoint": "True", + "DFFlagRenameDisplayNameToPlatformName": "True", + "DFFlagRenderGatherMsFrame2": "True", + "DFFlagReplicateAllowLuauOnly": "True", + "DFFlagReplicatePlaceVersion": "True", + "DFFlagReplicatorCollectItemCountOnSend": "True", + "DFFlagReplicatorJDIOnlyUpdateCacheWhenParentIsUpToDate": "True", + "DFFlagReplicatorKickReadEventStringDataAndVariantLimit": "False", + "DFFlagReplicatorKickWriteEventStringDataAndVariantLimit": "True", + "DFFlagReplicatorLabelItemTypesProcessed": "True", + "DFFlagReplicatorOnlyDODPlayerOnlyOnReplicatorDisconnect": "True", + "DFFlagReplicatorOptimizeDescendantOfWorkspace": "True", + "DFFlagReplicatorProcessPacketMicroprofilerCleanup": "True", + "DFFlagReplicatorStreamingReportAncestorsSentWithoutAllDescendants": "False", + "DFFlagReplicatorStreamingReportGCStepPercentage": "True", + "DFFlagReplicatorTrackLastPacketError": "True", + "DFFlagReplicatorUseSharedSchema": "True", + "DFFlagReportBaseUrlForHttpAnalytics": "True", + "DFFlagReportCSGMeshVersionOnce": "True", + "DFFlagReportCharacterLoadTimeMetrics2": "True", + "DFFlagReportClientMemoryCat": "True", + "DFFlagReportCoalescingStats": "True", + "DFFlagReportCollisionDetectionTime": "True", + "DFFlagReportCounterToGameInstancesApi": "True", + "DFFlagReportDataStoreErrorCases": "True", + "DFFlagReportDeveloperEventIngestHttpError": "True", + "DFFlagReportGALightingTechnology": "True", + "DFFlagReportGPUMetrics": "True", + "DFFlagReportInfluxLightingTechnology": "True", + "DFFlagReportInfluxRenderMsFrameMetrics2": "False", + "DFFlagReportInterpolationPerformance": "True", + "DFFlagReportInterpolationPerformanceClient": "True", + "DFFlagReportJoinTimeImpactStats": "True", + "DFFlagReportLightingTechnology": "True", + "DFFlagReportLuaKicks": "True", + "DFFlagReportMoreParsingAnomalies": "True", + "DFFlagReportMp3ParsingAnomalies": "True", + "DFFlagReportOggParsingAnomalies": "True", + "DFFlagReportOutlines": "True", + "DFFlagReportParameterContent": "True", + "DFFlagReportParsingAnomalies": "True", + "DFFlagReportPhysicsFPSStatsPlaceSpecific_PlaceFilter": "True;606849621;171391948;189707", + "DFFlagReportPhysicsReplicationRatio": "True", + "DFFlagReportPhysicsSolverStatsPlaceSpecific_PlaceFilter": "True;606849621;171391948;189707", + "DFFlagReportPhysicsStatsToHUD": "True", + "DFFlagReportReplicationVariantLimitHit": "True", + "DFFlagReportReplicatorJoinDataItemStatsToInflux": "True", + "DFFlagReportReplicatorStatsToInflux": "True", + "DFFlagReportSimulationToFBLatency": "True", + "DFFlagReportSolverUsageStats": "True", + "DFFlagReportStatsCurrentLessThanMin2": "True", + "DFFlagReportStatsPauseDuration": "True", + "DFFlagReportTriangleMeshPartMigrationData": "True", + "DFFlagRequireModulesTypeCheckAnalyticsEnabled": "True", + "DFFlagRequireTicketSig42": "True", + "DFFlagRobloxEventStreamConnected": "True", + "DFFlagRomarkAdjustCharacterReportThrottle": "True", + "DFFlagRoundToScreenScaleUseFloor": "True", + "DFFlagSDISkipJDINetworkStream": "True", + "DFFlagSIMForceCSGv2Once": "True", + "DFFlagSIMTrackCSGSettingChange": "True", + "DFFlagSanitizeCofmVariablesNanInf": "True", + "DFFlagScriptContextImproveValidateThreadAccess": "True", + "DFFlagScriptContextTraceLocalTime": "True", + "DFFlagScrollWhenInsideFocusedTextBox": "True", + "DFFlagSecretAgentMan": "True", + "DFFlagSendClientNewJoinData": "True", + "DFFlagSendPackageRequestFailureMessageOnlyOneTime": "True", + "DFFlagSendTypeAsStringDuringCacheValidation": "True", + "DFFlagServerConfigurerDoCDNProbe": "True", + "DFFlagServerCopiesPlayerGui3": "True", + "DFFlagServerCopiesPlayerGui3_PlaceFilter": "false;142823291", + "DFFlagServerDisableLuaGetPort": "True", + "DFFlagServerPlaceIdKnownAssetEndpoints": "False", + "DFFlagServerProfileSeparateThread": "True", + "DFFlagServerRakNetStartupFailureAnalytics": "True", + "DFFlagServerReportPhysicsThrottleWithDatacenterId": "True", + "DFFlagSetNumberEmotesLoaded": "True", + "DFFlagSetupSignalRFix": "True", + "DFFlagSetupSignalRMacFix": "True", + "DFFlagShowGamePassItemTypeWhenPurchasebyAssetId": "True", + "DFFlagShowLevelOfDetailMesh": "True", + "DFFlagShowLevelOfDetailMesh_PlaceFilter": "True;5505305045;5438291517;5423642405;4656923017;4657384818;4599786547", + "DFFlagSignalRControlExcStringFix": "True", + "DFFlagSignalRCrashFix": "True", + "DFFlagSignalRStartFix": "True", + "DFFlagSignalrRbxHttp": "True", + "DFFlagSimDecisionBaseOnExtents2": "True", + "DFFlagSimDontResetContactsOnNotifyAssemblyPrimitiveMoved": "True", + "DFFlagSimDrawNoCollisionConstraintToolTip": "True", + "DFFlagSimEnableTouchEventManager": "True", + "DFFlagSimFixConstraintSelectionBoxCrash": "True", + "DFFlagSimLDLComponentMemoryUseComputationFix": "True", + "DFFlagSimLDLPGSStatsBufferBreakdownReporting": "True", + "DFFlagSimLDLProgramFlopCountStats": "True", + "DFFlagSimLDLProgramForceUnroll": "True", + "DFFlagSimLDLProgramNewStatsEnabled": "False", + "DFFlagSimLDLProgramNewStatsEnabled2": "True", + "DFFlagSimLDLProgramWorkspaceAndRSIStats": "True", + "DFFlagSimSolverBufferPurgeEnabled": "True", + "DFFlagSimSolverLargeWorkloadReporting": "True", + "DFFlagSimUseNewGetLDLComponents": "True", + "DFFlagSimplifyRakNetConnectionHandshake": "False", + "DFFlagSkipContainerCheckOnJoin": "True", + "DFFlagSkipLQNeonWhenOff": "True", + "DFFlagSkipLowRes": "True", + "DFFlagSkipLowRes_PlaceFilter": "True;3027055174", + "DFFlagSkipSDILogName": "True", + "DFFlagSocialServiceDevPromptGameInvites": "True", + "DFFlagSpawningDontIgnoreCanCollide": "True", + "DFFlagSpecialCaseSupportRbxCdnInAppDataModel2": "True", + "DFFlagSpecificGravityDummyFunctionGA": "True", + "DFFlagSpecificGravityDummyReturnsZero": "False", + "DFFlagStopPlayersTraverseForPhysics": "True", + "DFFlagStopRestreamInstancesWithoutParent": "True", + "DFFlagStopSoundTaskOnChannelTreeNullified": "True", + "DFFlagStopStudioSingletons": "True", + "DFFlagStreamQuotaRoundUp": "True", + "DFFlagStreamingAddAncestors2": "False", + "DFFlagStreamingAddAncestors2_PlaceFilter": "True;4923553838;4923599624", + "DFFlagStreamingAddAncestors3": "True", + "DFFlagStreamingCheckParentBeforeAddingNewInstanceItem": "True", + "DFFlagStreamingDebuggerMiniMap": "True", + "DFFlagStreamingDontGCLocal": "True", + "DFFlagStreamingExtentsForceUpdateOnlyWhenAlive": "True", + "DFFlagStreamingFasterTargetRadiusIncreaseAfterGC": "True", + "DFFlagStreamingGCJobFixCharacterCheck": "True", + "DFFlagStreamingGCSkipSubtractDistance": "True", + "DFFlagStreamingGameplayPausedAPI": "True", + "DFFlagStreamingGameplayPausedAPIStudioProperties": "True", + "DFFlagStreamingMaxGCSkipsMemoryCheck": "True", + "DFFlagStreamingNoResendImmediately": "True", + "DFFlagStreamingPrefetch": "True", + "DFFlagStreamingPrefetchInterface": "True", + "DFFlagStreamingScaleBufByQuota": "True", + "DFFlagStreamingSetPlayerPausedFirst": "True", + "DFFlagStreamingUpdateWorldExtentsWhenPlayerMoves": "True", + "DFFlagStrictMp3Parsing": "True", + "DFFlagStrictOggParsing": "True", + "DFFlagStrictOggParsingFix": "True", + "DFFlagStrictOggParsingFix2": "True", + "DFFlagStrictOggParsingSeekFix": "True", + "DFFlagStrictParsingFix": "True", + "DFFlagStudioAddIsPackageAtTheEndOfRequestURL": "True", + "DFFlagStudioCameraFocusPartCheckForChange": "True", + "DFFlagStudioDelayModificationCheck": "True", + "DFFlagStudioDelayPackageAutoUpdate": "True", + "DFFlagStudioFixJoinSurfacesDisabled": "True", + "DFFlagStudioHttpServiceProtectLegacyPathsForPlugins": "False", + "DFFlagStudioLSPSpacesReplacing": "True", + "DFFlagStudioLSP_V2": "True", + "DFFlagStudioLintingAlwaysOnTimer": "True", + "DFFlagStudioRefactorSaveToRoblox": "True", + "DFFlagStudioRemoveDebuggerLegacyLock2": "False", + "DFFlagStudioRemoveDebuggerLegacyLock3": "False", + "DFFlagStudioRemoveDebuggerLegacyLock4": "True", + "DFFlagStudioReportPackageRequestWebCopyError": "True", + "DFFlagStudioSendOnlyOneShutdownEvent": "True", + "DFFlagStudioSendsMorePackageAnalytics": "True", + "DFFlagStudioSendsPackageDownloadTime": "True", + "DFFlagStudioSendsPackageSize": "True", + "DFFlagStudioShowMixedTablesInWatchedVariables": "True", + "DFFlagStudioShowScriptInExplorerOpensExplorer": "True", + "DFFlagStudioShowToastNotificationInMainThreadAsync": "True", + "DFFlagStudioStopDeepLuaTableStackOverflow": "True", + "DFFlagStudioSwitchQNetworkToHttp": "True", + "DFFlagStudioThrowExceptionForCyclicTables": "True", + "DFFlagSupportEncryptedAssets": "False", + "DFFlagSupportEncryptedAssets_PlaceFilter": "True;4587054145;4521759066;4589144917;1921623329;4710199611;4739075775;4786133739;4749336296;4819751684;4898701067;4898177642;4911320968;4927429832;1856333096;5301306769;5312976759;5312984096;5312987616;5312990840;5509581543;5505132318;5271804927;5535247402;5180703112;5036207802", + "DFFlagSupportIPv6MappedIPv4ForFloodCheck": "True", + "DFFlagSupportJoinDataItemV2i": "False", + "DFFlagSupportJoinDataItemV2ii": "False", + "DFFlagSupportJoinDataItemV2iv": "True", + "DFFlagSupportJoinDataItemV2iv_PlaceFilter": "False;920587237;4623386862;286090429;2414851778;185655149;142823291;537413528;292439477;2686500207", + "DFFlagSupportMeshLOD": "True", + "DFFlagSupportMeshLOD_PlaceFilter": "True;2900823006", + "DFFlagSupportMeshV4Read": "True", + "DFFlagSupportMeshV4Read_PlaceFilter": "True;764:762;4599786547;5326950832", + "DFFlagSupportSkinnedMesh2_PlaceFilter": "True:764;762;4599786547;5326950832;5100919959;5064251723", + "DFFlagSupportSkinnedMesh3_PlaceFilter": "True:764;762;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5751328107;5947859215", + "DFFlagSupportSkinnedMesh_PlaceFilter": "True:764;762;4599786547;5326950832;5100919959;5064251723", + "DFFlagSupportSwitchingDefaultAudioDevice": "True", + "DFFlagSupportYouTubeInAppDataModelIfRbxCdnAllowed": "True", + "DFFlagTaskQueueAlwaysEpilogue": "True", + "DFFlagTaskQueueLinger": "True", + "DFFlagTaskSchedulerEnsureCOMIsInitialized": "True", + "DFFlagTaskSchedulerEraseDone": "True", + "DFFlagTattletaleUseNewWordListFeatures": "False", + "DFFlagTattletaleUseStrstr": "True", + "DFFlagTeamChildOrderProperty": "True", + "DFFlagTeamCreatePlayerConnectionsToEventIngest": "True", + "DFFlagTeamCreatePublishToEventIngest": "True", + "DFFlagTeamCreateSaveAnalyticsServiceApiKey": "True", + "DFFlagTeleportAdditionalMetrics": "True", + "DFFlagTeleportPartyAsyncMetrics": "True", + "DFFlagTeleportPrivateServerMetrics": "True", + "DFFlagTerrainPhysicsDataDeferredSquared": "True", + "DFFlagTerrainReplicationSendMasks": "True", + "DFFlagTerrainReplicationUseLargerChunks": "True", + "DFFlagTestFullSig42": "True", + "DFFlagTextBoxesNeverSinkMouseEvents": "True", + "DFFlagTextScraperEnableCaptureDateTime": "True", + "DFFlagTextScraperParameterizeV2": "True", + "DFFlagTextScraperReportOSPlatform": "True", + "DFFlagTextScraperReportSessionId": "True", + "DFFlagTextScraperStopReportPureParameterFix": "True", + "DFFlagTheseAreSomeOfMyBestAttributes": "True", + "DFFlagThrottleDebuggerMetrics": "True", + "DFFlagThrottleGetUserThumbnailAsync": "True", + "DFFlagThrottlingBadgesRollOut": "True", + "DFFlagThrottlingEnableRandomOffset": "True", + "DFFlagThrottlingGamePersistenceRollOut": "True", + "DFFlagThrottlingGlobalRollOut": "True", + "DFFlagThrottlingPointsRollOut": "True", + "DFFlagThrowErrorWhenRequestedURLFailed": "True", + "DFFlagThumbnailFixSrgb": "True", + "DFFlagThumbnailSupportFocusOnPart": "True", + "DFFlagTopGamesPhysicsReportingEnabled2": "True", + "DFFlagTouchQueueMetrics": "True", + "DFFlagTrackAudioDriversPerSystem": "False", + "DFFlagTrackRespectFilteringEnabledAndPlayOnRemoveUsage": "False", + "DFFlagTrackRunUpdateCycleTime": "False", + "DFFlagTrackStencilBufferSupport": "False", + "DFFlagTranslatorApiCloudAssetLoadingFix": "True", + "DFFlagTrustVersionedEncryptionFormat": "True", + "DFFlagTryGCifNeedGC": "True", + "DFFlagTweecall": "True", + "DFFlagTweenServiceOnStepped": "False", + "DFFlagUniverseIdFix": "True", + "DFFlagUpdateCofmOnMasslessRootChange": "True", + "DFFlagUpdateCofmUseHeapStack2": "True", + "DFFlagUpdateHipHeightClamping": "True", + "DFFlagUpdateListenerSidechainsOnSignalFlowUpdated": "True", + "DFFlagUpdateQuotaAfterMemoryUpdate": "True", + "DFFlagUpdateStreamingInfoWhenGC": "True", + "DFFlagUseAPIAssetsVersionsV2": "True", + "DFFlagUseAssemblyExternalEdgeListCachedForWake": "True", + "DFFlagUseBandwidthManagerForPhysicsSend": "False", + "DFFlagUseBandwidthManagerForPhysicsSend2": "True", + "DFFlagUseBaseUrlNotHardcodedUrl": "True", + "DFFlagUseBetterNoFragmentSet": "True", + "DFFlagUseCharArrayForKeyMaterial": "True", + "DFFlagUseCommonQueueForInstanceUpdates": "False", + "DFFlagUseCorrectIncompatibleVersionMessage": "True", + "DFFlagUseDefaltShirtAndPants2": "True", + "DFFlagUseDistanceThinning": "True", + "DFFlagUseLockFreeVoronoiSimplexContainer": "True", + "DFFlagUseLowResTerrain": "True", + "DFFlagUseLowResTerrain_PlaceFilter": "True;3027055174", + "DFFlagUseMegaReplicatorAssemblyList": "True", + "DFFlagUseMomentumThinning": "True", + "DFFlagUseMomentumThinning_PlaceFilter": "False;1694497805;1225846869", + "DFFlagUseNewPemKeys": "True", + "DFFlagUseNewPostAuthenticationRequest": "True", + "DFFlagUseNewQueryParamUtility": "True", + "DFFlagUseNewTelegrafMethod": "True", + "DFFlagUseNewTelegrafPriorityTag": "True", + "DFFlagUseNewTerrainProtocol": "True", + "DFFlagUseNewTerrainProtocol_PlaceFilter": "True;3027055174", + "DFFlagUseNoneLuaBuildRigFromAttachments": "True", + "DFFlagUsePemKeyFormat": "True", + "DFFlagUsePositionPropWhenKnown": "True", + "DFFlagUsePositionPropWhenKnown_PlaceFilter": "True;3027055174", + "DFFlagUsePugiForAbuseReport": "True", + "DFFlagUsePugiXmlForPlaces": "True", + "DFFlagUsePugiXmlForSettings": "False", + "DFFlagUseRaisePropertyChangeForSoundPlaying": "True", + "DFFlagUseRaisePropertyChangeForSoundTimePosition": "True", + "DFFlagUseRefactoredHitTest": "False", + "DFFlagUseRefactoredHitTest2": "True", + "DFFlagUseRefactoredRaycast": "False", + "DFFlagUseRefactoredRaycast3": "True", + "DFFlagUseRoundRobin": "False", + "DFFlagUseSelectBeforeRecvFrom": "True", + "DFFlagUseServerAndSessionIdInflux": "True", + "DFFlagUseSharedStringForScriptReplication2": "False", + "DFFlagUseSharedStringForScriptReplication3": "False", + "DFFlagUseSharedStringForScriptReplication4": "True", + "DFFlagUseSort": "False", + "DFFlagUseTaskSchedulerThreadLimit": "True", + "DFFlagUseTelegrafHTTPTransport": "True", + "DFFlagUseTelegrafHTTPTransport_PlaceFilter": "True;4599786547;5064251723", + "DFFlagUseThresholdForMotor6DWakes": "False", + "DFFlagUseThresholdForMotor6DWakes2": "False", + "DFFlagUseThresholdForMotor6DWakes2_PlaceFilter": "False;679715583", + "DFFlagUseTimeoutMessage": "True", + "DFFlagUseTouchSenderByteBudget": "False", + "DFFlagUseTouchSenderByteBudget2": "True", + "DFFlagUseUniqueProfilePorts": "True", + "DFFlagUseUniverseConfigurationPermissionsFlags": "True", + "DFFlagUserAccessUserSettings": "True", + "DFFlagUserAdjustHumanoidRootPartToHipPosition": "True", + "DFFlagUserAllowDisableCustomAnims2": "True", + "DFFlagUserChatPrivacySetting": "True", + "DFFlagUserFixCharacterSoundIssues": "True", + "DFFlagUserHttpAPIEnabled": "True", + "DFFlagUserInputServiceProcessOnRender": "True", + "DFFlagUserPlayCharacterLoopSoundWhenFE": "True", + "DFFlagUserPlayCharacterSoundWhenFE": "True", + "DFFlagUserPreloadAnimations": "True", + "DFFlagUserServerFollowers": "True", + "DFFlagUserUseLuaVehicleController": "True", + "DFFlagUserUseSoundDispatcher": "True", + "DFFlagUsingHeadsIsBadForOwningThings": "True", + "DFFlagUsingHeadsIsBadForPhysicsReplication": "True", + "DFFlagValidateSoundChannelInTryToLoadSound": "True", + "DFFlagVectorMinMax": "True", + "DFFlagVerifyWorldInTryFloor": "True", + "DFFlagVersionControlServiceBatchCommit": "True", + "DFFlagVersionControlServiceBroadcastOnEditorsChange": "False", + "DFFlagVersionControlServiceBroadcastOnEditorsChangeExplicit": "True", + "DFFlagVersionControlServiceCommitTransaction": "True", + "DFFlagVersionHistoryCommitTiming": "True", + "DFFlagVersionedIdSync": "True", + "DFFlagVideoAllowNonNativeResolutions": "True", + "DFFlagVideoAnotherWebmParsingFix": "True", + "DFFlagVideoBetterCleanupOnOpenFailure": "True", + "DFFlagVideoBetterHandlingOfUnsupportedCodecs": "True", + "DFFlagVideoCacheTimePosition": "True", + "DFFlagVideoCircularBufferFix": "True", + "DFFlagVideoCleanUpAudioDeviceStartStop": "True", + "DFFlagVideoCleanUpTimeHandling": "True", + "DFFlagVideoDoNotResetTimePositionOnStop": "True", + "DFFlagVideoEnableDeviceTuning": "True", + "DFFlagVideoEnableGetInfo_PlaceFilter": "True;2;1;4587054145;4521759066;4589144917;1921623329;4710199611;4786133739", + "DFFlagVideoFixAbsurdlySlowDataCopy": "True", + "DFFlagVideoFixAudioOnlyFiles": "True", + "DFFlagVideoFixDeviceTuningForAudioOnlyFiles": "True", + "DFFlagVideoFixDeviceTuningForAudioOnlyFiles_PlaceFilter": "True;4898980405", + "DFFlagVideoFixFrameSizing": "True", + "DFFlagVideoFixGameResume": "True", + "DFFlagVideoFixPossibleBufferingHang": "True", + "DFFlagVideoFixSeekingBeyondTheEnd": "True", + "DFFlagVideoFixServerClientRemoteEvents": "True", + "DFFlagVideoFixServerTimekeeping": "True", + "DFFlagVideoFixTextureInitialization": "True", + "DFFlagVideoFixTextureLeak": "True", + "DFFlagVideoFixWebmParsing": "True", + "DFFlagVideoLimitNumberOfVideosPlaying": "True", + "DFFlagVideoLimitResolution": "True", + "DFFlagVideoLoadAssetsInStudioEdit": "True", + "DFFlagVideoModifyMutexes": "True", + "DFFlagVideoShowInitialFrameAsTexture2": "True", + "DFFlagVideoStreamAlternateStopAudio": "True", + "DFFlagVideoSupportNonrealtimeTesting": "True", + "DFFlagViewportFrameLight": "True", + "DFFlagVisualEngineTrackHeadless": "True", + "DFFlagVoiceChatForceWindowsDefaultSpeaker": "True", + "DFFlagVoiceChatNewJoin": "True", + "DFFlagVoiceChat_PlaceFilter": "True;5306826776;5465723678", + "DFFlagWaitForChildNoInfiniteTimerTask": "True", + "DFFlagWaitForChildThrowNan": "True", + "DFFlagWakePartsOnGravityChange": "True", + "DFFlagWarnTypeCheckOnRequire": "False", + "DFFlagWebParserAddIsNumberCatchall": "True", + "DFFlagWebSocket": "True", + "DFFlagWebSocketHandleRecvError": "True", + "DFFlagWebSocketHandleUpgradeError": "True", + "DFFlagWebSocketSetCookie": "True", + "DFFlagWhitelistStreamingPauseState": "True", + "DFFlagWhitelistUserInputEvents": "True", + "DFFlagWorkspaceSkinnedMeshEnabledDefault_PlaceFilter": "True;4599786547;5326950832", + "DFFlagWorkspaceSkinnedMeshForcedEnabled_PlaceFilter": "True;4599786547;5326950832", + "DFFlagWorldModelCatchInsertRawErrors2": "True", + "DFFlagXboxDisableTextChat": "True", + "DFFlagYouAreNotSupposedToBeHere": "True", + "DFIntAltTelegrafHundredthsPercent": "0", + "DFIntAnalyticsCDNProbeInfluxPermyriad": "100", + "DFIntAnalyticsForXBoxCrash_JoinInfluxHundredthsPercentage": "1", + "DFIntAnalyticsMaxSendWaitTimeMs": "1500", + "DFIntAnalyticsNS1CDNProbeChancePercent": "5", + "DFIntAnalyticsServiceEventIngestSwitchPercentage": "0", + "DFIntAnalyticsServiceEventIngestSwitchPercentage_PlaceFilter": "100;5064251723;3182856628", + "DFIntAndroidInfluxHundredthsPercentage": "0", + "DFIntApiRateLimit": "200", + "DFIntAssetTypeCheckPermyriad": "1000", + "DFIntBatchApiAssetArchivingErrorDateSec": "1565895600", + "DFIntBatchThumbnailMaxRetries": "5", + "DFIntBgUpdateRedirectsHttpErrInfluxHundredthsPercentage": "100", + "DFIntBroadPhaseIslandBufferZoneMinPartLimit": "0", + "DFIntBroadPhaseIslandBufferZoneMinPartLimit_PlaceFilter": "5;1105449649", + "DFIntBulletContactBreakOrthogonalThresholdPercent": "200", + "DFIntBulletContactBreakThresholdPercent": "200", + "DFIntCSGLevelOfDetailSwitchingDistance": "250", + "DFIntCSGLevelOfDetailSwitchingDistanceL12": "500", + "DFIntCSGLevelOfDetailSwitchingDistanceL12_PlaceFilter": "500;2434889832;2568147212", + "DFIntCSGLevelOfDetailSwitchingDistance_PlaceFilter": "250;2434889832;2568147212", + "DFIntCSGv2LodMinTriangleCount": "100", + "DFIntCSGv2LodsToGenerate": "3", + "DFIntCSGv2OperationInfluxHundredthsPercentage": "100", + "DFIntCanHideGuiGroupId": "4358041", + "DFIntChatCap": "100", + "DFIntChatTime": "10", + "DFIntClientJoinProcessPositiveSamplesThousandths": "10", + "DFIntClientJoinProcessPositiveSamplesThousandths_PlaceFilter": "1000;3027055174;3917136599;2291717546", + "DFIntClientNetworkInfluxHundredthsPercentage": "500", + "DFIntClientReportLuaConnectionSignalsInfluxHundrethsPercentage": "10000", + "DFIntClientReportLuaTicketInfluxHundrethsPercentage": "10000", + "DFIntClientSendEventStringDataLimitBytes": "100000000", + "DFIntClientSendEventVariantCountLimit": "5000000", + "DFIntContentProviderAssetdeliveryRolloutPercentage": "100", + "DFIntCrashUploadHttpResponseDefaultTimeoutMillis": "80000", + "DFIntCrashUploadToBacktracePercentage": "10", + "DFIntDataModelPatcherErrorInfluxHundredthsPercentage": "10000", + "DFIntDataModelPatcherErrorInfluxPriorityHundredthsPercentage": "10000", + "DFIntDataModelPatcherFunnelInfluxHundredthsPercentage": "5000", + "DFIntDataModelPatcherFunnelInfluxPriorityHundredthsPercentage": "10000", + "DFIntDataStoreApiRefreshRolloutPercentage_PlaceFilter": "100;20907", + "DFIntDataStoreCachedKeysMemSize": "16777216", + "DFIntDataStoreCachedKeysMemSize_PlaceFilter": "16777216;2910792538;69184822", + "DFIntDataStoreInfluxReportNonParsableDataPerMyriad": "10000", + "DFIntDataStoreMaxValueSize": "4194304", + "DFIntDataStoreMaxValueSize_PlaceFilter": "4194304;2910792538;69184822", + "DFIntDebugDefaultTargetWorldStepsPerFrame": "0", + "DFIntDebugDefaultTargetWorldStepsPerFrame_PlaceFilter": "1;4306999063", + "DFIntDebugRakPeerReceiveAfterSeconds": "10", + "DFIntDefaultBalanceD": "100", + "DFIntDefaultBalanceP": "7000", + "DFIntDesiredStreamJobTimeMS": "24", + "DFIntDesiredStreamJobTimeMSPerThread": "6", + "DFIntDetailedBandwidthStatsInfluxHundrethsPercentage": "10000", + "DFIntDetailedBandwidthStatsPlayerLotteryHundrethsPercentage_PlaceFilter": "10000;4599786547", + "DFIntDeveloperEventIngestMaxEventsPerBatch": "5000", + "DFIntDraggerMaxMovePercent": "60", + "DFIntDynamicReloaderFailureInfluxHundrethsPercentage": "10000", + "DFIntDynamicReloaderFileFailureInfluxHundrethsPercentage": "10000", + "DFIntESGamePerfMonitorDelayBeforeFirstReportInSeconds": "60", + "DFIntESGamePerfMonitorHundredthsPercentage": "200", + "DFIntESGamePerfMonitorReportTimerInSeconds": "30", + "DFIntElevatedPhysicsFPSReportThresholdTenths": "585", + "DFIntEphemeralCounterInfluxReportingPriorityHundredthsPercent": "10000", + "DFIntEphemeralCounterInfluxReportingThrottleHundredthsPercent": "10000", + "DFIntEphemeralStatsInfluxReportingPriorityHundredthsPercent": "10000", + "DFIntEphemeralStatsInfluxReportingThrottleHundredthsPercent": "5", + "DFIntExpireMarketPlaceServiceCacheSeconds": "60", + "DFIntFriendsListCacheOptimizationRolloutPercentage": "0", + "DFIntFriendshipEndpointMigrationRolloutPercentage": "0", + "DFIntFriendshipEndpointMigrationRolloutPercentageV2": "100", + "DFIntGamePassOwnershipCacheSeconds": "30", + "DFIntGetFriendsOnlineEndpointMigrationRolloutPercentage": "100", + "DFIntGetPlayFabTitleFromServiceRolloutPercentage": "100", + "DFIntGetUserThumbnailAsyncThrottleTime": "3", + "DFIntGroupServiceRolesApiV2": "0", + "DFIntHttpCacheCleanMaxFilesToKeep": "7500", + "DFIntHttpCacheCleanMinFilesRequired": "10000", + "DFIntHttpCacheStatsReportingIntervalSeconds": "180", + "DFIntHttpClientExternalTlsPeerVerificationFailHundrethsPercentage": "10000", + "DFIntHttpConnMaxAge": "600000", + "DFIntHttpConnectDefaultTimeoutMillis": "60000", + "DFIntHttpCurlConnectionCacheSize": "-1", + "DFIntHttpInfluxHundredthsPercentage": "2", + "DFIntHttpParallelLimit_RequestContentProvider": "0", + "DFIntHttpRbxApiMaxRetryBudgetPerMinute": "10", + "DFIntHttpRbxApiMaxRetryCount": "3", + "DFIntHttpSendStatsEveryXSeconds": "300", + "DFIntHttpServiceGetPostTlsPercent": "100", + "DFIntHttpServiceTlsProbeInfluxHundrethsPercentage": "1000", + "DFIntHttpServiceTlsProbePercent": "100", + "DFIntHttpServiceTransportFailureInfluxHundrethsPercentage": "10000", + "DFIntHttpsTextFilterPercentRollout": "100", + "DFIntICMPPingHundrethsPercentage": "0", + "DFIntInfluxOverUDPThreshold": "500", + "DFIntInfluxOverUDPThreshold_PlaceFilter": "1500;4599786547;5064251723", + "DFIntInfluxReportLocalFilterStringPermyriad": "500", + "DFIntInfluxReportRCCStatsHundredthsPercentage": "5000", + "DFIntJSONOverflowDepth": "200", + "DFIntJoinBlobInvalidateThresholdPercent": "80", + "DFIntJoinDataItemEstimatedCompressionRatioHundreths": "500", + "DFIntJoinInfluxHundredthsPercentage": "100", + "DFIntJoinInfluxHundredthsPercentage_PlaceFilter": "10000;5064251723", + "DFIntLDLBuildProgramTimeReportRate": "100000", + "DFIntLDLPGSStatsRatePercentPlaceSpecific": "25", + "DFIntLoadPackageFirstTimeDelayMs": "0", + "DFIntLocServicePerformanceAnalyticsHundredthsPercentage": "1000", + "DFIntLocalizationServiceContentLoadErrorHundredthsPercentage": "10", + "DFIntLogGroupTeleportInfluxPerTenThousand": "1000", + "DFIntMacInfluxHundredthsPercentage": "0", + "DFIntMaxClusterKBPerSecond": "400", + "DFIntMaxDataOutJobScaling_PlaceFilter": "2;920587237", + "DFIntMaxDataPayloadSize": "96000000", + "DFIntMaxFramesToSend": "2", + "DFIntMaxJoinDataSendPerBurstKB": "200", + "DFIntMaxMissedWorldStepsRemembered": "16", + "DFIntMaxReceiptSize": "100", + "DFIntMeshNLoDs": "5", + "DFIntMeshNLoDs_PlaceFilter": "5;4656923017", + "DFIntMpsRateLimitCapacity": "10", + "DFIntMpsRateLimitDuration": "10", + "DFIntNetworkStreamingGCUrgentMaxMicroSecondLimit": "8000", + "DFIntNewSettingsEndpointExceptionInfluxPermyriad": "10000", + "DFIntNumberFramesSubmergedBeforeVSquaredViscocity_PlaceFilter": "0;1221071288;1107780422;1223560318", + "DFIntOnDisconnectHTTPTimeout": "500", + "DFIntPackageAutoUpdateDelayMs": "0", + "DFIntPackagePermissionPullingIntervalInSeconds": "10", + "DFIntParallelNarrowPhaseSerialCutoff": "50", + "DFIntPercentApiRequestsRecordGoogleAnalytics": "5", + "DFIntPercentageThresholdUsingFriendsV2": "0", + "DFIntPercentageThresholdUsingFriendsV2A3": "100", + "DFIntPerfDataGlobalThrottleHundredthsPercent": "10", + "DFIntPerfDataGlobalThrottleHundredthsPercent_PlaceFilter": "10000;5064251723;4599786547", + "DFIntPhysicsSenderMaxBandwidthBps": "38760", + "DFIntPlayerConfigurerCDNProbeDelayMs": "10000", + "DFIntPrimStatsGANumDelimited": "3000", + "DFIntRCCFailedToEvictPlayerInfluxHundrethsPercentage": "100", + "DFIntRCCLoadPackageRetryTimeDelay": "0", + "DFIntRCCLoadPackageRetryTimes": "4", + "DFIntRCCReceiveEventStringDataLimitBytes": "100000000", + "DFIntRCCReceiveEventVariantCountLimit": "5000000", + "DFIntRakNetConnectionStartWindow_HundredthsPercentage": "1000", + "DFIntRakNetResendMaxThresholdTimeInUs": "2000000", + "DFIntRakNetResendScaleBackFactorHundredthsPercent": "6500", + "DFIntRaknetBandwidthInfluxHundredthsPercentage": "0", + "DFIntRaknetBandwidthInfluxHundredthsPercentageV2": "1000", + "DFIntRaknetBandwidthPingSendEveryXSeconds": "300", + "DFIntRccLinuxMemoryMegaByteLimit": "7000", + "DFIntRccLinuxMemoryMegaByteLimit_PlaceFilter": "16000;4599786547;4677926228", + "DFIntRccMultipleDmsErrorInfluxHundrethsPercentage": "10000", + "DFIntReflectionLoggingRolloutPerMil": "2000", + "DFIntRenderMsFrameInfluxHundredthsPercentage": "1000", + "DFIntReplicationVariantLimitHundredthPercent": "10000", + "DFIntReplicatorAnimationTrackLimitPerAnimator": "50", + "DFIntReplicatorAnimationTrackLimitPerAnimator_PlaceFilter": "120;2116452049", + "DFIntReplicatorCountLimitInfluxHundrethsPercentage": "10000", + "DFIntReplicatorJoinDataItemStatsInfluxHundrethsPercentage": "1000", + "DFIntReplicatorJoinDataItemV2StatsInfluxHundrethsPercentage": "1000", + "DFIntReplicatorJoinSnapInfluxHundrethsPercentage": "50", + "DFIntReplicatorMaxPacketBytesSentToInfluxOnError": "256", + "DFIntReportAnimationTrackSpamInfluxHundrethsPercent": "500", + "DFIntReportDeviceInfoRate": "100", + "DFIntReportFMODInitThreadingRate": "0", + "DFIntReportJoinDataItemCacheEfficiencyHundrethsPercentage": "0", + "DFIntReportJoinDataItemCacheEfficiencyHundrethsPercentage2": "1", + "DFIntReportJoinDataItemV2CacheEfficiencyHundrethsPercentage": "0", + "DFIntReportJoinDataItemV2CacheEfficiencyHundrethsPercentage2": "1", + "DFIntReportParameterContentHundredthsPercent": "8000", + "DFIntReportParsingAnomalyRate": "1", + "DFIntReportReplicatorStatsToInfluxHundredthsPercent": "5000", + "DFIntReportReplicatorStatsToInfluxHundredthsPercent_PlaceFilter": "10000;3027055174;3917136599;2291717546", + "DFIntReportSimulationToFBLatencyInfluxHundredthsPercentage": "100", + "DFIntReportSoundAssetsRate": "1", + "DFIntReportTeamOrderExposedHundredthsPercent": "100", + "DFIntRequireModulesTypeMismatchWarningCount": "8", + "DFIntS2NumPhysicsPacketsPerStep": "2", + "DFIntS2NumPhysicsPacketsPerStep_PlaceFilter": "8;3260091322", + "DFIntS2PhysicsSenderRate": "15", + "DFIntSendJoinTimeDeltasToDiag_HundredthsPercentage": "100", + "DFIntSendJoinTimesToDiag_HundredthsPercentage_PlaceFilter": "4000;370731277", + "DFIntSendRakNetStatsInterval": "300", + "DFIntSendRakNetStatsThrottle": "2", + "DFIntServerBandwidthPlayerSampleRate": "20", + "DFIntServerReportLuaGetPortInfluxHundrethsPercentage": "1000", + "DFIntSmoothTerrainPhysicsRayAabbSlop": "1", + "DFIntStepsToJoin": "2", + "DFIntStreamJobMaxBufferHealthThresholdHundredths": "75", + "DFIntStreamJobMaxBufferHealthThresholdHundredths_PlaceFilter": "50;1526666203", + "DFIntStreamJobMinBufferHealthThresholdHundredths": "40", + "DFIntStreamJobMinBufferHealthThresholdHundredths_PlaceFilter": "30;1526666203", + "DFIntStreamPauseVelBufFactorHundredths": "100", + "DFIntStreamedRegionGCUrgentFactor": "20", + "DFIntStreamingMaxTargetPercentage_PlaceFilter": "200;4599786547;5597122238", + "DFIntStreamingPauseVelBufMaxDurationMS": "4000", + "DFIntStudioLuauIceInfluxHundredthsPercentage": "10000", + "DFIntStudioLuauWarningInfluxHundredthsPercentage": "10000", + "DFIntStudioPluginLoadTimingsHundredthsPercentage": "100", + "DFIntTargetTimeDelayFacctorTenths": "20", + "DFIntTattletaleCheckWordCount": "0", + "DFIntTelegrafPriorityThrottleHundredthsPercent": "10000", + "DFIntTeleportExceptionInfluxHundredthsPercentage": "9000", + "DFIntTeleportRetryTimes": "10", + "DFIntTextScraperReportUserIdSize": "5", + "DFIntThrottledVelocityThresholdTenths": "15", + "DFIntTimePermyriad": "10000", + "DFIntTopGamesPhysicsAveExpFactorPercent": "10", + "DFIntTopGamesPhysicsReportingDelay": "300", + "DFIntTopGamesPhysicsReportingRatePercent": "1", + "DFIntTouchQueueMetricsInfluxHundredthsPercentage": "10000", + "DFIntTouchQueueMetricsSendEveryXSeconds": "300", + "DFIntTrackCountryRegionAPIHundredthsPercent": "100", + "DFIntTrackRunUpdateCycleReportInfluxPermyriad": "1000", + "DFIntUserHttpRequestsPerMinuteLimitZ_PlaceFilter": "500;4686746335;4702658078;1067560271;1067660288;735030788;2033617470;4709927839;2033617613;1765700510;1187101243;4728133914;4728134592;4728135073;4728136238;4728136475;4728136681;4728136927;4728137133;4728137352;4728137581", + "DFIntUsersEndpointHundredthsPercentage": "500", + "DFIntUsersEndpointMaxBatchSize": "3", + "DFIntVelocityAwareStreamingThreshold": "0", + "DFIntVideoImageReductionFactor": "1", + "DFIntVideoMaxNumberOfVideosPlaying": "100", + "DFIntVideoMaxNumberOfVideosPlaying_PlaceFilter": "6;5646917919;5535247402;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5947859215", + "DFIntVideoStreamMaxBufferMs": "200", + "DFIntVideoStreamMinBufferMs": "100", + "DFIntWaterViscosityDragFudgeFactor_PlaceFilter": "500;1221071288;1107780422;1223560318", + "DFIntWebParserInfluxWriteNanInfPerMyriad": "1000", + "DFIntWeldPermyriad": "100", + "DFIntWorldStepDtAveExpFactorHundredth": "1", + "DFLogAnalyticsDeferredEphemeralReportingDiagnostic": "0", + "DFLogErrorDescription": "6", + "DFLogMaxJoinDataSizeKB": "20", + "DFLogMessagingService": "6", + "DFLogPartStreamingRequests": "0", + "DFLogPartStreamingRequests_PlaceFilter": "6;2291717546;2623652930;3027055174", + "DFLogPlaceLauncherTeleportLog": "6", + "DFLogSessionCrypto": "333", + "DFLogSignalRConnection": "6", + "DFLogSoundCheckResult": "4", + "DFLogSoundTrace": "4", + "DFLogTrackTeamCreateSaveMD5HashOutput": "6", + "DFStringAdditionalBlacklistHeaders": "SOAPAction", + "DFStringAltTelegrafAddress": "35.155.141.13", + "DFStringAnalyticsNS1BeaconConfig": "https://c0ll.rbxcdn.com/test-50kb.png|g2kd2s|https://c0hw.rbxcdn.com/test-50kb.png|g2iyic|https://c0cfly.rbxcdn.com/test-50kb.png|g2hjxw|https://c0ak.rbxcdn.com/test-50kb.png|g2g5dg", + "DFStringCrashUploadToBacktraceBlackholeToken": "7705528468a303e4e34a13fbcf9e42e219633ed6868e143e5ab16cd33bd2a069", + "DFStringCrashUploadToBacktraceMacPlayerToken": "24cb37449e120c3a0618b1bf0585e339571828cae4dc73c7b8c99f67fcd751e9", + "DFStringCrashUploadToBacktraceWindowsPlayerToken": "417ecb0fbc032ce087e6af3b780c298e3356089f050c8130d2318109e80417a4", + "DFStringDataStoreThrottleMsg": "DataStore request was added to queue. If request queue fills, further requests will be dropped. Try sending fewer requests.", + "DFStringGamePerfMonitorPercentageCountryOverride": "CN,50,AU,50,NZ,50", + "DFStringGlobalUniverse17sIds": "14743789;1482020489", + "DFStringHttpInfluxDatabase": "prod", + "DFStringHttpRbxApi17sAllowedHosts": "chat.roblox.com;presence.roblox.com;avatar.roblox.com;catalog.roblox.com;inventory.roblox.com", + "DFStringLoadLibraryWarnLink": "https://devforum.roblox.com/t/loadlibrary-is-going-to-be-removed-on-january-6th/382516", + "DFStringOverrideSendRakNetStatsThrottleCountries": "CN,50,JP,20,NO,20,FI,20,SE,20,NZ,20", + "DFStringPerfFilterPlaceId": "4599786547;5064251723", + "DFStringPerfTelegrafAddress": "100.20.191.133", + "DFStringR15CollisionTypeField": "universeAvatarCollisionType", + "DFStringReportSoundAssetsAssetList": "rbxassetid://1837038213,rbxassetid://1846492029,rbxassetid://1841601627,rbxassetid://1845571507,rbxassetid://1836362602,rbxassetid://1846368341,rbxassetid://1847611722,rbxassetid://1845891180,rbxassetid://1845891141,rbxassetid://1842957560,rbxassetid://1836553363", + "DFStringRobloxAnalyticsURL": "http://ecsv2.roblox.com/", + "DFStringSendJoinTimeDeltasHundPrecCountryOverride": "CN,5000,US,100,AU,3000,KR,2000,NZ,3000,JP,4000,NO,2000,FI,2000,SE,1000,FR,1000,DK,1000", + "DFStringSendJoinTimeStatsHundPrecCountryOverride": "CN,5000,US,100,AU,3000,KR,2000,NZ,3000", + "DFStringSendJoinTimeStatsHundPrecCountryOverride_PlaceFilter": "CN,10000,US,10000,AU,10000,KR,10000,NZ,10000;189707", + "DFStringSendPingForCnConnectingToDcList": "111,174,191,133", + "DFStringWorkspaceMessageLink": "https://devforum.roblox.com/t/physics-deprecating-the-legacy-spring-physics-solver/163521", + "DFStringWorkspaceMessageText": "We are in the process of disabling and removing the legacy solver. Click here for more info...", + "DIntPackagePermissionPullingIntervalInSeconds": "10", + "DebugEnableEventEmulator": "True", + "EnableAndroidSetTagOnContactAcceptFriendRequest": "True", + "EnableAppsFlyerDeferredLinks": "True", + "EnableBackupCookie": "True", + "EnableLuaAppOnChrome": "True", + "EnableManualFocusReleaseSupport": "True", + "EnableRemoteThemeCheckOnAndroidV3": "True", + "EnableTencentLinkingFeature": "False", + "EnableTencentYZFSDKHelpCenter": "True", + "FFlagABTestControllerListener": "False", + "FFlagABTestControllerListener2": "True", + "FFlagABTestFirstInstall": "False", + "FFlagABTestLoadingDeadlockFix": "True", + "FFlagABTestLoadingTimeStats": "True", + "FFlagABTestLogInitResult": "True", + "FFlagABTestLogInitResultWithSession": "False", + "FFlagABTestMultipleWaitsFix": "True", + "FFlagABTestResponseCounter": "True", + "FFlagABTestServiceSkipRedundantInit": "True", + "FFlagABTestSystemShutoff": "False", + "FFlagAECharacterManagerFixes": "True", + "FFlagAEDynamicNavTransitionImprovement": "True", + "FFlagAEFitComponentMigration": "False", + "FFlagAEFitComponentMigration2": "True", + "FFlagAEImageSetLabelMigration2": "False", + "FFlagAEImageSetLabelMigration3": "True", + "FFlagAELandingPageAnalytics": "True", + "FFlagAEReplaceFitImageTextFrame": "True", + "FFlagAEUseLargeExpandButtonImage": "True", + "FFlagAXAddRefToResultsList": "True", + "FFlagAXFixBodySliderPerformance": "True", + "FFlagAXUseMoreBindings": "True", + "FFlagAccelerateDuplicateCollisionFidelityReprocess": "True", + "FFlagAccountReplicatorQueueItemTypes": "True", + "FFlagAddCopyIDToResultPage": "True", + "FFlagAddCountryCodeToUserModel": "True", + "FFlagAddEndedSignalToSoundJobStudio": "True", + "FFlagAddFilterScriptFunctionsToRibbon": "True", + "FFlagAddHWModelForMac": "True", + "FFlagAddImportFailureToast": "True", + "FFlagAddMissingConsoleAgreementTextInGameSettings": "True", + "FFlagAddNewlineAboveOrBelow": "True", + "FFlagAddSidToGameJoinLoadTime": "True", + "FFlagAddStatCounters": "True", + "FFlagAdditionalExtJoinData": "True", + "FFlagAdditionalFallbackFonts": "True", + "FFlagAdditionalTextBoxShortcuts": "True", + "FFlagAdjustHipTranslationBasedOnHipHeight": "True", + "FFlagAdornUseRawTexture": "True", + "FFlagAdultConfirmationEnabled": "False", + "FFlagAdultConfirmationEnabledV3": "True", + "FFlagAdultConfirmationEnabledv2": "True", + "FFlagAdvancedMouseSensitivityEnabled": "True", + "FFlagAlignDraggedObjects": "True", + "FFlagAlignToolAnalytics": "True", + "FFlagAllowBackpackBinding": "True", + "FFlagAllowCatalogItemCreatorAssetConfig": "True", + "FFlagAllowDragContinuation": "True", + "FFlagAllowDuplicateNamesOnNonAnimatedParts": "True", + "FFlagAllowFallbackToLanguageCodeWithVariant": "True", + "FFlagAllowGamepadConnectionEventsWhenNotFocused": "True", + "FFlagAllowLuauTypes": "True", + "FFlagAllowMeToParseMyOwnJoinBlob": "True", + "FFlagAllowMobileGamepadCursor": "True", + "FFlagAllowNegativeDisplayOrder": "True", + "FFlagAllowPasteKeysBetweenAnimations": "True", + "FFlagAllowReturnToConfirmRespawnCharacter": "True", + "FFlagAllowTGAImageAssetExtension": "True", + "FFlagAllowTextEntryToTakeSizeAndPositionProp": "True", + "FFlagAllowWorldModelCreationV2": "True", + "FFlagAlwaysGenerateGuid": "True", + "FFlagAlwaysGenerateGuid2": "True", + "FFlagAlwaysLuau": "True", + "FFlagAlwaysSelectOnInsertPart": "True", + "FFlagAlwaysWriteLegacyLock": "True", + "FFlagAnOrderOfLeaderstats": "True", + "FFlagAnalyticsAddTimeZone": "False", + "FFlagAnalyticsCatalogSearchEventContext": "True", + "FFlagAnchorAttachments": "True", + "FFlagAndroidFixDPadMapping": "True", + "FFlagAndroidReportDeviceInfo": "True", + "FFlagAndroidSetSafeZoneOffsets": "True", + "FFlagAnimEditorRenameKeyOptionFix": "True", + "FFlagAnimEditorUseCustomFPS": "True", + "FFlagAnimationEditorMicroboneSupport_PlaceFilter": "True;4599786547;5326950832", + "FFlagAnimationSampleCorrection": "True", + "FFlagAnimationSampleCorrectionRemoveChange": "True", + "FFlagAnthroArtistIntentFBXImporterIntermediateState": "False", + "FFlagAppBackgroundMode2": "True", + "FFlagAppBridgeDestroyAppOnTermination": "True", + "FFlagAppBridgeExplicitDefaultPlayerParams": "False", + "FFlagAppBridgeNewGameEvents": "True", + "FFlagAppBridgeNewGameJoinTeleport": "True", + "FFlagAppBridgeRewritePatch1": "True", + "FFlagAppConfigurationEnableMultiBehaviorSupport2": "False", + "FFlagAppConfigurationEnableMultiBehaviorSupport3": "True", + "FFlagAppPagePropertiesDisableBackButton": "False", + "FFlagAppPagePropertiesDisableBackButtonV2": "True", + "FFlagAppShellReporterMonitorFrameTime2": "True", + "FFlagAppUsesAutomaticQualityLevel": "True", + "FFlagApplyModifiersToInputObjects": "False", + "FFlagApplyModifiersToInputObjects2": "True", + "FFlagApplyPlaceFilterEarly": "True", + "FFlagApplyPlaceFilterEarly2": "True", + "FFlagArePartsTouchingOthers": "True", + "FFlagArrayDynamicPopBackBugFix": "True", + "FFlagAssetConfigBlockUntilReadyToEdit": "True", + "FFlagAssetConfigDarkerScrollBar": "True", + "FFlagAssetConfigOverrideAssetTooltip": "True", + "FFlagAssetConfigUseItemConfig": "True", + "FFlagAssetConifgOverrideAssetScrollingFrame": "True", + "FFlagAssetManagerAddNewPlaceBehavior": "True", + "FFlagAssetManagerAddPlaceVerisonHistoryToContextMenu": "True", + "FFlagAssetManagerContextMenuActionFixes": "True", + "FFlagAssetManagerFixAssetRemoval": "True", + "FFlagAssetManagerFixDisappearingTreeView": "True", + "FFlagAssetManagerLocalizationUpdate": "True", + "FFlagAssetManagerLuaCleanup1": "True", + "FFlagAssetManagerLuaPlugin": "False", + "FFlagAssetManagerOpenContextMenu": "True", + "FFlagAssetPreviewGenreNotType": "True", + "FFlagAsyncTasksEnabledForMeshes": "True", + "FFlagAsyncTasksEnabledForTextures": "False", + "FFlagAutoWrapSelectionWithChars": "True", + "FFlagAvatarCatalogCloseSearchWhenAvatarIsTapped": "True", + "FFlagAvatarEditorAnthroSlidersUIOnly": "True", + "FFlagAvatarEditorAttachmentCameraFocus": "False", + "FFlagAvatarEditorAttachmentCameraFocus2": "True", + "FFlagAvatarEditorClearTryOnFix": "True", + "FFlagAvatarEditorCostumeSignalR": "True", + "FFlagAvatarEditorEmotesSupport": "True", + "FFlagAvatarEditorEnableLuaAuthenticationCheck": "True", + "FFlagAvatarEditorEnableThemes2": "True", + "FFlagAvatarEditorFixCutOffItemName": "True", + "FFlagAvatarEditorFixLegCameraPosition": "True", + "FFlagAvatarEditorFixSliderSensitivity": "True", + "FFlagAvatarEditorHideSliderHighlightOnInit": "True", + "FFlagAvatarEditorInitializeModelEarly": "True", + "FFlagAvatarEditorKeepYourColor": "True", + "FFlagAvatarEditorLightThemeFix2": "True", + "FFlagAvatarEditorRTranslations": "False", + "FFlagAvatarEditorRecommendedUIBloxButton": "True", + "FFlagAvatarEditorRefactorPageType": "True", + "FFlagAvatarEditorRemoveDefaultClothingMessage": "True", + "FFlagAvatarEditorSelectivelyUseDefaultAsset": "True", + "FFlagAvatarEditorShowEquippedItem": "True", + "FFlagAvatarEditorSimultaneousFullViewAvatarTypeFix": "True", + "FFlagAvatarEditorTweenMinimizeButton": "True", + "FFlagAvatarEditorUpdateCamera2": "True", + "FFlagAvatarEditorUpdateRecommendations": "True", + "FFlagAvatarEditorUseUserIdFromStore": "True", + "FFlagAvatarEvolutionImporter_PlaceFilter": "True;4599786547;5326950832", + "FFlagAvatarExpereienceReplaceFitScrollingFrame": "True", + "FFlagAvatarExpereienceUseShimmerPanel": "True", + "FFlagAvatarExperienceAnimationLookAroundFix": "True", + "FFlagAvatarExperienceBackgroundThemeFix": "True", + "FFlagAvatarExperienceBodySizeIndicator": "True", + "FFlagAvatarExperienceCatalogAnimationIdleFix": "True", + "FFlagAvatarExperienceCatalogEmoteFix": "True", + "FFlagAvatarExperienceCharacterManagerOnSlowNetwork": "False", + "FFlagAvatarExperienceConsistentRolloutValue": "True", + "FFlagAvatarExperienceEmptyHistoryFix": "True", + "FFlagAvatarExperienceEnableAvatarModelLoadTime": "True", + "FFlagAvatarExperienceImproveBackgroundTransition": "True", + "FFlagAvatarExperienceNavMouseSupport": "True", + "FFlagAvatarExperienceNavigationFix": "True", + "FFlagAvatarExperienceNewDarkSkybox": "True", + "FFlagAvatarExperienceNoFaceToast": "False", + "FFlagAvatarExperienceOutfitRecommendations": "False", + "FFlagAvatarExperienceOutfitRecommendations2": "True", + "FFlagAvatarExperiencePeekHeaderUpdate": "True", + "FFlagAvatarExperiencePremiumIconFix": "True", + "FFlagAvatarExperienceRemoveTempRouterFix": "True", + "FFlagAvatarExperienceRunSceneFix": "True", + "FFlagAvatarExperienceSaveManagerInitialization": "True", + "FFlagAvatarExperienceUnselectTryOnFix": "True", + "FFlagAvatarExperienceUseContextualMenu": "True", + "FFlagAvatarExperienceUseInternalBackgroundAsset": "True", + "FFlagAvatarExperienceUseNewCharacterManager": "False", + "FFlagAvatarExperienceUseNewCharacterManager2": "True", + "FFlagAvatarExperienceUseUIBloxAlerts": "True", + "FFlagAvatarImporterRoact": "True", + "FFlagAvatarLandingPageStartupFix": "True", + "FFlagAvatarPartScaleTypeFix": "True", + "FFlagAvatarShopFixBlankResellersPage2": "True", + "FFlagAvatarSizeFixForReorganizeHeaders": "True", + "FFlagAvoidCrashOnThreadResourceError": "False", + "FFlagAvoidFindFirstChildCallsInGuiBase2d": "True", + "FFlagBackpackScriptUseFormatByKey": "False", + "FFlagBadgeApiV1UserHasBadge": "True", + "FFlagBadgeReadDisabledFromInfo": "True", + "FFlagBatchAssetApi": "False", + "FFlagBatchBoundsChanged": "True", + "FFlagBatchThumbnailAddNewThumbnailTypes": "False", + "FFlagBeamTextureDesyncFix": "True", + "FFlagBestProximatePartFix": "True", + "FFlagBetterEmoji2": "True", + "FFlagBetterRbxThumbRetryLogic": "True", + "FFlagBillboardGuiDistanceStepping2": "False", + "FFlagBindToAllInterfaces": "True", + "FFlagBoostToBindInOnPlayerAdded": "True", + "FFlagBootstrapperTryAsset": "True", + "FFlagBorderColorMode": "True", + "FFlagBreakJointsOnDeath": "True", + "FFlagBrilliantBorders": "True", + "FFlagBroadPhaseIslandAcceleratedFilterStep": "True", + "FFlagBrowserServiceForAllPlatforms": "True", + "FFlagBuildGuiOnServerInStudio": "True", + "FFlagBuildPluginWithRobloxCLI": "True", + "FFlagBulkMoveTo": "True", + "FFlagBulletInitialContactDivideByAxisLength": "True", + "FFlagBypassDoubleInitialization": "True", + "FFlagBytecodeSerialization": "True", + "FFlagCFrameLookAt": "True", + "FFlagCFrameVectors": "True", + "FFlagCJVNotFallbackToEnglishForCoreGuiEnabled": "True", + "FFlagCJVNotFallbackToEnglishForUGCEnabled": "True", + "FFlagCLI18241": "True", + "FFlagCLI18241A": "True", + "FFlagCLI18241B": "True", + "FFlagCLI21289": "True", + "FFlagCLI23302": "True", + "FFlagCLI26327": "True", + "FFlagCLI26526": "True", + "FFlagCLI26775": "True", + "FFlagCLI26856": "True", + "FFlagCLI26858": "False", + "FFlagCLI27641A": "True", + "FFlagCLI27641B": "False", + "FFlagCLI27760": "True", + "FFlagCLI28630": "True", + "FFlagCLI28759": "True", + "FFlagCLI29967": "True", + "FFlagCLI30496": "True", + "FFlagCLI30497": "True", + "FFlagCLI30497B": "False", + "FFlagCLI30497H": "True", + "FFlagCLI30497R": "True", + "FFlagCLI30497S": "True", + "FFlagCLI30497W": "True", + "FFlagCLI31175": "True", + "FFlagCLIAPPBRIDGE372": "True", + "FFlagCLIAPPBRIDGE414": "True", + "FFlagCMSConsolidateAssetTypeInfo": "True", + "FFlagCMSEnableCatalogTags": "False", + "FFlagCMSEnableCatalogTags2": "True", + "FFlagCMSEndPointsAPI": "True", + "FFlagCMSPremiumBenefitsLink": "False", + "FFlagCMSRemoveAssetTypeBackendMap": "True", + "FFlagCMSRemoveUGCContentEnabledBoolean": "True", + "FFlagCMSTabErrorIcon": "True", + "FFlagCMSUseSharedUGCValidation": "True", + "FFlagCSGv2BalanceExponents": "False", + "FFlagCSGv2ControlSignificands": "False", + "FFlagCSGv2EnableEmptyMeshError": "True", + "FFlagCSGv2EnablePerPrimitiveBoxMaps": "True", + "FFlagCSGv2FixOrientationWhenSeparatingNegates": "True", + "FFlagCSGv2ForceEnabled": "True", + "FFlagCSGv2InGameEnabled": "True", + "FFlagCSGv2UnionOrientationFromFirstPart": "True", + "FFlagCSGv2UnparentPartsBeforeModifyingCFrames": "True", + "FFlagCSGv2UseImprovedSphereAndCylinder": "True", + "FFlagCSGv2UseIterativeSimplification": "True", + "FFlagCalcBoxMappingForSkinnedMesh_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagCameraSensitivityAllowGranularKeyboardInput": "True", + "FFlagCanRemoveBetaFeature": "True", + "FFlagCanWeAddContinue2": "True", + "FFlagCancelButtonTouchEventOnMouseDragOff": "True", + "FFlagCanvasPosChangedOnStepElasticBounds": "True", + "FFlagCatalogAnimationIdlePreview": "True", + "FFlagCatalogFilteredSearch": "True", + "FFlagCatalogFullAvatarWifiIcon": "True", + "FFlagCatalogResellerUseNewGridView": "True", + "FFlagCatalogSnFResetButtonFix": "True", + "FFlagCatalogSortAndFilters2": "True", + "FFlagCatalogUpdateRecommendations": "True", + "FFlagCautiouslyInitilaizeSoftwareCursorVisible": "True", + "FFlagChangeDraggerAnalyticsContext": "True", + "FFlagChangeHistoryIgnoreArchivable": "True", + "FFlagChangeNarrowToSlender": "True", + "FFlagChangesToFileMenu": "True", + "FFlagChatServiceAnalyticsOnFilterStringCalls": "False", + "FFlagCheckDataModelStateInTeleport": "True", + "FFlagCheckGameStateOnResume": "True", + "FFlagCheckInstanceIsInScope": "True", + "FFlagCheckIntentWhenInitDefaultScripts": "True", + "FFlagClampCanvasPositionInLayoutStep": "False", + "FFlagCleanupFetchLocaleAssetFallback": "True", + "FFlagClearHoverBoxOnDelete": "True", + "FFlagClickDetectorCursorIconEnabled": "True", + "FFlagClickDetectorUsesHRPForDistanceCalculation": "True", + "FFlagClientFireEventPlaceLauncherFail3": "True", + "FFlagCloudEditServerGeneratesPlayerCameraPosition": "True", + "FFlagCmdLineExpressions": "True", + "FFlagCollabEditVersionHistoryEnabled": "True", + "FFlagCollectAnalyticsForSystemMenu": "True", + "FFlagColor3Picker": "True", + "FFlagColor3ToHSVMethod": "True", + "FFlagComboboxSupportEventHandler": "True", + "FFlagComboboxSupportTextAttribute": "True", + "FFlagCommonPackageStringUtilities": "True", + "FFlagCompatibilityUseSpecularMult": "True", + "FFlagConnectErrorHandlerInLoadingScript": "True", + "FFlagConnectErrorHandlerInLoadingScript_PlaceFilter": "False;731863175;731680819", + "FFlagConnectionScriptEnabled": "True", + "FFlagConnectionScriptEnabled_PlaceFilter": "False;1608755154", + "FFlagConsistentCofmForAnimatedAssemblies": "True", + "FFlagConstraintAdornCleanup": "True", + "FFlagContentProviderTempDirWithPid2": "True", + "FFlagContextMenuSupportLuaDraggers": "True", + "FFlagConvertSoundPlaybackChannelToValueType": "True", + "FFlagCorePackagesForAll": "True", + "FFlagCoreScriptBetterEmotesErrorMessaging": "True", + "FFlagCoreScriptEmotesMenuAnalytics": "True", + "FFlagCoreScriptEmotesMenuBetterMouseBehavior": "True", + "FFlagCoreScriptEmotesMenuEnabled2": "True", + "FFlagCoreScriptEnableInspectAndBuy": "True", + "FFlagCoreScriptEnableInspectAndBuy_PlaceFilter": "True;3155066112;3157761435;3204147952;189707", + "FFlagCoreScriptEnableRobloxTranslatorFallback": "True", + "FFlagCoreScriptEnableRobloxTranslatorFallback_PlaceFilter": "True;3155066112;3157761435;3204147952;189707", + "FFlagCoreScriptNoPosthumousHurtOverlay": "True", + "FFlagCoreScriptOverrideRefactor": "True", + "FFlagCoreScriptPlayerListPremiumIcon2": "True", + "FFlagCoreScriptSettingsHelpRightKeys": "True", + "FFlagCoreScriptTopBarStartup": "True", + "FFlagCoreScriptTranslateGameText2": "True", + "FFlagCoreScriptsNoHotKeysWhenMenuOpen": "True", + "FFlagCoreScriptsUseLocalizationModule": "True", + "FFlagCoreScriptsUseRoactRoduxNewConnectionOrder": "True", + "FFlagCoreUseRoact1_x": "True", + "FFlagCorescriptThumbnailsRespectBaseUrl": "True", + "FFlagCorrectTeamCreatePublishWorkflow": "True", + "FFlagCorrectTextBoundsForRichText": "True", + "FFlagCrashReporterNew": "False", + "FFlagCreateAndUpdateDataReplicationCache": "False", + "FFlagCreateAndUpdateDataReplicationCache2": "False", + "FFlagCreateAndUpdateDataReplicationCache3": "False", + "FFlagCreateAndUpdateDataReplicationCache4": "True", + "FFlagCreateAndUpdateDataReplicationCache5": "True", + "FFlagCrossDmScriptingInPlugins": "False", + "FFlagCtrlPinchRejection": "True", + "FFlagCullByDistanceToPOI": "True", + "FFlagCurlOption53": "False", + "FFlagCurlProbe4": "False", + "FFlagDarwinUseNewMemoryMetrics": "True", + "FFlagDataModelPatcherAlwaysRecordErrors": "True", + "FFlagDataModelPatcherBootstrapEnabled": "True", + "FFlagDataModelPatcherConfigurerEnabled3": "True", + "FFlagDataModelPatcherFixMajorVersionReporting": "True", + "FFlagDataModelPatcherImages": "True", + "FFlagDataModelPatcherOTAEnabled": "True", + "FFlagDataModelPatcherReportToInflux": "True", + "FFlagDataModelPatcherReportToInflux2": "True", + "FFlagDataStoreAdditionalMetricsEnabled": "True", + "FFlagDataStoreCacheLimitEnabled": "True", + "FFlagDatamodelServicesConnectionFix2": "True", + "FFlagDebugCSGExportFailure": "False", + "FFlagDebugClientNetworkPerPlaceMetrics": "False", + "FFlagDebugClientNetworkPerPlaceMetrics_PlaceFilter": "True;1818;3498890;189707", + "FFlagDebugCrashEnabled": "False", + "FFlagDebugDeleteDiscrimination": "True", + "FFlagDebugDontForceCollisionsOnHumanoidParts": "False", + "FFlagDebugDontForceCollisionsOnHumanoidParts_PlaceFilter": "True;3360073263", + "FFlagDebugEnableEventEmulator": "True", + "FFlagDebugGraphicsIntelCrash": "False", + "FFlagDebugStudioSandboxDraftsHardeningVerifyTmpFile": "True", + "FFlagDebugUseDefaultGlobalSettings": "True", + "FFlagDebugVersionHistoryDialogLocalTestMode": "False", + "FFlagDebugVersionHistoryHttpCompressData": "True", + "FFlagDedupePackagesInAssetManager": "True", + "FFlagDeeplinkHttpWebPatterns": "True", + "FFlagDefaultLocDelimFix": "True", + "FFlagDefaultThumbnailForRBXThumb": "True", + "FFlagDeferChatMasterInit": "True", + "FFlagDeferChatMasterInit3": "True", + "FFlagDelayPurchasePromptActivation": "True", + "FFlagDeleteMobileDevDeployer": "True", + "FFlagDeleteToStartOfLine": "True", + "FFlagDeliverLowMemoryWarningsViaPolling": "False", + "FFlagDepthOfField": "True", + "FFlagDepthOfFieldUseNewClipDistance": "True", + "FFlagDetailedRequireErrorMsg": "True", + "FFlagDevConsoleBetterResize": "True", + "FFlagDevConsoleFixCommandBarForNonOwners": "True", + "FFlagDevConsoleFixMicroprofilerSyncIssues": "True", + "FFlagDevConsoleFixTopBarDragging": "True", + "FFlagDevConsoleFixTopBarIcons": "True", + "FFlagDevConsoleIsVeryStickyWhyWillItNotLetGo": "False", + "FFlagDevConsoleLogMemoryButton": "True", + "FFlagDevConsoleLogNewLineFix": "True", + "FFlagDevConsoleNoDisableAllFilters": "True", + "FFlagDevConsoleTabMetrics": "True", + "FFlagDevConsoleUpdateLayering": "True", + "FFlagDevConsoleUseZeroCanvasWidthLogOutput": "True", + "FFlagDevFrameworkEnumUtility": "True", + "FFlagDevFrameworkPluginWidgetEnabledEvent": "False", + "FFlagDevFrameworkStrictAPITables": "True", + "FFlagDevFrameworkTextInputContainer": "True", + "FFlagDevFrameworkUnhandledPromiseRejections": "True", + "FFlagDeveloperEventIngestVerifyFeature_PlaceFilter": "True;3182856628", + "FFlagDisableAutoTranslateForKeyTranslatedContent": "True", + "FFlagDisableContextMenuDuringCommit": "True", + "FFlagDisableDecorationForLeafyGrass": "True", + "FFlagDisableDrawingStudsInEdit": "True", + "FFlagDisableFollowInGameMenu": "True", + "FFlagDisableGuiInVFRenderInMainScene": "True", + "FFlagDisablePlayerOsPropertyReplication": "True", + "FFlagDisableReJoinForSurfaceTool": "True", + "FFlagDisableReconnectAfterPotentialTimeout": "False", + "FFlagDisableSpecialShapeInMeshPart": "True", + "FFlagDisableSpinnerLayoutUpdate": "True", + "FFlagDisabledLayerCollectorsShouldNotSinkInput": "True", + "FFlagDisallowFloatingPointErrorMove": "True", + "FFlagDisplayErrorDetailsSecurityLevel": "True", + "FFlagDoNotGetAntiAddictionPolicyInRenderStep": "True", + "FFlagDoNotLoadUnverifiedBuiltInPlugins": "True", + "FFlagDoTeleportCloseCurrentDMBlocking": "False", + "FFlagDoesNotLoadCachedFileSyncItemsForLuaApp": "True", + "FFlagDontCountHorizontalScrollsForExtTrackpad": "True", + "FFlagDontDisconnectJointUpdateUnlessNecessary": "False", + "FFlagDontInsertGroundJoints": "True", + "FFlagDontLoadCloudLocalizationSettingsOnCloudEditMode": "False", + "FFlagDontLoadCoreScriptsForEditDM": "True", + "FFlagDontReselectSelectTool": "True", + "FFlagDontStoreCharacterModelBeingLoadedInPlayer": "False", + "FFlagDontSubmitBlankGameReports": "True", + "FFlagDontUseUploadUrlForPublish": "True", + "FFlagDragFaceInstances": "True", + "FFlagDragOutsideWorkspace": "True", + "FFlagDragWeirdConstraints": "True", + "FFlagDraggerAnalyticsCleanup": "True", + "FFlagDraggerBasisRotate": "True", + "FFlagDraggerEarlyUnmount": "True", + "FFlagDraggerRefactor": "True", + "FFlagDraggerResizeLimit": "True", + "FFlagDraggerSplit": "True", + "FFlagDraggerUseModelCFrame": "True", + "FFlagDropToolCaptureMouse": "True", + "FFlagDumbSpatialHash": "False", + "FFlagDumbSpatialHash2": "True", + "FFlagDynamicTToolReplacement": "True", + "FFlagEasingExpansion": "True", + "FFlagEditAssetForManagedAssets": "True", + "FFlagEducationalPopupOnNativeClose": "True", + "FFlagEmotesMenuFixSelectedObject": "True", + "FFlagEmotesMenuNewKeybinds": "True", + "FFlagEmotesMenuRemoveOpenKeybinds": "True", + "FFlagEmotesMenuShowUiOnlyWhenAvailable": "True", + "FFlagEmulateDeviceMemory": "True", + "FFlagEnableAbsoluteCellSizeAndCellCount": "True", + "FFlagEnableAccountSettingsMigration": "True", + "FFlagEnableAlignmentToolPlugin": "True", + "FFlagEnableAnalyticsServiceAvaliableCheckingOnStart": "True", + "FFlagEnableAndroidSetPendingTagOnContactFriendRequest": "True", + "FFlagEnableAndroidVsync": "True", + "FFlagEnableAppInstallationId": "True", + "FFlagEnableAppPolicyDefaultsFile": "True", + "FFlagEnableAppsFlyerLinks": "True", + "FFlagEnableAppsFlyerShortLinks": "True", + "FFlagEnableAssetConfigVersionCheckForModels": "True", + "FFlagEnableAssetPreviewDynamicVote": "True", + "FFlagEnableAudioPreviewWhiteList": "True", + "FFlagEnableAuthV2Login": "True", + "FFlagEnableAvatarEditoriOSTablet": "True", + "FFlagEnableAvatarExperienceLandingPageABTest3": "True", + "FFlagEnableAvatarExperienceLandingPageForAll": "True", + "FFlagEnableBackgroundModeWhenInactive": "False", + "FFlagEnableBoneTransformAPI_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagEnableBreakpointPropagationBetaFeature": "True", + "FFlagEnableCatelogForAPIService": "True", + "FFlagEnableCiphertextCookieStorage": "True", + "FFlagEnableContactsApiService": "False", + "FFlagEnableContactsApiServiceV2": "True", + "FFlagEnableConvertToTerrainBeta": "True", + "FFlagEnableCorePackagesOverride": "True", + "FFlagEnableCoreScriptBacktraceReporting": "True", + "FFlagEnableCoreScriptVersion": "True", + "FFlagEnableCredentialManagerIntegration": "True", + "FFlagEnableCredentialsValidationMigration": "True", + "FFlagEnableD3D11Scissor": "True", + "FFlagEnableD3D9Scissor": "True", + "FFlagEnableDataForAssetConfig": "True", + "FFlagEnableDataModelFetchAssetAsync": "True", + "FFlagEnableDataModelNotificationOpenUrl": "True", + "FFlagEnableDateTimeInNetworkValueFormat": "True", + "FFlagEnableDefaultSortFix": "False", + "FFlagEnableDefaultSortFix2": "True", + "FFlagEnableDevProductsInGameSettings": "True", + "FFlagEnableDeveloperGetManageGroupUrl": "True", + "FFlagEnableDisablingNetworkPause": "True", + "FFlagEnableDoubleClickSupport": "True", + "FFlagEnableFRMInSoloMode": "True", + "FFlagEnableFSEventWatcher": "True", + "FFlagEnableFastFlagEditorWithInternalPermission": "True", + "FFlagEnableFavoritesForAssetPreviewInAssetManager": "True", + "FFlagEnableGLScissor": "True", + "FFlagEnableGameI18nForClients": "True", + "FFlagEnableGameSignalRWithAllPlatforms1": "False", + "FFlagEnableGameSignalRWithAllPlatforms1_PlaceFilter": "True;20907", + "FFlagEnableGameSignalRWithOSX1": "True", + "FFlagEnableGameSignalRWithWindows1": "False", + "FFlagEnableGameStartUniversalLink": "True", + "FFlagEnableGizmoRaycast": "True", + "FFlagEnableGranularMemoryTabStats": "True", + "FFlagEnableInputObjectIsModifierKeyDown": "True", + "FFlagEnableInsertAssetCategoryAnalytics": "True", + "FFlagEnableInternalPermissionBlockList": "False", + "FFlagEnableInternalPermissionBlockList2": "True", + "FFlagEnableIsPremiumSettings": "True", + "FFlagEnableJavascriptHybrid2": "True", + "FFlagEnableLargeRobuxAndroidUpsellV3": "True", + "FFlagEnableLegalText": "True", + "FFlagEnableLoadExternalAntiCheatModuleEnvVar": "False", + "FFlagEnableLocaleHostForClients": "True", + "FFlagEnableLuaBottomBarWithTextOnPhone": "False", + "FFlagEnableLuaBottomBarWithTextOnTablet": "False", + "FFlagEnableLuaControlsClose2": "True", + "FFlagEnableLuaDraggers": "True", + "FFlagEnableLuaDraggersBetaFeature": "False", + "FFlagEnableLuaEventStreamRelease": "True", + "FFlagEnableLuaReputationSetting": "True", + "FFlagEnableLuaStartupManager": "False", + "FFlagEnableLumberyak": "True", + "FFlagEnableMarketplaceFavorite": "True", + "FFlagEnableMeshPartJointOffset_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagEnableMessagesForCJVMore": "False", + "FFlagEnableMetalScissor": "True", + "FFlagEnableMoreSettingsPagePolicy": "True", + "FFlagEnableMotor6DTransformFixBetaFeature": "False", + "FFlagEnableMouseUpEventFireForCurrentDragGuiObj": "True", + "FFlagEnableNetworkPauseGui": "True", + "FFlagEnableNewChatApi": "True", + "FFlagEnableNonWhitelistedToggle": "True", + "FFlagEnableOverrideAssetCursorFix": "True", + "FFlagEnableOverrideAssetGroupCreationApi": "True", + "FFlagEnablePackageMassUpdateNestedPackage": "True", + "FFlagEnableParamsBasedRaycast": "True", + "FFlagEnablePluginPermissionsPage2": "True", + "FFlagEnablePreviewTabSelection": "True", + "FFlagEnableProximityPromptBetaFeature": "True", + "FFlagEnablePurchasePromptV2": "False", + "FFlagEnablePurchaseV2": "False", + "FFlagEnableR3ButtonIOS": "True", + "FFlagEnableRaycastParams": "True", + "FFlagEnableRbxThumbAPI": "True", + "FFlagEnableReadingNewConvexDecompositionPath": "True", + "FFlagEnableRemoteThemeCheckOniOSV2": "True", + "FFlagEnableReplaceBodyPartR15": "True", + "FFlagEnableResetPlaceFilters": "True", + "FFlagEnableReturnKeyPressedEvent": "True", + "FFlagEnableRichTextBetaFeature": "False", + "FFlagEnableRoactAnimationEditor2": "True", + "FFlagEnableRobuxABTest": "True", + "FFlagEnableRobuxHexIconV2": "True", + "FFlagEnableRobuxIconXbox": "True", + "FFlagEnableRobuxNewGraphicsXbox": "True", + "FFlagEnableRoundCornerShading": "True", + "FFlagEnableScaleIndependentBulletCollision2": "False", + "FFlagEnableScaleIndependentBulletCollision4": "False", + "FFlagEnableScaleIndependentBulletCollision5": "True", + "FFlagEnableSearchedWithoutInsertionAnalytic": "True", + "FFlagEnableSetStageNoneInDestroy": "True", + "FFlagEnableStartupControllerOnWindows": "True", + "FFlagEnableStudioProfiler": "True", + "FFlagEnableStudioServiceGetUserId": "True", + "FFlagEnableSurfaceGuiPixelsPerStud": "True", + "FFlagEnableTextBoxPasswordDev": "True", + "FFlagEnableTextSelection2": "True", + "FFlagEnableTexturePacksBetaFeature": "True", + "FFlagEnableThumbnailCameraValue": "False", + "FFlagEnableThumbnailConfiguration": "True", + "FFlagEnableToolboxGetAssetsFailedCaseFix": "True", + "FFlagEnableToolboxInsertWithJoin": "True", + "FFlagEnableToolboxUploadReport": "True", + "FFlagEnableToolboxVideos": "True", + "FFlagEnableToolboxVoteFix": "True", + "FFlagEnableUIBloxIcons": "True", + "FFlagEnableUICornerBetaFeature": "True", + "FFlagEnableUIGradientEnabledProperty": "False", + "FFlagEnableUIGradientEnabledProperty2": "True", + "FFlagEnableVulkanScissor": "True", + "FFlagEnableiOSFriendFinderAndContactFriendingAnalytics": "True", + "FFlagEnableiOSGameTimerFix2": "True", + "FFlagEndKeyboardEventsOnFocusChange3": "True", + "FFlagErrorPromptTakeExtraConfigurations": "True", + "FFlagEventIngestServiceRefactor": "True", + "FFlagExitProcessOnExit": "True", + "FFlagExplorerSupportActiveInstance": "False", + "FFlagExplorerSupportActiveInstance2": "True", + "FFlagExtTrackpadsMasterSwitch": "True", + "FFlagExtTrackpadsUseHeuristics": "True", + "FFlagExtendPlayerScrollListWindowingForGamepadSelection": "True", + "FFlagExtendSelectionBoxAdornee": "True", + "FFlagExtraDatamodelServicesForPluginDms": "False", + "FFlagExtraDatamodelServicesForPluginDms2": "True", + "FFlagFFlagAvatarEditorFixToolStuckOnRightArmEquip": "True", + "FFlagFFlagFixMenuIcons": "True", + "FFlagFIB25Update2": "True", + "FFlagFTUEGameGridFix": "True", + "FFlagFallbackLeaderstatOrdering": "True", + "FFlagFastClusterCachePrimitive": "True", + "FFlagFasterInstanceCheck": "True", + "FFlagFetchAliasesOnStartup": "True", + "FFlagFetchLocalUserHeadshotInFetchHomePageData2": "True", + "FFlagFetchPremiumMigrationNoticeOnlyForBcUsers": "True", + "FFlagFilterDataModelType": "True", + "FFlagFilterTypeQuickOpen": "True", + "FFlagFindContentForCoreScripts": "True", + "FFlagFindNestedParts": "True", + "FFlagFireAncestryChangedJointSignalAfterWorldInsert4": "True", + "FFlagFireChangedForCursorPosition": "True", + "FFlagFixACMOverlappingIssues": "True", + "FFlagFixActivatedEventDoubleFire": "True", + "FFlagFixAdornRenderNullCrash": "True", + "FFlagFixAdvancedObjectsDragDropAssert": "True", + "FFlagFixAlignToolAnalyticsEventCount": "True", + "FFlagFixAndroidKeyboardInput": "True", + "FFlagFixAnimEditorManipulators": "True", + "FFlagFixAppsFlyerLongLinksOnStartup": "True", + "FFlagFixAssetConfigPermissionsRace": "True", + "FFlagFixAssetManagerInsertWithLocation": "True", + "FFlagFixAssetUploadFailedColor": "True", + "FFlagFixAssetUploadName": "True", + "FFlagFixAssetUploadSuccssMessage": "True", + "FFlagFixAttachmentDrag": "True", + "FFlagFixAvatarExperienceViewRerendering": "True", + "FFlagFixBackpackDraggingReset": "True", + "FFlagFixBadDirtyStateSetForUIConstraint": "True", + "FFlagFixBadNormal": "True", + "FFlagFixBindActionTouchButtonError": "True", + "FFlagFixBlockedListInitLogic": "True", + "FFlagFixBroadphaseMovementCallbacks": "True", + "FFlagFixBuiltinPluginSecurityLevels": "True", + "FFlagFixButtonR2MouseClickOnGui": "True", + "FFlagFixCaseSensitiveAssetNames": "True", + "FFlagFixCaseSensitiveAssetNames2": "True", + "FFlagFixCollisionTest": "True", + "FFlagFixColorPickerAppearingInWrongLocation": "True", + "FFlagFixCrashChangingHierarchyInRelayout": "False", + "FFlagFixDevFrameworkDockWidgetMinSize": "True", + "FFlagFixDevFrameworkDockWidgetRestore": "True", + "FFlagFixDisplayScriptsFolderInAssetManager": "True", + "FFlagFixDraggerCursors": "True", + "FFlagFixDuplicateChildNames": "True", + "FFlagFixDuplicateNamedRoot": "True", + "FFlagFixDuplicateWatches": "True", + "FFlagFixEdgeOnRotateError": "True", + "FFlagFixEmotesHotKeysEquipTools": "True", + "FFlagFixEmotesMenuInputPassthrough": "True", + "FFlagFixFastClusterEntityLocalBounds_PlaceFilter": "True;4599786547;5326950832", + "FFlagFixFirstPersonMouseCursorSnapping_CenterPos": "True", + "FFlagFixFirstPersonMouseCursorSnapping_ForceCursor": "True", + "FFlagFixFirstPersonMouseCursorSnapping_UWP": "True", + "FFlagFixFitToContentOnCloseError": "True", + "FFlagFixFolderDescendantSelection": "True", + "FFlagFixForNativeShareOnIPad135": "True", + "FFlagFixG3DFpChecks": "True", + "FFlagFixGameSettingsThumbnailDrag": "True", + "FFlagFixGameViewControllerViewRecreation": "True", + "FFlagFixGamepadContextActionServiceOverride": "False", + "FFlagFixGamepadCursorIdlePosition": "True", + "FFlagFixGamepadMenuButtonIOS": "True", + "FFlagFixGamepadNavigationWithACM": "True", + "FFlagFixGamepadOldMenuOpening": "True", + "FFlagFixGamepadR3LastInputType": "True", + "FFlagFixGamepadReportPlayer": "True", + "FFlagFixGamepadVibrationNotEnding": "True", + "FFlagFixGetAssetTypeErrorHandling": "True", + "FFlagFixGetStringForKeyCodeDeadKeyState": "True", + "FFlagFixGetStringForKeycodeCrash": "False", + "FFlagFixGetStringForKeycodeCrash2": "True", + "FFlagFixGettingAssetOwnerNameInAssetPreview": "True", + "FFlagFixGlobalRotateAgain": "True", + "FFlagFixGroupPackagesCategoryInToolbox": "True", + "FFlagFixHACDHullPointLoss": "True", + "FFlagFixHelpURL": "True", + "FFlagFixHorizontalScrollBarGaps": "True", + "FFlagFixHorizontalScrollBarInControlsPage": "True", + "FFlagFixHoverBoxThickness": "True", + "FFlagFixIAdornableCollectorCrash3": "False", + "FFlagFixIECompatiblityBug": "True", + "FFlagFixIKRotateCFrameError": "True", + "FFlagFixIOSTextFieldResignationOnReturn": "True", + "FFlagFixInGameMenuMissingAssets": "True", + "FFlagFixInGameMenuSliderClamping": "True", + "FFlagFixInGameNavTreeCrash": "True", + "FFlagFixInspectAndBuyGamepad": "True", + "FFlagFixInspectMenuAnalytics": "True", + "FFlagFixKeepingFolderAcquiredInStudioThroughTheFileSystem": "True", + "FFlagFixKeyframeDetectionV2": "True", + "FFlagFixKeysStuckOnTest": "True", + "FFlagFixLeaderboardWaitingOnScreenSize": "True", + "FFlagFixLightgridAsyncInvalidations": "True", + "FFlagFixLoadTimeReporting": "True", + "FFlagFixLoadableImageDoesNotLoadCachedImage": "True", + "FFlagFixLocalFreeformDrag": "True", + "FFlagFixLocalShutdownRequest": "False", + "FFlagFixLuaAppAvatarDraggable": "True", + "FFlagFixMacFullscreenTrackingInMenu": "True", + "FFlagFixMakeFriendsNavCrash": "True", + "FFlagFixMockStudioTheme": "True", + "FFlagFixModalGuisInFoldersBeingIgnored": "True", + "FFlagFixModelPreviewSelection": "True", + "FFlagFixModuleScriptBreakpointNotHitWhenParentScriptNotOpened": "False", + "FFlagFixModuleScriptBreakpointNotHitWhenParentScriptNotOpened2": "True", + "FFlagFixMouseInStandaloneWidgets": "True", + "FFlagFixMousePositionInWindowCheck": "True", + "FFlagFixMultiWindowMouseMovements": "True", + "FFlagFixNavigationToChatFromPN": "True", + "FFlagFixNonDuarShutdown": "True", + "FFlagFixNotificationScriptError": "True", + "FFlagFixOutBoundAccessInBoxMappedMesh": "False", + "FFlagFixOutOfBoundsMouseLocation": "True", + "FFlagFixOverZealousTextWrapping": "True", + "FFlagFixOverriddenDragAssert": "True", + "FFlagFixOverrideAssetGroupPlugins": "True", + "FFlagFixPIIFilterInErrorReporter": "True", + "FFlagFixPackageDragSlow": "True", + "FFlagFixPlaybackWithEndFrameAtZero": "True", + "FFlagFixPluginInvoke": "True", + "FFlagFixPluginQWidgetInitialization2": "True", + "FFlagFixPreserveCoverageMipGen": "True", + "FFlagFixPromiseUtilitiesBatch": "True", + "FFlagFixQuickCancelPurchase": "False", + "FFlagFixQuickOpenPluginDebug": "True", + "FFlagFixReplaceTerrainAir": "True", + "FFlagFixRespawnDialogOpeningWhenDisabled": "True", + "FFlagFixRichTextXAlignment": "True", + "FFlagFixRigUtils": "True", + "FFlagFixRobloxInputBadArrayLengthChecks": "True", + "FFlagFixRobloxInputBadArrayLengthChecksTheSagaContinues": "True", + "FFlagFixRunServiceStopFromPlugin": "True", + "FFlagFixScalingValueRename": "True", + "FFlagFixScalingValueRename_PlaceFilter": "False;370731277", + "FFlagFixScrollActionOffset": "True", + "FFlagFixScrollingFrameClipRect": "True", + "FFlagFixShadowBiasYetAgain": "True", + "FFlagFixSmallSurfaceGuiMouseInput": "True", + "FFlagFixStaleJointDisplay": "True", + "FFlagFixStarterGuiErrors": "True", + "FFlagFixStartupGameLaunchFromLink": "True", + "FFlagFixStrokeForFastRichTextLayout": "True", + "FFlagFixStudioEmulatorDeviceOrientation": "True", + "FFlagFixStudioFlagEditorCrash": "True", + "FFlagFixTableLayoutMinorAxisSortOrder": "True", + "FFlagFixTerrainAnisoVoxelisation": "True", + "FFlagFixTestServiceWithDebugging": "True", + "FFlagFixTextChangedFromEmptyForTextEntry": "True", + "FFlagFixTextSelectionForHighDpi": "True", + "FFlagFixTextureCubeFramebuffers": "True", + "FFlagFixTexturePackETCMips": "True", + "FFlagFixToggleOffDarkName": "True", + "FFlagFixTopBarOverLoadingScreen": "True", + "FFlagFixTreeViewFlatListDefault": "True", + "FFlagFixUnicodeTextSelection2": "True", + "FFlagFixUploadingImagesInGameSettings": "True", + "FFlagFixUseDevelopFetchPluginVersionId": "False", + "FFlagFixUseDevelopFetchPluginVersionId2": "True", + "FFlagFixVIPServerShutdownWarningText": "True", + "FFlagFixWarningsInGameSettings": "True", + "FFlagFixWeakFunctionRefInPlugin": "True", + "FFlagFixXSwipe": "True", + "FFlagFixZeroNormalInDecompositeGeometry": "True", + "FFlagFlagEditorEnableAddButton": "True", + "FFlagFlagEditorUseFlagConversionUtilities": "True", + "FFlagFlipTerrainNormalMap": "True", + "FFlagFlyweightServiceDataRecievedCallbackCrashFixEnabled": "True", + "FFlagForceCursorVisibleOnPurchasePrompt": "True", + "FFlagFrameStepJointsParallel": "False", + "FFlagFrameStepJointsParallel4": "False", + "FFlagFrameStepJointsParallel5": "False", + "FFlagFreeCameraForAdmins": "True", + "FFlagFreecamInTestServers": "True", + "FFlagFunCaptchaBedev2ForUWPLoginEnabled": "True", + "FFlagFunCaptchaBedev2ForUWPSignupEnabled": "True", + "FFlagFutureIsBrightCompatibilityMode": "True", + "FFlagFutureIsBrightForceCompatibilityOverLegacy": "True", + "FFlagFutureIsBrightPhase2Android": "True", + "FFlagFutureIsBrightPhase2FPCheck": "True", + "FFlagFutureIsBrightPhase2GL3": "True", + "FFlagFutureIsBrightPhase2GLES3": "True", + "FFlagFutureIsBrightPhase2_5EnableControls": "True", + "FFlagFutureIsBrightPhase2_5_v1": "True", + "FFlagFutureIsBrightPhase2_5_v2": "False", + "FFlagFutureIsBrightPhase2_5_v3": "True", + "FFlagFutureIsBrightPhase2iOS": "True", + "FFlagFutureIsBrightPhase3": "True", + "FFlagFutureIsBrightPhase3_PlaceFilter": "True;5594788124", + "FFlagFuzzyTerrainNormal": "True", + "FFlagGameDetailsPeekViewAnalyticsEvents": "True", + "FFlagGameDetailsPeekViewAnalyticsEvents2": "True", + "FFlagGameDetailsTopBarNavFix": "True", + "FFlagGameExplorerCopyPath": "True", + "FFlagGameLocaleIdInternalOverridesForceGameLocaleId": "True", + "FFlagGameMediaEntryIDOptional": "True", + "FFlagGamePerfMonitorGameCloseFix": "True", + "FFlagGamePerfMonitorStatsWindowFix": "True", + "FFlagGameSettingsFixNameWhitespace": "True", + "FFlagGameSettingsNetworkRefactor": "True", + "FFlagGameSettingsOnlyInPublishedGames": "True", + "FFlagGameSettingsPlaceSettings": "True", + "FFlagGameSettingsPreventClosingDialogWhileSaveInProgress": "True", + "FFlagGameSettingsShutdownAllServersButton": "True", + "FFlagGameSettingsUseUILibraryCheckBox": "True", + "FFlagGameSettingsUsesNewIconEndpoint": "True", + "FFlagGameinternationalizationApiWhitelist": "True", + "FFlagGamepadInputRaceConditionFix": "True", + "FFlagGamesHubCreationCenterPolicy": "True", + "FFlagGenerateMeshLOD_MeshOptForSkin_PlaceFilter": "True;4599786547;5326950832", + "FFlagGetContentsPropertyStringRaceConditionFix": "True", + "FFlagGetFVariableThrowsAgain": "True", + "FFlagGetGameLocaleOnlyFromJoinBlob": "False", + "FFlagGetScreenPositionOffsetCamPtrGuard": "True", + "FFlagGetTranslatorApiOnlyForPublishedGame": "True", + "FFlagGetVersionHistoryAssetFailure": "True", + "FFlagGfxPartInvalidationLimitToTime": "False", + "FFlagGfxPartInvalidationLimitToTime2": "True", + "FFlagGlsles3Mediump1": "False", + "FFlagGlsles3MediumpNoHQ1": "True", + "FFlagGlslesMediump1": "False", + "FFlagGraphicsAdrenoDisableExtFmt": "False", + "FFlagGraphicsAdrenoDisableExtFmt2": "True", + "FFlagGraphicsClampDepthBias": "True", + "FFlagGraphicsD3D11PerFrameQuery": "True", + "FFlagGraphicsD3D9GracefullyHandleBadWindowHandle": "True", + "FFlagGraphicsDisableMetalIntel": "False", + "FFlagGraphicsGL3InstancingEnabled5": "True", + "FFlagGraphicsGL3UseUBO3": "True", + "FFlagGraphicsGLAndroidExtendedFormats2": "False", + "FFlagGraphicsGLAndroidExtendedFormats3": "True", + "FFlagGraphicsGLDisableTimerQueryAdreno": "False", + "FFlagGraphicsGLDisableVAO": "True", + "FFlagGraphicsGLDoubleBufferDynamic": "True", + "FFlagGraphicsGLFixCopyFramebufferMip": "True", + "FFlagGraphicsGLHD3000DisableGL3": "False", + "FFlagGraphicsGLHD3000DisableUBO": "True", + "FFlagGraphicsGLPerFrameQuery": "False", + "FFlagGraphicsGLPerFrameQuery2": "False", + "FFlagGraphicsGLProperCheckForFramebuffer": "True", + "FFlagGraphicsGLSeparateCB": "True", + "FFlagGraphicsMetalCompactGeometry2": "True", + "FFlagGraphicsMetalFixD16Check": "True", + "FFlagGraphicsMetalMacIncMinSpec": "True", + "FFlagGraphicsMetalPrivateMemory": "True", + "FFlagGraphicsVulkanAndroidExtendedFormats2": "False", + "FFlagGraphicsVulkanAndroidExtendedFormats3": "True", + "FFlagGraphicsVulkanBetterTransferBarriers": "True", + "FFlagGraphicsVulkanEnableDepthBiasClamp": "True", + "FFlagGraphicsVulkanPerFrameQuery": "True", + "FFlagGraphicsVulkanPixelbookDisable": "True", + "FFlagGraphicsVulkanPreRotate": "False", + "FFlagGraphicsVulkanPreRotate2": "True", + "FFlagGreyOutPublishForAssetConfigIfServiceIsSelected": "False", + "FFlagGridUseConstRows": "True", + "FFlagGroupEditDevConsoleButton": "True", + "FFlagGuardAgainstNilRadioTech": "True", + "FFlagGuestFriendCheckFailImmediate": "True", + "FFlagGuiApplyInsertionOrderSort": "False", + "FFlagGuiApplyInsertionOrderSort2": "False", + "FFlagGuidCrashFix": "True", + "FFlagHandleCanceledToolboxDrag": "True", + "FFlagHandleFlakeyMouseEvents": "True", + "FFlagHandleMouseDownWhenFocused": "True", + "FFlagHandleNoRotateTarget": "True", + "FFlagHandleOddNesting": "True", + "FFlagHelpMenuShowPlaceVersion": "True", + "FFlagHideInvalidEventTiles": "True", + "FFlagHideNoAccessGroupPackages": "True", + "FFlagHideOneChildTreeviewButton": "False", + "FFlagHideThirdPartyPurchaseFailure": "True", + "FFlagHideTopBarWhenInspectOpen": "True", + "FFlagHoverBoxActiveColor": "True", + "FFlagHowToSendAMessage": "True", + "FFlagHttpClientDisconnectResultSignals": "True", + "FFlagHttpRemoveInMemoryCache": "True", + "FFlagHttpServiceLogPluginDomains": "True", + "FFlagHttpServiceNeverCache": "True", + "FFlagHttpServiceWorldsMostOverkillFlagForMovingCodeFourLines": "True", + "FFlagHttpUseContentCacheFlag3": "True", + "FFlagHttpUseMinGzip": "False", + "FFlagHumanoidCacheNameplate": "True", + "FFlagHumanoidNameplateRespectsLocale": "True", + "FFlagHumanoidPreventDuplicateAnimatorChildren": "True", + "FFlagIAPProductReducerV2": "True", + "FFlagIESuppressErrors": "True", + "FFlagIGPPPremiumPrice": "False", + "FFlagIGPPPremiumPriceV2": "False", + "FFlagIOSNowSupportsAussieMode": "True", + "FFlagIOSUseGamepadSupport": "True", + "FFlagIfYouDidntKnowNowYouKnow": "True", + "FFlagIgnoreActiveWhenProcessingPointerActions": "True", + "FFlagIgnoreCollisionPairs": "True", + "FFlagIgnoreLocaleInJoinScriptData": "False", + "FFlagIgnoreModalGuiWhenScreenGuiIsDisabled": "True", + "FFlagImagePickerNow": "True", + "FFlagImmHandlerFixJapaneseAndKorean": "False", + "FFlagImmHandlerFixJapaneseAndKorean2": "False", + "FFlagImmHandlerFixJapaneseAndKorean_PlaceFilter": "False; 252877716", + "FFlagImmediatelyApplyFlagsButton": "True", + "FFlagImplementIMEInStudio": "True", + "FFlagImproveCatalogPerformance": "True", + "FFlagImprovedHandleParams": "False", + "FFlagImprovedHandleParams2": "True", + "FFlagInGameHomeIcon": "True", + "FFlagInGameMenuInviteFriendsDisplayNameSearch": "True", + "FFlagInGameMenuOpenOnHover": "True", + "FFlagInGameMenuSinglePaneDesign": "True", + "FFlagInGameMenuSmallerSideBar": "True", + "FFlagInGameMenuUseContextualMenu": "True", + "FFlagInGameMenuUseUIBloxButtons": "True", + "FFlagInGameUIForceDefaultLocaleOnOSX": "True", + "FFlagInGameUIForceDefaultLocaleOnWin10": "True", + "FFlagInGameUIForceDefaultLocaleOnWin32": "True", + "FFlagIndentActionInContextMenu": "True", + "FFlagIndexedVertexStreamer2": "False", + "FFlagInfiniteTriangleMeshRecalcFixEnabled": "True", + "FFlagInitialClusterCacheUseArray": "True", + "FFlagInitializeModCodesForWindows": "True", + "FFlagInitializeTouchSenderByteBudget": "True", + "FFlagInitializeVideoManager": "True", + "FFlagInspectMenuEnableEmotes": "True", + "FFlagInspectMenuProgressiveLoading": "True", + "FFlagInspectMenuUpdateDisabledColor": "True", + "FFlagInstrumentMenuOpenMethods": "True", + "FFlagInternalGameLocaleEnabled": "True", + "FFlagInterpolateCullDistance": "False", + "FFlagInterpolationAwareTargetTime": "True", + "FFlagInvalidateNanTimeStamp": "True", + "FFlagInventoryApiInHttpWhitelist": "True", + "FFlagIsBEDEV2CaptchaEnabledForMobileLoginForAll": "True", + "FFlagIsBEDEV2CaptchaEnabledForMobileSignupForAll": "True", + "FFlagIsPasswordTextRendering": "True", + "FFlagIsPasswordValidationV2Enabled": "True", + "FFlagIsTwoStepResendV2Enabled": "True", + "FFlagIsTwoStepValidationV2Enabled": "True", + "FFlagIssueTrackerRefactor": "True", + "FFlagItemDetailsClosePeekViewFixes": "True", + "FFlagItemDetailsDeepLinkFix": "True", + "FFlagItemDetailsSmoothTransition3": "True", + "FFlagJIRA_RIDE_1135": "True", + "FFlagJIRA_RIDE_184_V2": "True", + "FFlagJIRA_RIDE_192": "True", + "FFlagJIRA_RIDE_630": "True", + "FFlagJIRA_RIDE_697": "False", + "FFlagJIRA_RIDE_711": "False", + "FFlagJIRA_RIDE_785": "True", + "FFlagJoinDataCacheCompressionImprovement": "True", + "FFlagJoinDataCacheOptimizeBlobCount": "True", + "FFlagJoinTimeCounters": "True", + "FFlagJoinTime_AvatarFastClusterSignal": "True", + "FFlagJoinTime_AvatarTextureCompositorSignal": "True", + "FFlagJoinTime_HttpQueuePrio": "True", + "FFlagJoinTime_LocalUserAnimationPriority": "True", + "FFlagJoinTime_LocalUserClusterPriority": "True", + "FFlagJoinTime_LocalUserMeshPriority": "True", + "FFlagJoinTime_LocalUserTexturePriority": "True", + "FFlagJoinTime_PassTexturePriority": "True", + "FFlagJointInstanceRenderAdornCheck": "True", + "FFlagJointsUseNoCollideJointCount3": "True", + "FFlagKeyDownAcrossAllWindows": "False", + "FFlagKeyframeSequenceEnableFrozen": "True", + "FFlagKillDownAwayState": "True", + "FFlagKillSurfaceJointsPart1": "True", + "FFlagLDLAkisMethodEnabled": "True", + "FFlagLDLUnrollMatrixOperations": "True", + "FFlagLDLUseStasisCache": "True", + "FFlagLSPOnTypeFormatingNewOptions": "True", + "FFlagLSPServerTextCache": "True", + "FFlagLandingPageRoundedCorners": "True", + "FFlagLanguageServiceDoesntDirtyDataModel": "True", + "FFlagLastInputTypeInStore": "True", + "FFlagLaunchAppWaitForABTestsInitialized": "True", + "FFlagLayoutRichTextFaster2": "True", + "FFlagLazyBoxSelect": "True", + "FFlagLeaderboardDontWaitOnChinaPolicy": "True", + "FFlagLeaderstatsWithASideOfClient": "True", + "FFlagLeaveStartingCoreScriptsToPlaceLauncher": "True", + "FFlagLegacyShadowMapFormatRG8": "True", + "FFlagLineHeightEnabled": "True", + "FFlagLinearFXBlurFix": "True", + "FFlagLoadCoreScriptsBeforeLock": "True", + "FFlagLoadCoreScriptsEvenInTeamCreate": "True", + "FFlagLoadPluginsInSubmitTask3": "True", + "FFlagLoadTheLoadingScreenEvenFaster": "True", + "FFlagLoadTheLoadingScreenFaster": "False", + "FFlagLoadTimesFromAppShellReporter": "True", + "FFlagLocServiceNullPtrCheckGetTranslator": "True", + "FFlagLocServicePerformanceAnalyticsEnabled": "True", + "FFlagLocServiceSeparateTextScraperStartPath": "True", + "FFlagLocalSpaceWidget": "True", + "FFlagLocalStorageDisablePathChangeChecks": "True", + "FFlagLocalStorageQueuePendingFlush": "True", + "FFlagLocalesInUserInfoOniOS": "True", + "FFlagLocalizationFormatTypeListEnabled": "True", + "FFlagLocalizationPageInGameSettingsV2": "True", + "FFlagLocalizationPageNullSourceLanguageFixEnabled": "True", + "FFlagLocalizationTableTruncateFix": "True", + "FFlagLocalizationToolsFixHttpFailureBacktrace": "True", + "FFlagLocalizationToolsLocalizationEnabled": "True", + "FFlagLocalizationToolsPluginV3Enabled": "True", + "FFlagLocalizeErrorCodeString": "True", + "FFlagLocalizePlaceholderText": "True", + "FFlagLocalizeVideoRecordAndScreenshotText": "True", + "FFlagLogBadConstructorArguments": "False", + "FFlagLogMetalErrors2": "True", + "FFlagLogPremiumImpressions": "True", + "FFlagLuaAppABTestFeaturedGameTileInSearch": "False", + "FFlagLuaAppABTestGameDetailsPeekView": "True", + "FFlagLuaAppABTestMorePageListGridLayout": "True", + "FFlagLuaAppABTestSearchResultsQ2DGameEmphasis": "False", + "FFlagLuaAppABTestUseSearchResultsQ2DHideBadGames": "False", + "FFlagLuaAppAEUseAppPolicyForCustomCostumeNames": "True", + "FFlagLuaAppAddGameSearchSessions": "True", + "FFlagLuaAppAutocompleteABTest": "False", + "FFlagLuaAppAutocompleteAdjustmentsBugfixes": "True", + "FFlagLuaAppAutocompleteHideSuggestionList": "False", + "FFlagLuaAppAutocompleteSession": "True", + "FFlagLuaAppBackButtonAnalyticsEvent": "True", + "FFlagLuaAppBacktraceReportBaseUrl": "True", + "FFlagLuaAppBulletSizeFix": "True", + "FFlagLuaAppCJVMorePageTermsPrivacy": "True", + "FFlagLuaAppCanDisableBackNavigation2": "True", + "FFlagLuaAppChatPageWaitUntilUserABTestsInitialized": "True", + "FFlagLuaAppConvertUniverseIdToStringV364": "False", + "FFlagFixDeveloperConsoleButtonSizeAndPositioning": "True", + "FFlagLuaAppDeepCopyNewMorePageItems": "True", + "FFlagLuaAppDeepLinkAfterAppDataFetch": "True", + "FFlagLuaAppDeepLinkEventReceiver": "True", + "FFlagLuaAppDelayGridViewSetState": "False", + "FFlagLuaAppDelayGridViewSetState2": "True", + "FFlagLuaAppDismissPeekViewWhenSearchBarFocused": "True", + "FFlagLuaAppDisplayFriendInGame": "True", + "FFlagLuaAppDisplayNamesEnabled": "True", + "FFlagLuaAppEnableAERedesign3": "True", + "FFlagLuaAppEnableBacktraceErrorReport": "True", + "FFlagLuaAppEnableErrorReporterRateLimit": "True", + "FFlagLuaAppEnableHomePageWithAvatarABTest3": "False", + "FFlagLuaAppEnableLuaCatalogPage3": "True", + "FFlagLuaAppEnableMorePageGridLayoutForAllClients": "True", + "FFlagLuaAppEnablePageBlur": "True", + "FFlagLuaAppEnableStopWatchReporter": "False", + "FFlagLuaAppEnableStyleProvider": "True", + "FFlagLuaAppEventReceiverFixes": "True", + "FFlagLuaAppEventsAddPageId": "False", + "FFlagLuaAppEventsAddPageIdV2": "True", + "FFlagLuaAppEventsMappedContext": "True", + "FFlagLuaAppEventsWithSession": "True", + "FFlagLuaAppFeaturedGameTileRoundedCorner": "True", + "FFlagLuaAppFillScrollingFrameWithLoadMore2": "False", + "FFlagLuaAppFixAndroidNavigation": "True", + "FFlagLuaAppFixCancelButton": "True", + "FFlagLuaAppFixGameCarouselNilEntries": "True", + "FFlagLuaAppFixGameListDupLoadMoreRequests": "True", + "FFlagLuaAppFixInfiniteRerender": "True", + "FFlagLuaAppFixLightTheme": "True", + "FFlagLuaAppFixNavigationMutedError": "True", + "FFlagLuaAppFixPrimaryStatIconColor": "True", + "FFlagLuaAppFixToastNotchOverlap": "True", + "FFlagLuaAppFriendsAnalyticsOnStartup": "True", + "FFlagLuaAppGDPeekViewNewSwitchNavigation": "True", + "FFlagLuaAppGameCarouselsSignalWhenMounted": "True", + "FFlagLuaAppGameDetailsGroupLinkPolicy": "True", + "FFlagLuaAppGameDetailsHideEmptySections": "True", + "FFlagLuaAppGameDetailsMorePWF": "True", + "FFlagLuaAppGameDetailsPlayWithFriends": "True", + "FFlagLuaAppGameDetailsPlayWithFriendsABTest": "False", + "FFlagLuaAppGameEventsTargetIdAndSearchContextV2": "True", + "FFlagLuaAppGameGridNewMetrics": "True", + "FFlagLuaAppGameImpressionsAnalyticsV2": "True", + "FFlagLuaAppGameListNewGridStyle": "False", + "FFlagLuaAppGameSearchImpressionsEvent": "True", + "FFlagLuaAppGameSearchPlayerSuggestion376": "True", + "FFlagLuaAppGameSearchQ2DEvents": "True", + "FFlagLuaAppGameSetTargetIdAnalytics": "True", + "FFlagLuaAppGameSortGridABTestEnabled": "False", + "FFlagLuaAppGameSortGridABTestEnabledV2": "False", + "FFlagLuaAppGameSortGridABTestEnabledV2_2": "False", + "FFlagLuaAppGameSortGridABTestEnabledV2_3": "False", + "FFlagLuaAppGameTileHideStatsABTest": "True", + "FFlagLuaAppGameTileHideStatsFeatureEnabled": "True", + "FFlagLuaAppGameTileOnActivatedFix": "True", + "FFlagLuaAppGameplayIntentReferralSource": "True", + "FFlagLuaAppGamesAPISetFeaturedGame": "True", + "FFlagLuaAppGamesPagePreloadingDisabled": "False", + "FFlagLuaAppGridViewRemoveStateDelay": "True", + "FFlagLuaAppHandlePurchaseFailWhenOwned": "True", + "FFlagLuaAppHomeIconPolicy": "True", + "FFlagLuaAppHttpsWebViews": "True", + "FFlagLuaAppImproveGameDetailsPeekViewUI": "True", + "FFlagLuaAppInitializeABTests": "False", + "FFlagLuaAppInitializeABTests2": "True", + "FFlagLuaAppInputValidationActionUsesCurrentText": "True", + "FFlagLuaAppLaunchGameWithAccessCode": "True", + "FFlagLuaAppLoginLog": "True", + "FFlagLuaAppLogoutDelayThemeClear": "False", + "FFlagLuaAppMakeAvatarThumbnailTypesEnum": "True", + "FFlagLuaAppMediumTileInGameSearchPage": "True", + "FFlagLuaAppMorePageFixEventLoading": "True", + "FFlagLuaAppMorePageMoveEventsToPosition6": "True", + "FFlagLuaAppMorePagePolicyFix": "True", + "FFlagLuaAppNativePurchase": "True", + "FFlagLuaAppNativeWrapperHideTabBar": "True", + "FFlagLuaAppNewEconomyApi2": "True", + "FFlagLuaAppNewPeekViewShadowAndDragger": "True", + "FFlagLuaAppNewThumbnailFinalState": "True", + "FFlagLuaAppNilGameTileFix": "True", + "FFlagLuaAppNilUserPresenceFix": "True", + "FFlagLuaAppPackageUrlBuilder": "False", + "FFlagLuaAppPeekViewHeightChangeFix": "True", + "FFlagLuaAppPolicyMockRefactor": "True", + "FFlagLuaAppPolicyRoactConnector": "True", + "FFlagLuaAppPolicyUseGuac": "True", + "FFlagLuaAppPreloadChatRefactor": "True", + "FFlagLuaAppPreloadDataInProgressWait": "True", + "FFlagLuaAppPremiumUpdatePrompt3": "True", + "FFlagLuaAppPremiumUpsellCancelFix": "True", + "FFlagLuaAppPurchaseErrorToastRefactor2": "True", + "FFlagLuaAppQ2DUXAdjustmentsBugfixes": "True", + "FFlagLuaAppRefactorInAppLinks2": "True", + "FFlagLuaAppRefreshScrollingFrameFix": "True", + "FFlagLuaAppRefreshScrollingFrameRefactor": "False", + "FFlagLuaAppRefreshScrollingFrameRefactor2": "False", + "FFlagLuaAppRefreshScrollingFrameRefactor3": "False", + "FFlagLuaAppRemoveGetFriendshipCountApiCalls": "True", + "FFlagLuaAppReportConnectFailSeparately": "True", + "FFlagLuaAppRestartOnLanguageChange": "True", + "FFlagLuaAppSearchBarGuardUIEvent": "True", + "FFlagLuaAppSearchBarNewUI5": "True", + "FFlagLuaAppSearchBarNoWrap": "True", + "FFlagLuaAppSecondaryButtonSpecifiesFont": "True", + "FFlagLuaAppSeeAllFriendsWebPage": "True", + "FFlagLuaAppSendLogsToBacktrace": "True", + "FFlagLuaAppSidePaddingInChildren": "False", + "FFlagLuaAppSidePaddingInChildren2": "True", + "FFlagLuaAppSingleTriggerForLocalPlayerManager": "True", + "FFlagLuaAppSiteBannerLinks": "True", + "FFlagLuaAppSiteMessageBannerEnabled": "True", + "FFlagLuaAppSizesWithValidDefaults": "True", + "FFlagLuaAppSocialLinksSplitGroup": "True", + "FFlagLuaAppSortFriendsFix": "True", + "FFlagLuaAppTabNameGamesToDiscoverOnIOS": "True", + "FFlagLuaAppTopBarCustomBackButton": "True", + "FFlagLuaAppUpdateGameSortIds": "True", + "FFlagLuaAppUseDetailedErrorSignal2": "True", + "FFlagLuaAppUseGameMediaV2": "True", + "FFlagLuaAppUseGameSetTargetId": "True", + "FFlagLuaAppUseGraphicWithBorderForPresenceV373": "True", + "FFlagLuaAppUseLoadableEventTile": "True", + "FFlagLuaAppUseNewAccordion": "True", + "FFlagLuaAppUseNewCarousel": "True", + "FFlagLuaAppUseNewEventsPage": "True", + "FFlagLuaAppUseNewGameTileGridStyle": "False", + "FFlagLuaAppUseNewLoadableImage": "True", + "FFlagLuaAppUseNewMorePage": "False", + "FFlagLuaAppUseNewPremiumIcon2": "True", + "FFlagLuaAppUseRoactRoduxNewConnectionOrder": "True", + "FFlagLuaAppUseSearchResultsQ2DGameEmphasis": "False", + "FFlagLuaAppUseSearchResultsQ2DGameEmphasis2": "True", + "FFlagLuaAppUseSearchResultsQ2DHideBadGames": "False", + "FFlagLuaAppUseSessionization": "True", + "FFlagLuaAppUseUIBloxToasts": "False", + "FFlagLuaAppUseUIBloxToasts2": "True", + "FFlagLuaAppUseWithLocalization": "True", + "FFlagLuaAppWebviewInChatFix": "True", + "FFlagLuaAppsLocalizationToolsDeprecated": "True", + "FFlagLuaCalculateJumpHeight": "True", + "FFlagLuaCatalogEnableFullViewToggleAnalytics": "True", + "FFlagLuaCatalogFixLongPriceText": "True", + "FFlagLuaCatalogFixRemoveSellToastIcon": "True", + "FFlagLuaCatalogFixSearchParameterAnalytics": "True", + "FFlagLuaCatalogInfoRowEclispe": "True", + "FFlagLuaCatalogKeepSellAlertPositionWithKeyboard": "True", + "FFlagLuaCatalogLimitSellPriceDigitsTo10": "True", + "FFlagLuaCatalogPremiumUpsellModal": "True", + "FFlagLuaCatalogRedirectOwnedBundleToCorrectCategory2": "True", + "FFlagLuaCatalogRefactorSpawns": "True", + "FFlagLuaCatalogShowFloodcheckErrorToast": "True", + "FFlagLuaCatalogUseOriginalInsufficentRobuxIcon": "False", + "FFlagLuaChatAddButtonThemeFixEnabled": "True", + "FFlagLuaChatAliasConfig_GlobalErrorWillDisable": "True", + "FFlagLuaChatAliasConfig_UserIdErrorWillDisable": "True", + "FFlagLuaChatAliasesSizingFix": "False", + "FFlagLuaChatAliasesSizingFixAgainV1": "False", + "FFlagLuaChatAliasesSizingFixV2": "True", + "FFlagLuaChatAliasesV3": "False", + "FFlagLuaChatAnalyticsEnabled": "True", + "FFlagLuaChatBoldUnreadMessageText": "True", + "FFlagLuaChatCenterAndroidHeader": "True", + "FFlagLuaChatDateContentOverlapFix": "True", + "FFlagLuaChatEnableFrequentUsersDiag": "True", + "FFlagLuaChatFixConversationHubHeaders369": "True", + "FFlagLuaChatHeaderEnableHomeButton": "True", + "FFlagLuaChatOnlyMarkUnreadWhenChatIsFocused": "True", + "FFlagLuaChatPlayTogetherABTestEnabled": "True", + "FFlagLuaChatPlayTogetherGameIconFix": "True", + "FFlagLuaChatPressEnterToSend": "True", + "FFlagLuaChatRecoverSignalRConnection": "True", + "FFlagLuaChatResizeUserChatBubbleModerationError": "True", + "FFlagLuaChatRoactAssetCard": "True", + "FFlagLuaChatScreenManagerAlwaysUpdatesWithDefaultsV390": "True", + "FFlagLuaChatScreenManagerResumeAndPauseAfterNavigation": "True", + "FFlagLuaChatShareGameBottomBarOverride": "True", + "FFlagLuaChatShareGameThumbnailMigrationV2": "False", + "FFlagLuaChatShareGameToChatFromChatABTestEnabled": "True", + "FFlagLuaChatSwipeToGoBackFromConversation369": "True", + "FFlagLuaChatToastRefactor369": "True", + "FFlagLuaDebuggerBreakOnError": "True", + "FFlagLuaDraggerHandleScale": "True", + "FFlagLuaDraggerIconBandaid": "True", + "FFlagLuaDraggerPerf": "True", + "FFlagLuaDraggerTerrainFixes": "True", + "FFlagLuaEnableRemoteThemeCheckV4": "True", + "FFlagLuaFixEconomyCreatorStatsUrl": "True", + "FFlagLuaGameDetailsPolishV367": "True", + "FFlagLuaGameDetailsRenderTransparentBackground2": "True", + "FFlagLuaGameDetailsUseGothamInDarkTheme": "True", + "FFlagLuaHomeMoveMyFeedToMore": "True", + "FFlagLuaHomePageShowAddFriendsButtonV361": "True", + "FFlagLuaHomePeopleListV1V361": "True", + "FFlagLuaHttpUrlBuilder": "True", + "FFlagLuaInviteFailOnZeroPlaceIdV384": "True", + "FFlagLuaInviteGameFixMessageAlignment": "True", + "FFlagLuaInviteGameHandleUnknownResponse": "True", + "FFlagLuaInviteGameMockTextLocalization": "True", + "FFlagLuaInviteGameTextLocalization": "True", + "FFlagLuaInviteModalEnabledV384": "True", + "FFlagLuaInviteNewAnalytics": "True", + "FFlagLuaLogInDisableAutoFocus": "True", + "FFlagLuaLoginUnverifiedEmailPrompt": "True", + "FFlagLuaPackagePermissions": "True", + "FFlagLuaPageLoadEvent": "True", + "FFlagLuaPickyScrollingPicker": "True", + "FFlagLuaPremiumCatalogAEV2": "True", + "FFlagLuaPremiumCatalogIGIAB": "True", + "FFlagLuaPremiumCatalogIGPP": "True", + "FFlagLuaPremiumCatalogTileFix": "True", + "FFlagLuaPublishFlowFixCreateButtonInChinese": "True", + "FFlagLuaSignUpBDayRefactor2": "True", + "FFlagLuaSignupValidationRefactor": "True", + "FFlagLuaTaggedUdataGc": "True", + "FFlagLuaUIBloxModalWindowAnchorPoint": "True", + "FFlagLuaUniversalAppRobloxHybridEvent": "True", + "FFlagLuaUseThirdPartyPermissions": "True", + "FFlagLuauBetterNonstrictDotVsColon": "True", + "FFlagLuauBetterPropertyAccessOnUnion": "True", + "FFlagLuauBetterTypeLint": "True", + "FFlagLuauBuiltinCalls": "True", + "FFlagLuauBuiltinOs": "True", + "FFlagLuauCaptureOp": "True", + "FFlagLuauCastTableToIndexerCorrectly": "True", + "FFlagLuauCompactLineInfo": "True", + "FFlagLuauCompileError": "True", + "FFlagLuauCompoundAssignment": "True", + "FFlagLuauContinue": "True", + "FFlagLuauCoroutineC": "True", + "FFlagLuauCovariant": "True", + "FFlagLuauElideConstLocals": "True", + "FFlagLuauEndMismatch": "True", + "FFlagLuauExtendedLiterals": "True", + "FFlagLuauExtraAccurateRobloxTypes": "True", + "FFlagLuauFasterHash": "True", + "FFlagLuauFasterSub": "True", + "FFlagLuauFixConditionRepeatUntil": "True", + "FFlagLuauFixSelectCrash": "True", + "FFlagLuauFixSetMetatableType": "True", + "FFlagLuauFixSetmetatableCrash": "True", + "FFlagLuauFrontendShouldntMemoizeNonexistentScripts": "True", + "FFlagLuauHighlightContinue": "True", + "FFlagLuauImmutableUpvalues": "True", + "FFlagLuauImproveLineInfo": "True", + "FFlagLuauImprovedBinaryOperatorInference": "True", + "FFlagLuauIncludeStudioSpecificEnums": "True", + "FFlagLuauInternalAlloc": "True", + "FFlagLuauInvariant": "True", + "FFlagLuauKeepConstUpvals": "True", + "FFlagLuauLimitRecursiveBlocks": "True", + "FFlagLuauLookupImportedTypeCorrectly": "True", + "FFlagLuauMagicFormat": "True", + "FFlagLuauNativeTypeof": "True", + "FFlagLuauNewDebugger": "True", + "FFlagLuauNewDebuggerGracefulYields": "True", + "FFlagLuauNewResume": "False", + "FFlagLuauNewResume2": "True", + "FFlagLuauNoGcDebt": "True", + "FFlagLuauNonstrictArgumentCounts2": "True", + "FFlagLuauOptimizeTableVarargs": "True", + "FFlagLuauOsTimeUTC": "True", + "FFlagLuauParseArgTypesRefactor": "True", + "FFlagLuauParserEnableTypeGroup": "True", + "FFlagLuauParserNoFatArrow": "True", + "FFlagLuauParserWarnOnFatArrow": "False", + "FFlagLuauPreciseLocals": "True", + "FFlagLuauRequireTracer": "True", + "FFlagLuauResolveModulesWithBfs": "True", + "FFlagLuauReworkDotVsColonWarnings": "True", + "FFlagLuauSetmetatableUseMetatableField": "True", + "FFlagLuauSkinnyArrows": "True", + "FFlagLuauSlightlyBetterRefinements": "True", + "FFlagLuauStricterLib": "True", + "FFlagLuauStringFastcall": "True", + "FFlagLuauStringPack": "True", + "FFlagLuauStringPackTypes": "True", + "FFlagLuauTranspilerCompliance": "True", + "FFlagLuauTypeAnnotationsEverywhere": "True", + "FFlagLuauTypeofFastcall": "True", + "FFlagLuauTypesInCoreScripts": "False", + "FFlagLuauTypesInCoreScripts2": "True", + "FFlagLuauUseClassesForRobloxApi": "True", + "FFlagLuauVersion": "True", + "FFlagLuauWarnOnUtf8": "True", + "FFlagMOBLUAPP2614": "True", + "FFlagMacGamepadUseGCController": "True", + "FFlagMacStudioInitCrashHandlingFirstAfterFlagLoaded": "True", + "FFlagMacStudioReportBFsAndPlugins": "True", + "FFlagMainBufferGuiLayoutTextAt1x": "False", + "FFlagMainBufferGuiLayoutTextAt1x2": "False", + "FFlagMakeAEGetAssetInfoPromise": "True", + "FFlagMakePluginsActivatableInScripts": "True", + "FFlagMalformedJoinBlobIsUnknownError": "True", + "FFlagManualFocusReleaseDisablesSinking": "True", + "FFlagMarkAppearanceDirtyWhenUIPaddingChanges": "True", + "FFlagMaterialGeneratorRefactorStep2": "True", + "FFlagMaterialGeneratorRefactorV1": "True", + "FFlagMeasureJoinToOutsidersUse": "True", + "FFlagMeasureRigidJointsNotInWorld": "True", + "FFlagMeasureSleepAssemblies": "False", + "FFlagMeasureSleepAssemblies2": "True", + "FFlagMegaReplicatorInitializeTaskQueue": "True", + "FFlagMegaReplicatorIsCloudEditInitialize": "True", + "FFlagMegaReplicatorSharedClassInfo": "True", + "FFlagMegaReplicatorSharedReplicationMarkers": "True", + "FFlagMegaReplicatorStartMegaSenderJob": "True", + "FFlagMegaReplicatorStoreWeakDm": "True", + "FFlagMemoryFromAppShellReporter2": "True", + "FFlagMemoryFromAppShellReporterAndroid": "False", + "FFlagMemoryFromAppShellReporterIOS": "False", + "FFlagMemoryPrioritizationEnabled": "True", + "FFlagMeshLODFixOutOfBoundAccess": "True", + "FFlagMeshLODUseAsyncHttpPost": "True", + "FFlagMetricCorrection": "True", + "FFlagMicroProfilerSessionAnalytics": "True", + "FFlagMigrateIkSolve": "True", + "FFlagMigrateTriangleMeshData3": "True", + "FFlagMinCursorChange": "True", + "FFlagMinScaleSizeFix": "True", + "FFlagMinimizePlayerListWhenTopBarOpen": "True", + "FFlagMobileChatOneIcon": "True", + "FFlagMobileUseApplicationDirectories": "True", + "FFlagModelInstanceCompletenessRefactor": "True", + "FFlagModelLodFixSanitizing": "True", + "FFlagModelMeshFixPackPosition": "True", + "FFlagModelMeshPackageFix": "True", + "FFlagModifiedMinimumDistance": "True", + "FFlagMonitorBatteryLevel": "True", + "FFlagMouseServiceWantsToBeIndependent": "True", + "FFlagMouseWheelEventSinkingPropagatesToGUI": "True", + "FFlagMoveViaSelectionCenter": "True", + "FFlagMoverSwapWeld": "True", + "FFlagMultiBinaryAssets": "True", + "FFlagMultipleBoxesManualFocusRelease2": "True", + "FFlagNavHighlightUseUIBloxAnimatedItem": "True", + "FFlagNavigationDebugDrawIterateSpiral": "True", + "FFlagNavigationFixPathUpdateEventCall": "True", + "FFlagNavigationFixPathUpdateImplCall": "True", + "FFlagNavigationRemoveVertexCheckBounds": "True", + "FFlagNavigationTabBarVisibilityWithBack": "False", + "FFlagNetworkDeprecateScopeNames": "True", + "FFlagNetworkDeserializePacketsInAJob": "True", + "FFlagNetworkDeserializePacketsInAJob_PlaceFilter": "False;2291717546", + "FFlagNetworkSchemaEventsNeverUseDictionary": "True", + "FFlagNetworkSchemaFixedDictionaryFormat": "True", + "FFlagNetworkStreamingPhysicsObserverInit2": "False", + "FFlagNetworkStreamingPhysicsObserverInit4": "False", + "FFlagNetworkStreamingPhysicsObserverInit6": "True", + "FFlagNewABTestFramework2": "True", + "FFlagNewAppBridgeInitMoreVerbs": "True", + "FFlagNewAppBridgeInitVerbs": "True", + "FFlagNewAwardBadgeEndpoint2": "False", + "FFlagNewAwardBadgeEndpoint_PlaceFilter": "True;2534981557", + "FFlagNewCharacterSoundScript": "True", + "FFlagNewDefaultScriptSource": "True", + "FFlagNewFastClusterImplementation2_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723", + "FFlagNewFastClusterImplementation3_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagNewFastClusterImplementation_PlaceFilter": "True;4599786547;5326950832", + "FFlagNewGeometryGeneratorImplementation_PlaceFilter": "True;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5751328107;5947859215", + "FFlagNewInGameTopBarForEveryone": "True", + "FFlagNewIrradianceCalculation": "True", + "FFlagNewPlayerListFixBackpackMemoryLeak": "True", + "FFlagNoCollisionConstraintHumanoidFix": "True", + "FFlagNoCostumeSaveButtonFix": "True", + "FFlagNoDisconnectEventBeforeUnmountWorkaround": "True", + "FFlagNoFaceHeadMeshTag": "True", + "FFlagNoJoinForMoveTo": "True", + "FFlagNoMoreCursorErrors": "True", + "FFlagNoMoreDraggerFloatingPointError": "True", + "FFlagNoMoveToPile": "True", + "FFlagNoProtectedStringCache": "True", + "FFlagNoRedrawWindow": "True", + "FFlagNoScriptCache": "True", + "FFlagNoSpaceAfterReturnInTextBox": "True", + "FFlagNoSurfaceRotate": "True", + "FFlagNotEraseCallbackQueueOnPlayerRemoving": "True", + "FFlagNotGroundhogsDay": "True", + "FFlagNotificationScript2UseFormatByKey": "True", + "FFlagOldInGameMenuDisplayNamePolicy3": "True", + "FFlagOnDemandFontLoading": "True", + "FFlagOneSocketServerForStudio": "True", + "FFlagOnlyAllowInsertPackageInEdit": "True", + "FFlagOnlyCheckHeadAccessoryInHeadShot": "True", + "FFlagOnlyFireFocusedOnce": "True", + "FFlagOnlyReadyHover": "True", + "FFlagOpenSocialMediaInExternalBrowser": "True", + "FFlagOptimizedPrimitivesHere": "True", + "FFlagOptmizedVec3Int32HasherEnabled": "True", + "FFlagOutputWidgetFindEnabled": "False", + "FFlagOverrideAssetFolder": "True", + "FFlagOverrideMouseBehaviourFireChanged": "True", + "FFlagPCStudioReportBFsAndPlugins": "True", + "FFlagPGSAdaptiveCollisionMarginFixEnabled": "False", + "FFlagPGSAlwaysActiveMasterSwitch": "True", + "FFlagPGSConstraintAlign2AxesCompliantCacheFix": "True", + "FFlagPackageDiffBugFix": "True", + "FFlagPackageFixDiffRootNameChange": "True", + "FFlagPackagePermissionsAddDefaultNone": "True", + "FFlagPackageRemoveJointInstanceWhenHashing": "True", + "FFlagPackageRetrieveUpToVersionAfterPublish": "True", + "FFlagParallelFetchInternalPermission": "True", + "FFlagParallelReceiveJob": "True", + "FFlagParallelTerrainBroadphase2": "True", + "FFlagParentWeldToOtherPart": "True", + "FFlagPartCastShadow": "True", + "FFlagPartMaterialTableReload": "True", + "FFlagPassDataModelDPIScale": "True", + "FFlagPassPointerActionsToGuiObjects": "True", + "FFlagPasswordFieldIntegrationEnabled": "True", + "FFlagPeekPreviewMenuClose": "True", + "FFlagPeekViewSinkInputTo3dView": "True", + "FFlagPerPeerSnfWhitelist": "True", + "FFlagPerformPurchaseAcceptsGamePassInfoType": "True", + "FFlagPerformPurchaseNewBundleInfoTypeEnabled": "True", + "FFlagPerformRendererTextShearing": "True", + "FFlagPerformanceProfilerAnalytics": "True", + "FFlagPhoneHomeSooner": "True", + "FFlagPhysicsNewConvexDecompositionEnabled": "False", + "FFlagPhysicsSleepImprovementsBeta": "False", + "FFlagPlaceLauncherCollectOnMainThread": "True", + "FFlagPlaceLauncherScriptShutdownTimeout": "True", + "FFlagPlayAudioVideoInPlugins": "True", + "FFlagPlayTogetherFromGameCard": "True", + "FFlagPlayerDisplayName": "True", + "FFlagPlayerListAdjustHeightToMatchLegacy": "True", + "FFlagPlayerListBetterDropDownPositioning2": "True", + "FFlagPlayerListBetterGroupCheck": "True", + "FFlagPlayerListDesignUpdate": "True", + "FFlagPlayerListDontCreateUIWhenDisabled_PlaceFilter": "True;3411100258", + "FFlagPlayerListDontSinkTouchUnnecessarily": "True", + "FFlagPlayerListDontSortTeamsByScore": "True", + "FFlagPlayerListFixBlockedInitalization": "True", + "FFlagPlayerListFixContextMenuFlashing": "True", + "FFlagPlayerListFixLeaderboardDisabledError": "True", + "FFlagPlayerListFixStatFlickering": "True", + "FFlagPlayerListFixTeamUpdates": "True", + "FFlagPlayerListFixTitleBarTransparency": "True", + "FFlagPlayerListFixTouchInputState": "True", + "FFlagPlayerListFixTouchInputState2": "True", + "FFlagPlayerListFixUnexpectedLeaderstatsTypes": "True", + "FFlagPlayerListFixXboxLayout": "True", + "FFlagPlayerListFormattingUpdates": "True", + "FFlagPlayerListInitalizePerformanceStatsVisible": "True", + "FFlagPlayerListMorePerfImprovements": "False", + "FFlagPlayerListMorePerfImprovements2": "True", + "FFlagPlayerListMorePermissiveLeaderstatsCheck": "True", + "FFlagPlayerListNewIcons": "False", + "FFlagPlayerListPerformanceImprovements": "True", + "FFlagPlayerListPremiumPadding": "True", + "FFlagPlayerListUseDisplayNameChina": "True", + "FFlagPlayerListUseDisplayNameChina2": "True", + "FFlagPlayerListUseUIBloxIcons": "True", + "FFlagPlayerNoAccessRadius": "True", + "FFlagPlayerPolicyHttpRequestHealthReportEnabled": "True", + "FFlagPlayerPolicyHttpRequestHealthReportToInfluxEnabled": "True", + "FFlagPluginActionSetChecked": "True", + "FFlagPluginActionSetDefaultShortcut": "True", + "FFlagPluginActionSetEnabled": "True", + "FFlagPluginIdentityFix": "True", + "FFlagPluginMDIInterface": "False", + "FFlagPluginManagementFixHorizontalScrollbar": "True", + "FFlagPluginManagementFixRemovePlugins": "True", + "FFlagPluginManagementInStudio2": "True", + "FFlagPluginManagementPrettifyDesign2": "True", + "FFlagPluginManagementSkipInvalidAssetIds": "True", + "FFlagPointerActions2": "True", + "FFlagPointsServiceNewEndpoints": "True", + "FFlagPolicyServiceStoreHttpResponseToLocalStorage": "True", + "FFlagPreCoreBlurChunksMdrSpace": "True", + "FFlagPrebuiltCoreScriptTranslations": "True", + "FFlagPrefetchCharacterInfoForSignUp": "True", + "FFlagPremiumCatalogAESort": "True", + "FFlagPremiumLuaUpsellEnabled": "True", + "FFlagPremiumLuaUpsellEnabledV2": "True", + "FFlagPremiumSettingsLabel": "True", + "FFlagPremiumUpsellPrecheck": "True", + "FFlagPresetLightRefactor": "True", + "FFlagProductPercentLocFix": "True", + "FFlagPromptRobloxPurchaseEnabled": "True", + "FFlagProtectedStringUsesSharedString2": "True", + "FFlagProximityPromptFixSpam": "True", + "FFlagProximityPromptLiveChanges": "True", + "FFlagProximityPromptLocalization": "True", + "FFlagProximityPromptMoreKeyCodes": "True", + "FFlagProximityPromptNoButtonDrag": "True", + "FFlagProximityPromptPauseMenuFix": "True", + "FFlagProximityPromptsAllowedInInsertMenu": "True", + "FFlagProximityPromptsAllowedInInsertMenu_PlaceFilter": "True;4599786547", + "FFlagProximityPromptsEnabled": "True", + "FFlagProximityPromptsEnabled_PlaceFilter": "True;4599786547", + "FFlagProximityPromptsFadeIn": "True", + "FFlagProximityPromptsFixPreferredParent": "True", + "FFlagPublicIKSolve": "True", + "FFlagPublishPlaceSupportUnicodeTextLength": "True", + "FFlagPublishPlaceToRobloxLuaPlugin": "True", + "FFlagPurchasePromptPremiumEnabled2": "True", + "FFlagQ220PermissionsSettings": "True", + "FFlagQtReadSystemProxy": "True", + "FFlagQuantumGuiClipScreenGuiToViewport2": "False", + "FFlagQuantumGuiText2": "False", + "FFlagQuantumGuiText3": "True", + "FFlagQuantumScrollingFrame4": "False", + "FFlagQuantumScrollingFrame5": "True", + "FFlagQueryFrustumAndUpdateRange": "False", + "FFlagQueueUIEventsDuringLayout": "False", + "FFlagQueueUIEventsDuringLayout2": "True", + "FFlagQuickOpenFixHighLight": "True", + "FFlagQuickOpenFixSpinner": "True", + "FFlagQuickOpenSearchScriptContent": "True", + "FFlagRCCSupportTeamTest": "True", + "FFlagRTMemoryless": "True", + "FFlagRakNetSupportIpV6": "False", + "FFlagRankMatchByMatchedLength": "True", + "FFlagRaycastSourceCollisionGroup": "False", + "FFlagRaycastSourceCollisionGroup2": "True", + "FFlagRbxThumbAllowAnyParamsOrder": "True", + "FFlagRbxThumbSupportCircularThumbnails": "True", + "FFlagReQueryPremiumOnError": "True", + "FFlagRealtimeFriendsContextualMenuRefactor": "True", + "FFlagRecalculateAbsolutePlacementFix": "True", + "FFlagReconnectToStarterPlace": "True", + "FFlagRecordHopperServiceStats": "True", + "FFlagRecordInGameDeaths": "False", + "FFlagRecordRecording": "True", + "FFlagReduceRelentlessRemoteReminders": "True", + "FFlagRefactorPluginLoading": "False", + "FFlagRefactorPluginLoading2": "False", + "FFlagRefactorPluginLoading3": "False", + "FFlagRefactorPluginLoading4": "False", + "FFlagRefactorPluginLoading5": "True", + "FFlagRefactorPluginLoadingForDeadlock": "True", + "FFlagRejectBrowserTrackerId0": "True", + "FFlagReleaseLegacyShadowMap": "True", + "FFlagRemoveAssetUploadUrlSuffix": "True", + "FFlagRemoveCommittedDraftsFromSelection": "True", + "FFlagRemoveDmCheckInSetLocalPlayerInfo": "True", + "FFlagRemoveEndOfScrollMessage": "True", + "FFlagRemoveImplicitIkDraggerUndoWaypoint": "True", + "FFlagRemoveInGameFollowingEvents": "True", + "FFlagRemoveInGameFollowingServer": "True", + "FFlagRemoveItemASHX": "True", + "FFlagRemoveKeyboardOnShutdownIOS": "True", + "FFlagRemoveLinkFromKinematicJoints": "False", + "FFlagRemoveLinkFromKinematicJoints2": "True", + "FFlagRemoveOldPhysicsPacketCache": "True", + "FFlagRemoveReflectionScaleValue": "True", + "FFlagRemoveRelativePath": "True", + "FFlagRemoveToolTipsFromStatusBar": "True", + "FFlagRemoveUILibraryTimeline": "True", + "FFlagRemoveUnlocalizedButtonText": "True", + "FFlagRemoveVehicleSeatCameraCFrameSet": "True", + "FFlagRemoveWakeForRenderJob": "True", + "FFlagRenderAdornFixMdrColor": "True", + "FFlagRenderAlphaToCoverage": "True", + "FFlagRenderAtmosphere": "True", + "FFlagRenderAtmosphereRefreshSky": "True", + "FFlagRenderAtmosphereRefreshSky2": "True", + "FFlagRenderBiasGlassTint": "True", + "FFlagRenderCorrectLinearUnderWaterFog": "True", + "FFlagRenderCreeper": "True", + "FFlagRenderDXT_KTX": "True", + "FFlagRenderDecorationGrass": "True", + "FFlagRenderDynamicLocalShadowmapSize": "True", + "FFlagRenderEmitterRecomputeOnChange": "False", + "FFlagRenderEmitterRecomputeOnChange2": "False", + "FFlagRenderEmitterRecomputeOnChange3": "True", + "FFlagRenderEnableDepthClamp": "True", + "FFlagRenderEnableMSAAShadows": "True", + "FFlagRenderFastTerrainLodUpdate": "False", + "FFlagRenderFixDDSCubeLoad": "True", + "FFlagRenderFixEmojiPadding": "True", + "FFlagRenderFixEvsmFiltering": "True", + "FFlagRenderFixForcefieldFlags": "True", + "FFlagRenderFixGrassUpdates": "True", + "FFlagRenderFixHamArray": "False", + "FFlagRenderFixIncompleteMipChain": "True", + "FFlagRenderFixMissingEnvmap": "True", + "FFlagRenderFixShadowFrustumIndex": "True", + "FFlagRenderFixSun3TimesRender": "True", + "FFlagRenderFixSurfaceLight": "True", + "FFlagRenderForceContext": "True", + "FFlagRenderForcefieldCacheFix": "True", + "FFlagRenderForcefieldFix": "True", + "FFlagRenderForcefieldMaterial2": "True", + "FFlagRenderGlassTintLOD2FogFix": "True", + "FFlagRenderGrassUpdateBudgetFix": "True", + "FFlagRenderHalfresShadowsVulkan": "True", + "FFlagRenderImproveStreaming": "False", + "FFlagRenderImproveStreaming2": "False", + "FFlagRenderImproveStreaming3": "True", + "FFlagRenderInstancingEnabled8": "True", + "FFlagRenderIrradianceSkyFix": "True", + "FFlagRenderMarkDirtyOnlyRenderableChunks": "True", + "FFlagRenderMessagesAsGui": "True", + "FFlagRenderMetalFixMaxFP16Samples": "True", + "FFlagRenderMetalMaxTextureSize": "True", + "FFlagRenderMetalMemorylessTargets": "True", + "FFlagRenderMsaaShadowsVulkan": "True", + "FFlagRenderNewMinShadingLevel": "True", + "FFlagRenderNicerStitches": "True", + "FFlagRenderOpaqueWithAlpha": "True", + "FFlagRenderPartInstancingEnabled6": "True", + "FFlagRenderPrepassOpaqueWithAlpha": "False", + "FFlagRenderSUGroupDynamicParts": "False", + "FFlagRenderSUGroupDynamicParts2": "True", + "FFlagRenderSceneUpdaterRefactor1": "False", + "FFlagRenderShadowClearFix": "True", + "FFlagRenderShadowDisableBottomClip": "True", + "FFlagRenderShadowDynamicInstancing": "True", + "FFlagRenderShadowLODFix": "True", + "FFlagRenderShadowSingleCascade": "True", + "FFlagRenderShadowmapBatchUpdates": "True", + "FFlagRenderShadowmapCheckCB": "True", + "FFlagRenderShadowmapNoMSAADepth": "True", + "FFlagRenderSuperLQTerrainGLES2": "False", + "FFlagRenderSurfaceAppearance_v1_ColorMapOnly_PlaceFilter": "True;5004798193", + "FFlagRenderSurfaceAppearance_v2": "True", + "FFlagRenderSurfaceAppearance_v2_PlaceFilter": "false;14;4599786547;1718213840;4990012135;5229799451;5100919959;5064251723;5326950832;5402291484;5594788124;5792084285;1952335895;5716845078;5751328107;5588662702;5550062757;5646917919;5790039516;5796518985;5796546949;5796554295;5792232897;5762960116;5947859215", + "FFlagRenderTerrainGrassNoSpecular2": "False", + "FFlagRenderTerrainGrassNoSpecular3": "False", + "FFlagRenderTerrainGrassNoSpecular4": "True", + "FFlagRenderUseFastShaderPack": "True", + "FFlagRenderUseShadowGeometryForLegacyShadows": "True", + "FFlagRenderUseTexturePackColor": "True", + "FFlagRenderVulkanSyncCompute": "True", + "FFlagReplaceGetCurrentUserashx": "False", + "FFlagReplicateStarterPackServiceProperties": "True", + "FFlagReplicateTeamServiceProperties": "True", + "FFlagReplicatorInitializeSharedSchema": "True", + "FFlagReportDevConsoleOpenClose": "True", + "FFlagReportExplicitAutoJointsJoinAll": "True", + "FFlagReportGameJoinLoadTime": "True", + "FFlagReportGameJoinSession": "True", + "FFlagReportGpuName": "True", + "FFlagReportInGameAssetSales": "True", + "FFlagReportInputMethodAnalytics": "False", + "FFlagReportJoinAllCount": "True", + "FFlagReportLocalizationDataLoadingException": "True", + "FFlagReportMechanismChangeDuringGameplayCount": "True", + "FFlagReportRuntimeJoinCount": "True", + "FFlagReportStudioPublishSaveFailure": "True", + "FFlagReportTimeToPlay": "True", + "FFlagReportWndGestures": "False", + "FFlagRequestAssetGenerationAfterSuccess": "True", + "FFlagRerouteWwwAvatarToApp": "True", + "FFlagResellersListClickThrough": "True", + "FFlagResetKeyStatesOnWindowGainFocus": "True", + "FFlagResetMobileGamepadsOnDataModelLoad": "True", + "FFlagResetMouseDeltaFix": "True", + "FFlagResetPluginMouseIcon": "False", + "FFlagResetPluginMouseIcon2": "True", + "FFlagRetainHoverPart": "True", + "FFlagRetranslateOnTextScraperStart": "True", + "FFlagRevertCtrlScale": "True", + "FFlagRewriteScriptDocumentChangeEvent": "True", + "FFlagRichText3": "True", + "FFlagRoactBubbleChat": "True", + "FFlagRoactBubbleChat_PlaceFilter": "True;20907", + "FFlagRoactGameSharePageV2": "False", + "FFlagRoactPurchasePromptAllowBundles": "True", + "FFlagRoactPurchasePromptAllowBundles_PlaceFilter": "True;3155066112;3157761435;3204147952;189707", + "FFlagRobloxGuiSiblingZindexs": "True", + "FFlagRobloxGuiSiblingZindexs2": "True", + "FFlagRobloxScriptRequireErrorMessage": "True", + "FFlagRotateCameraForRightPart": "True", + "FFlagRotationTicks": "True", + "FFlagRoundInUDimLerp": "True", + "FFlagRoundRotation": "True", + "FFlagRoundUpTextSizeInEngine": "False", + "FFlagSHAllowArbitraryLevelCount": "True", + "FFlagSHComputeExtentsTimeReportingEnabled": "True", + "FFlagSHStatReportingEnabled": "True", + "FFlagScaleAlwaysAnchors": "True", + "FFlagScaleDraggerPartBias": "True", + "FFlagScaleToolUseBinarySearch": "True", + "FFlagScaleUnionsUniformly": "True", + "FFlagScriptContextEnableDetailedErrorSignal": "True", + "FFlagScriptContextLastResume": "True", + "FFlagScriptDocModeSwitchCrashFix": "True", + "FFlagScriptEditorEnableMoveLinesCmd": "True", + "FFlagScriptEditorEnableRulers": "True", + "FFlagScriptEditorEnableShowWhitespace": "True", + "FFlagScriptEditorRCityTelemetry": "True", + "FFlagScriptSideWidgetSelect": "True", + "FFlagScrollInOnlyDirectionAvailable": "False", + "FFlagScrollInOnlyDirectionAvailable2": "True", + "FFlagScrollingFrameDoNotProcessMouseCancel": "True", + "FFlagScrollingFrameFixElasticBoundingDecrease": "True", + "FFlagScrollingFrameLayoutV3": "False", + "FFlagScrollingFrameLayoutV3_2": "True", + "FFlagScrollingFrameSinkMoreInput": "False", + "FFlagScrollingFrameSinkMouseDownOnScrollbar": "True", + "FFlagScrollingFrameTrackpadSupport": "True", + "FFlagSelectAfterStop": "True", + "FFlagSelectWeldConstraints": "True", + "FFlagSelectionServiceAddRemove": "True", + "FFlagSellPageUseVerticalScrollView": "True", + "FFlagSendJoinTimesToDiag_PlaceFilter": "true;370731277", + "FFlagSeparateSendFromProcessMouseMove": "True", + "FFlagSerializerIgnoresMD5": "True", + "FFlagSerializerWritesB2b": "True", + "FFlagSetClientJobId": "True", + "FFlagSetContentLoadedBitBeforeEmittingSignal": "True", + "FFlagSetInsertPoint": "True", + "FFlagSetInsertPointOnSelect": "True", + "FFlagSetPlaceIdInAdvance3": "True", + "FFlagSettingsHubInviteReleaseStreamTimeAs10": "True", + "FFlagSettingsHubInviteToGameDefaultThumbnailSize150x150": "True", + "FFlagShaderManagerHotloadsShadersInStudio": "True", + "FFlagShareGameEventConsolidationEnabled": "True", + "FFlagShowAssetConfigReasons2": "False", + "FFlagShowBonesAsConstraints_PlaceFilter": "True;4599786547;5326950832", + "FFlagShowInternalBetaInSettings": "True", + "FFlagShowModeratedPluginInfo": "True", + "FFlagShowReportOptionInToolbox": "True", + "FFlagShowScriptInExplorer": "True", + "FFlagShowWarningsForUnregisteredOptions": "True", + "FFlagSignalRHeartbeatFix": "True", + "FFlagSignalRHubConnectionDoNotSetCookiesInHttp": "False", + "FFlagSignalStopForZeroWeight": "True", + "FFlagSignatureSerialization": "True", + "FFlagSimBulletContactInitilizesConnector": "True", + "FFlagSimDeprecateConstraintLegacyAngularVelocity": "True", + "FFlagSimEnablePreciseConvexDecomposition": "True", + "FFlagSimLDLProgramMemoryOptimization": "True", + "FFlagSimSolverOptimizedIslandizer2": "False", + "FFlagSimSolverOptimizedIslandizer3": "False", + "FFlagSimSolverOptimizedIslandizer4": "False", + "FFlagSimSolverOptimizedIslandizer5": "True", + "FFlagSimulateStageUseArray": "True", + "FFlagSinglePartAlwaysLocalSpace": "True", + "FFlagSingleSurfaceAppMarshallerDoTeleport": "True", + "FFlagSkipFirstMechanismChangeReport": "True", + "FFlagSkipLowResFix": "False", + "FFlagSkipLowResFix2": "True", + "FFlagSkyNoTranslationAndSaturate": "True", + "FFlagSmallerToolboxMinWidth": "True", + "FFlagSmoothAttachmentMovement": "True", + "FFlagSocialLibraryEnabled": "True", + "FFlagSocketOptionFixAndLoggingImprovements": "True", + "FFlagSolverRemoveBadDebugCode": "True", + "FFlagSoothsayerRoactChatEnabled": "True", + "FFlagSoothsayerRoactChatEnabled4": "True", + "FFlagSortsAndFiltersFitComponentFix": "True", + "FFlagSpanningEdgeCacheIsInTree": "True", + "FFlagStandalonePluginsSupport": "False", + "FFlagStandardizeVector3Case": "True", + "FFlagStartClearUnusedRefsJob": "True", + "FFlagStartOfLineCommand": "True", + "FFlagStartWarningStoppers": "True", + "FFlagSteerFloatAndThrottleFloatReplicationFix": "True", + "FFlagStopAnimationEditorWhileGameRunning": "True", + "FFlagStopCaringAboutIsTouchDevice": "False", + "FFlagStopCaringAboutIsTouchDevice2": "True", + "FFlagStopCheckingFrontendProcessingInTextLayout": "True", + "FFlagStopDriveBySwipesOnScrollingFrames": "True", + "FFlagStopRelatives": "True", + "FFlagStopRenderTransparentGlyph": "True", + "FFlagStopRoundingGlyphRect": "True", + "FFlagStopTheBrokenCursors": "True", + "FFlagStopTheDefaultTeleporter": "True", + "FFlagStopTryingToFormatTimeInLuaForAssetManager": "True", + "FFlagStoreInstalledPluginsInCloud": "True", + "FFlagStreamingClampRadiusConsistency": "True", + "FFlagStreamingGCChecksDescendants3": "False", + "FFlagStreamingParallel2": "False", + "FFlagStreamingParallel3": "True", + "FFlagStreamingUISkipFirstPause": "True", + "FFlagStudioABTestFramework": "True", + "FFlagStudioAddBulkImportView": "True", + "FFlagStudioAddBulkImportView2": "True", + "FFlagStudioAddDebuggingFlowLocation": "True", + "FFlagStudioAddDistTypeToUserAgent": "True", + "FFlagStudioAddLoadUserPluginsArgument": "True", + "FFlagStudioAddMonetizationToGameSettings": "True", + "FFlagStudioAddPackagePermissions": "True", + "FFlagStudioAddQtVersionAndLocaleDetails": "True", + "FFlagStudioAddReloadOptionInLoginDialog": "True", + "FFlagStudioAddRemoveSessions": "True", + "FFlagStudioAddTCConnectTimeout": "True", + "FFlagStudioAddUpdatePublishedPackageReturnResult": "True", + "FFlagStudioAddWhatsNewWindowToStartPage": "True", + "FFlagStudioAddingIconsToLocalAndServerScripts": "True", + "FFlagStudioAddingScrollingToScreenChoosePlace": "True", + "FFlagStudioAlignBlockEnderOuter": "True", + "FFlagStudioAllowBuiltinActionOverride": "True", + "FFlagStudioAllowCorePackagesAndStarterScriptDebugOnStart": "True", + "FFlagStudioAllowCoreScriptReloads2": "True", + "FFlagStudioAllowDuplicateWatchVariables": "True", + "FFlagStudioAllowNullDescriptions": "True", + "FFlagStudioAlwaysCompleteFunctionEnd": "True", + "FFlagStudioAlwaysSendActiveSessionAnalytics": "True", + "FFlagStudioAnalyticsIdeDocCheck": "True", + "FFlagStudioAnimationEditorCheckForSavedChanges": "False", + "FFlagStudioAnimationEditorClearEventNames": "True", + "FFlagStudioAnimationEditorContinueScrollingWithSelectionArea": "True", + "FFlagStudioAnimationEditorEnableRigSwitching2": "True", + "FFlagStudioAnimationEditorFixAnimationsWithLongNames": "True", + "FFlagStudioAnimationEditorFixEventsTooltips": "True", + "FFlagStudioAnimationEditorFixRenameKeyOption2": "True", + "FFlagStudioAnimationEditorFixRigSelection": "True", + "FFlagStudioAnimationEditorFixScalingBarPosition": "True", + "FFlagStudioAnimationEditorFixWorldSpaceJointPanel": "True", + "FFlagStudioAnimationEditorIKMode": "True", + "FFlagStudioAnimationEditorKeepClipboardAfterMove": "True", + "FFlagStudioAnimationEditorScaleKeys": "True", + "FFlagStudioAnimationEditorSelectEventsOnEdge": "True", + "FFlagStudioAnimationEditorShiftSelectJointsOn": "True", + "FFlagStudioAnimationEditorUseQWidgetsForPopups": "True", + "FFlagStudioAnimationEdtiorOptimizationsEnabled2": "True", + "FFlagStudioAppendCLBaseUrlWithNewStudioInstance": "True", + "FFlagStudioApplyFiltersToReplaceAll": "True", + "FFlagStudioAssetConfigResizable": "True", + "FFlagStudioAssetConfigStopSoundsPlaying": "True", + "FFlagStudioAssetCopySaleStatusFix": "True", + "FFlagStudioAssetManagerAddMiddleElision": "True", + "FFlagStudioAssetManagerBetaFeature": "True", + "FFlagStudioAssetManagerBulkImportUniverseLoadError": "True", + "FFlagStudioAssetManagerCaseInsensitiveFilter": "True", + "FFlagStudioAssetManagerDisableMagicCharacters": "True", + "FFlagStudioAssetManagerDisableTileOverlay": "True", + "FFlagStudioAssetManagerLoadAllAliasesButton": "True", + "FFlagStudioAssetManagerLoadAllAliasesButton_PlaceFilter": "True;4599786547;5326950832", + "FFlagStudioAssetManagerSetEmptyName": "True", + "FFlagStudioAssetManagerShiftMultiSelect": "True", + "FFlagStudioAssetPreviewTreeFix2": "True", + "FFlagStudioAsyncSaveAs": "False", + "FFlagStudioAsyncSingletonManagement": "False", + "FFlagStudioAttributesUI": "True", + "FFlagStudioAutoFocusNewScripts": "True", + "FFlagStudioAutoSaveReportNullCheck": "True", + "FFlagStudioBaseUrlAnalytics": "True", + "FFlagStudioBetaFeaturesChannel": "True", + "FFlagStudioBetaFeaturesHideInfoButtonForMissingUrls": "True", + "FFlagStudioCallLoadAndRunPluginDirectly": "True", + "FFlagStudioCatchUploadExceptionForAsync": "True", + "FFlagStudioChangeMinimumSizeOfPublishWindow": "True", + "FFlagStudioChatSessionHandlerCrashFix": "True", + "FFlagStudioCheckArgPhraseForInFunctionCall": "True", + "FFlagStudioCheckCanPublishBeforePublishing": "False", + "FFlagStudioCheckDataModelAfterSave": "True", + "FFlagStudioCheckEmergencyMessageAtStart": "True", + "FFlagStudioCheckEmergencyMessageOnUserLogIn": "True", + "FFlagStudioCheckFailedPublishOnClose": "False", + "FFlagStudioCheckForBadTeamTestResponse": "True", + "FFlagStudioCheckForBadTeamTestResponse2": "True", + "FFlagStudioCheckIfDefaultFontLoaded": "True", + "FFlagStudioCheckLocaleNameBeforUse": "True", + "FFlagStudioCheckPlaceVersionMatchInTeamCreate": "True", + "FFlagStudioChildlessTheme": "True", + "FFlagStudioCleanUpScriptNav": "True", + "FFlagStudioCleanupPluginRefresh": "True", + "FFlagStudioCleanupPluginWidgetRelayViewBase": "True", + "FFlagStudioClearCallStackWidgetOnGSTChange": "True", + "FFlagStudioClonedDataModelMemoryLeakFix": "True", + "FFlagStudioCloseDocumentsOnce": "True", + "FFlagStudioCloseOnMiddleButtonRelease": "True", + "FFlagStudioCloseScriptsOnUiThread": "True", + "FFlagStudioCloudEditAddReadyAnalytics": "True", + "FFlagStudioCloudEditFixErrorCode": "True", + "FFlagStudioCloudEditLogErrorCode": "True", + "FFlagStudioCloudEditLogGameId": "True", + "FFlagStudioCloudEditShowErrorCode": "True", + "FFlagStudioCloudEditUserDataloadDataAsyncCrashFix": "True", + "FFlagStudioCollectGPUInfo": "True", + "FFlagStudioCollectLocationType": "True", + "FFlagStudioCommandBarAlwaysEnabled": "True", + "FFlagStudioCommandBarLocalState": "True", + "FFlagStudioConfirmPublishWithDirtyDrafts": "True", + "FFlagStudioConnectPublishAsClose": "False", + "FFlagStudioConvertGameSettingsToDevFramework": "True", + "FFlagStudioConvertToPackageUploadErrorDisplay": "True", + "FFlagStudioCoreScriptBreakpointsNotHitting": "True", + "FFlagStudioCorrectPublishAnalytics": "False", + "FFlagStudioCorrectlyDeprecateProp_UITheme": "True", + "FFlagStudioCrashOnInvalidColor3Cast": "True", + "FFlagStudioCrashWhenCharWrappingComplexText": "True", + "FFlagStudioCreateGameGroupOwner": "True", + "FFlagStudioCreateGroupOwner": "False", + "FFlagStudioCreateNewGameRewritesName": "True", + "FFlagStudioCreateNewGameRewritesName2": "True", + "FFlagStudioDebuggerLazyLoadVariables": "True", + "FFlagStudioDebuggerRefactorLuaArguments": "False", + "FFlagStudioDebuggerRefactorLuaArguments2": "True", + "FFlagStudioDefaultGroupInDropdownPublish": "True", + "FFlagStudioDefaultPopulateFindWidget": "True", + "FFlagStudioDeferCGESelectionListener": "True", + "FFlagStudioDeprecateLoadLatestPersistenceFromWeb": "True", + "FFlagStudioDeprecateQuickFindScriptTotally": "True", + "FFlagStudioDeprecateRBXWorkspaceCleanupSteps": "True", + "FFlagStudioDeprecateRbxWorkspaceInStudioServiceHost": "True", + "FFlagStudioDeprecateRecentSave": "True", + "FFlagStudioDeviceEmulatorSetSafeZone": "True", + "FFlagStudioDeviceManagerAddPreview": "True", + "FFlagStudioDeviceManagerDesignTweak": "True", + "FFlagStudioDisableAutoClosingInComments2": "True", + "FFlagStudioDisableAutoSaveToCloud": "True", + "FFlagStudioDisablePluginButtonsInProgress": "False", + "FFlagStudioDisablePublishButtonsInProgress": "True", + "FFlagStudioDisconnectIDEDoc": "True", + "FFlagStudioDisplayNameCrashFixEnabled": "True", + "FFlagStudioDoNotSaveWhenUserSaysNo": "True", + "FFlagStudioDoNotShowHideAutoCompleteMenuV2": "True", + "FFlagStudioDoNotStoreSelectionListInPropertyWidget": "True", + "FFlagStudioDocActivationHistoryPreventFocusLost": "True", + "FFlagStudioDontHideWatchItems": "True", + "FFlagStudioDontMoveCursorToEofWhenOpening": "True", + "FFlagStudioDontShowNilTooltip": "True", + "FFlagStudioDoublePopUp": "True", + "FFlagStudioDraftsDeletePreferSafeOption": "False", + "FFlagStudioDraftsDeletePreferSafeOption2": "True", + "FFlagStudioDraftsServiceFullNameInDiff": "True", + "FFlagStudioDraftsServiceGetEditors": "True", + "FFlagStudioDraftsServiceHostCrashFix": "True", + "FFlagStudioDraftsServiceRemovedScriptsFix": "True", + "FFlagStudioDraftsUseMultiselect2": "True", + "FFlagStudioDraftsWidgetCommitButton": "True", + "FFlagStudioEnableAnimationEditorBeta": "False", + "FFlagStudioEnableAssetManagerService": "True", + "FFlagStudioEnableAsyncPublishBeta": "False", + "FFlagStudioEnableBFSupportPluginDebugging": "True", + "FFlagStudioEnableBulkImportFromLua": "True", + "FFlagStudioEnableCSGv2SmoothingBeta": "False", + "FFlagStudioEnableCoreScriptOpeningForInternalDevs": "True", + "FFlagStudioEnableEmergencyMessageDisplayV2": "True", + "FFlagStudioEnableEmulationDeviceEditor": "True", + "FFlagStudioEnableFileWatcherDelay": "True", + "FFlagStudioEnableLuaPublishWorkflowBetaFeature": "False", + "FFlagStudioEnableLuauTypeCheckingBetaFeature": "False", + "FFlagStudioEnableModelMeshComputerBeta": "False", + "FFlagStudioEnableNewScriptFoldStateBeta": "False", + "FFlagStudioEnablePVHBetaFeature": "False", + "FFlagStudioEnablePVHBetaFeature2": "False", + "FFlagStudioEnablePackagePermissionsBetaFeature": "False", + "FFlagStudioEnablePhoneAndTableDefault": "True", + "FFlagStudioEnableProjectConfig": "True", + "FFlagStudioEnableResume": "False", + "FFlagStudioEnableResume3": "True", + "FFlagStudioEnableSafeUpdatesBetaFeature": "True", + "FFlagStudioEnableSaveToCloudV2BetaFeature": "False", + "FFlagStudioEnableScriptHistoryDialog": "True", + "FFlagStudioEnableSurfaceJoinChangeBeta": "False", + "FFlagStudioEnableTableOutputViewBetaFeature": "True", + "FFlagStudioEnableUrlLinkForEmergencyMessage": "True", + "FFlagStudioEnableVirtualKeyboardAnimation": "True", + "FFlagStudioEnableWebKitPlugins": "True", + "FFlagStudioEncodeEmergencyMessage": "True", + "FFlagStudioEnhanceEmulationDeviceManager": "True", + "FFlagStudioEnsureEditDataModel": "True", + "FFlagStudioExponentialBackoffRetryInUserDataStoreService": "False", + "FFlagStudioExternalLoginEnabled": "True", + "FFlagStudioFetchABTestForLuaApp": "True", + "FFlagStudioFetchPluginName": "True", + "FFlagStudioFileLockRelatedFixes": "True", + "FFlagStudioFixAnimEditorDescendants": "True", + "FFlagStudioFixAssetPreviewCloseButton": "True", + "FFlagStudioFixAssetPreviewTreeView": "True", + "FFlagStudioFixAutoCompleteClosingParensAnonyFuncDef": "True", + "FFlagStudioFixAutoCompleteInAnonymousFunctionDef": "True", + "FFlagStudioFixBindToClose2": "True", + "FFlagStudioFixCDNUrlForProjectConfig": "True", + "FFlagStudioFixCancelTeamCreate": "True", + "FFlagStudioFixCannotSetBreakPoint": "True", + "FFlagStudioFixComparePageInfo": "False", + "FFlagStudioFixComparePageInfo2": "True", + "FFlagStudioFixConstantReconnectPopups": "True", + "FFlagStudioFixCrashInSendMockKeyboardNotificationsToLua": "True", + "FFlagStudioFixDMThreadingIssueForPublishAs": "False", + "FFlagStudioFixDisappearingVirtualKeyboard": "True", + "FFlagStudioFixF2AfterAutoSelectionChange": "True", + "FFlagStudioFixFirePackageStatusChangedSignalCrash": "True", + "FFlagStudioFixFlatTerrainDefaultSaveLocation": "True", + "FFlagStudioFixFrameworkClientErrorRetries": "True", + "FFlagStudioFixFrameworkNonIdempotentRetries": "True", + "FFlagStudioFixGameManagementIndexNil": "True", + "FFlagStudioFixGetClassIcon": "True", + "FFlagStudioFixGroupCreatorInfo": "False", + "FFlagStudioFixHashFromFileContentsLeak": "True", + "FFlagStudioFixInitialEnabledPluginGui2": "True", + "FFlagStudioFixInsertObjectModalHiding": "True", + "FFlagStudioFixInstalledPluginLoading": "True", + "FFlagStudioFixIntellisenseTooltipCutoff": "True", + "FFlagStudioFixLocalShutdownRequest": "False", + "FFlagStudioFixMacFileOpen": "True", + "FFlagStudioFixMemoryLeakForQTranslatorInstall": "True", + "FFlagStudioFixMeshPartPreview": "True", + "FFlagStudioFixMissingMonetizationHeader": "True", + "FFlagStudioFixModuleScriptLuaStateInBacktrace_2": "True", + "FFlagStudioFixMultilineCommentEditingBehavior": "True", + "FFlagStudioFixMultipleAssetsImportLogic": "True", + "FFlagStudioFixNullUniverseInGetResourceByCategory": "True", + "FFlagStudioFixNullptrTeamCreateDCCrash": "True", + "FFlagStudioFixOgreWidgetCheckInPlaceSessionMainView": "True", + "FFlagStudioFixOpenCoreScriptDocDatamodelMapping": "True", + "FFlagStudioFixPackageKeepsPullingAssetVersionId": "True", + "FFlagStudioFixPhantomBreakpointOnLineDelete": "True", + "FFlagStudioFixPlaceOpenNullPlaceIdInAnalytics": "True", + "FFlagStudioFixPluginUninstall": "True", + "FFlagStudioFixPluginWidgetEnabledSignal": "True", + "FFlagStudioFixProcessInstallPluginFromWebsite": "True", + "FFlagStudioFixProjectConfigForStartInPlayMode": "True", + "FFlagStudioFixPropertyWidgetEnumCrash": "True", + "FFlagStudioFixPublishSuccessNameIcon": "True", + "FFlagStudioFixQPointerForTooltipView": "True", + "FFlagStudioFixResumeOnSingleStep": "True", + "FFlagStudioFixRibbonThemeHelperParent": "True", + "FFlagStudioFixSciptOpenBehavior": "False", + "FFlagStudioFixScriptDatamodelMismatch": "True", + "FFlagStudioFixSelectAll": "True", + "FFlagStudioFixSessionLengthCap": "True", + "FFlagStudioFixSetupCrashHandling": "True", + "FFlagStudioFixShareButtonForPublicPlaces": "True", + "FFlagStudioFixShortcutSorting": "True", + "FFlagStudioFixStringHighlightingWithBackslashZ": "False", + "FFlagStudioFixStringHighlightingWithBackslashZ2": "True", + "FFlagStudioFixStripedTableSelectionHover": "True", + "FFlagStudioFixTCButtonUpdate": "True", + "FFlagStudioFixTCTimeoutReport": "True", + "FFlagStudioFixTemplateModerationHashRemovalOnTCEnable": "True", + "FFlagStudioFixTextBoxFocusAndToolTipCloseClashHang": "False", + "FFlagStudioFixTimingOnTeamCreateRestart": "True", + "FFlagStudioFixToolboxDialog": "True", + "FFlagStudioFixTreeViewForFlatList": "True", + "FFlagStudioFixTreeViewForSquish": "True", + "FFlagStudioFixUILibDropdownStyle": "True", + "FFlagStudioFixUILibDropdownText": "True", + "FFlagStudioFixUILibraryRequireForPreviewInToolbox": "True", + "FFlagStudioFixUndoAfterInsertByDrag": "True", + "FFlagStudioFixUnhandledRunTimeError": "True", + "FFlagStudioFixVirtualKeyboardRect": "True", + "FFlagStudioFoldSafeLexer": "True", + "FFlagStudioGDPRCompliance": "True", + "FFlagStudioGameManagementBetaFeature": "False", + "FFlagStudioGameManagementUpdateMaxPlayerCount": "True", + "FFlagStudioGamePresenceToFixSyncCallHangWhenQuit": "True", + "FFlagStudioGameSettingsAccessPermissions": "True", + "FFlagStudioGameSettingsBindToClose": "True", + "FFlagStudioGameSettingsDisablePlayabilityForDrafts": "False", + "FFlagStudioGameSettingsFixDescriptionFetch": "True", + "FFlagStudioGameSettingsFixUserSearch": "True", + "FFlagStudioGameSettingsGroupGamePermissionChanges": "True", + "FFlagStudioGameSettingsNewUseRoactRodux": "True", + "FFlagStudioGameSettingsOnlySaveModifiedPages": "True", + "FFlagStudioGameSettingsPermissionUpdateWarning": "True", + "FFlagStudioGameSettingsPermissionsDefaultEditAction": "True", + "FFlagStudioGameSettingsResetStoreAction": "False", + "FFlagStudioGameSettingsResetStoreAction2": "True", + "FFlagStudioGameSettingsUseNewSettingsImpl2": "False", + "FFlagStudioGameSettingsUseNewSettingsImpl3": "True", + "FFlagStudioGameSettingsUseRoact1_2": "True", + "FFlagStudioGameSettingsUserGameEditPermissionsRestriction": "True", + "FFlagStudioGetSharedPackagesInToolbox": "True", + "FFlagStudioHandlePreloadAsyncInPluginDataModels": "True", + "FFlagStudioHashtagIsNotAComment": "True", + "FFlagStudioHideStandalonePluginScripts": "True", + "FFlagStudioHideStartPageUrlLinksCJV": "True", + "FFlagStudioHideSuccessDialogWhenFree": "True", + "FFlagStudioHoldDataModelLockAtBreakpointHit": "True", + "FFlagStudioHttpServiceUsePluginPermissions": "True", + "FFlagStudioImagePickerFix": "True", + "FFlagStudioIncorrectLocaleInLogFile": "True", + "FFlagStudioInfoBar2": "True", + "FFlagStudioInfoBarOnDraftCreation": "True", + "FFlagStudioInsertObjectStreamliningv0_Consolidated": "True", + "FFlagStudioInsertObjectStreamliningv2_Consolidated": "True", + "FFlagStudioInsertObjectStreamliningv2_DataModelLifetimeBugFix": "True", + "FFlagStudioInsertObjectStreamliningv2_ExpandedView": "True", + "FFlagStudioInsertObjectStreamliningv2_FeedbackImprovements": "True", + "FFlagStudioInsertObjectStreamliningv2_InsertMenuShortcut": "True", + "FFlagStudioInsertObjectStreamliningv2_MultiWindowContextPlacementBugFix": "True", + "FFlagStudioInsertObjectStreamliningv2_SharedModelBugFix": "True", + "FFlagStudioInsertObjectStreamliningv2_ShowRecommendedObjectsOnly": "True", + "FFlagStudioInsertObjectStreamliningv2_TranslatedToolTips": "True", + "FFlagStudioInsertServiceLazy": "True", + "FFlagStudioIntInBoolContextWarningFixEnabled": "True", + "FFlagStudioInternalCommandBarPermissions": "True", + "FFlagStudioLSPAvoidFullLexMapUpdate": "True", + "FFlagStudioLSPIndentParen": "True", + "FFlagStudioLSPIndentParen2": "True", + "FFlagStudioLSP_ShiftEnter": "True", + "FFlagStudioLSP_V1_1": "False", + "FFlagStudioLSP_V1_2": "True", + "FFlagStudioLanguageServerGetLatestLocalScript": "True", + "FFlagStudioLanguageService": "False", + "FFlagStudioLoadCoreScriptsFromModel": "True", + "FFlagStudioLoadLesserQtTranslationFiles": "True", + "FFlagStudioLoadPluginsAtRightTime": "False", + "FFlagStudioLoadPluginsAtRightTime2": "False", + "FFlagStudioLoadPluginsAtRightTime3": "True", + "FFlagStudioLocalizationInGameSettingsEnabled": "True", + "FFlagStudioLocalizeCategories": "True", + "FFlagStudioLocalizeCommandLineErrors": "True", + "FFlagStudioLocalizeMeshImportErrors": "True", + "FFlagStudioLocalizePrivacyTypesInPublishPlaceAs": "True", + "FFlagStudioLocalizePropertyItems": "True", + "FFlagStudioLocalizeUnauthorizedToConfigureGame": "True", + "FFlagStudioLocalizeUnexpectedFBXTypeError": "True", + "FFlagStudioLogPlaceIdOnPlaceOpen": "True", + "FFlagStudioLogPluginSettingsFileAccess": "True", + "FFlagStudioLogTestUsage": "True", + "FFlagStudioLuauLinter": "True", + "FFlagStudioLuauWarningTelemetry": "False", + "FFlagStudioLuauWarningTelemetry2": "False", + "FFlagStudioLuauWarningTelemetry3": "False", + "FFlagStudioLuauWarningTelemetry4": "False", + "FFlagStudioMacOverrideStepIntoShortcut": "True", + "FFlagStudioMakeActivityCounterListCrashDueToLocale": "True", + "FFlagStudioMakePublishingAsync": "True", + "FFlagStudioMassUpdateWaitForAsync": "False", + "FFlagStudioMeasureRigidJointsNotInWorld": "True", + "FFlagStudioMergeFixModByZero": "True", + "FFlagStudioMeshCopyIdUseMeshId": "True", + "FFlagStudioMigrateGlobalToCJVInChina": "False", + "FFlagStudioMigrateGlobalToCJVInChina2": "True", + "FFlagStudioMinorFixesForAssetPreview": "True", + "FFlagStudioMitigateTemplateModerationHash": "True", + "FFlagStudioMoveAboutWindowCode": "True", + "FFlagStudioMoveMorpherEditorInsideGameSettings": "True", + "FFlagStudioMoveSelectedLines": "True", + "FFlagStudioMultiMergeSupport": "True", + "FFlagStudioMultiTableIndent": "True", + "FFlagStudioMuteOnlyOnUnfocus": "True", + "FFlagStudioMuteOnlyOnUnfocus2": "True", + "FFlagStudioNewDirtyPublishWarningDialog": "True", + "FFlagStudioNewEventsOnPluginInstall": "True", + "FFlagStudioNewFoldState": "True", + "FFlagStudioNewRevertPackageMessage": "True", + "FFlagStudioNewTableOutputWidgetSourceStr2": "True", + "FFlagStudioNonRibbonInsertObjectParentsToSelectedObject": "True", + "FFlagStudioOpenGameSettingsEvent": "True", + "FFlagStudioOpenModuleScriptIfNotFoundWhileDebugging": "True", + "FFlagStudioOpenScriptDocBasedOnPrintedGST": "True", + "FFlagStudioOutputSaveFileAsLink": "True", + "FFlagStudioOutputViewDropdownRefactor": "True", + "FFlagStudioPackageLinkAutoUpdateIndicatorFixes": "True", + "FFlagStudioPackagePermissionRGEFix": "True", + "FFlagStudioPackageVersionCheckInEditDMOnly": "True", + "FFlagStudioPermissionsServiceEnabled": "True", + "FFlagStudioPlaceSessionMainViewCleanupEventFilter": "True", + "FFlagStudioPlaceSessionModelIncorrectLocaleCountryCrash": "True", + "FFlagStudioPlaceVersionHistory": "True", + "FFlagStudioPlaceVersionHistory2": "True", + "FFlagStudioPlaceVersionHistoryMacModalityFix": "True", + "FFlagStudioPlaceVersionHistoryShowCorrectPlace": "True", + "FFlagStudioPluginManagerInterface": "True", + "FFlagStudioPopulateInsertObjectMenuAfterLogin": "True", + "FFlagStudioPopulateIntlInfo": "False", + "FFlagStudioPressEndToEndOfLine": "True", + "FFlagStudioPreventAccidentalTyposWhenHittingBreakpoint": "True", + "FFlagStudioProperCheckExtensionInSaveAndReloadPlugin": "True", + "FFlagStudioProperCheckForServerContentLoaded": "True", + "FFlagStudioPropertyItemReset": "True", + "FFlagStudioPruneModeratedInstalledPlugins": "False", + "FFlagStudioPruneModeratedInstalledPlugins2": "True", + "FFlagStudioPublishAsHandlePromiseRejection": "True", + "FFlagStudioPublishFlowDefaultScreen": "False", + "FFlagStudioPublishLuaWorkflow": "True", + "FFlagStudioPublishMediatorFailedConnection": "True", + "FFlagStudioPublishMediatorFailedConnection2": "True", + "FFlagStudioQuickImproveResponsiveness": "True", + "FFlagStudioQuickOpenFilterHiddenInstances": "True", + "FFlagStudioQuickOpenFixPosition": "True", + "FFlagStudioQuickOpenPatch": "True", + "FFlagStudioQuickOpenReopenShowHistory": "True", + "FFlagStudioQuickOpenSearchActions": "True", + "FFlagStudioQuickOpenSelectFirstByDefault": "True", + "FFlagStudioQuitMessingWithHotKeys": "True", + "FFlagStudioRefactorAssetPreview": "True", + "FFlagStudioRefactorPlaceSessionModel3": "True", + "FFlagStudioRefactorStudioVerbsSavePublishDuplicateCode": "False", + "FFlagStudioRefactorStudioVerbsSavePublishDuplicateCode2": "True", + "FFlagStudioRefactorTCConnectionDialog": "True", + "FFlagStudioRefineFormatting": "True", + "FFlagStudioRelayQtModifiersToRobloxInput": "False", + "FFlagStudioRemoveAxisWidget": "True", + "FFlagStudioRemoveCouldNotFetchAssetVersionData": "True", + "FFlagStudioRemoveDuplicatePackageStatusChangedSignal": "True", + "FFlagStudioRemoveExtraFindAction": "True", + "FFlagStudioRemoveGetFindAllDialogHack": "True", + "FFlagStudioRemoveIndentationFromEmptyLine": "True", + "FFlagStudioRemoveShareOptionFromLocalFiles": "True", + "FFlagStudioRemoveStudioInfluxHundredthsPercentage": "True", + "FFlagStudioRenderingTestClosureWhenNoTestsRun": "True", + "FFlagStudioReplaceDMLockWithTask": "True", + "FFlagStudioReplaceDMLockWithTaskIfNotOnMainThread": "True", + "FFlagStudioReplaceStringWithSet": "True", + "FFlagStudioReportBaseUrl": "True", + "FFlagStudioReportElevatedCount": "True", + "FFlagStudioReportLoginAnalytics": "True", + "FFlagStudioReportMacHardwareInfo": "True", + "FFlagStudioReportOSVersionDiag": "True", + "FFlagStudioReportOpenPlace": "True", + "FFlagStudioReportOpenPlaceTime": "True", + "FFlagStudioReportPlaceSize": "True", + "FFlagStudioReportPluginLoadTelemetry": "True", + "FFlagStudioReportSavePlaceTime": "True", + "FFlagStudioReportTCStatusWhenOpenPlace": "True", + "FFlagStudioReportingSuccessToRCity": "True", + "FFlagStudioResizeEmulationDeviceWriteLock": "True", + "FFlagStudioRestoreWatchTab": "True", + "FFlagStudioRestoreWindowsASAP": "False", + "FFlagStudioRestrictUiLibraryUsage": "True", + "FFlagStudioRewriteEmulatorWithMask2": "False", + "FFlagStudioRewriteEmulatorWithMask3": "True", + "FFlagStudioRobloxNetworkReplyDeleteLater": "True", + "FFlagStudioSandboxCrashFix": "True", + "FFlagStudioSandboxDraftsHardening": "True", + "FFlagStudioSandboxDraftsHardeningAsyncSave": "True", + "FFlagStudioSandboxDraftsHardeningFileSave": "True", + "FFlagStudioSandboxPerGlobalState": "True", + "FFlagStudioSandboxUtf8Fix": "True", + "FFlagStudioSandboxVerifyIntegrityOnInitialize": "True", + "FFlagStudioSavePlaceAs": "False", + "FFlagStudioSavePlaceAs2": "True", + "FFlagStudioSaveToCloudV2": "True", + "FFlagStudioSaveToCloudV3": "False", + "FFlagStudioSaveToCloudV3SpotFixes": "False", + "FFlagStudioScriptEditorContentsChangingRefine": "False", + "FFlagStudioScriptEditorEventsCrashFix": "True", + "FFlagStudioScriptEditorTelemetry": "True", + "FFlagStudioScriptFindElideCopies": "True", + "FFlagStudioServiceActiveInstanceHighlight": "True", + "FFlagStudioServiceDraggerSolveConstraints": "True", + "FFlagStudioServiceDrawConstraintsOnTop": "True", + "FFlagStudioServiceHoverInstance": "True", + "FFlagStudioServiceHoverInstanceFix": "True", + "FFlagStudioServiceShowConstraintDetails": "True", + "FFlagStudioSettingsDialogNoInstances": "True", + "FFlagStudioSettingsDialogOnlyShowCancelWithContent": "True", + "FFlagStudioShowCursorWhenSwitchingScripts": "True", + "FFlagStudioShowDotsForScriptEditors": "True", + "FFlagStudioShowIndividualPermissionsForGroupGames": "True", + "FFlagStudioShowNoPluginResultsDetailFix": "True", + "FFlagStudioShowPrivacyPolicyLink": "True", + "FFlagStudioShowTutorialsByDefault": "True", + "FFlagStudioShowUserFacingWebsiteCJV": "True", + "FFlagStudioShowVariableTooltipOnErrorLine": "True", + "FFlagStudioSkinnedMeshBeta": "False", + "FFlagStudioStandaloneGameMetadata": "True", + "FFlagStudioStartServerIfNotStartedWhenStartingClient": "False", + "FFlagStudioStopHardcodingDecadeOfDifferentDevhubDomains": "True", + "FFlagStudioStopRBXASSERTOnDeleteStandalonePlugin": "True", + "FFlagStudioSupportBuiltinPlugiEndpointsPlaySolo": "True", + "FFlagStudioSupportLinkForChina": "True", + "FFlagStudioSupportNilContextServices": "True", + "FFlagStudioSupportUploadGroupAnimations": "True", + "FFlagStudioSurfaceErrorDetail": "True", + "FFlagStudioSwitchQNetworkToHttp2": "True", + "FFlagStudioSyncPluginSource": "True", + "FFlagStudioTCShowPermissionsMovedMessage": "True", + "FFlagStudioTeamCreateReportToEventIngest": "True", + "FFlagStudioTeleportServiceSanitize": "True", + "FFlagStudioTestServiceRunStateRecovery": "True", + "FFlagStudioTextEntryRoactBugPatch": "True", + "FFlagStudioThunkWithArgsMiddleware": "True", + "FFlagStudioTightenSaveMutexLocks": "True", + "FFlagStudioTimeStampFix": "True", + "FFlagStudioTimerRefactor": "False", + "FFlagStudioToStringSelfArgument": "True", + "FFlagStudioToggleComment": "True", + "FFlagStudioToolboxEnablePlaceIDInAnalytics": "True", + "FFlagStudioToolboxFixNewEndpointFilters": "True", + "FFlagStudioToolboxFixWidthCalculation": "True", + "FFlagStudioToolboxInsertAssetCategoryAnalytics": "True", + "FFlagStudioToolboxSearchOverflowFix": "True", + "FFlagStudioToolboxShowNoPluginResultsDetail": "False", + "FFlagStudioTransferBreakpointsFromBothPlayDMsToEditMode": "True", + "FFlagStudioTranslateSettingsTooltips": "True", + "FFlagStudioTranslateThemePropertyItem": "True", + "FFlagStudioTranslationsTail001": "True", + "FFlagStudioTranslationsTail002": "True", + "FFlagStudioTrimBeforeToggleComment": "True", + "FFlagStudioTrustsPlayersImmediately": "True", + "FFlagStudioTutorialSeeAll": "True", + "FFlagStudioUILibFixAssetTypeMap": "True", + "FFlagStudioUILibraryRoundTextBoxNoTooltip": "True", + "FFlagStudioUXImprovementsAddDialogOnTCClose": "False", + "FFlagStudioUXImprovementsFixTCPublishButton": "True", + "FFlagStudioUiLibraryErrorOnNilIncludes": "True", + "FFlagStudioUnrestrictPluginGuiService": "True", + "FFlagStudioUpdateFoldingRangeForEveryChange": "True", + "FFlagStudioUpdateRuiDialog": "True", + "FFlagStudioUpdateWhatsNewDevForumUrl": "True", + "FFlagStudioUseAnimationEditorAnalytics2": "True", + "FFlagStudioUseAutocompleterCursorCallback": "True", + "FFlagStudioUseCJVAppName": "True", + "FFlagStudioUseCaptchaDialog": "True", + "FFlagStudioUseDevelopAPIForPackages": "True", + "FFlagStudioUseInternalScriptDescendantForAllCases": "True", + "FFlagStudioUseLocalizedColorNamesText2": "True", + "FFlagStudioUseNativeBrowserForCookieConstraint": "True", + "FFlagStudioUseNewAnimationImportExportFlow": "True", + "FFlagStudioUseNewDefaultNameEndpoint": "True", + "FFlagStudioUseNewMergeDialog": "True", + "FFlagStudioUseNewQtNetworkWrapper": "True", + "FFlagStudioUsePreferredLocaleForQtTranslationFiles": "True", + "FFlagStudioUseStandaloneCollisionEditor2": "True", + "FFlagStudioUseStandaloneTransformTool2": "True", + "FFlagStudioUseStudioAssert": "True", + "FFlagStudioUseStudioHttpRequestInAPIUtilities": "True", + "FFlagStudioUseStudioHttpRequestInPluginLoader": "True", + "FFlagStudioUseStudioHttpRequestInPublishedGamesStore": "True", + "FFlagStudioUseStudioHttpRequestInUserDataStoreService": "True", + "FFlagStudioUserAgreementCheckEnabled": "False", + "FFlagStudioValidateToSAcceptance": "True", + "FFlagStudioVerbInvocation": "True", + "FFlagStudioWaitForContentLoadedToLoadPlugins": "False", + "FFlagStudioWatchListCheckForEditable": "True", + "FFlagStudioWhatsNewWindow": "True", + "FFlagStudioWhatsNewWindowBeta": "False", + "FFlagStudioWrapScriptTextEditorInQPointer": "True", + "FFlagSuperSmoothMouseWheelScrolling": "True", + "FFlagSupportAnimImportByID": "True", + "FFlagSupportContentIdDictionaryRemoval": "True", + "FFlagSupportDeathTypeClient": "True", + "FFlagSupportDeathTypeServer": "True", + "FFlagSupportFreePrivateServers": "True", + "FFlagSupportJoinDataItemV2UseInvalidOffsets": "True", + "FFlagSupportLegacySkinnedMeshParts_PlaceFilter": "True;762;4599786547;5326950832", + "FFlagSupportMeshV4ReadSkinData_PlaceFilter": "True;762;4599786547;5326950832;5100919959;5064251723;5716845078;5588662702;5550062757;5762960116;5792232897;5796518985;5796546949;5796554295;5790039516;5646917919;5947859215", + "FFlagSupportMeshV4ReadSkinData":"True", + + "FFlagSupportMeshV4Write":"True", + "FFlagSupportMeshV4Write_PlaceFilter": "True;762;4599786547;5326950832", + "FFlagSupportNoRotate": "True", + "FFlagSupportOneShotButtons": "True", + "FFlagSupportPluginDebugging": "False", + "FFlagSurfaceAppearanceFixFastClusterDecal": "True", + "FFlagSurfaceAppearanceParts_PlaceFilter": "True;4599786547;762", + "FFlagSurfaceGuiDefaultPixelsPerStud": "True", + "FFlagSwipeNeverResetsTouchFocusEventFix": "True", + "FFlagSyncLexMap": "True", + "FFlagSystemAddressIsPeerId": "False", + "FFlagSystemAddressIsPeerId2": "True", + "FFlagTSMk2ThrottleStreamJob": "True", + "FFlagTakeAScreenshotOfThis": "True", + "FFlagTapAwayToCloseBackpack": "True", + "FFlagTaskSchedulerAsyncTasksEnabled": "True", + "FFlagTaskSchedulerAsyncTasksEnsureValidThreadCount": "True", + "FFlagTaskSchedulerSTDThreadwrapper": "True", + "FFlagTattletaleScanRichTextContent": "True", + "FFlagTeamCreateSaveAnalyticsServiceApiKeyReplicator": "True", + "FFlagTelemetryForHideScaryBetaFeaturesDialog": "True", + "FFlagTeleportHttpErrorCounter": "True", + "FFlagTeleportPartyAsyncAdditionalMetrics": "False", + "FFlagTeleportSuccessAnalytics": "True", + "FFlagTenaciousGamePerfMonitor": "True", + "FFlagTerrainChunkAnalyticsOnPublish": "True", + "FFlagTerrainInvertMaterialDetiling": "False", + "FFlagTerrainOpenCloseMetrics": "True", + "FFlagTerrainTightBoxes": "False", + "FFlagTerrainToolMetrics": "True", + "FFlagTerrainToolTabMetrics": "True", + "FFlagTerrainToolsAutoFormatNum": "True", + "FFlagTerrainToolsClearConfirmationDialog": "True", + "FFlagTerrainToolsFixGettingTerrain": "True", + "FFlagTerrainToolsFixLargeSmoothAirFillerMaterial": "True", + "FFlagTerrainToolsFixMaterialTooltipClipping": "True", + "FFlagTerrainToolsFixMergeEmpty": "True", + "FFlagTerrainToolsFixNilBrushProperties": "True", + "FFlagTerrainToolsFixOffsetGenerationNoise": "True", + "FFlagTerrainToolsFixPlanePositionErrorMessage": "True", + "FFlagTerrainToolsFixRegionEditorCleanup": "True", + "FFlagTerrainToolsFixRegionPreviewDeactivation": "True", + "FFlagTerrainToolsFixScrollBarResize": "True", + "FFlagTerrainToolsFixSmoothDesiredMaterial": "True", + "FFlagTerrainToolsFlattenUseBaseBrush": "True", + "FFlagTerrainToolsGeneratorSkipAir": "True", + "FFlagTerrainToolsImportImproveColorMapToggle": "True", + "FFlagTerrainToolsImproveColorImport": "True", + "FFlagTerrainToolsMaterialGenerateFragments": "True", + "FFlagTerrainToolsOffsetGenerationNoise": "True", + "FFlagTerrainToolsOnlyImportInEditMode": "True", + "FFlagTerrainToolsRaycastUpdate": "True", + "FFlagTerrainToolsRefactor": "True", + "FFlagTerrainToolsRefactorAssetIdSelector2": "True", + "FFlagTerrainToolsRefactorSculptOperations": "True", + "FFlagTerrainToolsReplaceSourceMaterialAirLock": "True", + "FFlagTerrainToolsReplaceSrcTogglesOff": "True", + "FFlagTerrainToolsReplaceTool": "True", + "FFlagTerrainToolsScrollingFix": "True", + "FFlagTerrainToolsSmoothToolFixErode": "True", + "FFlagTerrainToolsSmoothToolFixIgnoreWater": "True", + "FFlagTerrainToolsSmoothToolIgnoreWater": "True", + "FFlagTerrainToolsTerrainBrushNotSingleton": "True", + "FFlagTerrainToolsTerrainCylinderOnSizeOne": "True", + "FFlagTerrainToolsTweakBrushPower": "True", + "FFlagTerrainToolsUIUpdate": "True", + "FFlagTerrainToolsUseDevFramework": "True", + "FFlagTerrainToolsUseFragmentsForToolPanel": "True", + "FFlagTerrainToolsUseMapSettingsWithPreview2": "True", + "FFlagTerrainUseClumpedPhysicsData": "True", + "FFlagTextBoxOverrideManualFocusRelease": "False", + "FFlagTextLabelProps": "True", + "FFlagTextMeasureTemporaryPatch": "True", + "FFlagTextMemoryTracking": "True", + "FFlagTextScaledRespectUIPadding": "True", + "FFlagTextViewStdReplace": "True", + "FFlagTexturePackGImageFixes": "True", + "FFlagTheseAreSomeOfMyBestAttributes": "True", + "FFlagThrowDetailedMessageForBadEntries": "True", + "FFlagThwartPurchasePromptScams": "True", + "FFlagTighterCylinderBoundingSpheres": "True", + "FFlagTolerantLexerForStudio": "True", + "FFlagToolboxDisableForLuobu": "False", + "FFlagToolboxDisableMarketplaceAndRecentsForLuobu": "True", + "FFlagToolboxDisabledWhenDebugging": "True", + "FFlagToolboxFixAnalyticsBugs": "True", + "FFlagToolboxFixDuplicateAssetInsertions": "True", + "FFlagToolboxForceSelectDragger": "True", + "FFlagToolboxHideSearchForRecent": "True", + "FFlagToolboxInsertEventContextFixes": "True", + "FFlagToolboxJointMigrationApi": "True", + "FFlagToolboxNewAssetAnalytics": "True", + "FFlagToolboxNewInsertAnalytics": "True", + "FFlagToolboxTabTooltips": "True", + "FFlagToolboxTruncateOverrideAssetNames": "True", + "FFlagToolboxUseDevFrameworkPromise": "True", + "FFlagToolboxUseNewAssetType": "True", + "FFlagToolboxUseNewPluginEndpoint": "True", + "FFlagToolboxWithCMSV2": "True", + "FFlagTopBarBetterStateInit": "True", + "FFlagTopBarCloseContextMenuWhenHotkeysUsed": "True", + "FFlagTopBarEscapeCloseMenu": "True", + "FFlagTopBarFixCloseButtonMobile": "True", + "FFlagTopBarHideSiteBanner": "True", + "FFlagTopBarHightightIconsOnHover": "True", + "FFlagTopBarNewGamepadMenu_PlaceFilter": "True;2567750478", + "FFlagTopBarUseNewIcons": "True", + "FFlagTouchEventSameSHCellBugFixEnabled": "True", + "FFlagTouchscreenSupport": "False", + "FFlagTrackAttachmentBounds": "True", + "FFlagTrackCurlTimeProfile": "False", + "FFlagTrackEventWithArgsEnabled": "True", + "FFlagTrackIndividualParts": "True", + "FFlagTrackMouseDownState": "True", + "FFlagTrackResetCharacterButtonUsage": "True", + "FFlagTrackWindowsVideoRecording": "True", + "FFlagTrailClearCrashFix": "True", + "FFlagTrailLockFailCrashFix": "True", + "FFlagTransformToolAnalytics": "True", + "FFlagTranslateAvatarContextMenu": "True", + "FFlagTreatToolAsModel": "True", + "FFlagTruncateDevFrameworkHyperlinkText": "True", + "FFlagTryTranslateParameterOnSourceMatch": "True", + "FFlagTweenServiceGetValueEnabled": "True", + "FFlagUDim2FromScaleAndOffsetConstructors": "True", + "FFlagUGCAllowThumbnailCameraValue": "False", + "FFlagUGCAllowThumbnailConfiguration": "True", + "FFlagUGCFixModerationCheck": "True", + "FFlagUGCRemoveLearnMoreText": "True", + "FFlagUGCUpdateErrors": "False", + "FFlagUGCUseNewAssetTypeInfoSchema": "True", + "FFlagUGCValidateHandleSize": "False", + "FFlagUGCValidateMeshBounds": "True", + "FFlagUGCValidateProperties": "True", + "FFlagUGCValidateTags": "True", + "FFlagUGCValidateTextureSize": "True", + "FFlagUICornerEnabled": "True", + "FFlagUIGradientEnabled": "True", + "FFlagUIInlineLayout2_PlaceFilter": "True;1;713;3299508970;3299511698;3299515879", + "FFlagUILibraryInfiniteScrollingFrameRender": "True", + "FFlagUIViewportFrameDeviceRestore": "True", + "FFlagUIViewportFrameSetCameraNearZ": "True", + "FFlagURLConstructionCleanup": "True", + "FFlagUSC180727A": "True", + "FFlagUSC180727C": "True", + "FFlagUSC180727D": "True", + "FFlagUSC24644": "True", + "FFlagUSC26572": "True", + "FFlagUWPFixBackCrash": "True", + "FFlagUWPLocaleManagerEnabled": "True", + "FFlagUXImprovementAdaptScrolling": "True", + "FFlagUXImprovementAddScrollToGamesPage": "True", + "FFlagUXImprovementAddSearchBar": "True", + "FFlagUXImprovementsFixEscKeyClosing": "True", + "FFlagUXImprovementsPublishSuccessScreenPublishAs": "True", + "FFlagUnfocusTextBoxBeforeAncestorEvent": "True", + "FFlagUniversalAppOnWindowsLaunchEnabled": "True", + "FFlagUniverseIdChangedEvent": "True", + "FFlagUnlockMouseIfKicked": "True", + "FFlagUnlockOnlyCountTheRecentGamesOnce": "True", + "FFlagUnlockedTopbarTransparency": "True", + "FFlagUpdateExtentsForManualStep": "True", + "FFlagUpdateHandleRoot": "True", + "FFlagUpdateHoverOnMouseDown": "True", + "FFlagUpdateInspectAndBuyOffsaleText": "True", + "FFlagUpdateLeaderboardIconPriority": "True", + "FFlagUpdateOpaqueWithAlphaMipThreshold": "True", + "FFlagUpdateOverVIPServersText": "True", + "FFlagUpdateParticlesOnce": "True", + "FFlagUpdateRichTextFits": "True", + "FFlagUpdateScaleBeforeBuildRig": "True", + "FFlagUpdateSettingsHubGameText": "False", + "FFlagUpsellDirectToPackage": "True", + "FFlagUrlSupportNewGamesAPI": "True", + "FFlagUseAccuratePlaySoloForced": "True", + "FFlagUseAdvancedCharacterScales3": "True", + "FFlagUseAnalyticalElasticSpring": "True", + "FFlagUseBaseUrlInPlugins": "True", + "FFlagUseBlake2BHashInSharedString": "False", + "FFlagUseBlake2BHashInSharedString2": "True", + "FFlagUseBlake2BHashInSharedString_PlaceFilter": "True;4939501074", + "FFlagUseBulkMove": "True", + "FFlagUseCanManageForDeveloperIconClient": "False", + "FFlagUseCanManageForDeveloperIconClient2": "True", + "FFlagUseCanManageForDeveloperIconServer": "False", + "FFlagUseCanManageForDeveloperIconServer2": "True", + "FFlagUseCategoryNameInToolbox": "False", + "FFlagUseCategoryNameInToolboxFix1": "True", + "FFlagUseCentralTime": "True", + "FFlagUseCorrectEndpointForPlaceVersion": "True", + "FFlagUseCorrectLocaleForPluginGuis": "True", + "FFlagUseCreationToFetchMyOverrideData2": "True", + "FFlagUseDateTimeType3": "True", + "FFlagUseEngineFeature": "True", + "FFlagUseGenericRBXThumbUrl": "True", + "FFlagUseGetKeyframeSequenceIgnoreCache": "True", + "FFlagUseHipHeightInKeyframeSequences2": "False", + "FFlagUseInitialTerrainCache": "True", + "FFlagUseInitialTerrainCacheForNonStreaming": "True", + "FFlagUseInitialTerrainCacheForNonStreaming_PlaceFilter": "True;2317712696", + "FFlagUseKeyframeMarkersForEvents2": "True", + "FFlagUseLDLPGSSolver4": "True", + "FFlagUseLocalStorage3": "True", + "FFlagUseLuaGameDetailsOnIPad": "True", + "FFlagUseLuaGameDetailsOnIPhone": "True", + "FFlagUseMTSolver": "True", + "FFlagUseMatrix3ForInertiaTensor2": "True", + "FFlagUseNewDocumentationUrls": "True", + "FFlagUseNewErrorStrings": "True", + "FFlagUseNewFriendsDomainCoreScripts": "True", + "FFlagUseNewLeaveGamePrompt": "True", + "FFlagUseNewSleepStage": "True", + "FFlagUseNewSleepStage2": "True", + "FFlagUseNewSleepStage_PlaceFilter": "True;679715583", + "FFlagUseNewSpatialHash5": "True", + "FFlagUseNewTriangleMeshPart": "True", + "FFlagUseNormalWeld": "True", + "FFlagUseOptimizedGetPartsObscuringTarget": "True", + "FFlagUseOtterMasterForLuaApp": "True", + "FFlagUsePolicyServiceForCoreScripts2": "True", + "FFlagUseRBXThumbInToolbox": "True", + "FFlagUseRbxSignalR2": "False", + "FFlagUseRebroadcastEventSharedQueue": "False", + "FFlagUseRebroadcastEventSharedQueue2": "True", + "FFlagUseRoactPlayerList": "False", + "FFlagUseRoactPlayerList2": "False", + "FFlagUseRoactPlayerList3": "True", + "FFlagUseRoactPolicyProvider": "True", + "FFlagUseSaneScrollWheelDelta": "True", + "FFlagUseSetForegroundWindowForPlayer": "False", + "FFlagUseSignalRCommonInUserNotificationClient": "False", + "FFlagUseSolverDisplacementForWake": "True", + "FFlagUseSolverDisplacementForWake_PlaceFilter": "True;679715583", + "FFlagUseSteppingParamsInsteadOfConstants": "False", + "FFlagUseSteppingParamsInsteadOfConstants_PlaceFilter": "True;4306999063", + "FFlagUseStudioFileTypeUtils": "True", + "FFlagUseStudioLocaleForForceLocale": "True", + "FFlagUseStudioServiceInPluginGetUserId": "True", + "FFlagUseThumbnailUrl": "True", + "FFlagUseUpdatedDisclaimerLinks": "True", + "FFlagUseVectorForDirtyMechanisms": "True", + "FFlagUseVersionedEncryptionFormat": "False", + "FFlagUseVersionedEncryptionFormat_PlaceFilter": "True;5646917919;5535247402;5650743011;5732185084;5796554295;5796546949;5796518985;5792232897;5790039516;5938526032;5180703112;5036207802;5947859215;5968314783;5976554489;5967514178;5762783081;4927429832;5271804927", + "FFlagUserAllCamerasInLua": "True", + "FFlagUserAnimateScriptEmoteHook": "True", + "FFlagUserAnimationSpeedDampening": "True", + "FFlagUserBetterDynamicTouchstickCamera": "True", + "FFlagUserBetterHandlingVehicleInputStates": "True", + "FFlagUserBetterInertialScrolling": "False", + "FFlagUserCameraInputRefactor": "False", + "FFlagUserCameraInputRefactor2": "False", + "FFlagUserCameraToggle": "True", + "FFlagUserChatAddServerSideChecks": "True", + "FFlagUserChatAddServerSideChecks2": "True", + "FFlagUserChatHistorySinksInput": "True", + "FFlagUserChatNewMessageLengthCheck": "False", + "FFlagUserChatNewMessageLengthCheck2": "True", + "FFlagUserChatValidateFirst": "True", + "FFlagUserClickToMoveBetterCleanup": "True", + "FFlagUserClickToMoveCancelOnMenuOpened": "True", + "FFlagUserClickToMoveFollowPathRefactor": "True", + "FFlagUserDTDoesNotForceAutoJump": "True", + "FFlagUserDTDoesNotTrackTools": "True", + "FFlagUserDTFastInit": "True", + "FFlagUserDontAdjustSensitvityForPortrait": "True", + "FFlagUserDynamicThumbstickUseContextActionSevice": "True", + "FFlagUserEnableDynamicThumbstickIntro_PlaceFilter": "True;1817743405", + "FFlagUserFixBubbleChatText": "True", + "FFlagUserFixCharacterRemovingControlModule": "True", + "FFlagUserFixChatMessageLogPerformance": "False", + "FFlagUserFixChatMessageLogPerformance2": "False", + "FFlagUserFixChatMessageLogPerformance3": "False", + "FFlagUserFixChatMessageLogPerformance4": "True", + "FFlagUserFixChatMessageLogPerformance_PlaceFilter": "True;370731277", + "FFlagUserFixClickToMoveWithACM": "True", + "FFlagUserFixGamepadCameraTracking": "True", + "FFlagUserFixMouseCapture": "False", + "FFlagUserFixMovementCameraStraightDown": "True", + "FFlagUserFixTouchGuiWhenNoCharacter": "True", + "FFlagUserFixZoomClampingIssues": "True", + "FFlagUserFixZoomInZoomOutDiscrepancy": "True", + "FFlagUserHandleChatHotKeyWithContextActionService": "False", + "FFlagUserHandleChatHotKeyWithContextActionService_PlaceFilter": "True;4738806136", + "FFlagUserHttpAPIVisible": "True", + "FFlagUserInGameChatUseNewFilterAPIV2": "True", + "FFlagUserInputServicePipelineMacClient": "True", + "FFlagUserInputServicePipelineStudio": "True", + "FFlagUserInputServicePipelineWindowsClient": "True", + "FFlagUserIsNowADynamicThumbstick": "True", + "FFlagUserJSONConvertInfAndNanToNull": "True", + "FFlagUserJumpButtonPositionChange": "True", + "FFlagUserMakeThumbstickDynamic": "False", + "FFlagUserNavigationClickToMoveNoDirectPath2": "True", + "FFlagUserNavigationClickToMoveSkipPassedWaypoints": "True", + "FFlagUserNavigationClickToMoveUsePathBlocked": "True", + "FFlagUserNavigationFixClickToMoveInterruption": "True", + "FFlagUserNavigationFixClickToMoveJump": "True", + "FFlagUserNewCameraRaycastingAPIsEnabled": "True", + "FFlagUserNewClickToMoveDisplay": "True", + "FFlagUserNewDefaultCameraAngle": "True", + "FFlagUserNewPoppercam": "False", + "FFlagUserNewPoppercam3": "True", + "FFlagUserNewPoppercam3_PlaceFilter": "False;1997193809;734159876", + "FFlagUserNewPoppercam4": "True", + "FFlagUserNewPoppercam_PlaceFilter": "False;855499080;606849621;537413528;402122991", + "FFlagUserNoCameraClickToMove": "True", + "FFlagUserNoDynamicThumbstickRecenter": "True", + "FFlagUserNoMoreKeyboardPan": "True", + "FFlagUserNoUpdateOnLoop": "True", + "FFlagUserPlayEmoteBySlotEnabled": "True", + "FFlagUserPlayEmoteChatCommand": "True", + "FFlagUserPlayerScriptsBindAtPriority": "False", + "FFlagUserPlayerScriptsBindAtPriority2": "True", + "FFlagUserPointerActionsInPlayerScripts": "True", + "FFlagUserPoppercamLooseOpacityThreshold": "True", + "FFlagUserRbxUtilityCreateSetParentLast": "True", + "FFlagUserRemoveTheCameraApi": "True", + "FFlagUserRoactBubbleChatBeta": "True", + "FFlagUserRoactBubbleChatBeta_PlaceFilter": "True;20907;762", + "FFlagUserServiceEnabledV2": "True", + "FFlagUserServiceWhiteListV2": "True", + "FFlagUserShouldClipInGameChat": "True", + "FFlagUserShouldLocalizeGameChatBubble": "True", + "FFlagUserShouldLocalizeServerMessages": "True", + "FFlagUserSiblingTouchGui": "True", + "FFlagUserTheMovementModeInquisition": "True", + "FFlagUserThirdGamepadZoomStep": "True", + "FFlagUserThumbstickFrameIsActuallyFrame": "True", + "FFlagUserToolR15Fix": "True", + "FFlagUserTouchSensitivityAdjust": "True", + "FFlagUserUpdateCameraConstants": "True", + "FFlagUserUseCachedFriendChecksForChat": "False", + "FFlagUserUseNewControlScript": "True", + "FFlagUsingBrowserServiceCaptcha": "True", + "FFlagUsingCaptchaCDN": "False", + "FFlagUsingNewCaptchaApi": "True", + "FFlagUsingSendMeasureBatch2": "True", + "FFlagVIPServersRebrandToPrivateServers": "True", + "FFlagVerifyBuiltInPlugins": "True", + "FFlagVerifySliceCenterOnRenderNotSet": "True", + "FFlagVersionControlServiceForceDraftsUsage_PlaceFilter": "True;4203193037;2772125205;3069606769;4094440665;2413179002;3344058302;3566618597;4041475807;2061558182;4074515213;2309740430;2670461983;4137940225;3096515841;4133172402;4163865257", + "FFlagVersionControlServiceScriptCollabEnabled": "True", + "FFlagVersionControlServiceScriptCollabEnabledByDefault": "True", + "FFlagVersionControlServiceScriptCollabEnabledByDefaultFalse": "True", + "FFlagVideoDocumentationPluginEnabled": "True", + "FFlagVideoRecordDeadlockFix": "True", + "FFlagVideoRecordFix": "True", + "FFlagVideoRecordFix2": "True", + "FFlagVideoSupport": "True", + "FFlagVideoSupport_PlaceFilter": "True;4927429832;4587054145;4521759066;4589144917;1921623329;4710199611;4739075775;4786133739;4846054211;4898701067;4898983990;4898980405;4898177642;4911320968;5271804927;5535247402", + "FFlagVideoUISupport": "True", + "FFlagVideoUseAudioAsMasterClock": "True", + "FFlagViewSelectorLightUpdate": "True", + "FFlagViewportFrameDefaultFovFix": "True", + "FFlagVisibilityWithUpdatedAbsolutePosition": "True", + "FFlagWatchWidgetContextMenuCopy": "True", + "FFlagWatchWidgetDisplayVariadicArgs": "True", + "FFlagWatchWidgetSortVariables": "True", + "FFlagWaterReflectionWaveFix": "True", + "FFlagWebLocMarkLocTableListDirtyOnServer": "True", + "FFlagWebViewsUseLuaCatalog": "True", + "FFlagWebViewsUseLuaGameDetails": "False", + "FFlagWebViewsUseLuaGameDetails2": "True", + "FFlagWeldConstraintRelativeCFrame1": "True", + "FFlagWhateverFloatsYourContact": "True", + "FFlagWhitelistThumbnailsAPI": "True", + "FFlagWindowsGameLaunchUseAppBridge": "True", + "FFlagWindowsReportAbuseNotification": "True", + "FFlagWindowsTouchEnabled": "False", + "FFlagWindowsUniversalAppF11Fix": "True", + "FFlagWorldAvatarLocalization": "True", + "FFlagWorldModelCatchInsertRawErrors": "True", + "FFlagWorldModelRefactorV3": "False", + "FFlagWorldModelRefactorV4": "True", + "FFlagWorldModelV4": "False", + "FFlagWorldModelV5": "True", + "FFlagRenderSpecialMeshLoadPrepare":"True", + "FFlagWrappedDevFrameworkLinkText": "True", + "FFlagXboxAppBridgeRewrite2": "False", + "FFlagXboxAppBridgeRewrite3": "False", + "FFlagXboxAppBridgeRewrite5": "False", + "FFlagXboxAppShellSiblingZIndex2": "True", + "FFlagXboxAppShellSiblingZIndex3": "True", + "FFlagXboxCheck2sv": "True", + "FFlagXboxDetachShowAccountPicker2": "True", + "FFlagXboxFixAwardedBadges": "True", + "FFlagXboxFixEngagementLayout": "True", + "FFlagXboxGetLocaleFromAccount": "True", + "FFlagXboxHardwareBundleEnabled": "True", + "FFlagXboxKeyboardInitInCallbacks": "True", + "FFlagXboxLessInfiniteFunctionMarshaller": "True", + "FFlagXboxLocV2": "True", + "FFlagXboxReportPlayerLocFix": "True", + "FFlagXboxStartGameRefactor": "True", + "FFlagXboxUpdateSessionChecker": "True", + "FFlagXboxUseNewBundleEndpoints2": "True", + "FFlagXboxUseRoactRoduxNewConnectionOrder": "True", + "FFlagXboxValidateConnectPeer": "True", + "FFlagXboxVoiceChatFixes": "True", + "FFlagXboxVolumeFadesInCallbacks": "True", + "FFlagYouDontKnowMe": "True", + "FIntABTestRequestTimeoutMilliseconds": "5000", + "FIntAntiSpamSpamLimit": "1000", + "FIntAppBridgeNewGameJoinAPIPercent": "0", + "FIntAppConfigurationExpiry": "86400", + "FIntAppShellFPSReportPeriod": "120", + "FIntAppShellMemoryReportPeriodicity": "120", + "FIntAvatarEditorNewCatalogButton2": "100", + "FIntAvatarEditorRedesignRolloutPercentageAndroidPhone": "100", + "FIntAvatarEditorRedesignRolloutPercentageAndroidTablet": "100", + "FIntAvatarEditorRedesignRolloutPercentageIpad": "100", + "FIntAvatarEditorRedesignRolloutPercentageIphone": "100", + "FIntAvatarEditorRedesignRolloutPercentageOther": "100", + "FIntAvatarExperienceNewNavigationRollout2": "0", + "FIntBadgeApiV1UserHasBadgePercentage": "100", + "FIntCLI20390_2": "16", + "FIntCLI30390": "2", + "FIntCLI30497I": "2048", + "FIntCameraFarZPlane": "100000", + "FIntCameraMaxZoomDistance": "400", + "FIntClientCompressionFormatRequestPC": "1", + "FIntCompatibilityModeSpecularMultiplierDiv100": "30", + "FIntCurlProbePermyriad": "10000", + "FIntDataModelPatcherEventPercentage": "1", + "FIntDebugVersionHistoryTCMessageOnInternalError": "1", + "FIntDebugVersionHistoryWiremockApi": "0", + "FIntDelayBeforeFirstPostStatsSeconds": "180", + "FIntESGamePerfMonitorReportDetails": "1", + "FIntEducationalPopupDisplayMaxCount": "1", + "FIntEnableFriendFooterOnHomePageV369": "100", + "FIntEnableTencentSignupCleanup": "100", + "FIntGamePerfMonitorPercentage": "10", + "FIntGraphicsVulkanARMVaryingBufferMb": "160", + "FIntGraphicsVulkanMinAndroidVersion": "25", + "FIntGraphicsVulkanMinDriverVersionPVR": "4981305", + "FIntHttpCacheRedirectsTimeoutMs": "14400000", + "FIntHttpCurlMaxCachedHandlesPerHost": "100", + "FIntInstrumentGuacRollout": "100", + "FIntJointTime_TextureCooldown": "0", + "FIntLDLPGSMaxParallelTasks": "16", + "FIntLocalizationAnalyticsSamplesPerMillion": "1000000", + "FIntLuaAppAutocompletePercentageRollout": "0", + "FIntLuaAppBacktraceErrorReportPercentage": "20", + "FIntLuaAppLogoutUserOnUnauthorizedPercentRollout": "100", + "FIntLuaAppMorePagePremiumIcon": "2", + "FIntLuaAppNonFinalThumbnailMaxRetries": "1", + "FIntLuaAppPercentRollOutNewThumbnailsApiV3": "100", + "FIntLuaAppPercentRolloutFeaturedGameTileInSearch": "100", + "FIntLuaAppPercentRolloutGameDetailShareButtonUseAppsflyer": "100", + "FIntLuaAppRenderTransparentPageMaxCount": "1", + "FIntLuaAppSearchAutocompleteDebounceMs": "100", + "FIntLuaAppUseNewAvatarThumbnailsApi4": "0", + "FIntLuaAppUseNewAvatarThumbnailsApi5": "100", + "FIntLuaCatalogRolloutPercentageAndroidPhone": "100", + "FIntLuaCatalogRolloutPercentageAndroidTablet": "100", + "FIntLuaCatalogRolloutPercentageIpad": "100", + "FIntLuaCatalogRolloutPercentageIphone": "100", + "FIntLuaCatalogRolloutPercentageOther": "100", + "FIntLuaChatAliasesRolloutV3": "0", + "FIntLuaChatAliasesRolloutV5": "100", + "FIntLuaChatUseNewFriendsEndpoints": "25", + "FIntLuaChatUseNewFriendsEndpointsV2": "100", + "FIntLuaStartupManagerRollout": "0", + "FIntLuaStartupManagerRollout2": "100", + "FIntLuauTableTypeMaximumStringifierLength": "40", + "FIntMaxCameraMaxZoomDistance": "100000", + "FIntMaxClients": "1023", + "FIntMaxLevelForAnchored": "3", + "FIntNeighborSleepThresholdMult": "10", + "FIntNewDevConsoleMaxHttpCount": "300", + "FIntNewDevConsoleMaxLogCount": "500", + "FIntNewInGameMenuPercentRollout": "1", + "FIntNotMovingSleepThresholdMult": "1", + "FIntNumSmoothingPasses": "3", + "FIntNumberParalleNarrowPhaseThreads": "16", + "FIntNumberParallelNarrowPhaseTasks_PlaceFilter": "10;189707;3229213183;654732683", + "FIntPGSAngularDampingPermilPersecond": "950", + "FIntPGSPStageStiffnessWorseFitnessThreshold": "2", + "FIntPGSVStageStiffnessAggressiveValue": "99995", + "FIntPGSVStageStiffnessConservativeValue": "99000", + "FIntPGSVStageStiffnessWorseFitnessThreshold": "2", + "FIntPL_TeleportPlaceLauncherExpBackoffRollout": "100", + "FIntParalleNarrowPhaseThreads": "16", + "FIntPartMinSizeMul1000": "50", + "FIntPercentLuaGameDetailsPageOnAndroidPhone": "100", + "FIntPercentLuaGameDetailsPageOnAndroidTablet": "100", + "FIntPercentReportingByCountryCode": "100", + "FIntPercentReportingGamesListRTT": "5", + "FIntPercentReportingGamesSortsRTT": "50", + "FIntPercentReportingLeaveGameAnalytics": "10", + "FIntPercentReportingNetworkProfileAfterStartup": "20", + "FIntPlayerPolicyHttpRequestRetryTimes": "3", + "FIntRegLambda": "1400", + "FIntRenderDitherMode": "1", + "FIntRenderGrassHeightScaler": "50", + "FIntReportDeviceInfoRollout": "100", + "FIntSendScreenOrientationToEventIngestHundredthsPercentage": "100", + "FIntSmoothMouseSpringFrequencyTenths": "45", + "FIntStartupInfluxHundredthsPercentage": "100", + "FIntStudioBFRolesetAccessPermissions": "4", + "FIntStudioBFRolesetAssetManager": "2", + "FIntStudioBFRolesetAsyncPublish": "4", + "FIntStudioBFRolesetGameManagement": "4", + "FIntStudioBFRolesetLuaPublishWorkflow": "4", + "FIntStudioBFRolesetPackagePermissions": "4", + "FIntStudioBFRolesetSaveToCloudV2": "4", + "FIntStudioDeprecateQuickFindScriptStep": "2", + "FIntStudioInsertDeletionCheckTimeMS": "30000", + "FIntTaskSchedulerAsyncTasksMinimumThreadCount": "3", + "FIntTaskSchedulerAutoThreadLimit": "8", + "FIntTaskSchedulerThreadMin": "0", + "FIntTeleportMethodAnalyticsHundredthPct": "100", + "FIntTeleportSinglePlayerCleanupRollout": "100", + "FIntTexturePacksBetaFeatureRoleSet": "4", + "FIntUGC_TeleportPlaceLauncherExpBackoffRollout": "100", + "FIntUSC180727B": "32", + "FIntValidateLauncherPercent": "100", + "FIntWeldConstraintAdornSize": "10", + "FIntZoomOutDistance": "500", + "FLogBrowserActivity": "3", + "FLogCloseDataModel": "3", + "FLogDXVideoMemory": "4", + "FLogError": "6", + "FLogFastLogValueChanged": "0", + "FLogFullRenderObjects": "0", + "FLogGraphics": "6", + "FLogHangDetection": "3", + "FLogLuaBridge": "2", + "FLogNetwork": "7", + "FLogNetworkItemQueueDtor": "1", + "FLogPlayerShutdownLuaTimeoutSeconds": "1", + "FLogPluginOnInvoke": "0", + "FLogRccSoapMicroprofiling": "6", + "FLogStudioLocalSaveMD5HashOutput": "6", + "FLogVR": "6", + "FStringABTestNameIPhoneLuaGameDetails": "iPhone.AllUsers.LuaGameDetails2", + "FStringBreakpointPropagationBetaFeatureUrl": "https://devforum.roblox.com/t/universal-breakpoints-beta-one-breakpoint-to-rule-them-all/643907", + "FStringCLI27760S": "nn62qq5r3q8n9sn537r1r00o43nq1p458391556o", + "FStringCoreScriptBacktraceErrorUploadToken": "53268e7f81b40f5dca5b80ad0fb9b7b2fd750e96ece3480ad1fb89a4a4cc4766", + "FStringEnableiCloudWebCredentialsBtIdsList": "49593556386,49593556386,44219219422,49373021284,49849080647", + "FStringFeature_NewGameJoinInstance": "431;100;762", + "FStringFeature_NewGameJoinTeleport": "426;100;762", + "FStringGamesUrlPath": "/games/?referrer=roblox-player", + "FStringGraphicsVulkanBlacklist": "", + "FStringLuaAppGameSortGridABTestJSON": "{\"ABTestData\" : { \"Control\" : { \"UseGrid\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation1\" : { \"UseGrid\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation2\" : { \"UseGrid\" : true, \"GridRows\" : 3, \"UseGridMediumTile\" : true }, \"Variation3\" : { \"UseGrid\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : true }, \"Variation4\" : { \"UseGrid\" : true, \"GridRows\" : 3, \"UseGridMediumTile\" : false }, \"Variation5\" : { \"UseGrid\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false } }}", + "FStringLuaAppGameSortGridABTestJSONV2": "{\"ABTestData\" : { \"Control\" : {\"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation1\" : { \"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation2\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"ExcludedSorts\" : [\"MyRecent\"], \"SeeAllButtonType\" : 1 }, \"Variation3\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"ExcludedSorts\" : [\"MyRecent\"], \"SeeAllButtonType\" : 2 }, \"Variation4\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"ExcludedSorts\" : [\"MyRecent\"], \"SeeAllButtonType\" : 3 } }}", + "FStringLuaAppGameSortGridABTestJSONV2_2": "{\"ABTestData\" : {\"Control\" : {\"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation1\" : { \"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation2\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"ExcludedSorts\" : [\"MyRecent\", \"FriendActivity\", \"MyFavorite\", \"PopularInCountry\", \"Curated_55\", \"Curated_60\", \"Popular\", \"TopRated\", \"Curated_71\", \"Curated_72\", \"Curated_67\", \"Curated_68\", \"Featured\", \"Curated_65\", \"Curated_5\", \"Curated_6\", \"Curated_7\", \"TopGrossing\", \"Curated_59\", \"Curated_64\", \"Curated_63\", \"Curated_62\", \"Curated_56\", \"Curated_58\", \"Curated_57\"], \"SeeAllButtonType\" : 1 }, \"Variation3\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"ExcludedSorts\" : [\"MyRecent\", \"FriendActivity\", \"MyFavorite\", \"PopularInCountry\", \"Curated_55\", \"Curated_60\", \"Popular\", \"TopRated\", \"Curated_71\", \"Curated_72\", \"Curated_67\", \"Curated_68\", \"Featured\", \"Curated_65\", \"Curated_5\", \"Curated_6\", \"Curated_7\", \"TopGrossing\", \"Curated_59\", \"Curated_64\", \"Curated_63\", \"Curated_62\", \"Curated_56\", \"Curated_58\", \"Curated_57\"], \"SeeAllButtonType\" : 2 }, \"Variation4\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"ExcludedSorts\" : [\"MyRecent\", \"FriendActivity\", \"MyFavorite\", \"PopularInCountry\", \"Curated_55\", \"Curated_60\", \"Popular\", \"TopRated\", \"Curated_71\", \"Curated_72\", \"Curated_67\", \"Curated_68\", \"Featured\", \"Curated_65\", \"Curated_5\", \"Curated_6\", \"Curated_7\", \"TopGrossing\", \"Curated_59\", \"Curated_64\", \"Curated_63\", \"Curated_62\", \"Curated_56\", \"Curated_58\", \"Curated_57\"], \"SeeAllButtonType\" : 3 } }}", + "FStringLuaAppGameSortGridABTestJSONV2_3": "{\"ABTestData\" : {\"Control\" : {\"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation1\" : { \"GridEnabled\" : false, \"GridRows\" : 0, \"UseGridMediumTile\" : false }, \"Variation2\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"IncludedSorts\" : {\"Home\": [\"PersonalRecommendation\"]}, \"SeeAllButtonType\" : 1 }, \"Variation3\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"IncludedSorts\" : {\"Home\": [\"PersonalRecommendation\"]}, \"SeeAllButtonType\" : 2 }, \"Variation4\" : { \"GridEnabled\" : true, \"GridRows\" : 2, \"UseGridMediumTile\" : false, \"IncludedSorts\" : {\"Home\": [\"PersonalRecommendation\"]}, \"SeeAllButtonType\" : 3 } }}", + "FStringLuaDraggersBetaUrl": "https://devforum.roblox.com/t/say-hello-to-the-new-lua-dragger-beta/504815", + "FStringMotor6DTransformFixBetaUrl": "https://devforum.roblox.com/t/changes-to-motor6d-transform-coming-monday/526807", + "FStringNewGamepadMenuForcedUserIds": "959520514,656046844,146914182,975669155,344925094,247305679,956690111,1026207482,485327537,166540505,1300488959,1220631541,169775909,1498251806,401950003,751568948,2231221,7210880,931389991,1478764079,597663806,1298953044,1542933305,1182179679,1516442,1155027644,648897862", + "FStringNewInGameMenuForcedUserIds": "", + "FStringNewTopBarForcedUserIds": "959520514,656046844,146914182,975669155,344925094,247305679,956690111,1026207482,485327537,166540505,1300488959,1220631541,169775909,1498251806,401950003,751568948,2231221,7210880,931389991,1478764079,597663806,1298953044,1542933305,1182179679,1516442,1155027644,648897862", + "FStringRENAME_ABTEST_AllUsers_GameSearch_Q2DRankingEmphasisHideBad": "AllUsers.GameSearch.Q2DRankingEmphasisHideBadV2", + "FStringRichTextBetaFeatureUrl": "https://devforum.roblox.com/t/richtext-beta/634167", + "FStringSIMForceCSGv2LearnMoreUrl": "https://devforum.roblox.com/t/deprecating-legacy-csg-system/766077", + "FStringSettingsHubInviteToGameThumbnailSize": "Size150x150", + "FStringStudioBuiltinPluginDefaultFont": "SourceSans", + "FStringStudioEmergencyMessageV3": "eyAicmVnaXN0cnlLZXkiOiAiRW1lcmdlbmN5TWVzc2FnZUZvckNoaW5lc2VTdHVkaW8iLCAicGxhdGZvcm1zIjogWyAiV2luZG93cyIgXSwgIm1lc3NhZ2UiOiB7ImVuIjogIlRvIGdldCB0aGUgYmVzdCBTdHVkaW8gZXhwZXJpZW5jZSBhbmQgcGVyZm9ybWFuY2UgaW4gQ2hpbmEgdXNlIHRoZSBDaGluZXNlIHZlcnNpb24gb2YgU3R1ZGlvIGF2YWlsYWJsZSBvbiA8YSBocmVmPWh0dHA6Ly93d3cucm9ibG94ZGV2LmNuPmh0dHA6Ly93d3cucm9ibG94ZGV2LmNuPC9hPiIsICJ6aF9DTiI6ICJcdTU5ODJcdTY3OWNcdTRmNjBcdTYwZjNcdTRmNTNcdTlhOGNcdTU3MjhcdTRlMmRcdTU2ZmRcdTY3MDBcdTdhMzNcdTViOWFcdTc2ODRcdTAwNTNcdTAwNzRcdTAwNzVcdTAwNjRcdTAwNjlcdTAwNmZcdTcyNDhcdTY3MmNcdWZmMGNcdThiZjdcdTRmNjBcdTUyNGRcdTVmODAgXHUwMDNjXHUwMDYxIFx1MDA2OFx1MDA3Mlx1MDA2NVx1MDA2Nlx1MDAzZFx1MDA2OFx1MDA3NFx1MDA3NFx1MDA3MFx1MDAzYVx1MDAyZlx1MDAyZlx1MDA3N1x1MDA3N1x1MDA3N1x1MDAyZVx1MDA3Mlx1MDA2Zlx1MDA2Mlx1MDA2Y1x1MDA2Zlx1MDA3OFx1MDA2NFx1MDA2NVx1MDA3Nlx1MDAyZVx1MDA2M1x1MDA2ZVx1MDAzZVx1MDA2OFx1MDA3NFx1MDA3NFx1MDA3MFx1MDAzYVx1MDAyZlx1MDAyZlx1MDA3N1x1MDA3N1x1MDA3N1x1MDAyZVx1MDA3Mlx1MDA2Zlx1MDA2Mlx1MDA2Y1x1MDA2Zlx1MDA3OFx1MDA2NFx1MDA2NVx1MDA3Nlx1MDAyZVx1MDA2M1x1MDA2ZVx1MDAzY1x1MDAyZlx1MDA2MVx1MDAzZSBcdTRlMGJcdThmN2RcdTdmNTdcdTVlMDNcdTRlNTBcdTYwMWRcdTcyNDggXHUwMDUzXHUwMDc0XHUwMDc1XHUwMDY0XHUwMDY5XHUwMDZmXHUzMDAyIn0sICJzaHV0ZG93biI6IGZhbHNlIH0=", + "FStringStudioLuauLints": "1,2,3,6,10,11,12,13,14,15,18,19", + "FStringStudioPlaceVersionHistoryHelpLink": "https://devforum.roblox.com/t/beta-place-version-history-in-studio/607597", + "FStringStudioReportOpenPlaceTimeFilter": "95206881", + "FStringStudioTutorialsTOCUrl": "http://wiki.roblox.com/index.php?title=Studio_Tutorials_Landing&studiomode=true", + "FStringStudioTutorialsUrl": "http://wiki.roblox.com/index.php?title=Studio_Tutorials_Test&studiomode=true", + "FStringStudioUrlAnimationEditor": "https://devforum.roblox.com/t/keyframes-animate-everything-around-me/360033", + "FStringStudioUrlAssetManager": "https://devforum.roblox.com/t/asset-manager-is-here-beta/517475", + "FStringStudioUrlCSGv2SmoothingBeta": "https://devforum.roblox.com/t/introducing-smoothingangle-property-for-partoperation/552810", + "FStringStudioUrlGameManagement": "https://devforum.roblox.com/t/additional-game-management-in-roblox-studio/642282", + "FStringStudioUrlInsertObjectStreamlining": "https://devforum.roblox.com/t/object-insertion-workflow-improvements-beta-2/468307", + "FStringStudioUrlPhysicsSleepImprovements": "\"https://devforum.roblox.com/t/beta-test-me-sleeping-part-behavior-improvements/456931\"", + "FStringStudioUrlPlaceVersionHistory": "https://devforum.roblox.com/t/beta-place-version-history-in-studio/607597", + "FStringStudioUrlSupportPluginDebugging": "https://devforum.roblox.com/t/plugin-debugging-new-beta-feature/623350", + "FStringStudioUrlSurfaceJoinChange": "https://devforum.roblox.com/t/changes-to-part-surfaces-beta-feature/334420", + "FStringTexturePacksBetaFeatureUrl": "https://devforum.roblox.com/t/surfaceappearance-studio-beta/663449", + "FixChromebookEnterKeyIssue": "True", + "GoogleAnalyticsAccountPropertyID": "UA-43420590-3", + "GoogleAnalyticsAccountPropertyIDPlayer": "UA-43420590-14", + "GoogleAnalyticsLoadStudio": "0", + "LuaAppHideGameDetailsDeveloperRow": "True", + "LuaAppHideGamesDropDownList": "True", + "LuaAppPercentRolloutGameDetailMoreAnalytics": "100", + "PublishedProjectsPageHeight": "535", + "PublishedProjectsPageUrl": "/ide/publish", + "PublishedProjectsPageWidth": "950", + "SFFlagFixBallRaycasts": "True", + "SFFlagFixHumanoidOwnershipRoot": "True", + "SFFlagFixRaysInWedges": "True", + "SFFlagNetworkHumanoidStatePropertyReplication": "False", + "SFFlagNetworkUsePeerId": "True", + "SFFlagPgsForAll": "True", + "SFFlagTerrainRaycastsRespectCollisionGroups": "True", + "SFFlagUseNativePathWaypoint": "True", + "SFFlagWeldConstraintRelativeCFrame2": "True", + "StartPageUrl": "/ide/welcome", + "TreatAndroidInputSourceAsBitmask": "True", + "UseSetForegroundWindowForPlayer2": "True", + "VideoPreRollWaitTimeSeconds": "45", + "DFIntSendJoinHttpBytesToDiag_HundredthsPercentage": "100", + "FFlagCMSUploadAccessoryMeshPartFormat2": "True" + } +} \ No newline at end of file diff --git a/app/files/Pants.rbxmx b/app/files/Pants.rbxmx new file mode 100644 index 0000000..02afb17 --- /dev/null +++ b/app/files/Pants.rbxmx @@ -0,0 +1,13 @@ + + null + nil + + + + http://www.nexium.fit/asset/?id={PantsImageId} + + Pants + true + + + \ No newline at end of file diff --git a/app/files/RCCServiceS2kvmA2lVpz4g9qlbDw1.json b/app/files/RCCServiceS2kvmA2lVpz4g9qlbDw1.json new file mode 100644 index 0000000..c43b380 --- /dev/null +++ b/app/files/RCCServiceS2kvmA2lVpz4g9qlbDw1.json @@ -0,0 +1 @@ +{ "FIntGraphicsOculusDetectTimeout":0, "FFlagDebugRenderVRHUD":false, "FIntGraphicsVulkanAdrenoArghVersion":24, "FFlagDebugGraphicsDisableVulkan11":false, "FFlagDebugGraphicsD3D9ForceSWVP":false, "FFlagGraphicsGLUseNewPacksES":false, "FFlagGraphicsGLUseNewPacksGL":false, "FFlagGraphicsGL3InstancingEnabled5":false, "FFlagGraphicsGL3UseUBO3":true, "FFlagDebugGraphicsForceGL2":false, "FFlagSIMDVoxelizerEnabled":true, "FIntCSGVoxelizerFadeRadius":300, "FFlagG3DRayCylinderintersectionTimeFix":true, "FFlagRenderIC2VoxelizerUpdatesEnabled":false, "FFlagRenderInstancingDeferUpdates2":true, "FIntSuperClusterFastClusterSize":1000, "FFlagJoinTime_LocalUserClusterPriority":true, "FFlagRenderFixEmojiPadding":false, "FFlagDebugOccupancy":false, "FFlagFixTextureAtlasLineHeightOn4xDevices":true, "DFIntPreloadTextureTimeBuget":1000, "FFlagFixTextureCompositorFramebufferManagement":false, "FIntJointTime_TextureCooldown":0, "FFlagJoinTime_AllowFullTexturePrioUpdate":false, "FFlagJoinTime_PassTexturePriority":true, "FFlagRenderInstancingEnabled8":true, "FFlagGridMaterialFix":true, "FIntFastClusterUpdateWaitingBudgetMs":4, "FFlagNoFaceHeadMeshTag":false, "FFlagFixTextureCubeFramebuffers":false, "FIntOutlineThickness":40, "FIntOutlineBrightnessMin":50, "FFlagEnableRobloxGuiEffect":true, "FFlagRenderRestrictHeads5":true, "FFlagDebugGraphicsVsync":false, "FFlagDebugGraphicsCrashOnLeaks":true, "FFlagDebugGraphics":false, "FFlagFixIAdornableCollectorCrash3":false, "DFFlagReplicatorPacketStatsHandleBursts":true, "DFIntJoinDataCompressionLevel":1, "DFFlagCorrectDevConBw":true, "DFFlagCantGetMad":false, "DFFlagStreamAvoidResetRegionRadius":false, "DFIntStreamJobMinBufferHealthThresholdHundredths":40, "DFIntMaxConsecutiveStreamJobWorkLoad":1, "DFIntStreamJobPriorityAmplifierRadius":0, "DFIntNetworkSchemaCompressionRatio":9, "DFIntRakNetUseSlidingWindow2_maxSpeed":0, "DFIntRakNetUseSlidingWindow2_minSpeed":1536, "DFIntRakNetUseSlidingWindow2_minRtt":30000, "DFIntRakNetUseSlidingWindow2_startUpdateMs":10, "DFIntRakNetUseSlidingWindow2_startFactor":200, "DFIntRakNetUseSlidingWindow2_rangeCount":10, "DFIntRakNetUseSlidingWindow2_trackLengthMs":2500, "DFIntRakNetResendScaleBackFactorHundredthsPercent":6500, "DFIntRakNetConnectionStartWindow_HundredthsPercentage":1000, "DFFlagDelistPpr":false, "DFFlagNotChristmasTodayEither3":false, "DFFlagDontWhitelistUserInputConnectionCounts":true, "DFFlagDropItLikeItsHat2":false, "DFIntWeldPermyriad":100, "DFFlagActOnNewCheck":false, "DFFlagCheckBackpack":false, "DFIntMaxServerStreamRegionRadius":16, "DFFlagOneWeldToRuleThemAll2":false, "DFFlagMoreWeldRestrictions":false, "DFFlagUseVelocityGateForMoment":false, "DFIntDebugSendMomentInSteps":6, "DFIntDebugSendDistInSteps":5, "DFIntMaxFramesToSend":2, "FFlagDistanceThinningForClient":true, "FFlagUseRoundRobinForClient":false, "DFFlagUseDistanceThinning":true, "DFFlagUseRoundRobin":false, "DFFlagUseSort":false, "DFFlagSetSimulationRadiusInPhysicsSender":true, "DFFlagNewSortAndFilter":true, "DFFlagSendAllPhysicsPackets":false, "DFIntPhysicsPacketsPerStepAdjustPeriodTenths":30, "DFIntS2PhysicsSenderRate":15, "DFIntS2NumPhysicsPacketsPerStep":2, "FIntNumPhysicsTouchPacketsPerStep":1, "DFIntMaxStreamPacketsPerStep":16, "DFStringDebugServerProfilerIdList":"", "DFIntDebugProfilerCaptureTime":4, "FIntAntiSpamSpamLimit":1000, "DFIntAniCycleCount":0, "DFFlagAniLongCycleFix":true, "DFFlagSteadyAni":false, "DFFlagAniCoalesce":true, "DFFlagGameLoadDataStatistics":false, "DFFlagFilterCheckMap":false, "DFIntServerPlayerFilterPermyriad":0, "DFIntDisconnectReportPermyriad":0, "DFFlagFixServGenPlayer4Spawning2":true, "FFlagDebugForceRegenerateSchemaBitStream":false, "DFIntDepthLimit":4000, "DFFlagUseNewLeakyBucketForRateLimiting":false, "DFIntRxRlReport":15, "DFIntRxRlEn2":0, "DFIntQLimit":3072, "DFIntReportFill":0, "DFIntSoundFill":83333, "DFIntReportLeak":100000000, "DFIntSoundLeak":10000000, "DFIntRatePermyriad":0, "DFIntClusterEstimatedCompressionRatioHundredths":200, "DFIntClusterCompressionLevel":1, "DFFlagUseMegaReplicationData":false, "DFFlagDebugSendStreamingEnabledKeyStatsPlaceSpecific":false, "DFFlagSendStreamingEnabledKeyStats":true, "DFFlagSendQueueTimeByPlayers":true, "DFFlagSelectiveNegativeTarget":true, "FFlagNetworkDeserializePacketsInAJob":true, "DFFlagLogMemoryStatsOnCompressionError":true, "DFFlagTeamCreateServerTrackScriptChangesFullSource":true, "DFFlagReportMtubyCountyAndCntoDc":true, "FFlagDebugSendPhysicsFBUpdateRatePlaceSpecific":false, "DFStringSendPingForCnConnectingToDcList":"111,174,191,133", "DFIntSendRakNetStatsThrottle":2, "DFIntSendRakNetStatsInterval":300, "DFIntReplicatorMaxPacketBytesSentToInfluxOnError":256, "FIntEventReportLagThrottleHundredThousandths":0, "DFFlagPhysicsResetOsp":true, "DFIntMaxDataOutJobScaling":10, "DFIntMaxClusterSendStepsAccumulated":15, "DFIntMaxClusterSendStepsPerCyclic":5, "DFIntMaxDataStepsPerCyclic":5, "FFlagPpjClientBreak":false, "FIntSSAOMipLevels":4, "DFFlagPpjServerBreak":false, "DFIntPpjCapacity":100, "DFIntPpjPmFill":10, "DFIntPpjEtrFill":10, "FFlagJoinTime_LocalUserMeshPriority":true, "DFIntMaxProcessPacketsJobScaling":10, "DFIntMaxProcessPacketsStepsAccumulated":15, "DFIntMaxWaitTimeBeforeForcePacketProcessMS":0, "DFFlagNotTouching":false, "DFIntMaxLearnDescriptors":8192, "FFlagUseNetworkStream":true, "DFIntClientOwnershipMs":100, "DFFlagDebugSendServerPerfInfoPlaceSpecific":false, "DFFlagSendServerGenPerfInfo":true, "DFFlagReportHttpServiceToEc":false, "DFIntInfluxReportFeOnStartupErrorPermyriad":0, "DFFlagDontRemoveGUIDEarly":true, "DFIntReportFeOnStartupPermyriad":0, "DFFlagIPV6RobloxStudioCleanUp":false, "DFFlagRCCSupportCloudEdit":true, "DFFlagInstancePacketCacheRemoveCorrectKeyOnAncestorChanged":true, "DFStringGamePerfMonitorPercentageCountryOverride":"CN,50,AU,50,NZ,50", "DFIntGAThrottlingEventThresholdHundredthCat1":90, "DFIntGAThrottlingEventThresholdHundredthCat2":75, "DFIntGAThrottlingEventThresholdHundredthCat3":50, "FIntGamePerfMonitorPercentage":0, "DFIntDebugClientSvrProfilerFramesOverride":0, "FFlagTxRlEn":false, "DFFlagClientJoinProcessToEventIngest":true, "DFIntTimePermyriad":10000, "FFlagCLI21289":true, "DFIntClientInstanceQuotaInitial":2000, "FFlagLoadCoreScriptsEvenInTeamCreate":true, "FFlagDebugEnableSpoofGameLocaleId":false, "FStringDebugSpoofRobloxLocaleId":"es-es", "FFlagDebugEnableSpoofRobloxLocaleId":false, "FFlagJoinTimeByCountryByPlatform":true, "DFStringSendJoinTimeDeltasHundPrecCountryOverride":"CN,5000,US,100,AU,3000,KR,2000,NZ,3000", "FFlagSendJoinTimeDelta":true, "FStringGameLocaleIdName":"GameLocale", "FFlagTSMk2ThrottleStreamJob":true, "DFFlagUseCorrectCoreCase1Devices":false, "DFIntSendJoinTimesToDiag_HundredthsPercentage":0, "FFlagSendPlatformOverallJoinTime":true, "FFlagPlaceLauncherIncludePlStartTime":true, "FFlagLogJoinTime":false, "FFlagJoinTime_AvatarTextureCompositorSignal":true, "FFlagJoinTime_AvatarFastClusterSignal":true, "FFlagUnlockMouseIfKicked":true, "FFlagDebugForceChatDisabled":false, "FIntDisconnectInfluxHundredthsPercentage":0, "DFIntJoinTimeCounters_JoinInfluxHundredthsPercentage":0, "FStringServerConfigChatFilterUrl":"/Game/ChatFilter.ashx", "FStringServerConfigAbuseReportUrl":"/AbuseReport/InGameChatHandler.ashx", "FIntServerConfigScriptTimeoutSeconds":10, "DFFlagServerCopiesPlayerGui":false, "DFIntPhysicsCompressionSizeFilter":50, "DFIntRakNetLoopMs":10, "DFFlagSimplifyRakNetConnectionHandshake":false, "FFlagDebugEnableInternetSimulator":false, "DFFlagCLI120342":true, "DFIntClientNetworkInfluxHundredthsPercentage":1000, "FIntDebugClientNetworkUnthrottledGAForDatacenterId":0, "DFIntServerPlayerFilterConfig":0, "FIntRakNetResendBufferArrayLength":512, "DFIntRakNetNakResendDelayRttPercent":0, "DFIntRakNetNakResendDelayMs":0, "DFFlagRakNetFixBwCollapse":false, "DFFlagRakNetUseSlidingWindow4":false, "DFFlagDebugRakNetUseUdt":false, "DFFlagRakNetDetectNetUnreachable":true, "FStringClientExternalBrowserUserAgent":"Roblox/WinInet", "FFlagCSGv2UseIterativeSimplification":true, "FFlagCSGv2EnablePerPrimitiveBoxMaps":true, "FFlagCSGv2ControlSignificands":false, "DFFlagCSGv2AlwaysClusterPositions":false, "DFFlagCSGv2UsePositionClustering":true, "FFlagCSGv2UnionOrientationFromFirstPart":true, "FFlagStudioCSGChildDataNoSizeLimit":false, "FFlagTaskSchedulerRemoveLast":false, "FFlagTaskSchedulerSTDThreadwrapper":true, "FFlagFixPluginActionIds":true, "FFlagRapidJson110Studio_2":true, "FFlagStudioAnimationEditorClickAndScrubFix":false, "FFlagAvatarEditorTabResizing":false, "FFlagRapidJson110":false, "FFlagDebugFastFlagEditor":false, "DFFlagDebugDisableTimeoutDisconnect":false, "DFFlagHttpUrlSubdomainDotFix":false, "DFFlagHttpUrlDecodeFix":false, "DFFlagHttpUrlPortFix":true, "FIntTaskSchedulerTasksDefaultMaxCountPerCycle":16, "FFlagStudioCheckForUpgradeEnabled":true, "FFlagDebugDisableOnScreenProfiler":false, "FFlagStudioAnimationEditorKeyframeIndicators":true, "FFlagEnableMobileMicroProfilerWebServerApi":false, "FFlagCSGv2BalanceExponents":false, "DFIntMaxAverageFrameDelayExceedFactor":3, "FFlagArrayDynamicReserveUsesMoveSemantic":false, "DFFlagFindLightestUpstreamNew":false, "DFIntTattletaleFlushIfNotUpdatedForSeconds":60, "FIntXboxGameSortsUpdateInterval":1800, "FFlagNavigationDebugDrawIterateSpiral":true, "FFlagDebugNavigationDrawNavMesh":true, "FFlagDebugNavigationDrawCompactHeightfield":false, "FFlagDebugNavigationDrawHeightfield":false, "DFFlagBuiltInPluginsCanModifyHttpEnabled":true, "DFIntDefaultBalanceD":100, "DFFlagPhysicsSenderBitStreamAllocateExtraHalfPacket":true, "FIntPGSAlign2AxesPStageFrictionConstant":1, "FIntPGSAlign2AxesVStageFrictionConstant":2, "FIntPGSPStageStiffnessEasingDownToConservative":10, "FIntPGSPStageStiffnessEasingUpToAggressive":1, "FIntPGSPStageStiffnessConservativeValue":90000, "FFlagStudioUseBulkImporterMock":false, "FFlagNavigationFixCheckOcclusionAsyncV2":true, "FIntPGSPStageStiffnessBestFitnessThreshold":1, "FIntPGSPStageStiffnessWorseFitnessThreshold":2, "FIntPGSVStageStiffnessEasingDownToConservative":100, "FFlagLuaHomeGetFriendsPlayingGamesInfo":false, "FIntPGSVStageStiffnessAggressiveValue":99995, "FFlagFixSubsequentFolds":false, "FFlagForceSDLInitOnMainThread":false, "FIntPGSVStageStiffnessBestFitnessThreshold":1, "FIntPGSAngularDampingPermilPersecond":950, "DFFlagErrorForFailedRequestsInThumbnailLogic":false, "FIntPGSPenetrationVelocityForMinMargin":20, "FFlagEnableOnboardingMemoryAPI":true, "DFIntHttpBatchAssetV1HundredthsPercentage":10000, "DFIntHttpBatchDelayMs":3000, "DFFlagBgUpdateRedirects":true, "DFFlagFindClosestHandleHitTestFixEnabled":true, "DFIntFreeFallBalanceP":5000, "FFlagFixFolderDescendantSelection":true, "DFIntTextScraperServerMaxRowsPerMessage":100, "DFIntDefaultBalanceP":7000, "DFIntMaximumUnstickForceInGs":4, "DFIntUnstickForceAttackInTenths":1, "FFlagUseLuaHomePageOnAndroidPhone":false, "DFIntRagdollEarlyExitTimeTenthSecond":20, "DFIntDataRequestInQueueTime":10, "DFIntLandedBalanceP":7500, "DFFlagExternalWakeOtherAssembly2":false, "DFFlagPGSWakeOtherAssemblyForJoints":true, "FFlagEscapeHtmlInDocTabTooltip":false, "FFlagQuantumGuiImplementCircularPageLayout":true, "FFlagLuaAppCancelSearchOnBackButtonPressed":false, "DFIntNumberFramesSubmergedBeforeVSquareBlendFrames":10, "DFFlagUserUseSoundDispatcher":true, "FFlagTighterCylinderBoundingSpheres":true, "DFFlagDebugDisableProjectileOwnershipLock":false, "SFFlagFixRaysInWedges":true, "FFlagStudioStartPageSortSearchAnalytics":false, "DFIntMaxContentProviderRunsAccumulated":20, "FFlagUseLuaGamesPageOnAndroidTablet":false, "DFIntMaxContentProviderRunsPerStep":10, "DFFlagReportSolverUsageStats":true, "DFIntJoinInfluxHundredthsPercentage":100, "FFlagDebugTracebackOptionalCoroutineArg":true, "FFlagStudioScriptPerformanceWidgetRefactor":true, "FIntSmoothTerrainPhysicsCacheSize":16777216, "FIntNavigationAgentMaxDrop":100, "FIntNavigationAgentJumpDistance":7, "DFIntMaxDataStepsAccumulated":15, "FIntNavigationAgentWalkableClimb":1, "FIntNavigationAgentRadius":2, "FFlagUserUseNewClickToMove":false, "FIntNavigationSearchTileOffset":2, "FFlagStudioAnimationEditorMultiSelectEasingOptions":true, "DFIntNavigationJobMaxTimeBudgetMS":100, "FIntNewGameTemplateId":95206881, "DFIntNavigationJobRunsPerSecond":10, "FIntNavigationServicePercentStatsReported":20, "DFFlagNavigationServiceTimingAnalytics":false, "DFStringAssetPurchasePath":"marketplace/purchase", "FFlagStudioFixInsertObjectWindowCrash":true, "FIntFMODSoundChannels":100, "DFIntTextScraperServerMaxBytesPerMessage":100000, "DFIntTextScraperClientDataNBytes":1000, "DFIntMaxAltitudePDStickHipHeightPercent":10, "DFIntMaxAltitudePDHipHeightPercent":100, "FFlagStudioTrackRPCFailure":true, "DFIntNewRunningBaseAltitudeD":346, "FFlagStudioResendDisconnectNotification":true, "FFlagRunningBaseUseNewAltitudePD":true, "FIntDebugInternetSimulatorLatencyMS":0, "DFIntRunningBaseAltitudeD":100, "DFFlagDebugReportAnchoredSimBodyUpdatedFromSolver":false, "FFlagDebugCountSimBodyAllocations":false, "FFlagAppShellReporterMonitorFrameTimeIOS":true, "DFFlagNormalizeForcedLocales":true, "FFlagUseMatrix3ForInertiaTensor2":true, "DFIntPpjPmThreshold":0, "FFlagEnableImageTilingInGUI":true, "FFlagClickDetectorCursorIconEnabled":true, "DFIntBroadPhaseIslandMaxPartLinearFactorTenth":10, "DFFlagDebugStreamingFastRecovery":false, "FFlagStudioAnimationEditorContextPopupMenuScrolling":true, "DFFlagDebugBroadPhaseIslandBufferZoneApplyPartLimit":true, "DFFlagThrowOnCompressionError":true, "FFlagPassDataModelInitializationParams":true, "DFIntRunningBaseMaxAcceleration":5000, "DFFlagDontCallOnMovingAssemblyRoot":false, "FFlagReportAbuseMenuDescriptionFix":true, "FIntNetworkStatRefreshRate":1, "FFlagCSGv2ForceEnabled":true, "DFIntTelegrafTCPPort":8094, "DFIntTelegrafUDPPort":8092, "FFlagPGSSolverDetectHighMassRatiosEnabled":false, "FFlagPGSSolverFileDump":false, "FFlagDebugIgnoreVolumeIsZeroAssert":false, "FFlagHttpReportCacheStatisticsNew":false, "FFlagUseTLSv1_2_a":false, "DFIntHttpCurlDeepErrorReportingCount":0, "DFFlagInconsistent3DChecks":false, "DFFlagHttpCacheCleanBasedOnMemory":false, "DFIntHttpCacheCleanIfGBLessThan":5, "DFFlagRemoveDeadCode":false, "DFIntCreatePlacePerMinute":5, "DFIntHttpCacheCleanMaxFilesToKeep":7500, "DFIntHttpCacheCleanMinFilesRequired":10000, "FStringFriendsOnlineUrl":"/my/friendsonline", "DFStringHttpCurlProxyHostAndPort":"", "FIntHttpCurlMaxCachedHandlesPerHost":16, "DFIntDataStoreInfluxValueSubstringSize":512, "DFIntDataStoreInfluxReportNonParsableDataPerMyriad":10000, "DFIntDataStorelastSetByKeySize":512, "FFlagDataStoreUseLRUCachedKeysV2":false, "DFIntDataStoreSameKeyPerMinute":10, "DFIntDataStoreKeyLengthLimit":50, "DFIntDataStoreMaxKeysToFetch":100, "FFlagXboxUseNewValidUsernameCheck2":false, "FFlagRandomType":true, "FFlagFreeCameraForDevelopers":true, "FFlagPlayerAcceptPlayerScriptsStatus":true, "FStringAnalyticsSessionIdName":"AnalyticsSessionId", "FStringStudioTeamCreateHelpUrl":"https://wiki.roblox.com/index.php?title=Team_Create", "FFlagStudioShowTutorialsByDefault":true, "FFlagStudioAnimationEditorUseStudioThemeAPI":true, "FIntStudioRecentActionCacheSize":25, "FFlagStudioAnimationEditorOptimizeSelection":true, "FFlagStudioAnimationEditorWorldSpaceJointPropertyFix":false, "DFStringSendJoinTimeStatsHundPrecCountryOverride":"CN,5000,US,100,AU,3000,KR,2000,NZ,3000", "FFlagStudioAnimationEditorKeyframeOverwriteWarning":true, "FFlagStudioAnimationEditorLessThanOneSecondUnusableSpaceFix":true, "DFIntDataStoreOrderedGetInitialBudget":10, "FFlagPlaceLauncherConnectGameShutdownSignal":true, "DFFlagDuplicateNotArchivableParts":true, "FFlagStudioAnimationEditorMoveScrubberToSelectedPose":false, "FFlagStudioNativeHttpLayerWrapper":false, "FFlagSurfaceToolOnLockedParts":true, "FFlagStudioAnimationEditorPlayFromBeginningIfAtEnd":false, "DFIntHttpRbxApiMaxRetryCount":10, "FFlagReportInGameAssetSales":true, "FFlagStudioAnimationEditorMultiSelectAreaOffsetFix":true, "FFlagStudioAnimationEditorTimePrecisionFix":true, "FFlagStudioAnimationEditorResetLockedJoints":true, "FIntPGSPStageStiffnessAggressiveValue":99500, "FFlagStudioAnimationEditorDefinedBoundaryNotches":true, "FFlagStudioFLogFlagEditorFix":true, "FFlagAnimationEditorMaxLengthRestriction":true, "FFlagAnimationEditorRigNameFix":true, "FFlagAnimationEditorCreateKeyframesForUndoAndExport":true, "FFlagFix3DMouseScrolling":true, "FFlagAnimationEditorDeleteFix":true, "FFlagAnimationEditorRenameKeyFrame":true, "FIntStudioRightClickMax":700, "FIntPGSBallInSocketCorrectionDamping":10, "FFlagUserNoUpdateOnLoop":true, "FIntStudioCheckTeamServerExistsFrequency":5000, "DFIntMinSoundStreamSizeBytes":512000, "DFStringR15CollisionTypeField":"universeAvatarCollisionType", "DFIntPhysicsDecompSerialVersion":5, "FStringApolloServerUrl":"http://127.0.0.1:8001", "FFlagNavigationUseJumpLinksV3":false, "FFlagFixHandlesMouseEvents":true, "DFIntContentProviderJobDutyCycleMicroseconds":1000, "DFIntResetNetworkFloorAfterNoFloorTenthSeconds":50, "DFFlagResetNetworkFloorOnStates":true, "FFlagDebugGraphicsD3D11DisableDriverThreading":false, "DFIntSwitchFromRunningNoPhysToRunningThresholdInHundredths":4, "DFIntDelaySwitchingFromRunningToFreefallInHundredths":20, "FFlagQuantumGuiFixScalingOfCanvasPosition":true, "DFFlagReduceTrussSearchDistance":false, "DFIntMaxProcessPacketsStepsPerCyclic":5, "DFFlagUserFixCharacterSoundIssues":true, "DFFlagFixFirstPersonSwimmingStateChange":true, "DFFlagHumanoidWithPGSConstraintsUsePhysicsState":true, "FFlagEnableLuaSortTokensManualRefresh":false, "FFlagStudioThrottleCacheScriptIssueReporting":false, "DFFlagDebugAdvancedNetworkedVisualizer":true, "DFIntNumFramesToKeepAfterInterpolation":1, "DFFlagGamePassOwnershipCache":true, "DFIntSimToInterBufferClearFactorTenths":3, "DFIntHopperBinTrackingPermyriad":100, "DFIntMaxAcceptableUpdateDelay":15, "FFlagQuantumGuiFixScrollingFrameCanvasSizing":true, "FIntInterpolationMaxDelayMSec":500, "DFIntRagdollDefaultTimerTenthSecond":50, "DFIntThrottledVelocityThresholdTenths":15, "FIntOutlineBrightnessMax":160, "DFFlagDebugAllowMultiRotationInterpolation":true, "DFIntBgUpdateRedirectsRejectInfluxHundredthsPercentage":0, "DFIntHttpRbxApiRequestsPerMinutePerPlayerInServerLimit":100, "FFlagInterpolationAwareTargetTime":true, "DFIntDataStore429MinReponseTimeMSec":10000, "DFIntDataStoreMaxRetriesPerCycle":6, "DFFlagDataStoresP50":true, "DFIntTattletaleReportUnfilteredJobMaxReportsPerTick":64, "DFIntDataStoreMaxThrottledQueue":30, "DFIntDataStoreWaitOnYieldingRequestsExpiration":2, "DFIntDataStoreBudgetOnCloseBase":150, "DFIntDataStoreMaxBudgetMultiplier":100, "DFIntDataStoreOrderedSetInitialBudget":50, "DFIntPointsServiceBatchingImplOnUpdateDelaySeconds":5, "DFIntDataStoreOrderedSetFixedRequestLimit":30, "DFIntUnstickForceEpsilonInHundredths":1, "DFIntDataStoreInitialBudget":100, "DFIntDataStorePerPlayerRequestLimit":10, "FFlagDebugSSAOForce":false, "DFIntDataStoreFixedRequestLimit":60, "FIntRenderMaxParticleSize":200, "DFFlagInstancePacketCacheUseBitstreamPointerForDirtyState":true, "DFIntDataStoreJobFrequencyInSeconds":1, "DFIntPointsServiceBatchingImplMaxDelaySeconds":30, "FFlagStudioCanSelectMeshPartWhileUIEditorIsActive":false, "DFIntMaxAwardPointsHttpCallsPerMinute":60, "DFIntUS20162":0, "FIntAppBridgePlaceLaunchMaxSleepBetweenRequests":10, "DFIntFriendServiceCachedOfflineStatusMaxAgeSeconds":300, "FFlagEnableNewChatApi":true, "DFIntProbeHttpRequestsPerMinuteLimitZero":10, "FFlagChatServiceSubscribePlayerRemove":false, "DFIntInfluxReportLocalFilterStringPermyriad":500, "DFStringFilterTextSubdomain":"textfilter", "DFStringModerationFilterTextUrlV2":"moderation/v2/filtertext", "FFlagDontTagsMeBro":true, "DFFlagDSPLeakDueToGCofParent":true, "DFIntTattletaleReportUnfilteredJobFrequencySeconds":30, "DFIntGetUserThumbnailExpirationTime":60000, "DFIntTattletaleMaxPendingReports":1024, "DFIntTattletaleFlushIfOlderThanSeconds":300, "DFIntChatServiceCachedResultCount":30, "FFlagFilterStringForBroadcastConsideredPublic":false, "FFlagLuaAppFriendshipCreatedSignalREnabledV355":true, "FFlagPassIsPublicChatOnFilterMessage":true, "DFIntRtl7InfluxHundredthsPercentage":100, "DFFlagHttpZeroLatencyCaching":false, "FFlagStudioFixStartPageThumbnails":true, "FFlagUserInGameChatUseNewFilterAPIV2":true, "DFIntFreeFallOrientationP":100, "DFIntLinearToVSquaredVelocityThresholdMaxTenths":100, "DFIntInfluxOverUDPThreshold":1400, "FFlagStudioPlaceSessionModelGetCurrentSoundJobStudioCrashFix":true, "DFFlagAllowDuplicateWeldConstraintsAnalytics2":false, "DFFlagAllowDuplicateWeldConstraints2":false, "DFIntTrackServerPhysicsPerfSessionNMinutes":10, "FIntRenderTextureManagerBudgetFor4k":0, "DFIntSendJoinTimeStatsToDiag_HundredthsPercentage":0, "DFIntWorldStepDtAveExpFactorHundredth":1, "DFFlagCyclicExecutiveThrottlingCancelWorldStepAccum":false, "DFIntMaxMissedWorldStepsRemembered":16, "DFIntWaitForChildWarnTimeOutTime":5, "DFIntWorldStepsOffsetAdjustRate":100, "DFIntWorldStepMax":30, "DFIntBulletContactBreakThresholdPercent":200, "FFlagFreeCameraForAdmins":true, "FFlagStudioFixUniverseAlwaysRecreate":false, "FFlagJoinTime_HttpQueuePrio":true, "FFlagHttpUseContentCacheFlag3":true, "DFIntTattletaleMinimumClientCountWithoutServerVerification":1, "DFIntSolidFloorPercentForceApplication":100, "DFFlagFavorIPV4Connections":false, "DFStringHttpResultsApprovedUserIDs":"", "DFIntPurchaseErrorReportRate":100, "DFIntBadLogMask":0, "DFIntPpjEtrThreshold":6, "FIntStreamingCriticalLowMemWatermarkMB":15, "FIntStreamingSafeMemWatermarkMB":100, "FFlagDebugShowTextBounds":false, "DFIntClientInstanceQuotaCap":10000, "FIntFontSizePadding":1, "FFlagQuantumGuiUIScaleHandlesPositionOfChildrenOfLayerCollectors":true, "DFFlagPGSSolverIntegrateOnlyPositionsEnabled":false, "FFlagQuantumGuiTextRespectsFrameStyle3":true, "FIntRelayoutRecursionLimit":0, "FFlagSimplifiedAtomicValueFFI2":false, "FIntSettingsHubInviteToGameIOS5":100, "FFlagFixBillboardTextSizeRounding":true, "FFlagRoundInAdorn":false, "DFFlagAdditionalCheckC1_2":false, "DFIntRemoteDelayedQueueLimit":256, "DFIntRakNetUseSlidingWindow2_startInitSpeed":200000, "DFIntSavePlacePerMinute":10, "DFFlagLogGroupTeleportInfluxDB":true, "DFFlagCheckMultipleLoadCharacterCalls":true, "DFIntRunningBaseGravityReductionFactorHundredth":100, "DFFlagEnableTrackingAccessoryDestoyedWithLiveSignals":false, "DFIntStepsToJoin":2, "DFFlagAccoutrementWeldingFilteringEnabled":false, "FIntOptimizedContactOverlapGoalMicro":0, "FIntOptimizedContactWakeDepth":8, "DFIntHighVelocityContactThresholdHundredth":100, "DFFlagContactWakeOnNewContact":false, "DFFlagContactWakeImprovements2":false, "DFStringCrashUploadToBacktraceWindowsRCCToken":"82fc562ca79e6df76a1add3c37aca015601a7326f48d4476fdc37bfe85e44673", "FIntOnContactOwnerBufferTimeCentiSec":300, "DFIntBroadPhaseIslandMaxSortDepth":2, "FIntSettingsHubInviteToGameWindows5":100, "FFlagEnableLuaAppFormFactorAndPlatformV355":false, "FIntMsecBetweenTextureMemoryUsageArrayRefresh":1000, "FIntIntersectingOthersCallsAllowedOnSpawn":5, "FFlagOrientationConstraintPrimaryAxisOnlyFix":true, "DFIntHttpGAFailureReportPercent":1, "FFlagWeldConstraintAdornHighlightConnectedParts":true, "DFIntHttpServiceProbeRateLimit":1000000, "FIntIkDraggerAnchorMode":0, "FFlagSettingsHubInviteToGameThumbnailNoBackground":false, "FFlagDebugEnableRenderCSGTriangles":false, "FFlagFutureIsBrightPhase1_1":true, "DFFlagEnableWakingPGSJointsForNonSolverPrimitives":true, "FFlagEnableGameSignalRWithAllPlatforms":true, "FStringGoogleAnalyticsAccountPropertyLuaTest":"UA-43420590-19", "DFIntHttpInfluxHundredthsPercentage":5, "FStringGoogleAnalyticsAccountPropertyIDLuaShell":"UA-43420590-18", "DFStringRobloxAnalyticsURL":"http://ecsv2.roblox.com/", "FFlagScreenGuiOnTopOfCoreBlur":true, "FFlagDevConsoleOnTopOfCoreBlur":true, "FIntDiabolicalModeLatecyMaxMS":600, "DFIntMaximumFreefallMoveTimeInTenths":1, "FIntDiabolicalModeFailRateDiv10K":3000, "FFlagBgUpdateRedirectsHttpErrBase64Body":true, "DFFlagSoundServiceCleanBuggyTempSoundFilePath":false, "DFFlagUseMomentumThinning":true, "DFIntClientJoinProcessPositiveSamplesThousandths":10, "FFlagPGSOrientationConstraintImproveBehaviorAtTarget":false, "FFlagFutureIsBrightPhase1_2":true, "FFlagFutureIsBrightPhase1_12":true, "FFlagFutureIsBrightPhase1_13":true, "FFlagStudioFixDocHistory2":true, "FFlagDebugRenderForceTechnologyVoxel":false, "DFFlagFindHeaviestDownstreamNew":false, "DFIntDebugClientSvrProfilerCaptTimeOverride":0, "DFFlagStudioTrackPluginButtonSetActiveThrottled":true, "DFIntPhysicsImprovedCyclicExecutiveConsecutivePredictionRequired":2, "FFlagAnthroArtistIntentFBXImporterIntermediateState":true, "FFlagLuaPeopleListContextualListMenu":true, "FFlagStudioClearSelectionExitsAttachmentTool":true, "FIntMaxCameraMaxZoomDistance":400, "DFIntPhysicsDecompForceUpgradeVersion":3, "FFlagCSGLoadFromCDN":false, "FFlagCSGAllowUnorderedProperties":false, "DFFlagFixMeshNormalsForNonUniformScaling":true, "FFlagBoxSelectAttachments":true, "FFlagJoinTime_ThreadedCacheableContentProvider":true, "FFlagStudioThemeSwitchingEnabled":true, "FFlagStudioAnimationEditorColorMoveHandles":true, "DFIntDraggerMaxMoveSteps":10000, "FFlagAndroidShutdownViewFix":false, "DFIntDraggerMaxMovePercent":60, "FFlagDebugStudioRigImporter":false, "SFFlagFixBallRaycasts":false, "FFlagSendJoinTimesToDiag":false, "DFFlagDoesItHalt":true, "DFFlagLockViolationScriptCrash":false, "FIntDiabolicalModeAnalyticsIntervalSeconds":60, "DFIntLuaGcBoost":1, "FFlagStudioAnimationEditorStayActiveWithOtherPlugins":true, "FFlagLuaAppUseImageSets":false, "FFlagDebugScriptContextCoverageEnabled":false, "DFIntHttpResponseDefaultTimeoutMillis":60000, "DFStringRobloxAnalyticsSubDomain":"ecsv2", "FFlagLuaChatContextualMenuTransition":false, "FFlagDebugCrashEnabled":false, "FFlagFixPlayerActionTypeOverride":true, "DFFlagBadgeInfoErrorFix":true, "DFIntHttpSendExtendedTimeoutMillis":600000, "FFlagBadgeReadDisabledFromInfo":true, "DFFlagUseConvertToHex":false, "DFFlagDisableHopperBin":false, "DFIntExternalHttpRequestSizeLimitKB":1024, "FFlagGraphicsVulkanUseNewPacks4":false, "DFFlagDebugDisable180DegreeFlip":false, "DFFlagAnimatorOnSteppedKeepAlive":true, "DFIntExternalHttpResponseTimeoutMillis":30000, "DFIntHttpRbxApiMaxBudgetMultiplier":1, "FFlagPhysicsAnalyzerAnalyticsEnabled":true, "FFlagStudioDebuggerCheckBothTableAndArrayLength":true, "FIntSmoothTerrainMaxCppRegion":67108864, "FFlagDebugCSGExportFailure":false, "FIntSmoothTerrainMaxLuaRegion":4194304, "FIntTeleportMethodAnalyticsHundredthPct":100, "DFFlagInsertServiceLoadFlowSimplification":true, "DFFlagFixCharacterStuckInFreefall":true, "FFlagBuiltInPluginGetPackageAPIEnabled":false, "FIntStudioGamePageHandfulSize":50, "FFlagFixUIScaleTextBlowingUpFontAtlas":true, "DFFlagNewRejoinMessage":false, "FIntKeyframeSequenceInfluxPermyriad":0, "FFlagEnableGuiLayerCollectorResetOnRespawn":true, "DFStringCrashUploadToBacktraceToBacktraceBaseUrl":"http://roblox.sp.backtrace.io:8443/post?format=minidump", "FFlagLuaChatUsesZIndexSibling":true, "DFIntDataStoreCachedKeysMemSize":8388608, "FFlagPluginGuiBindToClose":true, "FFlagPGSSolverDetectUnstableConstraintsEnabled":false, "DFFlagAddInvalidJSONErrorDetail":true, "FFlagThwartPurchasePromptScamsGamepad":true, "DFIntPurchaseMismatchReportRate":100, "DFFlagDebugLaunchTimeByCountryPlaceSpecific":false, "DFIntPhysicsImprovedCyclicExecutivePredictiveThrottlingStepsAhead":20, "DFFlagDebugLaunchTimeByCountryPlaceSpecificAddPlatform":false, "FFlagDelayPurchasePromptActivation":true, "FFlagReportRobuxUpsellEnabled":true, "FFlagEnableWebServerOnStart":true, "DFIntDataStoreMaxPageSize":100, "FFlagStudioAnimationEditorRightClickMenuPositionFix":true, "DFFlagUserPreloadAnimations":true, "FFlagStudioAnimationEditorSaveLoadPopupScaling":true, "FFlagDebugStudioFlagState":false, "FFlagStudioReportRAMUsage":false, "DFFlagAllowClientFallback":true, "DFIntGamePassOwnershipCacheSeconds":10, "DFFlagCheckMarketplaceAvailable":false, "FStringLuaAppsDiagPageLoadTimeGames":"LuaAppsPageLoadTimeGames", "FFlagAnimationEditorScrubbingPlayingMatch":true, "DFStringHttpRbxApiBlacklistedEndpoints":"", "DFIntSendJoinTimeDeltasToDiag_HundredthsPercentage":100, "DFFlagHttpRbxApiWithWhitelistedDomains":true, "DFIntHttpRbxApiSyncRetryWaitTimeMSec":500, "DFIntHttpRbxApiMaxRetryBudgetPerMinute":500, "FIntDebugForceMSAASamples":0, "DFIntStreamJobMaxBufferHealthThresholdHundredths":75, "DFIntHttpRbxApiMaxThrottledQueueSize":50, "DFIntPercentApiRequestsRecordGoogleAnalytics":0, "DFIntPercentSentAlways":50, "FFlagStudioDoNotDeleteLineOnComment":false, "DFIntInitialAccelerationLatencyMultTenths":20, "DFFlagFixMechanismInterpolationOnPlatforms":true, "DFFlagDynamicLocalizationTableDataModelTestingNonProd":false, "SFFlagReplicateInterpolateRelativeHumanoidPlatformsMotion":true, "DFFlagHumanoidScalingFixHipHeightDuplication":false, "DFIntGameIntlApiThrottleHundredthPct":10000, "DFFlagStopStopping":true, "DFIntDataStoreMaxValueSize":262144, "DFIntLocalizationServiceContentLoadErrorHundredthsPercentage":0, "FIntStreamingLowMemWatermarkMB":30, "FFlagLocalizationServiceUseNewTextScraper":false, "DFFlagReportCharacterLoadTimeMetrics2":true, "FFlagAllowLocaleIdForcing":true, "FFlagFixPlayerlistFollowing":true, "FIntLocalizationAnalyticsSamplesPerMillion":50000, "FFlagUseNotificationsLocalization":false, "FFlagDoLocalizationServiceOverrideLocale":false, "FFlagStudioAnimationEditorPoseDragSnapping":true, "FFlagLuaChatAssetCardsSelfTerminateConnection":true, "DFIntProbeHttpRequestsPerMinuteLimitMult":0, "DFIntHttpServiceProbeConcurrentRequests":1000000, "DFIntDebugRestrictGCDistance":0, "FFlagRunningBaseClampAcceleration":true, "DFIntHttpServiceErrorRateLimit":1000000, "DFIntHttpServicePermyriad":0, "FFlagStudioLuaWidgetToolbox":true, "DFIntHttpServiceReportUrlBlacklistedHundredthsPercentage":0, "DFStringHttpBlacklist":"", "DFFlagHttpServiceBlacklist":false, "DFFlagDebugEnableInterpolationVisualizer":false, "DFFlagHttpRbxApiRequestAsync":true, "DFIntHttpServiceMaxConcurrentRequests":500, "FFlagApplyHttpServiceConcurrentRequestLimit":false, "DFIntUserHttpRequestsPerMinuteLimit":500, "DFFlagHttpServiceRequestAsync2":true, "FFlagLoadAvatarEditorTranslations":true, "FFlagUseLuaGamesPageOniPad":false, "FFlagKeyframeSequenceReportInstanceLoading":false, "FFlagKeyframeSequenceIgnoreContainerPoses":true, "DFIntMaxDebugFramesForVisuals":2000, "DFFlagHttpServiceRequestAsyncHeader":true, "FFlagStudioPluginStartDecalDragApi":true, "DFIntDataStoreFetchFrequenceInSeconds":30, "FStringDebugSpoofGameLocaleId":"de-de", "FIntSettingsHubInviteToGameUWP5":100, "FFlagKeyframeSequenceCacheMemoryOptimization":false, "FFlagUseNewStructurePlayerScripts":false, "FFlagKeyframeSequenceEnableFrozen":true, "DFFlagOnlyFireHealthChangedWhenHealthChanges":false, "FFlagStudioAnimationEditorChangePopupStyle":true, "DFFlagFixJointDestroyedPrimitiveInsert2":false, "DFFlagFireHealthChangedLater":false, "FFlagStudioAnimationEditorClipCutoffFix":true, "DFFlagHumanoidSimulateIfWorld":true, "FFlagStudioPreventUnneededScriptSelectionRepaint":true, "DFIntSimilarHipHeightPercentage":50, "DFFlagEnableMeshHeadAttachments":false, "DFFlagEnforceSlaveStateEnabledStatus":true, "FFlagEnableReplaceBodyPartR15":false, "FIntPGSVStageStiffnessWorseFitnessThreshold":2, "DFFlagNPCUnequipTools":true, "DFFlagUserHttpRequestsThrottle2":true, "DFFlagScaleAllAccessories2":true, "FFlagClampCharacterScales":true, "FFlagFixHeadScales":true, "FFlagFixScalingValueReplication2":false, "FFlagCFrameFromMatrix":true, "FFlagFixScalingValueRename":true, "FStringGraphicsVulkanBlacklist":"Meizu", "FFlagUseR15PartsCache2":false, "FFlagStudioGrabWriteLockOnUpdateToolbars":false, "DFFlagServerNotifyPlayerScriptsStatus":false, "DFIntMotionDiscontinuityThreshold":1, "DFFlagFixHeartburn":false, "FFlagStudioStartServerGuestAppearance":false, "DFFlagHandlePlayerBlockListsInternalPermissive":false, "DFFlagTextScraperHasServerMessageLimit":false, "DFIntHumanoidFloorManualFrictionVelocityMultValue":100, "DFIntPointsServiceBatchingImplMinuteSeconds":60, "FFlagLuaDebuggerBreakOnError":true, "FFlagLuaDebugger":false, "DFFlagLocalizationAnalyticsLetterContentOnly":true, "DFStringCrashUploadToBacktraceBlackholeToken":"7705528468a303e4e34a13fbcf9e42e219633ed6868e143e5ab16cd33bd2a069", "DFStringCrashUploadToBacktraceMacStudioToken":"71f38d9e22eac3ed9fdb80607d798f829e051303baa63cb9766e6f2e9d0584d8", "DFStringCrashUploadToBacktraceLinuxRCCToken":"82fc562ca79e6df76a1add3c37aca015601a7326f48d4476fdc37bfe85e44673", "FFlagDebugStudioReenableDeprecatedWebviewToolbox":false, "DFIntDataStoreOrderedGetFixedRequestLimit":5, "DFIntReportCharacterLoadTimeMetricsInverseProbability":1000, "DFFlagCloudEditLogFailuresWithInflux":false, "FFlagStudioAnimationEditorIKMode":true, "FFlagStudioFixCallToAddItems":true, "FIntPGSFrictionUpdatePeriod":4, "DFIntBulletContactBreakOrthogonalThresholdPercent":200, "DFFlagRotationalViscocityEnabled2":false, "DFIntExpireMarketPlaceServiceCacheSeconds":60, "FFlagInitializeBeforeAuthentication2":true, "DFIntTimeBetweenCheckingApiAccessMillis":5000, "FFlagDebugHumanoidRendering":false, "FIntCameraMaxZoomDistance":400, "FIntPartMinSizeMul1000":50, "FFlagUseLargerFontAtlasOn3xDevices":false, "DFIntPartStreamingGCMinRegionLength":2, "DFFlagDebugSimulateHangAtShutdown":false, "DFFlagDebugGameLoadDataStatisticsPerPlace":false, "DFFlagThrottleDeveloperConsoleEvents":false, "DFIntHttpRbxApiJobFrequencyInSeconds":1, "DFIntMemoryPlaceIDReportThreshold":600, "DFFlagTriangleFomatChecks":false, "DFFlagDescendentChangedSignalEnabled":false, "DFIntHttpMaxRedirects":10, "FFlagFixIncorrectHangDetection":false, "DFFlagVerifyWorldInTryFloor":false, "DFIntBadLogInfluxHundredthsPercentage":0, "FFlagHttpHttpAsyncQueue":false, "FFlagConvertMyPlaceNameInXboxApp":true, "FFlagFEForEveryone":true, "DFIntHttpServicePermyriad2":100, "FIntRenderTextureManagerBudget":0, "FIntAppShellMemoryReportInitialDelay":10, "DFFlagUseBitCountLimit":false, "DFIntTattletaleMinimumClientCountWithServerVerification":1, "DFFlagUseHttpsAnalyticsUrls":false, "FFlagStudioSortAndSearchOnStartPageLastUpdatedOption":true, "DFIntWebChatFilterHttpTimeoutSeconds":60, "DFIntPointBalanceCacheInvalidateTimeMs":1000, "DFFlagUseMegaReplicationCaching":true, "FFlagFixCurrentScreenOrientation":false, "DFFlagOrder66":false, "DFFlagDebugDisableLogServiceExecuteScript":false, "FFlagShowConnectionErrorCode":true, "FFlagLuaSearchPageHandlesFailedRequests":false, "FFlagLuaChatNotificationButtonEnabled":false, "FFlagUseNewAppBridgeXbone2":false, "FFlagFixLoadingScreenJankiness":true, "FFlagLoadTheLoadingScreenFaster":true, "DFIntUS20162Permyriad":0, "DFFlagThrottleDebuggerMetrics":true, "FFlagAvatarEditorSliderUIAdjustments":true, "FFlagAvatarEditorCatalogRecommended":true, "FFlagStatUtilsUseFormatByKey":true, "FFlagAvatarEditorRecomputeCameraLookAt":false, "FFlagUrlSupportNewGamesAPI":true, "DFIntAccErrorDrainedThousandth":100, "FFlagAvatarEditorAnthroSlidersUIOnly":true, "FFlagStudioNotReturnStartPageFix1":true, "FFlagNewDefaultScriptSource":true, "FFlagGraphicsVulkanPVRWorkaroundRG":true, "FFlagUseLDLPGSSolver4":false, "FFlagAvatarEditorWhiteLineFix":true, "FStringGetPlayerImageDefaultTimeout":"12", "FFlagShadowBoxFix":true, "FFlagTeamCreateDataStorePerKeyThrottleFixEnabled":false, "FFlagAvatarEditorUsesBrowserWindowCall":false, "FFlagStudioStopLoggingTeamCreateLocalCacheScriptIssues":false, "DFIntNewSettingsEndpointExceptionInfluxPermyriad":10000, "DFFlagFixCutAndUndoAfterSavingCSGUnionToNewFile":true, "DFIntChatSignalMaxCachedRequestMilliseconds":5000, "FFlagTextMeasureTemporaryPatch":true, "FFlagFixTextLayoutWithUIScaleAssert":true, "FFlagTextTruncationEnabled":true, "FFlagLineHeightEnabled":false, "FFlagStudioThumbnailImageRetryUrl":true, "FIntSendScreenOrientationToEventIngestHundredthsPercentage":100, "DFIntChatFilterMaxCachedRequestMilliseconds":5000, "DFFlagRbxFormatMultiByteSizeFix":true, "FFlagShowPlaceholderTextWhileFocused3":false, "FFlagEnableSpecialMeshTransformInVoxelizerDescriptors":false, "DFIntMaxLogHistory":512, "FFlagUseTextLayout5":true, "FFlagInsertInstanceRecommendedList":false, "FFlagEnableDesktopMicroProfilerApi":true, "FFlagXboxUseRobloxInput":false, "DFFlagRaceConditionWithIs3D":false, "FFlagAvatarEditorHideSliderHighlightOnInit":true, "DFFlagSoundPreventRedundantWork":true, "DFFlagWorkspaceNotificationMasterEnable":false, "FFlagStudioFixCtrlShiftF":true, "FFlagFixSurfaceGuisBreakingAfterRespawn":false, "FFlagFixSmallSurfaceGuiMouseInput":true, "DFIntTextScraperClientDataMSecs":1000, "FFlagUseSafeZoneOffsets":true, "FFlagFixStaleBillboardGuiPosition2":true, "DFFlagHandlePlayerBlockListsInternalStrict":false, "DFFlagDeferTerrainUpdate":false, "FFlagRecalculateAbsolutePlacementFix":true, "FStringStudioTutorialsSeeAllUrl":"https://wiki.roblox.com/index.php?title=AllTutorials", "FFlagDebugPrintGuiStateTransitions":false, "FIntFriendServiceCachedOfflineStatusCount":256, "DFStringCrashUploadToBacktraceMacPlayerToken":"24cb37449e120c3a0618b1bf0585e339571828cae4dc73c7b8c99f67fcd751e9", "FFlagCSGv2FixOrientationWhenSeparatingNegates":true, "FFlagUseLuaAppStarterScriptOniOS":false, "FFlagAvoidFindFirstChildCallsInGuiBase2d":true, "FFlagStudioClearStartPageOnPlaceLoad":true, "FFlagUserNoCameraClickToMove":true, "DFIntPpjLeak":10, "FStringDebugShowFlagState":"", "SFFlagBodyColorsColor3PropertyReplicationEnabled":false, "FFlagUserNewPoppercam":false, "FIntPGSAlignmentConstraintsMaxCorrectiveAngle":3, "DFFlagDistributeNetworkOwnershipServeronly":true, "DFIntCrashUploadToBacktracePercentage":10, "DFFlagFixInsaneInTheCFrameReplication":true, "DFFlagInsaneInTheCFrame":true, "DFIntDistToShowBufferCountSqr":0, "DFFlagShowBufferCount":false, "DFFlagPartInstanceCofMPropertyExposed":false, "DFFlagFixTinyMeshScales":false, "FFlagVideoDocumentationPluginEnabled":true, "FFlagEnabledAppShell3D":true, "DFFlagUWPReportTimeToFetchSettings":true, "FIntLuaChatPlayTogetherThrottleAndroidTablet3":0, "FFlagLuaChatPerformanceTracking":true, "DFFlagFixCheckSeatTransitionEnabled":false, "FFlagKeyframeSequenceApplyZeroWeight":true, "FFlagFixVRScrollingFrames":false, "FIntReleaseEventStreamThreshold":10, "FFlagFixBoundSocket":false, "DFFlagHttpAnalyticsType":false, "DFIntHttpServiceProbeCapLimit":1000000, "DFFlagDataStoreAutoHttpRetry":false, "DFFlagAnalyticsDeferredEventIngestShutdown":true, "DFIntAnalyticsMaxSendWaitTimeMs":1500, "FFlagDebugDisplayFPS":false, "FIntStudioUserNotificationMinReconnectTimerMs":1000, "FIntDebugInternetSimulatorLatencyVariance":0, "DFIntTextFilterMaxCachedRequestMilliseconds":500, "FFlagStudioRobloxIDEDocDeleteThisFix":false, "FFlagUseNewGoogleAnalyticsImpl2":true, "FFlagNewABTestingEndpoint":false, "DFIntRenderingThrottleDelayInMS":0, "FStringLuaErrorsInfluxSeries":"LuaShellErrors", "DFFlagCloudEditGARespectsThrottling":false, "DFIntTexAtlasUpdateLineHeight":150, "DFFlagNewHttpAnalytics":true, "DFFlagAdditionalCheckC0":false, "DFIntWebParserInfluxWriteNanInfPerMyriad":1000, "DFIntNonSolidFloorPercentForceApplication":10, "FFlagDebugGraphicsIntelCrash":false, "FIntScriptAnalyzerIgnoreWarnings":0, "DFIntNumberFramesSubmergedBeforeVSquaredViscocity":32, "FStringSettingsHubInviteToGameThumbnailType":"", "DFFlagPartyPooperSecurity":false, "DFIntHttpConnectExtendedTimeoutMillis":600000, "FFlagPGSAlign2AxesInitBasis":true, "FFlagLuaChatPlayTogetherUseRootPresence":false, "FFlagLuaHomeControlNativeBottomBar":false, "FFlagStudioAutocompleteStopLosingModuleScriptDataOnClose":false, "FFlagLuaChatSearchFeedBack":false, "FIntPGSInsideOfSpherePenetrationResolutionDamping":7, "FFlagDataModelForwardForceLocaleIds":true, "DFIntLogGroupTeleportInfluxPerTenThousand":1000, "DFFlagAnchoredSendPositionUpdate":false, "DFFlagGroupTeleportMetricsByGroupSizeV2":true, "FFlagStudioEnableCollisionGroupsEditorPlugin":true, "DFFlagTeleportPartyAsyncEnable":true, "DFIntConnectionMTUSize":0, "FIntStudioTreeWidgetProcessingTime":100, "FFlagUseOptimizedGetPartsObscuringTarget":true, "FFlagStudioUpdateLastDirForSaveAsLocalPlugin":true, "FFlagLuaChatGroupChatIconEnabled":false, "DFIntTeleportPollinInterval":1000, "DFIntMaxViscousForceGravityTimesMult":100, "FFlagStudioAnimationEditorSetIntervalFix":true, "DFIntShowTeleportFailedMessageTimeInMillisecond":3000, "FFlagLuaUseWebPageWrapperForGameDetails":false, "FFlagHoverAndPressedTextureSwap":true, "DFFlagInfluxEnabled":true, "FFlagSettingsHubPlayersHorizontalScroll":true, "DFFlagFilterAllPlayerPropChanges":false, "DFStringNewClientSettingsServiceHost":"clientsettingscdn", "FIntStudioClientPresenceUpdateInterval":120, "FFlagConnectionScriptEnabled":true, "FFlagForceSetSizeOfErrorPrompt":true, "FFlagLazyCreateErrorPrompt":true, "FFlagStudioComponentRoundingFix":false, "FFlagFixPgsState":true, "FFlagReportAutoJointsModeJoinAll":false, "FFlagFixScrollbarNotBeingDraggableWithUIPadding":true, "FFlagExplicitAutoJointsForced":false, "DFFlagCloudEditSaveFailureExtraInfo":false, "FFlagExplicitAutoJointsDefault":false, "FFlagScriptContextSearchFix":true, "DFIntGetUserThumbnailMaxThrottle":20000, "DFIntPhysicsImprovedCyclicExecutiveThrottleThresholdTenth":8, "DFFlagLimitDepenetrationSpringStrength":false, "DFIntProbeHttpRequestsPerMinuteLimit":1000, "DFStringAdditionalBlacklistHeaders":"SOAPAction", "FIntPercentReportingGamesListRTT":2, "FFlagLuaAppGamesPagePreloadingDisabled":false, "DFFlagNullCheckInReEnableWeldConstraint":true, "FFlagStudioTutorialSeeAll":true, "DFIntElevatedPhysicsFPSReportThresholdTenths":585, "FFlagQuantumGui2":true, "DFFlagLuaStrlibLimitMatchDepth":true, "FFlagNavigationFixShutdown":true, "FIntStudioMaxCommandHistorySize":50, "FFlagInGameUIForceDefaultLocaleOnWin32":true, "FFlagUserPortraitPopperFix":false, "FFlagStudioRecomputeFoldState":true, "DFFlagProtectNullRakPeer":true, "DFFlagDebugReportElevatedPhysicsFPSToGA":true, "DFIntHttpReportCacheStatisticsThreshold":32, "DFIntHttpNewHundredthsPercentage2":0, "FFlagStudioReportNewMeshUploaded":true, "DFFlagPreventReturnOfElevatedPhysicsFPS":true, "FIntPGSPenetrationResolutionDamping":7, "FStringLuaAppsDiagErrorCounter":"LuaAppsErrorCount", "DFIntInfluxTattletaleReportCommunitySiftOutputPermyriad":0, "FFlagPackagesEnabled":false, "FFlagStudioUseNewAPIsForInsertObjectWindow":true, "FIntNumDummyJobs":0, "SFFlagRemoveDistributedPhysicsBool":false, "DFFlagServerGenPlayerXboxFixTag":true, "FFlagLuaMathLibUseNewRNG":true, "DFFlagDontSuggestUndoingPgs":false, "DFFlagDebugThumbnailForceFailure":false, "DFIntReportTeamTestFailurePermyriad":100, "DFIntGetUserThumbnailMapSizeCap":500, "DFFlagSmootherVehicleSeatControlSystem":true, "FIntDiabolicalModeLatecyMinMS":300, "FFlagRecordInGameDeaths":false, "FStringServerConfigCloudEditServerSaveUrl":"/ide/publish/UploadFromCloudEdit", "FFlagLuaAppRemoveGetFriendshipCountApiCalls":false, "FFlagStudioDisableTabOnClose":false, "DFIntGetUserThumbnailAsyncThrottleTime":3, "FFlagArrowByGraphemesInTextbox":false, "DFIntHttpServiceReportUrlHundredthsPercentage":0, "FIntSettingsHubInviteToGameAndroid5":100, "DFFlagThrottleGetUserThumbnailAsync":true, "FFlagWeCanTouchTapInTheWorldNowNice2":true, "FFlagUsePurchasePromptLocalization":false, "FFlagPGSAdaptiveCollisionMarginFixEnabled":false, "FFlagFixPreferredSoundDeviceVR":false, "DFIntGetUserThumbnailAsync2ThrottleCountPerMinute":500, "DFFlagDebugMechanismInterpolationWorldSpace":false, "FFlagStudioScriptDocLocationDataContentsAboutToChangeCrashFix":true, "DFFlagThrottleGetUserThumbnailAsync2":false, "FIntSettingsHubInviteReleaseStreamTime":10, "FFlagPassUserLocaleOnFilterMessage":true, "FFlagForceSaveSelection":false, "FFlagCSGv2SnapPlanes":false, "DFFlagGiveControlToFFlagThatSwitchesSolverControl":true, "FIntStudioPlaySoloGuestCharacterAppearance":15437777, "FFlagCoreScriptTranslateGameText2":true, "DFFlagCLI15496":false, "FIntLuaAppNonFinalThumbnailMaxRetries":3, "FIntPGSGyroscopicEffectPrecisionPercent":5, "FIntStudioStartServerGirlGuestCharacterAppearance":15437741, "FFlagBackpackScriptUseFormatByKey":false, "FIntStudioStartServerBoyGuestCharacterAppearance":15437777, "FFlagEnableGameSignalRWithWindows":true, "FIntPercentReportingByCountryCode":100, "DFFlagFixCharacterAppearanceLoadedEvent":true, "DFIntWideToNarrowScaleInHundredths":0, "FFlagStudioFixShareForU13":true, "DFIntAnthroPercentInHundredths":0, "DFFlagDebugPrintLagServer":false, "DFIntTeleportPartyExpirationMillisecond":180000, "FFlagStudioScopedWidgetDisabler":true, "FFlagEnableGetAvailableForExperimentAPI":false, "FFlagFixGuiStateTransitions6":false, "DFIntRandomSpawnRetryTimes":20, "FFlagStudioUseSingleStyleSheet":true, "DFFlagGoodbyeChoiceActiveProperty":true, "DFIntDataStoreOrderedSetPerPlayerRequestLimit":5, "DFFlagGetTeamLazyEvaluation":true, "DFIntRunningBaseOrientationP":100, "DFIntHumanoidFloorTeleportWeightValue":50, "FFlagBorderSizeRespectUIScale":true, "DFFlagHttpNew2":false, "DFFlagHttpReportStatisticsNew":false, "SFFlagSendPlayerGuiEarly2":false, "DFIntDataStoreTouchTimeoutInSeconds":5, "FFlagDontLoadCoreScriptsFromRenderScheduler":false, "DFIntHttpStudioInfluxHundredthsPercentage":1, "DFIntTextScraperServerDataQSize":128, "DFFlagDebugHttpSyncCallsForStatsReporting":false, "FFlagScriptFullNameOnHover":false, "FFlagStudioTeamCreateDisconnectRetryTimeoutSendThrottlingEvent":true, "DFFlagPlayerGeneratedOnTheServerNoBacksies":false, "FFlagHttpTrackSuccessfulUrls":false, "FFlagR15ToArtistIntentAssetMigratorEnabled":false, "FIntStudioAutomaticScriptRecoveryManagerTimeout":5000, "DFIntHttpGAFailureReportHundredthsPercent":1, "DFFlagUseCombinedAnimationEvent":true, "FFlagAnimationEditorSnapIncrementsDivideByZeroFix":true, "DFIntReportInfluxHundredthsPercentage":0, "FFlagSplitTypesetter3":true, "DFFlagRCCKickDuplicatePlayersOnJoin":true, "DFFlagFixFreefallStuckIgnoreSelfContact":true, "FFlagDebugRenderDisableWangMobile":false, "FFlagCSGv2InGameEnabled":true, "FFlagUseNonCollidableRootR15":false, "FFlagDebugGraphicsDisableVulkan":false, "DFIntSecondsPerBatchAwardPointsCall":10, "FFlagLuaHomePageEnablePlacesListV1V356":false, "FFlagNotificationScript2UseFormatByKey":true, "DFFlagSendClientNewJoinData":true, "FStringHttpRequestImplType":"", "FIntNewDevConsoleMaxGraphCount":30, "FFlagStudioUpdateAddRemoveTeamCreateWebEndpoints":true, "FFlagStudioAnimationEditorScaleKeys":true, "DFIntDataStoreOrderedGetPerPlayerRequestLimit":2, "FFlagUserIsNowADynamicThumbstick":false, "FFlagHttpSkipQueueIfCached":true, "FFlagUserEnableDynamicThumbstickIntro":false, "FIntFixForBulkPresenceNotifications":0, "FFlagXboxUseNewBundleEndpoints":true, "FFlagUseAdvancedCharacterScales3":true, "DFIntConnectReportPermyriad":0, "DFFlagDefaultArtistIntentJoints":false, "FFlagUseAccuratePlaySoloForced":false, "FIntXboxGameDetailsRefreshInterval":1800, "FStringAnthroStandardPartIds":"532219986;532219997", "DFFlagTrackHopperBinUsage2":true, "DFIntPartSizeUnder0P2AnalyticsInfluxHundredthPct":100, "FStringXboxSaleAvatarPackageIds":"", "FFlagXboxUseNewGamesEndpoints":false, "DFIntLandedBalanceD":50, "FFlagXboxUpdateBadgeEndpoints":false, "DFIntAnalyticsMaxShutdownWaitTimeMs":100, "FFlagQuantumGuiTemporaryLoadingScreenFix":true, "DFFlagGetJoinDataEnable":true, "DFIntStreamingMemoryUsagePercent":50, "FStringGetUserIdUrl":"users/get-by-username?username=%s", "DFIntApiRateLimit":200, "FFlagXboxUseCuratedGameSort2":false, "FStringBgUpdateRedirectsDisable":"", "FFlagStudioFixTimingOnPluginDockWidget":true, "FFlagStudioUpdateProgressDontPumpEventLoop":true, "DFIntAnalyticsDeferredEventIngestReportingIntervalSeconds":30, "FFlagXboxRoduxScreenFocus":false, "DFStringDataStoreThrottleMsg":"DataStore request was added to queue. If request queue fills, further requests will be dropped. Try sending fewer requests. Key =", "FFlagPhysicsAnalyzerUsed":true, "FFlagEnableQuickGameLaunch":false, "FFlagEnableLuaGamesListSortsFix":false, "DFIntSpecialFill":0, "FFlagEnableLoadingHUDOniOSForGameShare":true, "DFIntAnalyticsMaxEventIngestPostArrayLength":900, "DFIntSolidFloorMassMultTenth":50, "FFlagFixMissingStandardAnthroParts":false, "FFlagRemoveLoadingHUDOniOS":true, "FFlagStudioAddStackedWidgetForMainView":true, "FFlagPGSOrientationConstraintAngleComputationFix":true, "FFlagAppShellReporterMonitorFrameTimeAndroid":false, "FFlagUseLuaGamesPageOnAndroidPhone":false, "FIntStudioInsertDeletionCheckTimeMS":30000, "DFIntTattletaleMaxInstancePathLength":512, "FFlagUseLuaHomePageOnAndroidTablet":false, "FFlagLuaCorrectContextualMenuPosition":false, "DFIntLatencyErrorMultiplierTennths":20, "DFFlagReplicatorFixBadPacketSnprintf":true, "FIntLuaHomeMaxFriends":9, "FFlagLuaHomePageFriendWindowing3":false, "DFFlagUseUNSPEC1":false, "FFlagFixMouseServicePropChanges":true, "FIntWeldConstraintAdornSize":10, "DFIntLuaGcMaxKb":100, "DFIntRCCInfluxHundredthsPercentage":1000, "DFFlagNamesOccludedAsDefault":true, "DFFlagStudioApplyScriptEditsWithoutGivingUpLock":true, "FFlagLuaAppPeopleListV1":true, "FFlagUseLuaGamesPageOniPhone":true, "DFIntPlaceLauncherExceptionInfluxHundredthsPercentage":0, "FFlagLocalizationTableImportStrict2":false, "FIntFRMRecomputeDistanceFrameDelay":100, "FFlagStudioMaximizeButtonForAllDockWidgetsEnabled":false, "FFlagUseLuaHomePageOniPhone":true, "DFIntBroadPhaseIslandAlwaysSimulateDepth":1, "DFStringTelegrafAddress":"ec2-54-165-151-168.compute-1.amazonaws.com", "DFIntMaxDataPayloadSize":96000000, "FFlagUseLuaHomePageOniPad":false, "DFStringHttpInfluxDatabase":"prod", "DFStringDefaultCustomAnimationType":"True", "DFFlagPlayHereFix":false, "FFlagDebugNavigationDrawNavMeshConnections":true, "FFlagGuestFriendCheckFailImmediate":true, "FFlagStudioEnableLuaAPIsForThemes":true, "FFlagPassDataModelDPIScale":true, "FFlagDebugNavigationDrawEnable":true, "FFlagLuaAppRemoveFitScrollingFrameFromCarousel":true, "DFFlagFixCustomWeldSeatPart":true, "FFlagFixInactiveSelectorArrows":false, "FFlagStudioReportAllApplicationLocationsOnCrash":false, "FIntPercentReportingGamesSortsRTT":20, "FFlagLuaAppUseRequestInternalWrapper":false, "DFIntHttpRbxApiMaxSyncRetries":3, "FFlagLuaAppRefreshScrollingFrameRefactor":true, "FFlagLuaHomePageShowFriendAvatarFace150By150":false, "FFlagFixBindActivateStackOrderCAS":true, "FIntNewDevConsoleMaxLogCount":500, "FFlagEnableNewDevConsoleDataOnInit":false, "FFlagStudioStartPageAnalyticsFinalFix":true, "DFIntExternalHttpResponseSizeLimitKB":4096, "FIntLuaChatPlayTogetherThrottleiOSPhone3":0, "FFlagDonotAllowTeleportInRobloxStudio":true, "FIntStudioMaximumPasswordLength":1000, "FFlagLuaChatCheckIsChatEnabled":false, "FFlagStudioUseNewAPIsForScriptColors":true, "DFFlagPrepareClientForNewJoinData":true, "FFlagLuaChatFlexibleTitleWidth":false, "DFIntDebugProfilerFramesToCapture":60, "FIntStudioWebDialogMinimumHeight":480, "FFlagLuaChatIcebreaker":false, "FFlagLuaChatReplaceAvatarBorderAndBackground":false, "DFStringCustomAnimationTypeAllow":"True", "FFlagLuaChatActiveConversationId":false, "FFlagLuaChatFixAssetCardResizeTruncation":false, "DFIntScriptContextShutdownTimeoutSeconds":30, "FFlagLuaChatLoadGameLinkCardInChatAnalytics":true, "DFFlagFixSloppyWeakPtrs":true, "FFlagLuaChatToastRefactor":false, "DFStringDeveloperProductPurchasePath":"marketplace/submitpurchase", "FFlagLuaChatReplacePresenceIndicatorImages":false, "FFlagUserAllCamerasInLua":true, "FFlagStudioDoNotEndBlockForFunctionArgs":false, "FFlagLuaChatSortFriendsForConversation":false, "DFFlagDebugSimulateHangAtStartup":false, "DFFlagSpecificGravityDummyFunctionGA":true, "FFlagStudioABTestFramework":false, "FFlagLuaChatCreateChatUserScrolling2":false, "DFIntWaterViscosityDragFudgeFactor":10, "FFlagHarfbuzzEnabled5":true, "FFlagLuaChatUseCppTextTruncation":false, "FFlagCSGLoadBlocking":false, "FFlagPGSAlwaysActiveMasterSwitch":false, "DFIntHttpResponseExtendedTimeoutMillis":600000, "DFIntAnalyticsDeferredEphemeralReportingIntervalSeconds":30, "FFlagRestrictSales2":false, "SFFlagUseNativePathWaypoint":true, "FFlagLuaChatRefactoredChatInputBar":true, "FFlagStudioUseAccuratePlaySoloAnalytics":true, "FFlagFixG3DFpChecks":true, "FFlagLuaChatShareGameToChatFromChat":false, "FFlagStudioTeamCreateAllowTakingLockFromInActivePlayerFix":true, "FFlagAvatarEditorUseNewR15Model":true, "DFFlagSendFrameTimeBreakdowns":true, "FFlagEnableAEAndroidBackButton":true, "FFlagUseNewAELoadTimeMetrics":false, "FFlagNoCacheForLocalContent":false, "DFFlagDebugDisableAngularVelocityInterpolationComponent":false, "DFFlagStreamCountClustersInClientQuota":false, "DFFlagThisJointAintBigEnoughForTheTwoOfUs2":false, "FFlagAvatarEditorSelectivelyUseDefaultAsset":true, "DFIntTouchPermyriad":0, "FIntHttpInfluxClientExceptionStatusCode":0, "FFlagAvatarEditorDefaultTabSelection":true, "FFlagRenderIC1BouncingEnabled":true, "FFlagLuaAppLegacyInputDisabledGlobally2":true, "DFIntHttpSendStatsEveryXSeconds":300, "FFlagLuaUseUtf8TextTruncation":true, "DFIntPGSJumpForceAdjustment":520, "DFIntCrashUploadArchiveAfterErrorsDelaySeconds":86400, "FFlagEnableResponsiveUIFix":true, "FFlagLuaChatAddToStringWhenUpdatingPresence":true, "FIntDebugNavigationMaxMemoryUsageInBytes":52428800, "FStringSettingsHubInviteToGameThumbnailSize":"Size150x150", "DFFlagEnableMeshHeadNative":false, "DFIntActionStationDebounceTime":2, "DFIntHttpRbxApiRequestsPerMinuteServerLimit":300, "FFlagDebugAnalyticsForceLotteryWin":false, "FStringStudioGameSettingsExperimentalModeToolTip":"When turned on, the game server is not authoritative of changes, meaning that LocalScripts on clients can take any arbitrary actions they like. It is highly recommended to turn off Experimental Mode before opening a game to the public.", "DFIntDataStoreRefetchPerPlayerRequestLimit":5, "DFFlagFileSystemGetCacheDirectoryLikeAndroid":false, "FFlagEnableLocalizationForToolbox":false, "DFFlagAllowJoinsToWait":true, "FFlagFriendPlayerPromptUseFormatByKey":false, "FFlagLuaAppEnableStopWatchReporter":false, "FFlagFixTextAsserts5":true, "FIntStudioUserNotificationReconnectTimerIncrementMs":5000, "FIntPGSAlign2AxesCorrectionDamping":10, "FIntWeldConstraintAdornHighlightedPartSize":2, "FIntZoomOutDistance":500, "FFlagStudioSortAndSearchOnStartPageV2":true, "FFlagLoadingScreenUseLocalizationTable":true, "FFlagFixUsersReducerDataLoss":false, "FFlagEnableNewDevConsole":true, "DFIntDataStoreRetryWaitTimeMSec":500, "DFFlagAllowTeleportsToWait":false, "FFlagEnableLuaEventStreamRelease":true, "FFlagSafeScalePartFail":true, "FFlagStudioPreventScriptDocDoubleOpening":true, "FIntStudioAutocompleteNumMaxLineForParamSearch":10, "FFlagFreeCameraAPI":true, "FFlagTextBoxOverrideManualFocusRelease":false, "FFlagIWannaBeTheVeryBestThumbstick":false, "DFIntLimitReplicatorState":0, "FFlagFixGamepadNavigationInVR":true, "DFIntGettingUpBalanceP":2250, "FFlagPGSConstraintConeLimitFix":false, "FIntLuaChatPlayTogetherThrottleiOSTablet3":0, "SFFlagTerrainRaycastsRespectCollisionGroups":false, "FFlagEnableLoadingScreenPlaceIconTween":true, "FIntGoogleAnalyticsLoadLuaShell":1, "FFlagAdvancedMouseSensitivityEnabled":true, "DFIntTextScraperServerDataNBytes":1000, "FFlagEnableGameSignalRWithAndroid":true, "FIntStudioMeshPartScaleValue":5000, "FFlagAvatarEditorRoactRewrite":true, "FStringStudioTutorialsDevHubUrl":"https://www.robloxdev.com/learn-roblox/studio-basics", "DFStringCustomAnimationField":"allowCustomAnimations", "FFlagChatServiceAnalyticsOnFilterStringCalls":true, "DFStringAvatarJointPositionsArtistIntent":"ArtistIntent", "DFIntBgUpdateRedirectsHttpErrInfluxHundredthsPercentage":100, "DFIntNetworkStreamingGCMaxMicroSecondLimit":4000, "FIntAppBridgePlaceLaunchExponentialBaseFraction":3, "DFIntSoundServiceCacheCleanupMaxAgeDays":7, "FFlagDisablePlayerScriptWhenDisconnected":false, "FFlagStudioPatchOpenedScripts":false, "DFIntR15DefaultCollisionType":0, "DFIntRunningBaseAltitudeP":3000, "FFlagImprovedAutoJump":false, "FFlagStudioIndentIfLineEndsWithFoldEnder":false, "DFIntOnCloseTimeoutInSeconds":30, "FIntInGameGlobalGuiInset":36, "FIntStudioUserNotificationMaxReconnectTimerMs":50000, "DFIntMaxDataPacketPerSend":1, "FIntGamePerfMonitorReportTimer":99999999999999999999999, "FFlagImporterUseAnthroProportions":false, "FFlagStudioInsertObjectMenuButton":false, "FIntPGSPenetrationMarginMin":100, "FFlagCoreScriptsUseLocalizationModule":true, "FFlagContentProviderTempDirWithPid2":true, "DFIntContentProviderThreadPoolSize":16, "FIntPhysicsBulletManifoldPoolSize":1024, "DFIntRakNetResendMaxThresholdTimeInUs":2000000, "FFlagCallPlaceLauncherFromMainThread2":true, "DFIntLinearToVSquaredVelocityThresholdMinTenths":20, "FFlagMemoryFromAppShellReporterAndroid":false, "FFlagStudioMoreRPCLogging":false, "DFFlagUploadPlaceNoStream":false, "DFFlagNoDSPOnServer":true, "DFFlagBadCoreScriptCrashFixEnabled":true, "FFlagStudioRemoveDuplicatesInRestoreStateQtFixEanbled":true, "FIntAppShellMemoryReportPeriodicity":120, "DFIntTextSizeLimit":16384, "FIntAppShellFPSReportPeriod":120, "FFlagDatamodelServicesConnectionFix2":true, "DFFlagPhysicsSkipNonRealTimeHumanoidForceCalc":false, "FFlagEnableGameSignalRWithUWP":true, "FFlagHarfbuzzEnabledInGame":true, "DFIntHttpRbxApiClientPerMinuteRequestLimit":300, "FFlagLuaChatPlayTogetherJoinGameInstance":false, "FFlagStudioShortcutDuringGameDefaultFalse":false, "DFFlagUWPAlsoFetchSettingsFromNewEndpoint":true, "FFlagImageHandleAdornUseGuiImage":true, "DFIntGlobalLeak":100000000, "DFFlagReportClientMemoryCat":true, "FFlagStudioPublishScriptsBeforeTurnOffTeamCreate":true, "FFlagPlaceLauncherSetCurrentGameEntryOnceOnTeleport":true, "FFlagJoinTime_LocalUserTexturePriority":true, "FFlagUIShiftScrollHorizontal2":true, "FFlagAutocompleteRefactorAssertFix":false, "FFlagWebkitDeveloperToolsEnabled":false, "FFlagTextTruncationEnabledInGame":true, "DFIntDataStoreMaxRetryCount":5, "FIntStreamOutCompressionIdListLengthThreshold":250, "DFIntPacketErrorInfluxHundredthsPercentage":10000, "FFlagTextBoxManualFocusRelease":true, "FFlagEnableGameSignalRWithOSX":true, "FFlagDebugNavigationDrawTileBounds":false, "FIntRakNetDatagramMessageIdArrayLength":512, "FFlagLogClientLoadToAvatarLoad":false, "DFIntTeleportExceptionInfluxHundredthsPercentage":9000, "DFIntTeleportRetryTimes":5, "DFIntMadnessPermyriad":0, "FFlagSystemErrorMessageLocalize":false, "DFIntDataStoreRefetchFixedRequestLimit":30, "DFStringCopyrightKey":"RBX-Content-Protected", "FFlagStudioTeamCreateWidgetBottomButtonClickCrashFix":true, "DFIntMinimumFreefallMoveDistanceInTenths":5, "FFlagStudioWorkspaceFilteringEnabledOnNewPlaces":false, "DFIntStudioPercentScaleRepeatCount":140, "FIntPGSVStageStiffnessConservativeValue":99000, "DFFlagInfluxOverTCP":false, "FIntAppBridgePlaceLaunchMaxTotalSleepTime":0, "FIntAppBridgePlaceLaunchMaxRetries":5, "FFlagShareOnStartPageAnalyticsFixV2":false, "FFlagFixInputCanSinkCAS":true, "FFlagStudioFixBindToCloseOnDm2":false, "DFIntDynamicLocalizationTablesDataTimeout":5, "DFIntUserHttpRequestsPerMinuteLimitZ":2000, "FFlagStudioUseNewThemeAPIsInStudioCode":true, "DFIntSendHttpBodyOnFailureMaxBytes":128, "DFFlagSafeSwimmingJump2":false, "FFlagCSGUnionsSizeShouldNeverBe000":false, "FFlagSettingsHubInviteToGameInStudio4":true, "DFStringCrashUploadToBacktraceWindowsPlayerToken":"417ecb0fbc032ce087e6af3b780c298e3356089f050c8130d2318109e80417a4", "FFlagClientFireEventPlaceLauncherFail3":true, "FFlagResetMouseDeltaFix":false, "FFlagDebugRenderDragAxis":false, "DFFlagNavigationServiceAnalytics":true, "FFlagStudioDefaultAPSOn":true, "DFStringLocalizationServiceOverrideLocale":"es", "FFlagFixLineHandleAdornmentsNearPlane":true, "FFlagDebugStudioUseModelPublishAsPackagePublish":false, "FFlagQuantumGuiEnabledInApp":false, "FFlagStudioBetterRBXMessageBox":true, "DFFlagUseHttpDefaultUrlSchema":false, "FIntXboxPresencePolling":120, "FFlagStudioTabCloseButtonObjectName":true, "FFlagRakNetSupportIpV6":false, "FFlagStudioPreventPluginSettingsCorruption":false, "FFlagCSGv2UseImprovedSphereAndCylinder":true, "FIntDiabolicalModeEnable":0, "FFlagEnableGameSignalRWithiOS":true, "FFlagAdjustHipTranslationBasedOnHipHeight":false, "FFlagUserNavigationFixClickToMoveJump":true, "FFlagStudioAsyncLambdaCallbackWithQPointerThisFix1":true, "FStringPerformanceSendMeasurementAPISubdomain":"www", "FFlagTestForBadNormal":false, "FFlagLuaChatNewPageSlidingTransition":true, "FFlagHarfbuzzEnabledInApp":true, "FIntHttpCacheRedirectsTimeoutMs":30000, "FFlagAvatarEditorUseArtistIntentFolder":true, "FFlagUseSortForClient":false, "FFlagRenderConstraintsWithDepth":false, "DFIntInfluxTattletaleV2Permyriad":10000, "FFlagRefactoringAvatarEditorSetup":false, "FIntSpeedTestPeriodMillis":1000, "DFIntCreatePlacePerPlayerPerMinute":1, "FIntStudioLongCacheRecoveryTime":3600, "FFlagStudioBulkImportAlpha":false, "DFIntInsertServiceErrorInfluxHundrethsPercentage":0, "FFlagServerGeneratesPlayer4":false, "FFlagStudioAddLinkedAssetsFolder":false, "DFIntOnDisconnectHTTPTimeout":2000, "FFlagStudioUseLuaGameSettingsDialog":true, "FFlagStudioFixPackageDuplicationInRGE":false, "FFlagUseSelectionServiceToShowScriptInExplorer":false, "FIntStudioStopOSXReportingForOSAtAndBeforeMinor":8, "FIntStudioStopWindowsReportingForOSAtAndBeforeMinor":0, "FIntCLI20390":20, "DFFlagAlternateScalingForNativePartsV3":false, "FIntStudioStopWindowsReportingForOSAtAndBeforeMajor":6, "FIntPGSPenetrationMarginMax":50000, "DFIntNumFramesAllowedToBeAboveError":10, "FFlagDisconnectUseConnectionErrorCode":false, "DFIntNewRunningBaseAltitudeP":30000, "FFlagSolverHotSwappingEnabled2":true, "DFIntBadgeInfoCooldownTime":5, "DFIntBulletContactBreakOrthogonalThresholdActivatePercent":200, "DFFlagUseDeltaForFBAdorn":false, "DFFlagGroupTeleportMetricsSuccessAndFailure":true, "FFlagAddEndedSignalToSoundJobStudio":true, "FStringStudioTutorialsTOCUrl":"https://wiki.roblox.com/index.php?title=Studio_Tutorials_Landing&studiomode=true", "FStringLuaAppsDiagPageLoadTimeHome":"LuaAppsPageLoadTimeHome", "FFlagDoNotDeleteSelectionOnTab":false, "DFIntBroadPhaseIslandBufferZoneMinPartLimit":0, "FIntGameViewItemCap":10000, "DFIntNoTouchOneSecondYVelocityThresholdInHundredths":10, "FFlagLuaAppSiteMessageBannerEnabled":true, "FFlagStudioEnablePlayerLocaleViewPlugin3":true, "DFIntMaxClusterKBPerSecond":400, "FFlagStudioUseAnalysisReceiverClass":true, "FFlagStudioShareFromRibbonBarUXChanges":false, "DFFlagReplicatedEventsUseSharedArgs":true, "DFFlagDebugAnalyticsSendUserId":true, "FFlagAnimationEditorNewWikiDocumentation":true, "FFlagStudioReportOSArchToGoogleAnalytics":false, "DFFlagPreserveJointsOnSpawn":true, "FFlagPluginDragApi":true, "FFlagStudioBlockAnalyticsBasedOnOS":false, "FFlagStudioFixAutocompleteEnabledSetting":true, "DFIntCacheDirectoryExceptionInfluxHundredthsPercentage":0, "FIntStudioSyntaxCheckTimerInterval":500, "FFlagUserNavigationFixClickToMoveInterruption":true, "DFIntHttpDataSendExtendedTimeoutMillis":600000, "DFIntHttpServiceErrorCapLimit":1000000, "FFlagStudioUseNewAPIsForStartPage":true, "DFFlagPGSWakeOtherIfOneAssemblyIsAwake":false, "DFStringAvatarJointPositionsFixed":"Fixed", "FFlagLuaChatPlayTogetherPlaceIdHackFix":false, "DFFlagFixDuplicateServerLogRequests":false, "FFlagStudioDoubleClickFlag":true, "FFlagShareOnStartPageAnalyticsFix":false, "DFIntNavigationServiceAnalyticsIntervalMillisec":60000, "FFlagStudioPluginNativeCursors":false, "DFFlagDebugVisualizationImprovements":true, "FIntDebugInternetSimulatorPacketlossHundredth":0, "DFIntTeamCreateTimeOutInSec":60, "FFlagStudioCrashPlayersDataManagerUpdatePlayersInfoFix":true, "FFlagAddSymbolicLinkManagement":false, "FFlagStudioEnableWebKitPlugins":true, "FFlagWarnOnNoCoreFunction":false, "DFIntReportDeviceInfoRate":100, "FStringStudioTutorialsUrl":"https://wiki.roblox.com/index.php?title=Studio_Tutorials_Test&studiomode=true", "DFIntHttpServiceConcurrentThrottleInfluxPermyriad":0, "DFFlagReportDataPingByPlayerBin":true, "DFFlagCSGv2UseQuadricPosition":false, "FFlagHelpMenuShowPlaceVersion":true, "FFlagStudioShareModalWindowCrashWhenFetchIconFix":true, "DFFlagLockViolationInstanceCrashStudio":false, "DFIntHangDetectionTimeoutMs":180000, "DFIntAvatarJointPositionsDefaultType":0, "DFFlagNonJsonParseType":false, "DFIntWaitGetInQueueTime":200, "DFIntTextScraperClientDataQSize":128, "FFlagStudioTutorialsUseDevHub":true, "DFIntHttpBatchLimit":128, "DFIntSendRakNetStatsThrottleStreamingOverride":1, "DFFlagDebugGAReportThrottledSessions":true, "DFIntPrimStatsGANumDelimited":3000, "FStringGetUserThumbnailAsyncRetryTime":"4", "FIntAdvancedRCCLoadFMODRetryCount":3, "FIntInterpolationAwareTargetTimeLerpHundredth":13, "FFlagGetDefaultClothesFromWeb":true, "DFFlagNewClientSettingsServiceConfigurableHost":true, "FIntLuaErrorsInfluxThrottling":1, "DFFlagPGSSolverSimIslandsEnabled2":true, "FFlagChatServiceInstallerExemptLocalizationFromAnalytics":true, "DFIntReportTeamCreatePostFailurePermyriad":100, "FFlagStudioDontAssertWhenQmlCannotLoadImages":true, "FFlagDebugStartMicroProfilerWebServer":false, "FFlagStudioAsyncLambdaCallbackWithQPointerThisFix2":false, "DFStringOverrideSendRakNetStatsThrottleCountries":"CN,50", "FFlagWeDontWantAnyGoogleAnalyticsHerePlease":false, "FFlagDebugDoNotLoadHumanoidSounds":false, "FIntXboxAvatarPaneRefreshInterval":1800, "FFlagStudioAnimationEditorWarnForPastingOutOfBounds":true, "FFlagStudioFixScreenShot":true, "DFIntGetUserThumbnailThrottleExponent":1500, "DFIntAnalyticsMaxDeferredStats":50, "DFIntUnstickForceDecayInTenths":9, "FFlagFixButtonR2MouseClickOnGui":false, "FFlagStudioStartPageUiFixes":true, "DFFlagDeprecatableBroadcasts":true, "FIntStudioBulkImporterMockUploadTimeInMs":0, "DFIntUserHttpRequestsPerMinuteLimitM":0, "FFlagLuaChatFriendIconRefactor":false, "FFlagStudioLeaveScriptsOpen":true, "DFFlagCLI120342p2":true, "FIntStudioStopOSXReportingForOSAtAndBeforeMajor":10, "DFStringCollideInnerBox":"InnerBox", "FIntCameraFarZPlane":100000, "FFlagStudioFixShareIcon":true, "FFlagEnsureVisibleOnFindResult":false, "DFIntWriteFullDmpPercent":0, "FFlagFixScrollingTouchInputEnded":false, "FFlagStudioHttpUpgradeToHttps":false, "DFIntQKick":3072, "FFlagScrollToTopShortDistanceResponseFix":true, "FFlagStudioStopDoubleUserActionReporting":true, "DFFlagUseSpecificContentTypeForAbuseReports":false, "DFIntGlobalFill":0, "FFlagStudioUIEditorRotateV2":false, "FIntSpeedCountCap":5, "FFlagStudioAutocompleteRefactorFasterEnumLookup":false, "FFlagStudioCommandBarButtonText":true, "FFlagRCCSupportTeamTest":true, "DFFlagForceUseProductionForAssetFetching":false, "FIntStudioTreeWidgetFilterTime":30, "FStringToolboxInLuaWidgetMacOSABTest":"AllUsers.Studio.ToolboxInLuaWidgetMacOS", "FIntStudioRobloxAnalyticsLoad":100, "FFlagStudioAnimationEditorParentScaledDragArea":true, "FFlagAnimationEditorCutCopyEntireKeyframes":true, "DFFlagBodyColorsColor3PropertyReplicationLogicEnabled":true, "FFlagFixParentChildInsert":false, "FIntAppBridgePlaceLaunchRetryWaitInSec":1, "DFIntReportTeamCreatePublishFailurePermyriad":100, "DFIntCSGv2OperationInfluxHundredthsPercentage":10000, "FFlagFixOutOfBoundsMouseLocation":true, "DFIntStreamedRegionGCFactor":250, "FFlagStudioOnlyShowPackageLinkIfPackageOwner":false, "FIntStudioBootstrapperVersionNumber":52886, "FIntStudioRPCMessageResponseTimeOut":30000, "DFIntReportCloudEditJoinFailureReportPerMyriad":10000, "FFlagDebugGraphicsGLDisableDiscard":false, "DFIntLoginFailureStudioInfluxDbHundredthsPercentage":10000, "FFlagStudioExtDebuggerClientCrashFixEnabled":false, "FFlagStudioRobloxIDEDocShareModalWindowDeleteThis":false, "DFFlagDataStoreMinMaxErrorEnabled":false, "FStringToolboxInLuaWidgetWinABTest":"AllUsers.Studio.ToolboxInLuaWidgetWin", "FFlagDebugNavigationDrawCompactHeightfieldLayerSet":false, "FIntStudioAuthenticationTimeoutMs":10000, "FFlagDebugLocalRccServerConnection":false, "DFFlagCSGv2SkipDegenerateTriangles":true, "DFFlagFixCharacterAppearanceLoadedEvent2":false, "DFFlagStudioTrackDeadRobloxIDEDocsThrottleEvents":false, "FFlagFixScrollingFrameClipRect":true, "DFIntMaxHttpResultResponseSize":500, "FFlagStudioStartPageUsePlainText":true, "FIntLuaChatPlayTogetherThrottleAndroidPhone3":0, "DFFlagDoNotRunAnimationEditorInPlayMode":true, "FStringDebugStudioPlayerConnectToServerIPAddress":"", "DFFlagNoInfiniteLoopOnChatInfoLoadFailure":true, "FFlagStudioAnimationEditorMultiSelectJoints":true, "DFFlagReplicatorEventDoNotVerifyInstanceStillReplicationContainer":true, "FStringStudioDefaultNewTemplatePlaceId":"95206881", "DFFlagDynamicLocalizationTablesEndpointStressTest":false, "DFFlagSpecificGravityDummyReturnsZero":false, "FIntStudioPartSizeCameraDistRatio":30, "DFFlagDebugEnableReportPlaceIDAboveMemory":false, "FIntTaskSchedulerTasksDefaultMaxTimeMsPerCycle":10, "FFlagStudioStartWithGameLocaleId":true, "FFlagDebugBreakOnFMODErrors":true, "FFlagDebugReportPhysicsMissingPlaceSpecific":false, "DFStringCollideOuterBox":"OuterBox", "DFIntSpecialLeak":111111, "FFlagFixIncorrectScrollingFrameBounds":true, "FFlagStudioRemoveInsertEvent":false, "DFFlagFixCharacterJitterDownStairs":false, "FFlagStudioUIEditorZoomPanel":false, "FIntOptimizedContactPipelineSpatialHashOverlapToleranceMicro":10000, "DFIntGettingUpBalanceD":50, "DFFlagFixStudioPositionAndOrientationPropertyWeldConstraints":false, "DFFlagCalculateExpirationOnTheDestinationServer":true, "FFlagStudioAllowMouseTrackingOnMac":false, "FFlagReportRuntimeJoinCount":true, "FFlagLoadTimesFromAppShellReporter":true, "DFIntSmoothTerrainPhysicsRayAabbSlop":1, "DFFlagFireCharacterAddedAfterSpawn":false, "FIntUIQuadTreeCellAreaMin":20000, "DFFlagHttpServiceRequestAsyncError":true, "DFFlagTheseAnalyticsAreBigEnoughForTheTwoOfUs2":false, "FFlagDebugScriptAnalyzer":false, "FFlagPreventCommandLineRaceCondition":true, "FFlagStudioForwardForceLocaleIds":true, "FIntStartupInfluxHundredthsPercentage":100, "FFlagStudioDeprecateUIThemeProperty":false, "FFlagUseGamePerfMonitorWithAppShell":false, "FFlagThwartPurchasePromptScams":true, "FFlagCrashReporterNew":false, "FIntPGSPenetrationMarginMaxBump":5, "DFIntHttpRbxApiMaxRetryQueueSize":500, "FFlagLogCorectTeleportFailureMessage2":true, "FFlagEnableAutomaticScalingEnabled":true, "DFFlagAllowMultipleHangReports":false, "FFlagReportJoinAllCount":true, "DFFlagHttpBatchSecure":true, "FIntStudioTeamCreateDisconnectHandlingMaximumRetries":120, "FFlagLuaChatDisplayInFront":true, "FFlagXboxAvatarEditorOutfitThumbnailFix":false, "FIntPGSConeLimitMaxCorrectiveAngle":15, "FFlagMemoryFromAppShellReporterIOS":false, "DFFlagLockViolationInstanceCrash":false, "FFlagUseAvatarAPIAvatarFetch":true, "FFlagStudioOnlyRefreshWhenAddingNewPackages":false, "FFlagLuaSearchPageDispatchesInitialSearch":true, "FFlagJoinTimeCounters":true, "FIntPGSVStageStiffnessEasingUpToAggressive":10, "FIntStudioThumbnailImageRetryMaximum":3, "DFIntRetryBaseTimeMSec":1000, "FFlagProcessStarterGuiInEditMode":true, "FFlagUnlockedTopbarTransparency":true, "DFIntAvatarAPIAvatarFetchRollout":0, "FFlagCSGv2UnparentPartsBeforeModifyingCFrames":true, "DFFlagCLI16089_2":true, "DFIntHttpConnectDefaultTimeoutMillis":60000, "FFlagStudioLogIsVIPDeveloper":true, "FFlagStudioFbxImportVerboseErrorOnLoad":true, "FFlagDebugAdornsDisabled":false, "FFlagLocalizationAppendFunctionsAlwaysAppend":true, "FFlagDebugSendAttemptsToDiagCase1":false, "FFlagStudioPackagesUsePrimaryPartAsBaseInModel":false, "FFlagAutocompleteRefactorCheckScriptCreatable":false, "FFlagOutputWidgetFindEnabled":false, "FFlagCSGv2EnableEmptyMeshError":true, "FFlagSetMouseInputStateLater":true, "FStringDiabolicalModeWhiteLists":"", "FFlagStudioShowLocalFilePathOnStartPage":true, "FIntMaxSpeedDeltaMillis":300, "FIntStudioSecondsBeforeInactive":300, "FFlagPassDataModelInitializationParamsEvenMore":false, "FFlagDebugStartPageRefreshOnF5":false, "FFlagSpringConstraintInGameAdornFix":true, "FIntFriendRequestNotificationThrottle":5, "FFlagAnimationEditorLuaWidgetsVersion":true, "FFlagStudioRefreshInsertServiceDialog4":true, "FIntStudioTreeWidgetEventProcessingTime":10, "FStringStudioDebugBTID":"StudioDebugBTID", "FIntStudioGuiObjectSecondRectOffset":4, "DFIntCrashUploadHttpResponseDefaultTimeoutMillis":80000, "DFIntTattletaleMaxTextLength":1024, "DFFlagEnableSitNilProtection":true, "FIntHttpClientHandlerFixed":1, "FIntStudioWebDialogMinimumWidth":970, "FIntStudioBulkImporterMaxJobs":50, "FFlagWeldConstraintAdornImprovements":true, "DFFlagImproveTimeStamp":false, "FFlagStudioInsertObjectWindowShortcut":false, "DFFlagSendServerPerfInfo":true, "FFlagLuaChatUseNewFriendsAndPresenceEndpointV356":true, "FFlagReleaseAllEventStreamsEnabled":true, "FFlagBestProximatePartFix":true, "DFFlagCloudEditPublishNoStream":false, "FFlagCheckRequestingTeleportAtTeleportImplBeginning":true, "DFIntHttpCacheSendStatsEveryXSeconds":60, "FFlagAutocompleteRefactorCompleteLocalsInTheirDefinition":false, "FFlagJoinTime_LocalUserAnimationPriority":true, "FIntAutocompleteRefactorDeclarationSearchRange":10, "DFIntMaxFrameBufferSize":10, "FFlagDataModelForwardGameLocaleId":false, "DFFlagNewClientSettingsServiceUsePlainHttp":false, "DFFlagPlayerCleanCharacterModelOnRemove":true, "DFFlagWhitelistUserInputEvents":true, "FFlagDebugStudioPackageValidator":false, "FFlagGuiObjectNotRegisteringKeys2":true, "FFlagStudioFixScriptDocState":true, "DFIntCanHideGuiGroupId":3013794, "FIntStudioThumbnailImageRetryInterval":6000, "FFlagLuaChatShareGameToChatFromChatV2":false, "DFIntDynamicLocalizationTablesAssetTimeout":1, "FIntStudioRPCMessageWriteTimeOut":3000, "FFlagStudioRigImporterDebugMode":false, "FFlagTextTruncationEnabledInApp":true, "DFIntTextScraperServerDataMSecs":1000, "FFlagQuantumGuiEnabledInGame2":false, "FFlagStudioRecoveryScriptIgnoreUnchangedOnes":true, "DFIntTattletaleReportToRCCCooldownSeconds":30, "DFStringAvatarJointPositionsTypeField":"jointPositioningType", "FStringStudioDevHubBaseUrl":"http://robloxdev.com/", "FFlagPluginGuiGetRelativeMousePositionApi":true, "FFlagFixCustomTeleScreen":true, "DFFlagDebugRakNetNoTimestampInUdt":false, "FFlagStudioUseDebuggerController":false, "DFFlagDynamicLocalizationTables":false, "FFlagAvatarEditorUseAvatarRulesForScales":true, "DFIntCrashUploadErrorInfluxHundredthsPercentage":1000, "FIntNewDevConsoleMaxHttpCount":300, "FFlagHttpReportStatisticsOnce":true, "FFlagGameExplorerCopyPath":true, "FFlagStudioBreakOnInfiniteLoopsRunFixEnabled":false, "FFlagStudioCheckCloseCaptchaArgument":true, "DFFlagUrlReconstructRejectInvalidSchemes":false, "FFlagStudioRobloxScriptDocPushScriptSourceToDataModelCrashFix":true, "FIntMaxClients":128, "FFlagDebugClientNetworkPerPlaceMetrics":false, "FFlagStudioPreventMeshPublishOnErrorEnabled":false, "DFIntServerConfigCloudEditSavePeriodSeconds":300, "DFIntNavigationPolygonMergePasses":2, "DFFlagRagdollNotSuperAnnoying":false, "FIntRenderShadowIntensity":75, "DFIntDataStoreAnalyticsReportEveryNSeconds":300, "FFlagMoreViewCreationFailureHandling":true, "DFIntCrashUploadMaxDumpFiles":3, "DFIntRakNetNakResendDelayMsMax":0, "FFlagStudioFilterPreferredParent":true, "FFlagStudioMigrateToDevHub":true, "FIntIkDraggerSolveIterations":16, "FFlagLoadAdditionalCoreScriptsInStudio":true, "FIntNavigationAgentHeight":5, "DFStringCrashUploadToBacktraceWindowsStudioToken":"8608fce9cad86072eee36b7d1d9dc56d68101a6b1f783c7bf568d80972ee1837", "FIntStudioRightClickBuffer":500, "FFlagStudioShareModalWindowCrashWhenFetchUniverseFix":true, "FFlagShareGameToChatStatusAnalytics":false, "DFFlagStudioThrottleNewEmulationMetrics":false, "FFlagStudioAutocompleteRefactorFilterServices":false, "FIntStudioResendDisconnectNotificationInterval":1000, "DFFlagEnableRemoteProfiling":true, "DFFlagDialectPreferenceOrder":false, "FIntCloudEditWaitTimeMs":500, "DFIntRagdollSlowEnoughToNotTenth":10, "DFFlagAvatarJointPositionsEnabled":true, "FFlagRenderPartInstancingEnabled6":true, "DFFlagAlternateScalingForNativeParts":false, "FIntSettingsHubInviteToGameOSX5":100, "FIntNavigationAgentJumpHeight":6, "DFFlagFixGameJoinTrying":true, "DFIntDebugNetworkPacketAgeHistory":30, "DFIntHttpAnalyticsMaxHistory":256, "FFlagMakeStudioDefaultTextLabelColorBlack":true, "DFFlagInWithTheNew":true, "DFFlagCleanCacheMoveMutex":true, "FFlagStudioGradientEditorCrashFixEnabled":false, "FStringStudioUserNotificationTopSubdomain":"realtime", "FIntCloudEditTimeoutTimeMs":60000, "FIntLuaAnalyticsReleasePeriod":60, "FStringStudioUserNotificationPath":"/notifications", "DFIntTargetTimeDelayFacctorTenths":20, "FFlagRequireRbxSig2":true, "FFlagStudioQMLControllerWithParentFix":true, "FIntStudioRightClickDelay":150, "DFFlagCSGMeshLevelOfDetail":true, "DFFlagCSGMeshV4DeserializerEnabled":true, "DFFlagCSGv2UseMegaAssetFetcher":true, "DFFlagHttpAddRbxHeaders":true, "DFFlagHttpFollowAllRedirects":true, "DFFlagHttpServiceBetterUserAgent":true, "FFlagChangeInfoInNetworkMenu":true, "FFlagDevConsoleTabMetrics":true, "FFlagEnableChatMessageType":true, "FFlagEnableGetBoundingBox":true, "FFlagEnableStudioService":true, "FFlagFasterCoreScriptLoading":true, "FFlagNavigationAgentCanJump":true, "FFlagNavigationPathBlockedEventEnabled":true, "FFlagNavigationVariableAgentSize":true, "FFlagRapidJson110_2":true, "FFlagSetPlaceIdInAdvance":true, "FFlagStudioBulkImport":true, "FFlagStudioBulkImportMinorFixes":true, "FFlagStudioChangeUIThemeToOSTheme":true, "FFlagStudioLuaGameSettingsDialog2":true, "FFlagStudioRefactorUniverseCollection":true, "FFlagStudioShowChatWidgetOnDoubleClick":true, "FFlagStudioTeamCreateConnectionCancellable":true, "FFlagStudioUpdateThemeDataStructures":true, "FFlagStudioUseNewThemeAPIsInRibbonCode":true, "FFlagUseDevelopmentLuaGameDetails":true, "FFlagUseGameStateTypeInPluginManager":true } \ No newline at end of file diff --git a/app/files/RCCServicet0OzoN08twUekqhPt2N5.json b/app/files/RCCServicet0OzoN08twUekqhPt2N5.json new file mode 100644 index 0000000..c43b380 --- /dev/null +++ b/app/files/RCCServicet0OzoN08twUekqhPt2N5.json @@ -0,0 +1 @@ +{ "FIntGraphicsOculusDetectTimeout":0, "FFlagDebugRenderVRHUD":false, "FIntGraphicsVulkanAdrenoArghVersion":24, "FFlagDebugGraphicsDisableVulkan11":false, "FFlagDebugGraphicsD3D9ForceSWVP":false, "FFlagGraphicsGLUseNewPacksES":false, "FFlagGraphicsGLUseNewPacksGL":false, "FFlagGraphicsGL3InstancingEnabled5":false, "FFlagGraphicsGL3UseUBO3":true, "FFlagDebugGraphicsForceGL2":false, "FFlagSIMDVoxelizerEnabled":true, "FIntCSGVoxelizerFadeRadius":300, "FFlagG3DRayCylinderintersectionTimeFix":true, "FFlagRenderIC2VoxelizerUpdatesEnabled":false, "FFlagRenderInstancingDeferUpdates2":true, "FIntSuperClusterFastClusterSize":1000, "FFlagJoinTime_LocalUserClusterPriority":true, "FFlagRenderFixEmojiPadding":false, "FFlagDebugOccupancy":false, "FFlagFixTextureAtlasLineHeightOn4xDevices":true, "DFIntPreloadTextureTimeBuget":1000, "FFlagFixTextureCompositorFramebufferManagement":false, "FIntJointTime_TextureCooldown":0, "FFlagJoinTime_AllowFullTexturePrioUpdate":false, "FFlagJoinTime_PassTexturePriority":true, "FFlagRenderInstancingEnabled8":true, "FFlagGridMaterialFix":true, "FIntFastClusterUpdateWaitingBudgetMs":4, "FFlagNoFaceHeadMeshTag":false, "FFlagFixTextureCubeFramebuffers":false, "FIntOutlineThickness":40, "FIntOutlineBrightnessMin":50, "FFlagEnableRobloxGuiEffect":true, "FFlagRenderRestrictHeads5":true, "FFlagDebugGraphicsVsync":false, "FFlagDebugGraphicsCrashOnLeaks":true, "FFlagDebugGraphics":false, "FFlagFixIAdornableCollectorCrash3":false, "DFFlagReplicatorPacketStatsHandleBursts":true, "DFIntJoinDataCompressionLevel":1, "DFFlagCorrectDevConBw":true, "DFFlagCantGetMad":false, "DFFlagStreamAvoidResetRegionRadius":false, "DFIntStreamJobMinBufferHealthThresholdHundredths":40, "DFIntMaxConsecutiveStreamJobWorkLoad":1, "DFIntStreamJobPriorityAmplifierRadius":0, "DFIntNetworkSchemaCompressionRatio":9, "DFIntRakNetUseSlidingWindow2_maxSpeed":0, "DFIntRakNetUseSlidingWindow2_minSpeed":1536, "DFIntRakNetUseSlidingWindow2_minRtt":30000, "DFIntRakNetUseSlidingWindow2_startUpdateMs":10, "DFIntRakNetUseSlidingWindow2_startFactor":200, "DFIntRakNetUseSlidingWindow2_rangeCount":10, "DFIntRakNetUseSlidingWindow2_trackLengthMs":2500, "DFIntRakNetResendScaleBackFactorHundredthsPercent":6500, "DFIntRakNetConnectionStartWindow_HundredthsPercentage":1000, "DFFlagDelistPpr":false, "DFFlagNotChristmasTodayEither3":false, "DFFlagDontWhitelistUserInputConnectionCounts":true, "DFFlagDropItLikeItsHat2":false, "DFIntWeldPermyriad":100, "DFFlagActOnNewCheck":false, "DFFlagCheckBackpack":false, "DFIntMaxServerStreamRegionRadius":16, "DFFlagOneWeldToRuleThemAll2":false, "DFFlagMoreWeldRestrictions":false, "DFFlagUseVelocityGateForMoment":false, "DFIntDebugSendMomentInSteps":6, "DFIntDebugSendDistInSteps":5, "DFIntMaxFramesToSend":2, "FFlagDistanceThinningForClient":true, "FFlagUseRoundRobinForClient":false, "DFFlagUseDistanceThinning":true, "DFFlagUseRoundRobin":false, "DFFlagUseSort":false, "DFFlagSetSimulationRadiusInPhysicsSender":true, "DFFlagNewSortAndFilter":true, "DFFlagSendAllPhysicsPackets":false, "DFIntPhysicsPacketsPerStepAdjustPeriodTenths":30, "DFIntS2PhysicsSenderRate":15, "DFIntS2NumPhysicsPacketsPerStep":2, "FIntNumPhysicsTouchPacketsPerStep":1, "DFIntMaxStreamPacketsPerStep":16, "DFStringDebugServerProfilerIdList":"", "DFIntDebugProfilerCaptureTime":4, "FIntAntiSpamSpamLimit":1000, "DFIntAniCycleCount":0, "DFFlagAniLongCycleFix":true, "DFFlagSteadyAni":false, "DFFlagAniCoalesce":true, "DFFlagGameLoadDataStatistics":false, "DFFlagFilterCheckMap":false, "DFIntServerPlayerFilterPermyriad":0, "DFIntDisconnectReportPermyriad":0, "DFFlagFixServGenPlayer4Spawning2":true, "FFlagDebugForceRegenerateSchemaBitStream":false, "DFIntDepthLimit":4000, "DFFlagUseNewLeakyBucketForRateLimiting":false, "DFIntRxRlReport":15, "DFIntRxRlEn2":0, "DFIntQLimit":3072, "DFIntReportFill":0, "DFIntSoundFill":83333, "DFIntReportLeak":100000000, "DFIntSoundLeak":10000000, "DFIntRatePermyriad":0, "DFIntClusterEstimatedCompressionRatioHundredths":200, "DFIntClusterCompressionLevel":1, "DFFlagUseMegaReplicationData":false, "DFFlagDebugSendStreamingEnabledKeyStatsPlaceSpecific":false, "DFFlagSendStreamingEnabledKeyStats":true, "DFFlagSendQueueTimeByPlayers":true, "DFFlagSelectiveNegativeTarget":true, "FFlagNetworkDeserializePacketsInAJob":true, "DFFlagLogMemoryStatsOnCompressionError":true, "DFFlagTeamCreateServerTrackScriptChangesFullSource":true, "DFFlagReportMtubyCountyAndCntoDc":true, "FFlagDebugSendPhysicsFBUpdateRatePlaceSpecific":false, "DFStringSendPingForCnConnectingToDcList":"111,174,191,133", "DFIntSendRakNetStatsThrottle":2, "DFIntSendRakNetStatsInterval":300, "DFIntReplicatorMaxPacketBytesSentToInfluxOnError":256, "FIntEventReportLagThrottleHundredThousandths":0, "DFFlagPhysicsResetOsp":true, "DFIntMaxDataOutJobScaling":10, "DFIntMaxClusterSendStepsAccumulated":15, "DFIntMaxClusterSendStepsPerCyclic":5, "DFIntMaxDataStepsPerCyclic":5, "FFlagPpjClientBreak":false, "FIntSSAOMipLevels":4, "DFFlagPpjServerBreak":false, "DFIntPpjCapacity":100, "DFIntPpjPmFill":10, "DFIntPpjEtrFill":10, "FFlagJoinTime_LocalUserMeshPriority":true, "DFIntMaxProcessPacketsJobScaling":10, "DFIntMaxProcessPacketsStepsAccumulated":15, "DFIntMaxWaitTimeBeforeForcePacketProcessMS":0, "DFFlagNotTouching":false, "DFIntMaxLearnDescriptors":8192, "FFlagUseNetworkStream":true, "DFIntClientOwnershipMs":100, "DFFlagDebugSendServerPerfInfoPlaceSpecific":false, "DFFlagSendServerGenPerfInfo":true, "DFFlagReportHttpServiceToEc":false, "DFIntInfluxReportFeOnStartupErrorPermyriad":0, "DFFlagDontRemoveGUIDEarly":true, "DFIntReportFeOnStartupPermyriad":0, "DFFlagIPV6RobloxStudioCleanUp":false, "DFFlagRCCSupportCloudEdit":true, "DFFlagInstancePacketCacheRemoveCorrectKeyOnAncestorChanged":true, "DFStringGamePerfMonitorPercentageCountryOverride":"CN,50,AU,50,NZ,50", "DFIntGAThrottlingEventThresholdHundredthCat1":90, "DFIntGAThrottlingEventThresholdHundredthCat2":75, "DFIntGAThrottlingEventThresholdHundredthCat3":50, "FIntGamePerfMonitorPercentage":0, "DFIntDebugClientSvrProfilerFramesOverride":0, "FFlagTxRlEn":false, "DFFlagClientJoinProcessToEventIngest":true, "DFIntTimePermyriad":10000, "FFlagCLI21289":true, "DFIntClientInstanceQuotaInitial":2000, "FFlagLoadCoreScriptsEvenInTeamCreate":true, "FFlagDebugEnableSpoofGameLocaleId":false, "FStringDebugSpoofRobloxLocaleId":"es-es", "FFlagDebugEnableSpoofRobloxLocaleId":false, "FFlagJoinTimeByCountryByPlatform":true, "DFStringSendJoinTimeDeltasHundPrecCountryOverride":"CN,5000,US,100,AU,3000,KR,2000,NZ,3000", "FFlagSendJoinTimeDelta":true, "FStringGameLocaleIdName":"GameLocale", "FFlagTSMk2ThrottleStreamJob":true, "DFFlagUseCorrectCoreCase1Devices":false, "DFIntSendJoinTimesToDiag_HundredthsPercentage":0, "FFlagSendPlatformOverallJoinTime":true, "FFlagPlaceLauncherIncludePlStartTime":true, "FFlagLogJoinTime":false, "FFlagJoinTime_AvatarTextureCompositorSignal":true, "FFlagJoinTime_AvatarFastClusterSignal":true, "FFlagUnlockMouseIfKicked":true, "FFlagDebugForceChatDisabled":false, "FIntDisconnectInfluxHundredthsPercentage":0, "DFIntJoinTimeCounters_JoinInfluxHundredthsPercentage":0, "FStringServerConfigChatFilterUrl":"/Game/ChatFilter.ashx", "FStringServerConfigAbuseReportUrl":"/AbuseReport/InGameChatHandler.ashx", "FIntServerConfigScriptTimeoutSeconds":10, "DFFlagServerCopiesPlayerGui":false, "DFIntPhysicsCompressionSizeFilter":50, "DFIntRakNetLoopMs":10, "DFFlagSimplifyRakNetConnectionHandshake":false, "FFlagDebugEnableInternetSimulator":false, "DFFlagCLI120342":true, "DFIntClientNetworkInfluxHundredthsPercentage":1000, "FIntDebugClientNetworkUnthrottledGAForDatacenterId":0, "DFIntServerPlayerFilterConfig":0, "FIntRakNetResendBufferArrayLength":512, "DFIntRakNetNakResendDelayRttPercent":0, "DFIntRakNetNakResendDelayMs":0, "DFFlagRakNetFixBwCollapse":false, "DFFlagRakNetUseSlidingWindow4":false, "DFFlagDebugRakNetUseUdt":false, "DFFlagRakNetDetectNetUnreachable":true, "FStringClientExternalBrowserUserAgent":"Roblox/WinInet", "FFlagCSGv2UseIterativeSimplification":true, "FFlagCSGv2EnablePerPrimitiveBoxMaps":true, "FFlagCSGv2ControlSignificands":false, "DFFlagCSGv2AlwaysClusterPositions":false, "DFFlagCSGv2UsePositionClustering":true, "FFlagCSGv2UnionOrientationFromFirstPart":true, "FFlagStudioCSGChildDataNoSizeLimit":false, "FFlagTaskSchedulerRemoveLast":false, "FFlagTaskSchedulerSTDThreadwrapper":true, "FFlagFixPluginActionIds":true, "FFlagRapidJson110Studio_2":true, "FFlagStudioAnimationEditorClickAndScrubFix":false, "FFlagAvatarEditorTabResizing":false, "FFlagRapidJson110":false, "FFlagDebugFastFlagEditor":false, "DFFlagDebugDisableTimeoutDisconnect":false, "DFFlagHttpUrlSubdomainDotFix":false, "DFFlagHttpUrlDecodeFix":false, "DFFlagHttpUrlPortFix":true, "FIntTaskSchedulerTasksDefaultMaxCountPerCycle":16, "FFlagStudioCheckForUpgradeEnabled":true, "FFlagDebugDisableOnScreenProfiler":false, "FFlagStudioAnimationEditorKeyframeIndicators":true, "FFlagEnableMobileMicroProfilerWebServerApi":false, "FFlagCSGv2BalanceExponents":false, "DFIntMaxAverageFrameDelayExceedFactor":3, "FFlagArrayDynamicReserveUsesMoveSemantic":false, "DFFlagFindLightestUpstreamNew":false, "DFIntTattletaleFlushIfNotUpdatedForSeconds":60, "FIntXboxGameSortsUpdateInterval":1800, "FFlagNavigationDebugDrawIterateSpiral":true, "FFlagDebugNavigationDrawNavMesh":true, "FFlagDebugNavigationDrawCompactHeightfield":false, "FFlagDebugNavigationDrawHeightfield":false, "DFFlagBuiltInPluginsCanModifyHttpEnabled":true, "DFIntDefaultBalanceD":100, "DFFlagPhysicsSenderBitStreamAllocateExtraHalfPacket":true, "FIntPGSAlign2AxesPStageFrictionConstant":1, "FIntPGSAlign2AxesVStageFrictionConstant":2, "FIntPGSPStageStiffnessEasingDownToConservative":10, "FIntPGSPStageStiffnessEasingUpToAggressive":1, "FIntPGSPStageStiffnessConservativeValue":90000, "FFlagStudioUseBulkImporterMock":false, "FFlagNavigationFixCheckOcclusionAsyncV2":true, "FIntPGSPStageStiffnessBestFitnessThreshold":1, "FIntPGSPStageStiffnessWorseFitnessThreshold":2, "FIntPGSVStageStiffnessEasingDownToConservative":100, "FFlagLuaHomeGetFriendsPlayingGamesInfo":false, "FIntPGSVStageStiffnessAggressiveValue":99995, "FFlagFixSubsequentFolds":false, "FFlagForceSDLInitOnMainThread":false, "FIntPGSVStageStiffnessBestFitnessThreshold":1, "FIntPGSAngularDampingPermilPersecond":950, "DFFlagErrorForFailedRequestsInThumbnailLogic":false, "FIntPGSPenetrationVelocityForMinMargin":20, "FFlagEnableOnboardingMemoryAPI":true, "DFIntHttpBatchAssetV1HundredthsPercentage":10000, "DFIntHttpBatchDelayMs":3000, "DFFlagBgUpdateRedirects":true, "DFFlagFindClosestHandleHitTestFixEnabled":true, "DFIntFreeFallBalanceP":5000, "FFlagFixFolderDescendantSelection":true, "DFIntTextScraperServerMaxRowsPerMessage":100, "DFIntDefaultBalanceP":7000, "DFIntMaximumUnstickForceInGs":4, "DFIntUnstickForceAttackInTenths":1, "FFlagUseLuaHomePageOnAndroidPhone":false, "DFIntRagdollEarlyExitTimeTenthSecond":20, "DFIntDataRequestInQueueTime":10, "DFIntLandedBalanceP":7500, "DFFlagExternalWakeOtherAssembly2":false, "DFFlagPGSWakeOtherAssemblyForJoints":true, "FFlagEscapeHtmlInDocTabTooltip":false, "FFlagQuantumGuiImplementCircularPageLayout":true, "FFlagLuaAppCancelSearchOnBackButtonPressed":false, "DFIntNumberFramesSubmergedBeforeVSquareBlendFrames":10, "DFFlagUserUseSoundDispatcher":true, "FFlagTighterCylinderBoundingSpheres":true, "DFFlagDebugDisableProjectileOwnershipLock":false, "SFFlagFixRaysInWedges":true, "FFlagStudioStartPageSortSearchAnalytics":false, "DFIntMaxContentProviderRunsAccumulated":20, "FFlagUseLuaGamesPageOnAndroidTablet":false, "DFIntMaxContentProviderRunsPerStep":10, "DFFlagReportSolverUsageStats":true, "DFIntJoinInfluxHundredthsPercentage":100, "FFlagDebugTracebackOptionalCoroutineArg":true, "FFlagStudioScriptPerformanceWidgetRefactor":true, "FIntSmoothTerrainPhysicsCacheSize":16777216, "FIntNavigationAgentMaxDrop":100, "FIntNavigationAgentJumpDistance":7, "DFIntMaxDataStepsAccumulated":15, "FIntNavigationAgentWalkableClimb":1, "FIntNavigationAgentRadius":2, "FFlagUserUseNewClickToMove":false, "FIntNavigationSearchTileOffset":2, "FFlagStudioAnimationEditorMultiSelectEasingOptions":true, "DFIntNavigationJobMaxTimeBudgetMS":100, "FIntNewGameTemplateId":95206881, "DFIntNavigationJobRunsPerSecond":10, "FIntNavigationServicePercentStatsReported":20, "DFFlagNavigationServiceTimingAnalytics":false, "DFStringAssetPurchasePath":"marketplace/purchase", "FFlagStudioFixInsertObjectWindowCrash":true, "FIntFMODSoundChannels":100, "DFIntTextScraperServerMaxBytesPerMessage":100000, "DFIntTextScraperClientDataNBytes":1000, "DFIntMaxAltitudePDStickHipHeightPercent":10, "DFIntMaxAltitudePDHipHeightPercent":100, "FFlagStudioTrackRPCFailure":true, "DFIntNewRunningBaseAltitudeD":346, "FFlagStudioResendDisconnectNotification":true, "FFlagRunningBaseUseNewAltitudePD":true, "FIntDebugInternetSimulatorLatencyMS":0, "DFIntRunningBaseAltitudeD":100, "DFFlagDebugReportAnchoredSimBodyUpdatedFromSolver":false, "FFlagDebugCountSimBodyAllocations":false, "FFlagAppShellReporterMonitorFrameTimeIOS":true, "DFFlagNormalizeForcedLocales":true, "FFlagUseMatrix3ForInertiaTensor2":true, "DFIntPpjPmThreshold":0, "FFlagEnableImageTilingInGUI":true, "FFlagClickDetectorCursorIconEnabled":true, "DFIntBroadPhaseIslandMaxPartLinearFactorTenth":10, "DFFlagDebugStreamingFastRecovery":false, "FFlagStudioAnimationEditorContextPopupMenuScrolling":true, "DFFlagDebugBroadPhaseIslandBufferZoneApplyPartLimit":true, "DFFlagThrowOnCompressionError":true, "FFlagPassDataModelInitializationParams":true, "DFIntRunningBaseMaxAcceleration":5000, "DFFlagDontCallOnMovingAssemblyRoot":false, "FFlagReportAbuseMenuDescriptionFix":true, "FIntNetworkStatRefreshRate":1, "FFlagCSGv2ForceEnabled":true, "DFIntTelegrafTCPPort":8094, "DFIntTelegrafUDPPort":8092, "FFlagPGSSolverDetectHighMassRatiosEnabled":false, "FFlagPGSSolverFileDump":false, "FFlagDebugIgnoreVolumeIsZeroAssert":false, "FFlagHttpReportCacheStatisticsNew":false, "FFlagUseTLSv1_2_a":false, "DFIntHttpCurlDeepErrorReportingCount":0, "DFFlagInconsistent3DChecks":false, "DFFlagHttpCacheCleanBasedOnMemory":false, "DFIntHttpCacheCleanIfGBLessThan":5, "DFFlagRemoveDeadCode":false, "DFIntCreatePlacePerMinute":5, "DFIntHttpCacheCleanMaxFilesToKeep":7500, "DFIntHttpCacheCleanMinFilesRequired":10000, "FStringFriendsOnlineUrl":"/my/friendsonline", "DFStringHttpCurlProxyHostAndPort":"", "FIntHttpCurlMaxCachedHandlesPerHost":16, "DFIntDataStoreInfluxValueSubstringSize":512, "DFIntDataStoreInfluxReportNonParsableDataPerMyriad":10000, "DFIntDataStorelastSetByKeySize":512, "FFlagDataStoreUseLRUCachedKeysV2":false, "DFIntDataStoreSameKeyPerMinute":10, "DFIntDataStoreKeyLengthLimit":50, "DFIntDataStoreMaxKeysToFetch":100, "FFlagXboxUseNewValidUsernameCheck2":false, "FFlagRandomType":true, "FFlagFreeCameraForDevelopers":true, "FFlagPlayerAcceptPlayerScriptsStatus":true, "FStringAnalyticsSessionIdName":"AnalyticsSessionId", "FStringStudioTeamCreateHelpUrl":"https://wiki.roblox.com/index.php?title=Team_Create", "FFlagStudioShowTutorialsByDefault":true, "FFlagStudioAnimationEditorUseStudioThemeAPI":true, "FIntStudioRecentActionCacheSize":25, "FFlagStudioAnimationEditorOptimizeSelection":true, "FFlagStudioAnimationEditorWorldSpaceJointPropertyFix":false, "DFStringSendJoinTimeStatsHundPrecCountryOverride":"CN,5000,US,100,AU,3000,KR,2000,NZ,3000", "FFlagStudioAnimationEditorKeyframeOverwriteWarning":true, "FFlagStudioAnimationEditorLessThanOneSecondUnusableSpaceFix":true, "DFIntDataStoreOrderedGetInitialBudget":10, "FFlagPlaceLauncherConnectGameShutdownSignal":true, "DFFlagDuplicateNotArchivableParts":true, "FFlagStudioAnimationEditorMoveScrubberToSelectedPose":false, "FFlagStudioNativeHttpLayerWrapper":false, "FFlagSurfaceToolOnLockedParts":true, "FFlagStudioAnimationEditorPlayFromBeginningIfAtEnd":false, "DFIntHttpRbxApiMaxRetryCount":10, "FFlagReportInGameAssetSales":true, "FFlagStudioAnimationEditorMultiSelectAreaOffsetFix":true, "FFlagStudioAnimationEditorTimePrecisionFix":true, "FFlagStudioAnimationEditorResetLockedJoints":true, "FIntPGSPStageStiffnessAggressiveValue":99500, "FFlagStudioAnimationEditorDefinedBoundaryNotches":true, "FFlagStudioFLogFlagEditorFix":true, "FFlagAnimationEditorMaxLengthRestriction":true, "FFlagAnimationEditorRigNameFix":true, "FFlagAnimationEditorCreateKeyframesForUndoAndExport":true, "FFlagFix3DMouseScrolling":true, "FFlagAnimationEditorDeleteFix":true, "FFlagAnimationEditorRenameKeyFrame":true, "FIntStudioRightClickMax":700, "FIntPGSBallInSocketCorrectionDamping":10, "FFlagUserNoUpdateOnLoop":true, "FIntStudioCheckTeamServerExistsFrequency":5000, "DFIntMinSoundStreamSizeBytes":512000, "DFStringR15CollisionTypeField":"universeAvatarCollisionType", "DFIntPhysicsDecompSerialVersion":5, "FStringApolloServerUrl":"http://127.0.0.1:8001", "FFlagNavigationUseJumpLinksV3":false, "FFlagFixHandlesMouseEvents":true, "DFIntContentProviderJobDutyCycleMicroseconds":1000, "DFIntResetNetworkFloorAfterNoFloorTenthSeconds":50, "DFFlagResetNetworkFloorOnStates":true, "FFlagDebugGraphicsD3D11DisableDriverThreading":false, "DFIntSwitchFromRunningNoPhysToRunningThresholdInHundredths":4, "DFIntDelaySwitchingFromRunningToFreefallInHundredths":20, "FFlagQuantumGuiFixScalingOfCanvasPosition":true, "DFFlagReduceTrussSearchDistance":false, "DFIntMaxProcessPacketsStepsPerCyclic":5, "DFFlagUserFixCharacterSoundIssues":true, "DFFlagFixFirstPersonSwimmingStateChange":true, "DFFlagHumanoidWithPGSConstraintsUsePhysicsState":true, "FFlagEnableLuaSortTokensManualRefresh":false, "FFlagStudioThrottleCacheScriptIssueReporting":false, "DFFlagDebugAdvancedNetworkedVisualizer":true, "DFIntNumFramesToKeepAfterInterpolation":1, "DFFlagGamePassOwnershipCache":true, "DFIntSimToInterBufferClearFactorTenths":3, "DFIntHopperBinTrackingPermyriad":100, "DFIntMaxAcceptableUpdateDelay":15, "FFlagQuantumGuiFixScrollingFrameCanvasSizing":true, "FIntInterpolationMaxDelayMSec":500, "DFIntRagdollDefaultTimerTenthSecond":50, "DFIntThrottledVelocityThresholdTenths":15, "FIntOutlineBrightnessMax":160, "DFFlagDebugAllowMultiRotationInterpolation":true, "DFIntBgUpdateRedirectsRejectInfluxHundredthsPercentage":0, "DFIntHttpRbxApiRequestsPerMinutePerPlayerInServerLimit":100, "FFlagInterpolationAwareTargetTime":true, "DFIntDataStore429MinReponseTimeMSec":10000, "DFIntDataStoreMaxRetriesPerCycle":6, "DFFlagDataStoresP50":true, "DFIntTattletaleReportUnfilteredJobMaxReportsPerTick":64, "DFIntDataStoreMaxThrottledQueue":30, "DFIntDataStoreWaitOnYieldingRequestsExpiration":2, "DFIntDataStoreBudgetOnCloseBase":150, "DFIntDataStoreMaxBudgetMultiplier":100, "DFIntDataStoreOrderedSetInitialBudget":50, "DFIntPointsServiceBatchingImplOnUpdateDelaySeconds":5, "DFIntDataStoreOrderedSetFixedRequestLimit":30, "DFIntUnstickForceEpsilonInHundredths":1, "DFIntDataStoreInitialBudget":100, "DFIntDataStorePerPlayerRequestLimit":10, "FFlagDebugSSAOForce":false, "DFIntDataStoreFixedRequestLimit":60, "FIntRenderMaxParticleSize":200, "DFFlagInstancePacketCacheUseBitstreamPointerForDirtyState":true, "DFIntDataStoreJobFrequencyInSeconds":1, "DFIntPointsServiceBatchingImplMaxDelaySeconds":30, "FFlagStudioCanSelectMeshPartWhileUIEditorIsActive":false, "DFIntMaxAwardPointsHttpCallsPerMinute":60, "DFIntUS20162":0, "FIntAppBridgePlaceLaunchMaxSleepBetweenRequests":10, "DFIntFriendServiceCachedOfflineStatusMaxAgeSeconds":300, "FFlagEnableNewChatApi":true, "DFIntProbeHttpRequestsPerMinuteLimitZero":10, "FFlagChatServiceSubscribePlayerRemove":false, "DFIntInfluxReportLocalFilterStringPermyriad":500, "DFStringFilterTextSubdomain":"textfilter", "DFStringModerationFilterTextUrlV2":"moderation/v2/filtertext", "FFlagDontTagsMeBro":true, "DFFlagDSPLeakDueToGCofParent":true, "DFIntTattletaleReportUnfilteredJobFrequencySeconds":30, "DFIntGetUserThumbnailExpirationTime":60000, "DFIntTattletaleMaxPendingReports":1024, "DFIntTattletaleFlushIfOlderThanSeconds":300, "DFIntChatServiceCachedResultCount":30, "FFlagFilterStringForBroadcastConsideredPublic":false, "FFlagLuaAppFriendshipCreatedSignalREnabledV355":true, "FFlagPassIsPublicChatOnFilterMessage":true, "DFIntRtl7InfluxHundredthsPercentage":100, "DFFlagHttpZeroLatencyCaching":false, "FFlagStudioFixStartPageThumbnails":true, "FFlagUserInGameChatUseNewFilterAPIV2":true, "DFIntFreeFallOrientationP":100, "DFIntLinearToVSquaredVelocityThresholdMaxTenths":100, "DFIntInfluxOverUDPThreshold":1400, "FFlagStudioPlaceSessionModelGetCurrentSoundJobStudioCrashFix":true, "DFFlagAllowDuplicateWeldConstraintsAnalytics2":false, "DFFlagAllowDuplicateWeldConstraints2":false, "DFIntTrackServerPhysicsPerfSessionNMinutes":10, "FIntRenderTextureManagerBudgetFor4k":0, "DFIntSendJoinTimeStatsToDiag_HundredthsPercentage":0, "DFIntWorldStepDtAveExpFactorHundredth":1, "DFFlagCyclicExecutiveThrottlingCancelWorldStepAccum":false, "DFIntMaxMissedWorldStepsRemembered":16, "DFIntWaitForChildWarnTimeOutTime":5, "DFIntWorldStepsOffsetAdjustRate":100, "DFIntWorldStepMax":30, "DFIntBulletContactBreakThresholdPercent":200, "FFlagFreeCameraForAdmins":true, "FFlagStudioFixUniverseAlwaysRecreate":false, "FFlagJoinTime_HttpQueuePrio":true, "FFlagHttpUseContentCacheFlag3":true, "DFIntTattletaleMinimumClientCountWithoutServerVerification":1, "DFIntSolidFloorPercentForceApplication":100, "DFFlagFavorIPV4Connections":false, "DFStringHttpResultsApprovedUserIDs":"", "DFIntPurchaseErrorReportRate":100, "DFIntBadLogMask":0, "DFIntPpjEtrThreshold":6, "FIntStreamingCriticalLowMemWatermarkMB":15, "FIntStreamingSafeMemWatermarkMB":100, "FFlagDebugShowTextBounds":false, "DFIntClientInstanceQuotaCap":10000, "FIntFontSizePadding":1, "FFlagQuantumGuiUIScaleHandlesPositionOfChildrenOfLayerCollectors":true, "DFFlagPGSSolverIntegrateOnlyPositionsEnabled":false, "FFlagQuantumGuiTextRespectsFrameStyle3":true, "FIntRelayoutRecursionLimit":0, "FFlagSimplifiedAtomicValueFFI2":false, "FIntSettingsHubInviteToGameIOS5":100, "FFlagFixBillboardTextSizeRounding":true, "FFlagRoundInAdorn":false, "DFFlagAdditionalCheckC1_2":false, "DFIntRemoteDelayedQueueLimit":256, "DFIntRakNetUseSlidingWindow2_startInitSpeed":200000, "DFIntSavePlacePerMinute":10, "DFFlagLogGroupTeleportInfluxDB":true, "DFFlagCheckMultipleLoadCharacterCalls":true, "DFIntRunningBaseGravityReductionFactorHundredth":100, "DFFlagEnableTrackingAccessoryDestoyedWithLiveSignals":false, "DFIntStepsToJoin":2, "DFFlagAccoutrementWeldingFilteringEnabled":false, "FIntOptimizedContactOverlapGoalMicro":0, "FIntOptimizedContactWakeDepth":8, "DFIntHighVelocityContactThresholdHundredth":100, "DFFlagContactWakeOnNewContact":false, "DFFlagContactWakeImprovements2":false, "DFStringCrashUploadToBacktraceWindowsRCCToken":"82fc562ca79e6df76a1add3c37aca015601a7326f48d4476fdc37bfe85e44673", "FIntOnContactOwnerBufferTimeCentiSec":300, "DFIntBroadPhaseIslandMaxSortDepth":2, "FIntSettingsHubInviteToGameWindows5":100, "FFlagEnableLuaAppFormFactorAndPlatformV355":false, "FIntMsecBetweenTextureMemoryUsageArrayRefresh":1000, "FIntIntersectingOthersCallsAllowedOnSpawn":5, "FFlagOrientationConstraintPrimaryAxisOnlyFix":true, "DFIntHttpGAFailureReportPercent":1, "FFlagWeldConstraintAdornHighlightConnectedParts":true, "DFIntHttpServiceProbeRateLimit":1000000, "FIntIkDraggerAnchorMode":0, "FFlagSettingsHubInviteToGameThumbnailNoBackground":false, "FFlagDebugEnableRenderCSGTriangles":false, "FFlagFutureIsBrightPhase1_1":true, "DFFlagEnableWakingPGSJointsForNonSolverPrimitives":true, "FFlagEnableGameSignalRWithAllPlatforms":true, "FStringGoogleAnalyticsAccountPropertyLuaTest":"UA-43420590-19", "DFIntHttpInfluxHundredthsPercentage":5, "FStringGoogleAnalyticsAccountPropertyIDLuaShell":"UA-43420590-18", "DFStringRobloxAnalyticsURL":"http://ecsv2.roblox.com/", "FFlagScreenGuiOnTopOfCoreBlur":true, "FFlagDevConsoleOnTopOfCoreBlur":true, "FIntDiabolicalModeLatecyMaxMS":600, "DFIntMaximumFreefallMoveTimeInTenths":1, "FIntDiabolicalModeFailRateDiv10K":3000, "FFlagBgUpdateRedirectsHttpErrBase64Body":true, "DFFlagSoundServiceCleanBuggyTempSoundFilePath":false, "DFFlagUseMomentumThinning":true, "DFIntClientJoinProcessPositiveSamplesThousandths":10, "FFlagPGSOrientationConstraintImproveBehaviorAtTarget":false, "FFlagFutureIsBrightPhase1_2":true, "FFlagFutureIsBrightPhase1_12":true, "FFlagFutureIsBrightPhase1_13":true, "FFlagStudioFixDocHistory2":true, "FFlagDebugRenderForceTechnologyVoxel":false, "DFFlagFindHeaviestDownstreamNew":false, "DFIntDebugClientSvrProfilerCaptTimeOverride":0, "DFFlagStudioTrackPluginButtonSetActiveThrottled":true, "DFIntPhysicsImprovedCyclicExecutiveConsecutivePredictionRequired":2, "FFlagAnthroArtistIntentFBXImporterIntermediateState":true, "FFlagLuaPeopleListContextualListMenu":true, "FFlagStudioClearSelectionExitsAttachmentTool":true, "FIntMaxCameraMaxZoomDistance":400, "DFIntPhysicsDecompForceUpgradeVersion":3, "FFlagCSGLoadFromCDN":false, "FFlagCSGAllowUnorderedProperties":false, "DFFlagFixMeshNormalsForNonUniformScaling":true, "FFlagBoxSelectAttachments":true, "FFlagJoinTime_ThreadedCacheableContentProvider":true, "FFlagStudioThemeSwitchingEnabled":true, "FFlagStudioAnimationEditorColorMoveHandles":true, "DFIntDraggerMaxMoveSteps":10000, "FFlagAndroidShutdownViewFix":false, "DFIntDraggerMaxMovePercent":60, "FFlagDebugStudioRigImporter":false, "SFFlagFixBallRaycasts":false, "FFlagSendJoinTimesToDiag":false, "DFFlagDoesItHalt":true, "DFFlagLockViolationScriptCrash":false, "FIntDiabolicalModeAnalyticsIntervalSeconds":60, "DFIntLuaGcBoost":1, "FFlagStudioAnimationEditorStayActiveWithOtherPlugins":true, "FFlagLuaAppUseImageSets":false, "FFlagDebugScriptContextCoverageEnabled":false, "DFIntHttpResponseDefaultTimeoutMillis":60000, "DFStringRobloxAnalyticsSubDomain":"ecsv2", "FFlagLuaChatContextualMenuTransition":false, "FFlagDebugCrashEnabled":false, "FFlagFixPlayerActionTypeOverride":true, "DFFlagBadgeInfoErrorFix":true, "DFIntHttpSendExtendedTimeoutMillis":600000, "FFlagBadgeReadDisabledFromInfo":true, "DFFlagUseConvertToHex":false, "DFFlagDisableHopperBin":false, "DFIntExternalHttpRequestSizeLimitKB":1024, "FFlagGraphicsVulkanUseNewPacks4":false, "DFFlagDebugDisable180DegreeFlip":false, "DFFlagAnimatorOnSteppedKeepAlive":true, "DFIntExternalHttpResponseTimeoutMillis":30000, "DFIntHttpRbxApiMaxBudgetMultiplier":1, "FFlagPhysicsAnalyzerAnalyticsEnabled":true, "FFlagStudioDebuggerCheckBothTableAndArrayLength":true, "FIntSmoothTerrainMaxCppRegion":67108864, "FFlagDebugCSGExportFailure":false, "FIntSmoothTerrainMaxLuaRegion":4194304, "FIntTeleportMethodAnalyticsHundredthPct":100, "DFFlagInsertServiceLoadFlowSimplification":true, "DFFlagFixCharacterStuckInFreefall":true, "FFlagBuiltInPluginGetPackageAPIEnabled":false, "FIntStudioGamePageHandfulSize":50, "FFlagFixUIScaleTextBlowingUpFontAtlas":true, "DFFlagNewRejoinMessage":false, "FIntKeyframeSequenceInfluxPermyriad":0, "FFlagEnableGuiLayerCollectorResetOnRespawn":true, "DFStringCrashUploadToBacktraceToBacktraceBaseUrl":"http://roblox.sp.backtrace.io:8443/post?format=minidump", "FFlagLuaChatUsesZIndexSibling":true, "DFIntDataStoreCachedKeysMemSize":8388608, "FFlagPluginGuiBindToClose":true, "FFlagPGSSolverDetectUnstableConstraintsEnabled":false, "DFFlagAddInvalidJSONErrorDetail":true, "FFlagThwartPurchasePromptScamsGamepad":true, "DFIntPurchaseMismatchReportRate":100, "DFFlagDebugLaunchTimeByCountryPlaceSpecific":false, "DFIntPhysicsImprovedCyclicExecutivePredictiveThrottlingStepsAhead":20, "DFFlagDebugLaunchTimeByCountryPlaceSpecificAddPlatform":false, "FFlagDelayPurchasePromptActivation":true, "FFlagReportRobuxUpsellEnabled":true, "FFlagEnableWebServerOnStart":true, "DFIntDataStoreMaxPageSize":100, "FFlagStudioAnimationEditorRightClickMenuPositionFix":true, "DFFlagUserPreloadAnimations":true, "FFlagStudioAnimationEditorSaveLoadPopupScaling":true, "FFlagDebugStudioFlagState":false, "FFlagStudioReportRAMUsage":false, "DFFlagAllowClientFallback":true, "DFIntGamePassOwnershipCacheSeconds":10, "DFFlagCheckMarketplaceAvailable":false, "FStringLuaAppsDiagPageLoadTimeGames":"LuaAppsPageLoadTimeGames", "FFlagAnimationEditorScrubbingPlayingMatch":true, "DFStringHttpRbxApiBlacklistedEndpoints":"", "DFIntSendJoinTimeDeltasToDiag_HundredthsPercentage":100, "DFFlagHttpRbxApiWithWhitelistedDomains":true, "DFIntHttpRbxApiSyncRetryWaitTimeMSec":500, "DFIntHttpRbxApiMaxRetryBudgetPerMinute":500, "FIntDebugForceMSAASamples":0, "DFIntStreamJobMaxBufferHealthThresholdHundredths":75, "DFIntHttpRbxApiMaxThrottledQueueSize":50, "DFIntPercentApiRequestsRecordGoogleAnalytics":0, "DFIntPercentSentAlways":50, "FFlagStudioDoNotDeleteLineOnComment":false, "DFIntInitialAccelerationLatencyMultTenths":20, "DFFlagFixMechanismInterpolationOnPlatforms":true, "DFFlagDynamicLocalizationTableDataModelTestingNonProd":false, "SFFlagReplicateInterpolateRelativeHumanoidPlatformsMotion":true, "DFFlagHumanoidScalingFixHipHeightDuplication":false, "DFIntGameIntlApiThrottleHundredthPct":10000, "DFFlagStopStopping":true, "DFIntDataStoreMaxValueSize":262144, "DFIntLocalizationServiceContentLoadErrorHundredthsPercentage":0, "FIntStreamingLowMemWatermarkMB":30, "FFlagLocalizationServiceUseNewTextScraper":false, "DFFlagReportCharacterLoadTimeMetrics2":true, "FFlagAllowLocaleIdForcing":true, "FFlagFixPlayerlistFollowing":true, "FIntLocalizationAnalyticsSamplesPerMillion":50000, "FFlagUseNotificationsLocalization":false, "FFlagDoLocalizationServiceOverrideLocale":false, "FFlagStudioAnimationEditorPoseDragSnapping":true, "FFlagLuaChatAssetCardsSelfTerminateConnection":true, "DFIntProbeHttpRequestsPerMinuteLimitMult":0, "DFIntHttpServiceProbeConcurrentRequests":1000000, "DFIntDebugRestrictGCDistance":0, "FFlagRunningBaseClampAcceleration":true, "DFIntHttpServiceErrorRateLimit":1000000, "DFIntHttpServicePermyriad":0, "FFlagStudioLuaWidgetToolbox":true, "DFIntHttpServiceReportUrlBlacklistedHundredthsPercentage":0, "DFStringHttpBlacklist":"", "DFFlagHttpServiceBlacklist":false, "DFFlagDebugEnableInterpolationVisualizer":false, "DFFlagHttpRbxApiRequestAsync":true, "DFIntHttpServiceMaxConcurrentRequests":500, "FFlagApplyHttpServiceConcurrentRequestLimit":false, "DFIntUserHttpRequestsPerMinuteLimit":500, "DFFlagHttpServiceRequestAsync2":true, "FFlagLoadAvatarEditorTranslations":true, "FFlagUseLuaGamesPageOniPad":false, "FFlagKeyframeSequenceReportInstanceLoading":false, "FFlagKeyframeSequenceIgnoreContainerPoses":true, "DFIntMaxDebugFramesForVisuals":2000, "DFFlagHttpServiceRequestAsyncHeader":true, "FFlagStudioPluginStartDecalDragApi":true, "DFIntDataStoreFetchFrequenceInSeconds":30, "FStringDebugSpoofGameLocaleId":"de-de", "FIntSettingsHubInviteToGameUWP5":100, "FFlagKeyframeSequenceCacheMemoryOptimization":false, "FFlagUseNewStructurePlayerScripts":false, "FFlagKeyframeSequenceEnableFrozen":true, "DFFlagOnlyFireHealthChangedWhenHealthChanges":false, "FFlagStudioAnimationEditorChangePopupStyle":true, "DFFlagFixJointDestroyedPrimitiveInsert2":false, "DFFlagFireHealthChangedLater":false, "FFlagStudioAnimationEditorClipCutoffFix":true, "DFFlagHumanoidSimulateIfWorld":true, "FFlagStudioPreventUnneededScriptSelectionRepaint":true, "DFIntSimilarHipHeightPercentage":50, "DFFlagEnableMeshHeadAttachments":false, "DFFlagEnforceSlaveStateEnabledStatus":true, "FFlagEnableReplaceBodyPartR15":false, "FIntPGSVStageStiffnessWorseFitnessThreshold":2, "DFFlagNPCUnequipTools":true, "DFFlagUserHttpRequestsThrottle2":true, "DFFlagScaleAllAccessories2":true, "FFlagClampCharacterScales":true, "FFlagFixHeadScales":true, "FFlagFixScalingValueReplication2":false, "FFlagCFrameFromMatrix":true, "FFlagFixScalingValueRename":true, "FStringGraphicsVulkanBlacklist":"Meizu", "FFlagUseR15PartsCache2":false, "FFlagStudioGrabWriteLockOnUpdateToolbars":false, "DFFlagServerNotifyPlayerScriptsStatus":false, "DFIntMotionDiscontinuityThreshold":1, "DFFlagFixHeartburn":false, "FFlagStudioStartServerGuestAppearance":false, "DFFlagHandlePlayerBlockListsInternalPermissive":false, "DFFlagTextScraperHasServerMessageLimit":false, "DFIntHumanoidFloorManualFrictionVelocityMultValue":100, "DFIntPointsServiceBatchingImplMinuteSeconds":60, "FFlagLuaDebuggerBreakOnError":true, "FFlagLuaDebugger":false, "DFFlagLocalizationAnalyticsLetterContentOnly":true, "DFStringCrashUploadToBacktraceBlackholeToken":"7705528468a303e4e34a13fbcf9e42e219633ed6868e143e5ab16cd33bd2a069", "DFStringCrashUploadToBacktraceMacStudioToken":"71f38d9e22eac3ed9fdb80607d798f829e051303baa63cb9766e6f2e9d0584d8", "DFStringCrashUploadToBacktraceLinuxRCCToken":"82fc562ca79e6df76a1add3c37aca015601a7326f48d4476fdc37bfe85e44673", "FFlagDebugStudioReenableDeprecatedWebviewToolbox":false, "DFIntDataStoreOrderedGetFixedRequestLimit":5, "DFIntReportCharacterLoadTimeMetricsInverseProbability":1000, "DFFlagCloudEditLogFailuresWithInflux":false, "FFlagStudioAnimationEditorIKMode":true, "FFlagStudioFixCallToAddItems":true, "FIntPGSFrictionUpdatePeriod":4, "DFIntBulletContactBreakOrthogonalThresholdPercent":200, "DFFlagRotationalViscocityEnabled2":false, "DFIntExpireMarketPlaceServiceCacheSeconds":60, "FFlagInitializeBeforeAuthentication2":true, "DFIntTimeBetweenCheckingApiAccessMillis":5000, "FFlagDebugHumanoidRendering":false, "FIntCameraMaxZoomDistance":400, "FIntPartMinSizeMul1000":50, "FFlagUseLargerFontAtlasOn3xDevices":false, "DFIntPartStreamingGCMinRegionLength":2, "DFFlagDebugSimulateHangAtShutdown":false, "DFFlagDebugGameLoadDataStatisticsPerPlace":false, "DFFlagThrottleDeveloperConsoleEvents":false, "DFIntHttpRbxApiJobFrequencyInSeconds":1, "DFIntMemoryPlaceIDReportThreshold":600, "DFFlagTriangleFomatChecks":false, "DFFlagDescendentChangedSignalEnabled":false, "DFIntHttpMaxRedirects":10, "FFlagFixIncorrectHangDetection":false, "DFFlagVerifyWorldInTryFloor":false, "DFIntBadLogInfluxHundredthsPercentage":0, "FFlagHttpHttpAsyncQueue":false, "FFlagConvertMyPlaceNameInXboxApp":true, "FFlagFEForEveryone":true, "DFIntHttpServicePermyriad2":100, "FIntRenderTextureManagerBudget":0, "FIntAppShellMemoryReportInitialDelay":10, "DFFlagUseBitCountLimit":false, "DFIntTattletaleMinimumClientCountWithServerVerification":1, "DFFlagUseHttpsAnalyticsUrls":false, "FFlagStudioSortAndSearchOnStartPageLastUpdatedOption":true, "DFIntWebChatFilterHttpTimeoutSeconds":60, "DFIntPointBalanceCacheInvalidateTimeMs":1000, "DFFlagUseMegaReplicationCaching":true, "FFlagFixCurrentScreenOrientation":false, "DFFlagOrder66":false, "DFFlagDebugDisableLogServiceExecuteScript":false, "FFlagShowConnectionErrorCode":true, "FFlagLuaSearchPageHandlesFailedRequests":false, "FFlagLuaChatNotificationButtonEnabled":false, "FFlagUseNewAppBridgeXbone2":false, "FFlagFixLoadingScreenJankiness":true, "FFlagLoadTheLoadingScreenFaster":true, "DFIntUS20162Permyriad":0, "DFFlagThrottleDebuggerMetrics":true, "FFlagAvatarEditorSliderUIAdjustments":true, "FFlagAvatarEditorCatalogRecommended":true, "FFlagStatUtilsUseFormatByKey":true, "FFlagAvatarEditorRecomputeCameraLookAt":false, "FFlagUrlSupportNewGamesAPI":true, "DFIntAccErrorDrainedThousandth":100, "FFlagAvatarEditorAnthroSlidersUIOnly":true, "FFlagStudioNotReturnStartPageFix1":true, "FFlagNewDefaultScriptSource":true, "FFlagGraphicsVulkanPVRWorkaroundRG":true, "FFlagUseLDLPGSSolver4":false, "FFlagAvatarEditorWhiteLineFix":true, "FStringGetPlayerImageDefaultTimeout":"12", "FFlagShadowBoxFix":true, "FFlagTeamCreateDataStorePerKeyThrottleFixEnabled":false, "FFlagAvatarEditorUsesBrowserWindowCall":false, "FFlagStudioStopLoggingTeamCreateLocalCacheScriptIssues":false, "DFIntNewSettingsEndpointExceptionInfluxPermyriad":10000, "DFFlagFixCutAndUndoAfterSavingCSGUnionToNewFile":true, "DFIntChatSignalMaxCachedRequestMilliseconds":5000, "FFlagTextMeasureTemporaryPatch":true, "FFlagFixTextLayoutWithUIScaleAssert":true, "FFlagTextTruncationEnabled":true, "FFlagLineHeightEnabled":false, "FFlagStudioThumbnailImageRetryUrl":true, "FIntSendScreenOrientationToEventIngestHundredthsPercentage":100, "DFIntChatFilterMaxCachedRequestMilliseconds":5000, "DFFlagRbxFormatMultiByteSizeFix":true, "FFlagShowPlaceholderTextWhileFocused3":false, "FFlagEnableSpecialMeshTransformInVoxelizerDescriptors":false, "DFIntMaxLogHistory":512, "FFlagUseTextLayout5":true, "FFlagInsertInstanceRecommendedList":false, "FFlagEnableDesktopMicroProfilerApi":true, "FFlagXboxUseRobloxInput":false, "DFFlagRaceConditionWithIs3D":false, "FFlagAvatarEditorHideSliderHighlightOnInit":true, "DFFlagSoundPreventRedundantWork":true, "DFFlagWorkspaceNotificationMasterEnable":false, "FFlagStudioFixCtrlShiftF":true, "FFlagFixSurfaceGuisBreakingAfterRespawn":false, "FFlagFixSmallSurfaceGuiMouseInput":true, "DFIntTextScraperClientDataMSecs":1000, "FFlagUseSafeZoneOffsets":true, "FFlagFixStaleBillboardGuiPosition2":true, "DFFlagHandlePlayerBlockListsInternalStrict":false, "DFFlagDeferTerrainUpdate":false, "FFlagRecalculateAbsolutePlacementFix":true, "FStringStudioTutorialsSeeAllUrl":"https://wiki.roblox.com/index.php?title=AllTutorials", "FFlagDebugPrintGuiStateTransitions":false, "FIntFriendServiceCachedOfflineStatusCount":256, "DFStringCrashUploadToBacktraceMacPlayerToken":"24cb37449e120c3a0618b1bf0585e339571828cae4dc73c7b8c99f67fcd751e9", "FFlagCSGv2FixOrientationWhenSeparatingNegates":true, "FFlagUseLuaAppStarterScriptOniOS":false, "FFlagAvoidFindFirstChildCallsInGuiBase2d":true, "FFlagStudioClearStartPageOnPlaceLoad":true, "FFlagUserNoCameraClickToMove":true, "DFIntPpjLeak":10, "FStringDebugShowFlagState":"", "SFFlagBodyColorsColor3PropertyReplicationEnabled":false, "FFlagUserNewPoppercam":false, "FIntPGSAlignmentConstraintsMaxCorrectiveAngle":3, "DFFlagDistributeNetworkOwnershipServeronly":true, "DFIntCrashUploadToBacktracePercentage":10, "DFFlagFixInsaneInTheCFrameReplication":true, "DFFlagInsaneInTheCFrame":true, "DFIntDistToShowBufferCountSqr":0, "DFFlagShowBufferCount":false, "DFFlagPartInstanceCofMPropertyExposed":false, "DFFlagFixTinyMeshScales":false, "FFlagVideoDocumentationPluginEnabled":true, "FFlagEnabledAppShell3D":true, "DFFlagUWPReportTimeToFetchSettings":true, "FIntLuaChatPlayTogetherThrottleAndroidTablet3":0, "FFlagLuaChatPerformanceTracking":true, "DFFlagFixCheckSeatTransitionEnabled":false, "FFlagKeyframeSequenceApplyZeroWeight":true, "FFlagFixVRScrollingFrames":false, "FIntReleaseEventStreamThreshold":10, "FFlagFixBoundSocket":false, "DFFlagHttpAnalyticsType":false, "DFIntHttpServiceProbeCapLimit":1000000, "DFFlagDataStoreAutoHttpRetry":false, "DFFlagAnalyticsDeferredEventIngestShutdown":true, "DFIntAnalyticsMaxSendWaitTimeMs":1500, "FFlagDebugDisplayFPS":false, "FIntStudioUserNotificationMinReconnectTimerMs":1000, "FIntDebugInternetSimulatorLatencyVariance":0, "DFIntTextFilterMaxCachedRequestMilliseconds":500, "FFlagStudioRobloxIDEDocDeleteThisFix":false, "FFlagUseNewGoogleAnalyticsImpl2":true, "FFlagNewABTestingEndpoint":false, "DFIntRenderingThrottleDelayInMS":0, "FStringLuaErrorsInfluxSeries":"LuaShellErrors", "DFFlagCloudEditGARespectsThrottling":false, "DFIntTexAtlasUpdateLineHeight":150, "DFFlagNewHttpAnalytics":true, "DFFlagAdditionalCheckC0":false, "DFIntWebParserInfluxWriteNanInfPerMyriad":1000, "DFIntNonSolidFloorPercentForceApplication":10, "FFlagDebugGraphicsIntelCrash":false, "FIntScriptAnalyzerIgnoreWarnings":0, "DFIntNumberFramesSubmergedBeforeVSquaredViscocity":32, "FStringSettingsHubInviteToGameThumbnailType":"", "DFFlagPartyPooperSecurity":false, "DFIntHttpConnectExtendedTimeoutMillis":600000, "FFlagPGSAlign2AxesInitBasis":true, "FFlagLuaChatPlayTogetherUseRootPresence":false, "FFlagLuaHomeControlNativeBottomBar":false, "FFlagStudioAutocompleteStopLosingModuleScriptDataOnClose":false, "FFlagLuaChatSearchFeedBack":false, "FIntPGSInsideOfSpherePenetrationResolutionDamping":7, "FFlagDataModelForwardForceLocaleIds":true, "DFIntLogGroupTeleportInfluxPerTenThousand":1000, "DFFlagAnchoredSendPositionUpdate":false, "DFFlagGroupTeleportMetricsByGroupSizeV2":true, "FFlagStudioEnableCollisionGroupsEditorPlugin":true, "DFFlagTeleportPartyAsyncEnable":true, "DFIntConnectionMTUSize":0, "FIntStudioTreeWidgetProcessingTime":100, "FFlagUseOptimizedGetPartsObscuringTarget":true, "FFlagStudioUpdateLastDirForSaveAsLocalPlugin":true, "FFlagLuaChatGroupChatIconEnabled":false, "DFIntTeleportPollinInterval":1000, "DFIntMaxViscousForceGravityTimesMult":100, "FFlagStudioAnimationEditorSetIntervalFix":true, "DFIntShowTeleportFailedMessageTimeInMillisecond":3000, "FFlagLuaUseWebPageWrapperForGameDetails":false, "FFlagHoverAndPressedTextureSwap":true, "DFFlagInfluxEnabled":true, "FFlagSettingsHubPlayersHorizontalScroll":true, "DFFlagFilterAllPlayerPropChanges":false, "DFStringNewClientSettingsServiceHost":"clientsettingscdn", "FIntStudioClientPresenceUpdateInterval":120, "FFlagConnectionScriptEnabled":true, "FFlagForceSetSizeOfErrorPrompt":true, "FFlagLazyCreateErrorPrompt":true, "FFlagStudioComponentRoundingFix":false, "FFlagFixPgsState":true, "FFlagReportAutoJointsModeJoinAll":false, "FFlagFixScrollbarNotBeingDraggableWithUIPadding":true, "FFlagExplicitAutoJointsForced":false, "DFFlagCloudEditSaveFailureExtraInfo":false, "FFlagExplicitAutoJointsDefault":false, "FFlagScriptContextSearchFix":true, "DFIntGetUserThumbnailMaxThrottle":20000, "DFIntPhysicsImprovedCyclicExecutiveThrottleThresholdTenth":8, "DFFlagLimitDepenetrationSpringStrength":false, "DFIntProbeHttpRequestsPerMinuteLimit":1000, "DFStringAdditionalBlacklistHeaders":"SOAPAction", "FIntPercentReportingGamesListRTT":2, "FFlagLuaAppGamesPagePreloadingDisabled":false, "DFFlagNullCheckInReEnableWeldConstraint":true, "FFlagStudioTutorialSeeAll":true, "DFIntElevatedPhysicsFPSReportThresholdTenths":585, "FFlagQuantumGui2":true, "DFFlagLuaStrlibLimitMatchDepth":true, "FFlagNavigationFixShutdown":true, "FIntStudioMaxCommandHistorySize":50, "FFlagInGameUIForceDefaultLocaleOnWin32":true, "FFlagUserPortraitPopperFix":false, "FFlagStudioRecomputeFoldState":true, "DFFlagProtectNullRakPeer":true, "DFFlagDebugReportElevatedPhysicsFPSToGA":true, "DFIntHttpReportCacheStatisticsThreshold":32, "DFIntHttpNewHundredthsPercentage2":0, "FFlagStudioReportNewMeshUploaded":true, "DFFlagPreventReturnOfElevatedPhysicsFPS":true, "FIntPGSPenetrationResolutionDamping":7, "FStringLuaAppsDiagErrorCounter":"LuaAppsErrorCount", "DFIntInfluxTattletaleReportCommunitySiftOutputPermyriad":0, "FFlagPackagesEnabled":false, "FFlagStudioUseNewAPIsForInsertObjectWindow":true, "FIntNumDummyJobs":0, "SFFlagRemoveDistributedPhysicsBool":false, "DFFlagServerGenPlayerXboxFixTag":true, "FFlagLuaMathLibUseNewRNG":true, "DFFlagDontSuggestUndoingPgs":false, "DFFlagDebugThumbnailForceFailure":false, "DFIntReportTeamTestFailurePermyriad":100, "DFIntGetUserThumbnailMapSizeCap":500, "DFFlagSmootherVehicleSeatControlSystem":true, "FIntDiabolicalModeLatecyMinMS":300, "FFlagRecordInGameDeaths":false, "FStringServerConfigCloudEditServerSaveUrl":"/ide/publish/UploadFromCloudEdit", "FFlagLuaAppRemoveGetFriendshipCountApiCalls":false, "FFlagStudioDisableTabOnClose":false, "DFIntGetUserThumbnailAsyncThrottleTime":3, "FFlagArrowByGraphemesInTextbox":false, "DFIntHttpServiceReportUrlHundredthsPercentage":0, "FIntSettingsHubInviteToGameAndroid5":100, "DFFlagThrottleGetUserThumbnailAsync":true, "FFlagWeCanTouchTapInTheWorldNowNice2":true, "FFlagUsePurchasePromptLocalization":false, "FFlagPGSAdaptiveCollisionMarginFixEnabled":false, "FFlagFixPreferredSoundDeviceVR":false, "DFIntGetUserThumbnailAsync2ThrottleCountPerMinute":500, "DFFlagDebugMechanismInterpolationWorldSpace":false, "FFlagStudioScriptDocLocationDataContentsAboutToChangeCrashFix":true, "DFFlagThrottleGetUserThumbnailAsync2":false, "FIntSettingsHubInviteReleaseStreamTime":10, "FFlagPassUserLocaleOnFilterMessage":true, "FFlagForceSaveSelection":false, "FFlagCSGv2SnapPlanes":false, "DFFlagGiveControlToFFlagThatSwitchesSolverControl":true, "FIntStudioPlaySoloGuestCharacterAppearance":15437777, "FFlagCoreScriptTranslateGameText2":true, "DFFlagCLI15496":false, "FIntLuaAppNonFinalThumbnailMaxRetries":3, "FIntPGSGyroscopicEffectPrecisionPercent":5, "FIntStudioStartServerGirlGuestCharacterAppearance":15437741, "FFlagBackpackScriptUseFormatByKey":false, "FIntStudioStartServerBoyGuestCharacterAppearance":15437777, "FFlagEnableGameSignalRWithWindows":true, "FIntPercentReportingByCountryCode":100, "DFFlagFixCharacterAppearanceLoadedEvent":true, "DFIntWideToNarrowScaleInHundredths":0, "FFlagStudioFixShareForU13":true, "DFIntAnthroPercentInHundredths":0, "DFFlagDebugPrintLagServer":false, "DFIntTeleportPartyExpirationMillisecond":180000, "FFlagStudioScopedWidgetDisabler":true, "FFlagEnableGetAvailableForExperimentAPI":false, "FFlagFixGuiStateTransitions6":false, "DFIntRandomSpawnRetryTimes":20, "FFlagStudioUseSingleStyleSheet":true, "DFFlagGoodbyeChoiceActiveProperty":true, "DFIntDataStoreOrderedSetPerPlayerRequestLimit":5, "DFFlagGetTeamLazyEvaluation":true, "DFIntRunningBaseOrientationP":100, "DFIntHumanoidFloorTeleportWeightValue":50, "FFlagBorderSizeRespectUIScale":true, "DFFlagHttpNew2":false, "DFFlagHttpReportStatisticsNew":false, "SFFlagSendPlayerGuiEarly2":false, "DFIntDataStoreTouchTimeoutInSeconds":5, "FFlagDontLoadCoreScriptsFromRenderScheduler":false, "DFIntHttpStudioInfluxHundredthsPercentage":1, "DFIntTextScraperServerDataQSize":128, "DFFlagDebugHttpSyncCallsForStatsReporting":false, "FFlagScriptFullNameOnHover":false, "FFlagStudioTeamCreateDisconnectRetryTimeoutSendThrottlingEvent":true, "DFFlagPlayerGeneratedOnTheServerNoBacksies":false, "FFlagHttpTrackSuccessfulUrls":false, "FFlagR15ToArtistIntentAssetMigratorEnabled":false, "FIntStudioAutomaticScriptRecoveryManagerTimeout":5000, "DFIntHttpGAFailureReportHundredthsPercent":1, "DFFlagUseCombinedAnimationEvent":true, "FFlagAnimationEditorSnapIncrementsDivideByZeroFix":true, "DFIntReportInfluxHundredthsPercentage":0, "FFlagSplitTypesetter3":true, "DFFlagRCCKickDuplicatePlayersOnJoin":true, "DFFlagFixFreefallStuckIgnoreSelfContact":true, "FFlagDebugRenderDisableWangMobile":false, "FFlagCSGv2InGameEnabled":true, "FFlagUseNonCollidableRootR15":false, "FFlagDebugGraphicsDisableVulkan":false, "DFIntSecondsPerBatchAwardPointsCall":10, "FFlagLuaHomePageEnablePlacesListV1V356":false, "FFlagNotificationScript2UseFormatByKey":true, "DFFlagSendClientNewJoinData":true, "FStringHttpRequestImplType":"", "FIntNewDevConsoleMaxGraphCount":30, "FFlagStudioUpdateAddRemoveTeamCreateWebEndpoints":true, "FFlagStudioAnimationEditorScaleKeys":true, "DFIntDataStoreOrderedGetPerPlayerRequestLimit":2, "FFlagUserIsNowADynamicThumbstick":false, "FFlagHttpSkipQueueIfCached":true, "FFlagUserEnableDynamicThumbstickIntro":false, "FIntFixForBulkPresenceNotifications":0, "FFlagXboxUseNewBundleEndpoints":true, "FFlagUseAdvancedCharacterScales3":true, "DFIntConnectReportPermyriad":0, "DFFlagDefaultArtistIntentJoints":false, "FFlagUseAccuratePlaySoloForced":false, "FIntXboxGameDetailsRefreshInterval":1800, "FStringAnthroStandardPartIds":"532219986;532219997", "DFFlagTrackHopperBinUsage2":true, "DFIntPartSizeUnder0P2AnalyticsInfluxHundredthPct":100, "FStringXboxSaleAvatarPackageIds":"", "FFlagXboxUseNewGamesEndpoints":false, "DFIntLandedBalanceD":50, "FFlagXboxUpdateBadgeEndpoints":false, "DFIntAnalyticsMaxShutdownWaitTimeMs":100, "FFlagQuantumGuiTemporaryLoadingScreenFix":true, "DFFlagGetJoinDataEnable":true, "DFIntStreamingMemoryUsagePercent":50, "FStringGetUserIdUrl":"users/get-by-username?username=%s", "DFIntApiRateLimit":200, "FFlagXboxUseCuratedGameSort2":false, "FStringBgUpdateRedirectsDisable":"", "FFlagStudioFixTimingOnPluginDockWidget":true, "FFlagStudioUpdateProgressDontPumpEventLoop":true, "DFIntAnalyticsDeferredEventIngestReportingIntervalSeconds":30, "FFlagXboxRoduxScreenFocus":false, "DFStringDataStoreThrottleMsg":"DataStore request was added to queue. If request queue fills, further requests will be dropped. Try sending fewer requests. Key =", "FFlagPhysicsAnalyzerUsed":true, "FFlagEnableQuickGameLaunch":false, "FFlagEnableLuaGamesListSortsFix":false, "DFIntSpecialFill":0, "FFlagEnableLoadingHUDOniOSForGameShare":true, "DFIntAnalyticsMaxEventIngestPostArrayLength":900, "DFIntSolidFloorMassMultTenth":50, "FFlagFixMissingStandardAnthroParts":false, "FFlagRemoveLoadingHUDOniOS":true, "FFlagStudioAddStackedWidgetForMainView":true, "FFlagPGSOrientationConstraintAngleComputationFix":true, "FFlagAppShellReporterMonitorFrameTimeAndroid":false, "FFlagUseLuaGamesPageOnAndroidPhone":false, "FIntStudioInsertDeletionCheckTimeMS":30000, "DFIntTattletaleMaxInstancePathLength":512, "FFlagUseLuaHomePageOnAndroidTablet":false, "FFlagLuaCorrectContextualMenuPosition":false, "DFIntLatencyErrorMultiplierTennths":20, "DFFlagReplicatorFixBadPacketSnprintf":true, "FIntLuaHomeMaxFriends":9, "FFlagLuaHomePageFriendWindowing3":false, "DFFlagUseUNSPEC1":false, "FFlagFixMouseServicePropChanges":true, "FIntWeldConstraintAdornSize":10, "DFIntLuaGcMaxKb":100, "DFIntRCCInfluxHundredthsPercentage":1000, "DFFlagNamesOccludedAsDefault":true, "DFFlagStudioApplyScriptEditsWithoutGivingUpLock":true, "FFlagLuaAppPeopleListV1":true, "FFlagUseLuaGamesPageOniPhone":true, "DFIntPlaceLauncherExceptionInfluxHundredthsPercentage":0, "FFlagLocalizationTableImportStrict2":false, "FIntFRMRecomputeDistanceFrameDelay":100, "FFlagStudioMaximizeButtonForAllDockWidgetsEnabled":false, "FFlagUseLuaHomePageOniPhone":true, "DFIntBroadPhaseIslandAlwaysSimulateDepth":1, "DFStringTelegrafAddress":"ec2-54-165-151-168.compute-1.amazonaws.com", "DFIntMaxDataPayloadSize":96000000, "FFlagUseLuaHomePageOniPad":false, "DFStringHttpInfluxDatabase":"prod", "DFStringDefaultCustomAnimationType":"True", "DFFlagPlayHereFix":false, "FFlagDebugNavigationDrawNavMeshConnections":true, "FFlagGuestFriendCheckFailImmediate":true, "FFlagStudioEnableLuaAPIsForThemes":true, "FFlagPassDataModelDPIScale":true, "FFlagDebugNavigationDrawEnable":true, "FFlagLuaAppRemoveFitScrollingFrameFromCarousel":true, "DFFlagFixCustomWeldSeatPart":true, "FFlagFixInactiveSelectorArrows":false, "FFlagStudioReportAllApplicationLocationsOnCrash":false, "FIntPercentReportingGamesSortsRTT":20, "FFlagLuaAppUseRequestInternalWrapper":false, "DFIntHttpRbxApiMaxSyncRetries":3, "FFlagLuaAppRefreshScrollingFrameRefactor":true, "FFlagLuaHomePageShowFriendAvatarFace150By150":false, "FFlagFixBindActivateStackOrderCAS":true, "FIntNewDevConsoleMaxLogCount":500, "FFlagEnableNewDevConsoleDataOnInit":false, "FFlagStudioStartPageAnalyticsFinalFix":true, "DFIntExternalHttpResponseSizeLimitKB":4096, "FIntLuaChatPlayTogetherThrottleiOSPhone3":0, "FFlagDonotAllowTeleportInRobloxStudio":true, "FIntStudioMaximumPasswordLength":1000, "FFlagLuaChatCheckIsChatEnabled":false, "FFlagStudioUseNewAPIsForScriptColors":true, "DFFlagPrepareClientForNewJoinData":true, "FFlagLuaChatFlexibleTitleWidth":false, "DFIntDebugProfilerFramesToCapture":60, "FIntStudioWebDialogMinimumHeight":480, "FFlagLuaChatIcebreaker":false, "FFlagLuaChatReplaceAvatarBorderAndBackground":false, "DFStringCustomAnimationTypeAllow":"True", "FFlagLuaChatActiveConversationId":false, "FFlagLuaChatFixAssetCardResizeTruncation":false, "DFIntScriptContextShutdownTimeoutSeconds":30, "FFlagLuaChatLoadGameLinkCardInChatAnalytics":true, "DFFlagFixSloppyWeakPtrs":true, "FFlagLuaChatToastRefactor":false, "DFStringDeveloperProductPurchasePath":"marketplace/submitpurchase", "FFlagLuaChatReplacePresenceIndicatorImages":false, "FFlagUserAllCamerasInLua":true, "FFlagStudioDoNotEndBlockForFunctionArgs":false, "FFlagLuaChatSortFriendsForConversation":false, "DFFlagDebugSimulateHangAtStartup":false, "DFFlagSpecificGravityDummyFunctionGA":true, "FFlagStudioABTestFramework":false, "FFlagLuaChatCreateChatUserScrolling2":false, "DFIntWaterViscosityDragFudgeFactor":10, "FFlagHarfbuzzEnabled5":true, "FFlagLuaChatUseCppTextTruncation":false, "FFlagCSGLoadBlocking":false, "FFlagPGSAlwaysActiveMasterSwitch":false, "DFIntHttpResponseExtendedTimeoutMillis":600000, "DFIntAnalyticsDeferredEphemeralReportingIntervalSeconds":30, "FFlagRestrictSales2":false, "SFFlagUseNativePathWaypoint":true, "FFlagLuaChatRefactoredChatInputBar":true, "FFlagStudioUseAccuratePlaySoloAnalytics":true, "FFlagFixG3DFpChecks":true, "FFlagLuaChatShareGameToChatFromChat":false, "FFlagStudioTeamCreateAllowTakingLockFromInActivePlayerFix":true, "FFlagAvatarEditorUseNewR15Model":true, "DFFlagSendFrameTimeBreakdowns":true, "FFlagEnableAEAndroidBackButton":true, "FFlagUseNewAELoadTimeMetrics":false, "FFlagNoCacheForLocalContent":false, "DFFlagDebugDisableAngularVelocityInterpolationComponent":false, "DFFlagStreamCountClustersInClientQuota":false, "DFFlagThisJointAintBigEnoughForTheTwoOfUs2":false, "FFlagAvatarEditorSelectivelyUseDefaultAsset":true, "DFIntTouchPermyriad":0, "FIntHttpInfluxClientExceptionStatusCode":0, "FFlagAvatarEditorDefaultTabSelection":true, "FFlagRenderIC1BouncingEnabled":true, "FFlagLuaAppLegacyInputDisabledGlobally2":true, "DFIntHttpSendStatsEveryXSeconds":300, "FFlagLuaUseUtf8TextTruncation":true, "DFIntPGSJumpForceAdjustment":520, "DFIntCrashUploadArchiveAfterErrorsDelaySeconds":86400, "FFlagEnableResponsiveUIFix":true, "FFlagLuaChatAddToStringWhenUpdatingPresence":true, "FIntDebugNavigationMaxMemoryUsageInBytes":52428800, "FStringSettingsHubInviteToGameThumbnailSize":"Size150x150", "DFFlagEnableMeshHeadNative":false, "DFIntActionStationDebounceTime":2, "DFIntHttpRbxApiRequestsPerMinuteServerLimit":300, "FFlagDebugAnalyticsForceLotteryWin":false, "FStringStudioGameSettingsExperimentalModeToolTip":"When turned on, the game server is not authoritative of changes, meaning that LocalScripts on clients can take any arbitrary actions they like. It is highly recommended to turn off Experimental Mode before opening a game to the public.", "DFIntDataStoreRefetchPerPlayerRequestLimit":5, "DFFlagFileSystemGetCacheDirectoryLikeAndroid":false, "FFlagEnableLocalizationForToolbox":false, "DFFlagAllowJoinsToWait":true, "FFlagFriendPlayerPromptUseFormatByKey":false, "FFlagLuaAppEnableStopWatchReporter":false, "FFlagFixTextAsserts5":true, "FIntStudioUserNotificationReconnectTimerIncrementMs":5000, "FIntPGSAlign2AxesCorrectionDamping":10, "FIntWeldConstraintAdornHighlightedPartSize":2, "FIntZoomOutDistance":500, "FFlagStudioSortAndSearchOnStartPageV2":true, "FFlagLoadingScreenUseLocalizationTable":true, "FFlagFixUsersReducerDataLoss":false, "FFlagEnableNewDevConsole":true, "DFIntDataStoreRetryWaitTimeMSec":500, "DFFlagAllowTeleportsToWait":false, "FFlagEnableLuaEventStreamRelease":true, "FFlagSafeScalePartFail":true, "FFlagStudioPreventScriptDocDoubleOpening":true, "FIntStudioAutocompleteNumMaxLineForParamSearch":10, "FFlagFreeCameraAPI":true, "FFlagTextBoxOverrideManualFocusRelease":false, "FFlagIWannaBeTheVeryBestThumbstick":false, "DFIntLimitReplicatorState":0, "FFlagFixGamepadNavigationInVR":true, "DFIntGettingUpBalanceP":2250, "FFlagPGSConstraintConeLimitFix":false, "FIntLuaChatPlayTogetherThrottleiOSTablet3":0, "SFFlagTerrainRaycastsRespectCollisionGroups":false, "FFlagEnableLoadingScreenPlaceIconTween":true, "FIntGoogleAnalyticsLoadLuaShell":1, "FFlagAdvancedMouseSensitivityEnabled":true, "DFIntTextScraperServerDataNBytes":1000, "FFlagEnableGameSignalRWithAndroid":true, "FIntStudioMeshPartScaleValue":5000, "FFlagAvatarEditorRoactRewrite":true, "FStringStudioTutorialsDevHubUrl":"https://www.robloxdev.com/learn-roblox/studio-basics", "DFStringCustomAnimationField":"allowCustomAnimations", "FFlagChatServiceAnalyticsOnFilterStringCalls":true, "DFStringAvatarJointPositionsArtistIntent":"ArtistIntent", "DFIntBgUpdateRedirectsHttpErrInfluxHundredthsPercentage":100, "DFIntNetworkStreamingGCMaxMicroSecondLimit":4000, "FIntAppBridgePlaceLaunchExponentialBaseFraction":3, "DFIntSoundServiceCacheCleanupMaxAgeDays":7, "FFlagDisablePlayerScriptWhenDisconnected":false, "FFlagStudioPatchOpenedScripts":false, "DFIntR15DefaultCollisionType":0, "DFIntRunningBaseAltitudeP":3000, "FFlagImprovedAutoJump":false, "FFlagStudioIndentIfLineEndsWithFoldEnder":false, "DFIntOnCloseTimeoutInSeconds":30, "FIntInGameGlobalGuiInset":36, "FIntStudioUserNotificationMaxReconnectTimerMs":50000, "DFIntMaxDataPacketPerSend":1, "FIntGamePerfMonitorReportTimer":99999999999999999999999, "FFlagImporterUseAnthroProportions":false, "FFlagStudioInsertObjectMenuButton":false, "FIntPGSPenetrationMarginMin":100, "FFlagCoreScriptsUseLocalizationModule":true, "FFlagContentProviderTempDirWithPid2":true, "DFIntContentProviderThreadPoolSize":16, "FIntPhysicsBulletManifoldPoolSize":1024, "DFIntRakNetResendMaxThresholdTimeInUs":2000000, "FFlagCallPlaceLauncherFromMainThread2":true, "DFIntLinearToVSquaredVelocityThresholdMinTenths":20, "FFlagMemoryFromAppShellReporterAndroid":false, "FFlagStudioMoreRPCLogging":false, "DFFlagUploadPlaceNoStream":false, "DFFlagNoDSPOnServer":true, "DFFlagBadCoreScriptCrashFixEnabled":true, "FFlagStudioRemoveDuplicatesInRestoreStateQtFixEanbled":true, "FIntAppShellMemoryReportPeriodicity":120, "DFIntTextSizeLimit":16384, "FIntAppShellFPSReportPeriod":120, "FFlagDatamodelServicesConnectionFix2":true, "DFFlagPhysicsSkipNonRealTimeHumanoidForceCalc":false, "FFlagEnableGameSignalRWithUWP":true, "FFlagHarfbuzzEnabledInGame":true, "DFIntHttpRbxApiClientPerMinuteRequestLimit":300, "FFlagLuaChatPlayTogetherJoinGameInstance":false, "FFlagStudioShortcutDuringGameDefaultFalse":false, "DFFlagUWPAlsoFetchSettingsFromNewEndpoint":true, "FFlagImageHandleAdornUseGuiImage":true, "DFIntGlobalLeak":100000000, "DFFlagReportClientMemoryCat":true, "FFlagStudioPublishScriptsBeforeTurnOffTeamCreate":true, "FFlagPlaceLauncherSetCurrentGameEntryOnceOnTeleport":true, "FFlagJoinTime_LocalUserTexturePriority":true, "FFlagUIShiftScrollHorizontal2":true, "FFlagAutocompleteRefactorAssertFix":false, "FFlagWebkitDeveloperToolsEnabled":false, "FFlagTextTruncationEnabledInGame":true, "DFIntDataStoreMaxRetryCount":5, "FIntStreamOutCompressionIdListLengthThreshold":250, "DFIntPacketErrorInfluxHundredthsPercentage":10000, "FFlagTextBoxManualFocusRelease":true, "FFlagEnableGameSignalRWithOSX":true, "FFlagDebugNavigationDrawTileBounds":false, "FIntRakNetDatagramMessageIdArrayLength":512, "FFlagLogClientLoadToAvatarLoad":false, "DFIntTeleportExceptionInfluxHundredthsPercentage":9000, "DFIntTeleportRetryTimes":5, "DFIntMadnessPermyriad":0, "FFlagSystemErrorMessageLocalize":false, "DFIntDataStoreRefetchFixedRequestLimit":30, "DFStringCopyrightKey":"RBX-Content-Protected", "FFlagStudioTeamCreateWidgetBottomButtonClickCrashFix":true, "DFIntMinimumFreefallMoveDistanceInTenths":5, "FFlagStudioWorkspaceFilteringEnabledOnNewPlaces":false, "DFIntStudioPercentScaleRepeatCount":140, "FIntPGSVStageStiffnessConservativeValue":99000, "DFFlagInfluxOverTCP":false, "FIntAppBridgePlaceLaunchMaxTotalSleepTime":0, "FIntAppBridgePlaceLaunchMaxRetries":5, "FFlagShareOnStartPageAnalyticsFixV2":false, "FFlagFixInputCanSinkCAS":true, "FFlagStudioFixBindToCloseOnDm2":false, "DFIntDynamicLocalizationTablesDataTimeout":5, "DFIntUserHttpRequestsPerMinuteLimitZ":2000, "FFlagStudioUseNewThemeAPIsInStudioCode":true, "DFIntSendHttpBodyOnFailureMaxBytes":128, "DFFlagSafeSwimmingJump2":false, "FFlagCSGUnionsSizeShouldNeverBe000":false, "FFlagSettingsHubInviteToGameInStudio4":true, "DFStringCrashUploadToBacktraceWindowsPlayerToken":"417ecb0fbc032ce087e6af3b780c298e3356089f050c8130d2318109e80417a4", "FFlagClientFireEventPlaceLauncherFail3":true, "FFlagResetMouseDeltaFix":false, "FFlagDebugRenderDragAxis":false, "DFFlagNavigationServiceAnalytics":true, "FFlagStudioDefaultAPSOn":true, "DFStringLocalizationServiceOverrideLocale":"es", "FFlagFixLineHandleAdornmentsNearPlane":true, "FFlagDebugStudioUseModelPublishAsPackagePublish":false, "FFlagQuantumGuiEnabledInApp":false, "FFlagStudioBetterRBXMessageBox":true, "DFFlagUseHttpDefaultUrlSchema":false, "FIntXboxPresencePolling":120, "FFlagStudioTabCloseButtonObjectName":true, "FFlagRakNetSupportIpV6":false, "FFlagStudioPreventPluginSettingsCorruption":false, "FFlagCSGv2UseImprovedSphereAndCylinder":true, "FIntDiabolicalModeEnable":0, "FFlagEnableGameSignalRWithiOS":true, "FFlagAdjustHipTranslationBasedOnHipHeight":false, "FFlagUserNavigationFixClickToMoveJump":true, "FFlagStudioAsyncLambdaCallbackWithQPointerThisFix1":true, "FStringPerformanceSendMeasurementAPISubdomain":"www", "FFlagTestForBadNormal":false, "FFlagLuaChatNewPageSlidingTransition":true, "FFlagHarfbuzzEnabledInApp":true, "FIntHttpCacheRedirectsTimeoutMs":30000, "FFlagAvatarEditorUseArtistIntentFolder":true, "FFlagUseSortForClient":false, "FFlagRenderConstraintsWithDepth":false, "DFIntInfluxTattletaleV2Permyriad":10000, "FFlagRefactoringAvatarEditorSetup":false, "FIntSpeedTestPeriodMillis":1000, "DFIntCreatePlacePerPlayerPerMinute":1, "FIntStudioLongCacheRecoveryTime":3600, "FFlagStudioBulkImportAlpha":false, "DFIntInsertServiceErrorInfluxHundrethsPercentage":0, "FFlagServerGeneratesPlayer4":false, "FFlagStudioAddLinkedAssetsFolder":false, "DFIntOnDisconnectHTTPTimeout":2000, "FFlagStudioUseLuaGameSettingsDialog":true, "FFlagStudioFixPackageDuplicationInRGE":false, "FFlagUseSelectionServiceToShowScriptInExplorer":false, "FIntStudioStopOSXReportingForOSAtAndBeforeMinor":8, "FIntStudioStopWindowsReportingForOSAtAndBeforeMinor":0, "FIntCLI20390":20, "DFFlagAlternateScalingForNativePartsV3":false, "FIntStudioStopWindowsReportingForOSAtAndBeforeMajor":6, "FIntPGSPenetrationMarginMax":50000, "DFIntNumFramesAllowedToBeAboveError":10, "FFlagDisconnectUseConnectionErrorCode":false, "DFIntNewRunningBaseAltitudeP":30000, "FFlagSolverHotSwappingEnabled2":true, "DFIntBadgeInfoCooldownTime":5, "DFIntBulletContactBreakOrthogonalThresholdActivatePercent":200, "DFFlagUseDeltaForFBAdorn":false, "DFFlagGroupTeleportMetricsSuccessAndFailure":true, "FFlagAddEndedSignalToSoundJobStudio":true, "FStringStudioTutorialsTOCUrl":"https://wiki.roblox.com/index.php?title=Studio_Tutorials_Landing&studiomode=true", "FStringLuaAppsDiagPageLoadTimeHome":"LuaAppsPageLoadTimeHome", "FFlagDoNotDeleteSelectionOnTab":false, "DFIntBroadPhaseIslandBufferZoneMinPartLimit":0, "FIntGameViewItemCap":10000, "DFIntNoTouchOneSecondYVelocityThresholdInHundredths":10, "FFlagLuaAppSiteMessageBannerEnabled":true, "FFlagStudioEnablePlayerLocaleViewPlugin3":true, "DFIntMaxClusterKBPerSecond":400, "FFlagStudioUseAnalysisReceiverClass":true, "FFlagStudioShareFromRibbonBarUXChanges":false, "DFFlagReplicatedEventsUseSharedArgs":true, "DFFlagDebugAnalyticsSendUserId":true, "FFlagAnimationEditorNewWikiDocumentation":true, "FFlagStudioReportOSArchToGoogleAnalytics":false, "DFFlagPreserveJointsOnSpawn":true, "FFlagPluginDragApi":true, "FFlagStudioBlockAnalyticsBasedOnOS":false, "FFlagStudioFixAutocompleteEnabledSetting":true, "DFIntCacheDirectoryExceptionInfluxHundredthsPercentage":0, "FIntStudioSyntaxCheckTimerInterval":500, "FFlagUserNavigationFixClickToMoveInterruption":true, "DFIntHttpDataSendExtendedTimeoutMillis":600000, "DFIntHttpServiceErrorCapLimit":1000000, "FFlagStudioUseNewAPIsForStartPage":true, "DFFlagPGSWakeOtherIfOneAssemblyIsAwake":false, "DFStringAvatarJointPositionsFixed":"Fixed", "FFlagLuaChatPlayTogetherPlaceIdHackFix":false, "DFFlagFixDuplicateServerLogRequests":false, "FFlagStudioDoubleClickFlag":true, "FFlagShareOnStartPageAnalyticsFix":false, "DFIntNavigationServiceAnalyticsIntervalMillisec":60000, "FFlagStudioPluginNativeCursors":false, "DFFlagDebugVisualizationImprovements":true, "FIntDebugInternetSimulatorPacketlossHundredth":0, "DFIntTeamCreateTimeOutInSec":60, "FFlagStudioCrashPlayersDataManagerUpdatePlayersInfoFix":true, "FFlagAddSymbolicLinkManagement":false, "FFlagStudioEnableWebKitPlugins":true, "FFlagWarnOnNoCoreFunction":false, "DFIntReportDeviceInfoRate":100, "FStringStudioTutorialsUrl":"https://wiki.roblox.com/index.php?title=Studio_Tutorials_Test&studiomode=true", "DFIntHttpServiceConcurrentThrottleInfluxPermyriad":0, "DFFlagReportDataPingByPlayerBin":true, "DFFlagCSGv2UseQuadricPosition":false, "FFlagHelpMenuShowPlaceVersion":true, "FFlagStudioShareModalWindowCrashWhenFetchIconFix":true, "DFFlagLockViolationInstanceCrashStudio":false, "DFIntHangDetectionTimeoutMs":180000, "DFIntAvatarJointPositionsDefaultType":0, "DFFlagNonJsonParseType":false, "DFIntWaitGetInQueueTime":200, "DFIntTextScraperClientDataQSize":128, "FFlagStudioTutorialsUseDevHub":true, "DFIntHttpBatchLimit":128, "DFIntSendRakNetStatsThrottleStreamingOverride":1, "DFFlagDebugGAReportThrottledSessions":true, "DFIntPrimStatsGANumDelimited":3000, "FStringGetUserThumbnailAsyncRetryTime":"4", "FIntAdvancedRCCLoadFMODRetryCount":3, "FIntInterpolationAwareTargetTimeLerpHundredth":13, "FFlagGetDefaultClothesFromWeb":true, "DFFlagNewClientSettingsServiceConfigurableHost":true, "FIntLuaErrorsInfluxThrottling":1, "DFFlagPGSSolverSimIslandsEnabled2":true, "FFlagChatServiceInstallerExemptLocalizationFromAnalytics":true, "DFIntReportTeamCreatePostFailurePermyriad":100, "FFlagStudioDontAssertWhenQmlCannotLoadImages":true, "FFlagDebugStartMicroProfilerWebServer":false, "FFlagStudioAsyncLambdaCallbackWithQPointerThisFix2":false, "DFStringOverrideSendRakNetStatsThrottleCountries":"CN,50", "FFlagWeDontWantAnyGoogleAnalyticsHerePlease":false, "FFlagDebugDoNotLoadHumanoidSounds":false, "FIntXboxAvatarPaneRefreshInterval":1800, "FFlagStudioAnimationEditorWarnForPastingOutOfBounds":true, "FFlagStudioFixScreenShot":true, "DFIntGetUserThumbnailThrottleExponent":1500, "DFIntAnalyticsMaxDeferredStats":50, "DFIntUnstickForceDecayInTenths":9, "FFlagFixButtonR2MouseClickOnGui":false, "FFlagStudioStartPageUiFixes":true, "DFFlagDeprecatableBroadcasts":true, "FIntStudioBulkImporterMockUploadTimeInMs":0, "DFIntUserHttpRequestsPerMinuteLimitM":0, "FFlagLuaChatFriendIconRefactor":false, "FFlagStudioLeaveScriptsOpen":true, "DFFlagCLI120342p2":true, "FIntStudioStopOSXReportingForOSAtAndBeforeMajor":10, "DFStringCollideInnerBox":"InnerBox", "FIntCameraFarZPlane":100000, "FFlagStudioFixShareIcon":true, "FFlagEnsureVisibleOnFindResult":false, "DFIntWriteFullDmpPercent":0, "FFlagFixScrollingTouchInputEnded":false, "FFlagStudioHttpUpgradeToHttps":false, "DFIntQKick":3072, "FFlagScrollToTopShortDistanceResponseFix":true, "FFlagStudioStopDoubleUserActionReporting":true, "DFFlagUseSpecificContentTypeForAbuseReports":false, "DFIntGlobalFill":0, "FFlagStudioUIEditorRotateV2":false, "FIntSpeedCountCap":5, "FFlagStudioAutocompleteRefactorFasterEnumLookup":false, "FFlagStudioCommandBarButtonText":true, "FFlagRCCSupportTeamTest":true, "DFFlagForceUseProductionForAssetFetching":false, "FIntStudioTreeWidgetFilterTime":30, "FStringToolboxInLuaWidgetMacOSABTest":"AllUsers.Studio.ToolboxInLuaWidgetMacOS", "FIntStudioRobloxAnalyticsLoad":100, "FFlagStudioAnimationEditorParentScaledDragArea":true, "FFlagAnimationEditorCutCopyEntireKeyframes":true, "DFFlagBodyColorsColor3PropertyReplicationLogicEnabled":true, "FFlagFixParentChildInsert":false, "FIntAppBridgePlaceLaunchRetryWaitInSec":1, "DFIntReportTeamCreatePublishFailurePermyriad":100, "DFIntCSGv2OperationInfluxHundredthsPercentage":10000, "FFlagFixOutOfBoundsMouseLocation":true, "DFIntStreamedRegionGCFactor":250, "FFlagStudioOnlyShowPackageLinkIfPackageOwner":false, "FIntStudioBootstrapperVersionNumber":52886, "FIntStudioRPCMessageResponseTimeOut":30000, "DFIntReportCloudEditJoinFailureReportPerMyriad":10000, "FFlagDebugGraphicsGLDisableDiscard":false, "DFIntLoginFailureStudioInfluxDbHundredthsPercentage":10000, "FFlagStudioExtDebuggerClientCrashFixEnabled":false, "FFlagStudioRobloxIDEDocShareModalWindowDeleteThis":false, "DFFlagDataStoreMinMaxErrorEnabled":false, "FStringToolboxInLuaWidgetWinABTest":"AllUsers.Studio.ToolboxInLuaWidgetWin", "FFlagDebugNavigationDrawCompactHeightfieldLayerSet":false, "FIntStudioAuthenticationTimeoutMs":10000, "FFlagDebugLocalRccServerConnection":false, "DFFlagCSGv2SkipDegenerateTriangles":true, "DFFlagFixCharacterAppearanceLoadedEvent2":false, "DFFlagStudioTrackDeadRobloxIDEDocsThrottleEvents":false, "FFlagFixScrollingFrameClipRect":true, "DFIntMaxHttpResultResponseSize":500, "FFlagStudioStartPageUsePlainText":true, "FIntLuaChatPlayTogetherThrottleAndroidPhone3":0, "DFFlagDoNotRunAnimationEditorInPlayMode":true, "FStringDebugStudioPlayerConnectToServerIPAddress":"", "DFFlagNoInfiniteLoopOnChatInfoLoadFailure":true, "FFlagStudioAnimationEditorMultiSelectJoints":true, "DFFlagReplicatorEventDoNotVerifyInstanceStillReplicationContainer":true, "FStringStudioDefaultNewTemplatePlaceId":"95206881", "DFFlagDynamicLocalizationTablesEndpointStressTest":false, "DFFlagSpecificGravityDummyReturnsZero":false, "FIntStudioPartSizeCameraDistRatio":30, "DFFlagDebugEnableReportPlaceIDAboveMemory":false, "FIntTaskSchedulerTasksDefaultMaxTimeMsPerCycle":10, "FFlagStudioStartWithGameLocaleId":true, "FFlagDebugBreakOnFMODErrors":true, "FFlagDebugReportPhysicsMissingPlaceSpecific":false, "DFStringCollideOuterBox":"OuterBox", "DFIntSpecialLeak":111111, "FFlagFixIncorrectScrollingFrameBounds":true, "FFlagStudioRemoveInsertEvent":false, "DFFlagFixCharacterJitterDownStairs":false, "FFlagStudioUIEditorZoomPanel":false, "FIntOptimizedContactPipelineSpatialHashOverlapToleranceMicro":10000, "DFIntGettingUpBalanceD":50, "DFFlagFixStudioPositionAndOrientationPropertyWeldConstraints":false, "DFFlagCalculateExpirationOnTheDestinationServer":true, "FFlagStudioAllowMouseTrackingOnMac":false, "FFlagReportRuntimeJoinCount":true, "FFlagLoadTimesFromAppShellReporter":true, "DFIntSmoothTerrainPhysicsRayAabbSlop":1, "DFFlagFireCharacterAddedAfterSpawn":false, "FIntUIQuadTreeCellAreaMin":20000, "DFFlagHttpServiceRequestAsyncError":true, "DFFlagTheseAnalyticsAreBigEnoughForTheTwoOfUs2":false, "FFlagDebugScriptAnalyzer":false, "FFlagPreventCommandLineRaceCondition":true, "FFlagStudioForwardForceLocaleIds":true, "FIntStartupInfluxHundredthsPercentage":100, "FFlagStudioDeprecateUIThemeProperty":false, "FFlagUseGamePerfMonitorWithAppShell":false, "FFlagThwartPurchasePromptScams":true, "FFlagCrashReporterNew":false, "FIntPGSPenetrationMarginMaxBump":5, "DFIntHttpRbxApiMaxRetryQueueSize":500, "FFlagLogCorectTeleportFailureMessage2":true, "FFlagEnableAutomaticScalingEnabled":true, "DFFlagAllowMultipleHangReports":false, "FFlagReportJoinAllCount":true, "DFFlagHttpBatchSecure":true, "FIntStudioTeamCreateDisconnectHandlingMaximumRetries":120, "FFlagLuaChatDisplayInFront":true, "FFlagXboxAvatarEditorOutfitThumbnailFix":false, "FIntPGSConeLimitMaxCorrectiveAngle":15, "FFlagMemoryFromAppShellReporterIOS":false, "DFFlagLockViolationInstanceCrash":false, "FFlagUseAvatarAPIAvatarFetch":true, "FFlagStudioOnlyRefreshWhenAddingNewPackages":false, "FFlagLuaSearchPageDispatchesInitialSearch":true, "FFlagJoinTimeCounters":true, "FIntPGSVStageStiffnessEasingUpToAggressive":10, "FIntStudioThumbnailImageRetryMaximum":3, "DFIntRetryBaseTimeMSec":1000, "FFlagProcessStarterGuiInEditMode":true, "FFlagUnlockedTopbarTransparency":true, "DFIntAvatarAPIAvatarFetchRollout":0, "FFlagCSGv2UnparentPartsBeforeModifyingCFrames":true, "DFFlagCLI16089_2":true, "DFIntHttpConnectDefaultTimeoutMillis":60000, "FFlagStudioLogIsVIPDeveloper":true, "FFlagStudioFbxImportVerboseErrorOnLoad":true, "FFlagDebugAdornsDisabled":false, "FFlagLocalizationAppendFunctionsAlwaysAppend":true, "FFlagDebugSendAttemptsToDiagCase1":false, "FFlagStudioPackagesUsePrimaryPartAsBaseInModel":false, "FFlagAutocompleteRefactorCheckScriptCreatable":false, "FFlagOutputWidgetFindEnabled":false, "FFlagCSGv2EnableEmptyMeshError":true, "FFlagSetMouseInputStateLater":true, "FStringDiabolicalModeWhiteLists":"", "FFlagStudioShowLocalFilePathOnStartPage":true, "FIntMaxSpeedDeltaMillis":300, "FIntStudioSecondsBeforeInactive":300, "FFlagPassDataModelInitializationParamsEvenMore":false, "FFlagDebugStartPageRefreshOnF5":false, "FFlagSpringConstraintInGameAdornFix":true, "FIntFriendRequestNotificationThrottle":5, "FFlagAnimationEditorLuaWidgetsVersion":true, "FFlagStudioRefreshInsertServiceDialog4":true, "FIntStudioTreeWidgetEventProcessingTime":10, "FStringStudioDebugBTID":"StudioDebugBTID", "FIntStudioGuiObjectSecondRectOffset":4, "DFIntCrashUploadHttpResponseDefaultTimeoutMillis":80000, "DFIntTattletaleMaxTextLength":1024, "DFFlagEnableSitNilProtection":true, "FIntHttpClientHandlerFixed":1, "FIntStudioWebDialogMinimumWidth":970, "FIntStudioBulkImporterMaxJobs":50, "FFlagWeldConstraintAdornImprovements":true, "DFFlagImproveTimeStamp":false, "FFlagStudioInsertObjectWindowShortcut":false, "DFFlagSendServerPerfInfo":true, "FFlagLuaChatUseNewFriendsAndPresenceEndpointV356":true, "FFlagReleaseAllEventStreamsEnabled":true, "FFlagBestProximatePartFix":true, "DFFlagCloudEditPublishNoStream":false, "FFlagCheckRequestingTeleportAtTeleportImplBeginning":true, "DFIntHttpCacheSendStatsEveryXSeconds":60, "FFlagAutocompleteRefactorCompleteLocalsInTheirDefinition":false, "FFlagJoinTime_LocalUserAnimationPriority":true, "FIntAutocompleteRefactorDeclarationSearchRange":10, "DFIntMaxFrameBufferSize":10, "FFlagDataModelForwardGameLocaleId":false, "DFFlagNewClientSettingsServiceUsePlainHttp":false, "DFFlagPlayerCleanCharacterModelOnRemove":true, "DFFlagWhitelistUserInputEvents":true, "FFlagDebugStudioPackageValidator":false, "FFlagGuiObjectNotRegisteringKeys2":true, "FFlagStudioFixScriptDocState":true, "DFIntCanHideGuiGroupId":3013794, "FIntStudioThumbnailImageRetryInterval":6000, "FFlagLuaChatShareGameToChatFromChatV2":false, "DFIntDynamicLocalizationTablesAssetTimeout":1, "FIntStudioRPCMessageWriteTimeOut":3000, "FFlagStudioRigImporterDebugMode":false, "FFlagTextTruncationEnabledInApp":true, "DFIntTextScraperServerDataMSecs":1000, "FFlagQuantumGuiEnabledInGame2":false, "FFlagStudioRecoveryScriptIgnoreUnchangedOnes":true, "DFIntTattletaleReportToRCCCooldownSeconds":30, "DFStringAvatarJointPositionsTypeField":"jointPositioningType", "FStringStudioDevHubBaseUrl":"http://robloxdev.com/", "FFlagPluginGuiGetRelativeMousePositionApi":true, "FFlagFixCustomTeleScreen":true, "DFFlagDebugRakNetNoTimestampInUdt":false, "FFlagStudioUseDebuggerController":false, "DFFlagDynamicLocalizationTables":false, "FFlagAvatarEditorUseAvatarRulesForScales":true, "DFIntCrashUploadErrorInfluxHundredthsPercentage":1000, "FIntNewDevConsoleMaxHttpCount":300, "FFlagHttpReportStatisticsOnce":true, "FFlagGameExplorerCopyPath":true, "FFlagStudioBreakOnInfiniteLoopsRunFixEnabled":false, "FFlagStudioCheckCloseCaptchaArgument":true, "DFFlagUrlReconstructRejectInvalidSchemes":false, "FFlagStudioRobloxScriptDocPushScriptSourceToDataModelCrashFix":true, "FIntMaxClients":128, "FFlagDebugClientNetworkPerPlaceMetrics":false, "FFlagStudioPreventMeshPublishOnErrorEnabled":false, "DFIntServerConfigCloudEditSavePeriodSeconds":300, "DFIntNavigationPolygonMergePasses":2, "DFFlagRagdollNotSuperAnnoying":false, "FIntRenderShadowIntensity":75, "DFIntDataStoreAnalyticsReportEveryNSeconds":300, "FFlagMoreViewCreationFailureHandling":true, "DFIntCrashUploadMaxDumpFiles":3, "DFIntRakNetNakResendDelayMsMax":0, "FFlagStudioFilterPreferredParent":true, "FFlagStudioMigrateToDevHub":true, "FIntIkDraggerSolveIterations":16, "FFlagLoadAdditionalCoreScriptsInStudio":true, "FIntNavigationAgentHeight":5, "DFStringCrashUploadToBacktraceWindowsStudioToken":"8608fce9cad86072eee36b7d1d9dc56d68101a6b1f783c7bf568d80972ee1837", "FIntStudioRightClickBuffer":500, "FFlagStudioShareModalWindowCrashWhenFetchUniverseFix":true, "FFlagShareGameToChatStatusAnalytics":false, "DFFlagStudioThrottleNewEmulationMetrics":false, "FFlagStudioAutocompleteRefactorFilterServices":false, "FIntStudioResendDisconnectNotificationInterval":1000, "DFFlagEnableRemoteProfiling":true, "DFFlagDialectPreferenceOrder":false, "FIntCloudEditWaitTimeMs":500, "DFIntRagdollSlowEnoughToNotTenth":10, "DFFlagAvatarJointPositionsEnabled":true, "FFlagRenderPartInstancingEnabled6":true, "DFFlagAlternateScalingForNativeParts":false, "FIntSettingsHubInviteToGameOSX5":100, "FIntNavigationAgentJumpHeight":6, "DFFlagFixGameJoinTrying":true, "DFIntDebugNetworkPacketAgeHistory":30, "DFIntHttpAnalyticsMaxHistory":256, "FFlagMakeStudioDefaultTextLabelColorBlack":true, "DFFlagInWithTheNew":true, "DFFlagCleanCacheMoveMutex":true, "FFlagStudioGradientEditorCrashFixEnabled":false, "FStringStudioUserNotificationTopSubdomain":"realtime", "FIntCloudEditTimeoutTimeMs":60000, "FIntLuaAnalyticsReleasePeriod":60, "FStringStudioUserNotificationPath":"/notifications", "DFIntTargetTimeDelayFacctorTenths":20, "FFlagRequireRbxSig2":true, "FFlagStudioQMLControllerWithParentFix":true, "FIntStudioRightClickDelay":150, "DFFlagCSGMeshLevelOfDetail":true, "DFFlagCSGMeshV4DeserializerEnabled":true, "DFFlagCSGv2UseMegaAssetFetcher":true, "DFFlagHttpAddRbxHeaders":true, "DFFlagHttpFollowAllRedirects":true, "DFFlagHttpServiceBetterUserAgent":true, "FFlagChangeInfoInNetworkMenu":true, "FFlagDevConsoleTabMetrics":true, "FFlagEnableChatMessageType":true, "FFlagEnableGetBoundingBox":true, "FFlagEnableStudioService":true, "FFlagFasterCoreScriptLoading":true, "FFlagNavigationAgentCanJump":true, "FFlagNavigationPathBlockedEventEnabled":true, "FFlagNavigationVariableAgentSize":true, "FFlagRapidJson110_2":true, "FFlagSetPlaceIdInAdvance":true, "FFlagStudioBulkImport":true, "FFlagStudioBulkImportMinorFixes":true, "FFlagStudioChangeUIThemeToOSTheme":true, "FFlagStudioLuaGameSettingsDialog2":true, "FFlagStudioRefactorUniverseCollection":true, "FFlagStudioShowChatWidgetOnDoubleClick":true, "FFlagStudioTeamCreateConnectionCancellable":true, "FFlagStudioUpdateThemeDataStructures":true, "FFlagStudioUseNewThemeAPIsInRibbonCode":true, "FFlagUseDevelopmentLuaGameDetails":true, "FFlagUseGameStateTypeInPluginManager":true } \ No newline at end of file diff --git a/app/files/Shirt.rbxmx b/app/files/Shirt.rbxmx new file mode 100644 index 0000000..b566495 --- /dev/null +++ b/app/files/Shirt.rbxmx @@ -0,0 +1,13 @@ + + null + nil + + + + http://www.nexium.fit/asset/?id={ShirtImageId} + + Shirt + true + + + \ No newline at end of file diff --git a/app/files/ShutdownServer.lua b/app/files/ShutdownServer.lua new file mode 100644 index 0000000..b49473b --- /dev/null +++ b/app/files/ShutdownServer.lua @@ -0,0 +1,37 @@ +local AuthToken, PlaceId = ... +local Players = game:GetService("Players") + +warn("Server shutdown requested by website") + +local function ReportServerShutdown() + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["ServerAliveTime"] = workspace.DistributedGameTime + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportshutdown", MessagePayload, false, "application/json") + end) +end + +Players.PlayerAdded:Connect(function(player) + coroutine.wrap(function() + local success, message = pcall(function() + player:Kick("This game has shut down.") + end) + end)() +end) + +for _, Player in pairs(Players:GetPlayers()) do + coroutine.wrap(function() + local success, message = pcall(function() + Player:Kick("This game has shut down.") + end) + end)() +end +ReportServerShutdown() +ScriptContext.ScriptsDisabled = true +game:HttpPost("http://127.0.0.1:3000/CloseJob?RCCReturnAuth="..AuthToken, HttpService:JSONEncode({ + ["jobid"] = game.JobId +}), false, "application/json") diff --git a/app/files/Studio.lua b/app/files/Studio.lua new file mode 100644 index 0000000..abd4a59 --- /dev/null +++ b/app/files/Studio.lua @@ -0,0 +1,27 @@ +-- Setup studio cmd bar & load core scripts +local baseUrl = "http://www.nexium.fit" + +pcall(function() game:GetService("InsertService"):SetFreeModelUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) + +game:GetService("ScriptInformationProvider"):SetAssetUrl(baseUrl.."/Asset/") +game:GetService("InsertService"):SetBaseSetsUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl(baseUrl.."/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl(baseUrl.."/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl(baseUrl.."/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl(baseUrl.."/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetDevProductInfoUrl(baseUrl.."/marketplace/productDetails?productId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl(baseUrl.."/ownership/hasasset?userId=%d&assetId=%d") end) + +local result = pcall(function() game:GetService("ScriptContext"):AddStarterScript(37801172) end) +if not result then + pcall(function() game:GetService("ScriptContext"):AddCoreScript(37801172,game:GetService("ScriptContext"),"StarterScript") end) +end \ No newline at end of file diff --git a/app/files/TShirt.rbxmx b/app/files/TShirt.rbxmx new file mode 100644 index 0000000..6bfa485 --- /dev/null +++ b/app/files/TShirt.rbxmx @@ -0,0 +1,13 @@ + + null + nil + + + + http://www.nexium.fit/asset/?id={TShirtImageId} + + Shirt Graphic + true + + + \ No newline at end of file diff --git a/app/files/Visit.lua b/app/files/Visit.lua new file mode 100644 index 0000000..aa97f4c --- /dev/null +++ b/app/files/Visit.lua @@ -0,0 +1,132 @@ +function ifSeleniumThenSetCookie(key, value) + if false then + game:GetService("CookiesService"):SetCookieValue(key, value) + end +end + +ifSeleniumThenSetCookie("SeleniumTest1", "Inside the visit lua script") + +pcall(function() game:SetPlaceID({PlaceId}) end) +pcall(function() game:SetUniverseId({UniverseId}) end) + +visit = game:GetService("Visit") + +local message = Instance.new("Message") +message.Parent = workspace +message.archivable = false + +game:GetService("ScriptInformationProvider"):SetAssetUrl("https://www.nexium.fit/Asset/") +game:GetService("ContentProvider"):SetThreadPool(16) +pcall(function() game:GetService("InsertService"):SetFreeModelUrl("https://www.nexium.fit/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) -- Used for free model search (insert tool) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl("https://www.nexium.fit/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) -- Used for free decal search (insert tool) + +ifSeleniumThenSetCookie("SeleniumTest2", "Set URL service") + +settings().Diagnostics:LegacyScriptMode() + +game:GetService("InsertService"):SetBaseSetsUrl("https://www.nexium.fit/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("https://www.nexium.fit/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("https://www.nexium.fit/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("https://www.nexium.fit/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("https://www.nexium.fit/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("https://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("https://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("https://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("https://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("https://www.nexium.fit/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("https://www.nexium.fit/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl("https://www.nexium.fit/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetDevProductInfoUrl("https://www.nexium.fit/marketplace/productDetails?productId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl("https://www.nexium.fit/ownership/hasasset?userId=%d&assetId=%d") end) +pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end) + +ifSeleniumThenSetCookie("SeleniumTest3", "Set creator ID") + +pcall(function() game:SetScreenshotInfo("") end) +pcall(function() game:SetVideoInfo("") end) + +ifSeleniumThenSetCookie("SeleniumTest4", "Exiting SingleplayerSharedScript")-- SingleplayerSharedScript.lua inserted here -- + +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +pcall(function() game:GetService("Players"):SetBuildUserPermissionsUrl("https://www.nexium.fit/Game/BuildActionPermissionCheck.ashx?assetId=0&userId=%d&isSolo=true") end) + +workspace:SetPhysicsThrottleEnabled(true) + +local addedBuildTools = false +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +local inStudio = true + +function doVisit() + message.Text = "Loading Game" + if false then + if false then + success, err = pcall(function() game:Load("") end) + if not success then + message.Text = "Could not teleport" + return + end + end + else + if false then + game:Load("") + pcall(function() visit:SetUploadUrl("") end) + else + pcall(function() visit:SetUploadUrl("") end) + end + end + + message.Text = "Running" + game:GetService("RunService"):Run() + + message.Text = "Creating Player" + player = game:GetService("Players"):CreateLocalPlayer(0) + player.CharacterAppearance = "https://www.nexium.fit/Asset/CharacterFetch.ashx?userId={UserId}&placeId={PlaceId}" + local propExists, canAutoLoadChar = false + propExists = pcall(function() canAutoLoadChar = game.Players.CharacterAutoLoads end) + + if (propExists and canAutoLoadChar) or (not propExists) then + player:LoadCharacter() + end + + message.Text = "Setting GUI" + player:SetSuperSafeChat(false) + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(None) end) + pcall(function() player:SetAccountAge(0) end) +end + +success, err = pcall(doVisit) + +if not inStudio and not addedBuildTools then + local playerName = Instance.new("StringValue") + playerName.Name = "PlayerName" + playerName.Value = player.Name + playerName.RobloxLocked = true + playerName.Parent = screenGui + + pcall(function() game:GetService("ScriptContext"):AddCoreScript(59431535,screenGui,"BuildToolsScript") end) + addedBuildTools = true +end + +if success then + message.Parent = nil +else + print(err) + if not inStudio then + if false then + pcall(function() visit:SetUploadUrl("") end) + end + end + wait(5) + message.Text = "Error on visit: " .. err + if not inStudio then + if false then + game:HttpPost("https://www.nexium.fit/Error/Lua.ashx", "Visit.lua: " .. err) + end + end +end \ No newline at end of file diff --git a/app/models/admin_permissions.py b/app/models/admin_permissions.py new file mode 100644 index 0000000..d93f594 --- /dev/null +++ b/app/models/admin_permissions.py @@ -0,0 +1,16 @@ +from app.extensions import db + +class AdminPermissions(db.Model): + id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + permission = db.Column(db.String(128), nullable=False, index=True) + + def __init__(self, userid, permission): + self.userid = userid + self.permission = permission + + def __repr__(self): + return "".format( + userid=self.userid, + permission=self.permission + ) \ No newline at end of file diff --git a/app/models/asset.py b/app/models/asset.py new file mode 100644 index 0000000..7398a40 --- /dev/null +++ b/app/models/asset.py @@ -0,0 +1,83 @@ +from app.extensions import db +from app.enums.AssetType import AssetType +from sqlalchemy import Enum +from datetime import datetime + +class Asset(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + roblox_asset_id = db.Column(db.BigInteger, nullable=True, default=None, index=True) # Roblox asset ID + name = db.Column(db.Text, nullable=False) # Asset name + description = db.Column(db.String(4096), nullable=False) # Asset description + created_at = db.Column(db.DateTime, nullable=False) # Asset creation date + updated_at = db.Column(db.DateTime, nullable=False) # Asset last update date + asset_type = db.Column(Enum(AssetType), nullable=False, index=True) # Asset type (e.g. shirt, pants, etc.) + asset_genre = db.Column(db.SmallInteger, nullable=False) # Asset genre (e.g. all, town and city, etc.) + creator_type = db.Column(db.SmallInteger, nullable=False) # Asset creator type (e.g. user, group, etc.) + creator_id = db.Column(db.BigInteger, nullable=False, index=True) # Asset creator ID + + moderation_status = db.Column(db.SmallInteger, nullable=False, index=True) # Asset moderation status ( 0 = Approved, 1 = Pending, 2 = Declined ) + + # Economy + is_for_sale = db.Column(db.Boolean, nullable=False, default=False, index=True) # Is the asset for sale? + price_robux = db.Column(db.BigInteger, nullable=False, default=0) # Asset price in Robux + price_tix = db.Column(db.BigInteger, nullable=False, default=0) # Asset price in Tix + is_limited = db.Column(db.Boolean, nullable=False, default=False, index=True) # Is the asset limited? + is_limited_unique = db.Column(db.Boolean, nullable=False, default=False) # Is the asset limited unique? + serial_count = db.Column(db.BigInteger, nullable=False, default=0) # Asset serial count + sale_count = db.Column(db.BigInteger, nullable=False, default=0) # Asset sale count + offsale_at = db.Column(db.DateTime, nullable=True, default=None) # Asset offsale date + + def __init__( + self, + roblox_asset_id=None, + name="Asset", + description="", + created_at=None, + updated_at=None, + asset_type=AssetType.Image, + asset_genre=0, + creator_type=0, + creator_id=1, + moderation_status=1, + + is_for_sale=False, + price_robux=0, + price_tix=0, + is_limited=False, + is_limited_unique=False, + serial_count=0, + sale_count=0, + offsale_at=None, + + force_asset_id=None + ): + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + + self.roblox_asset_id = roblox_asset_id + self.name = name + self.description = description + self.created_at = created_at + self.updated_at = updated_at + self.asset_type = asset_type + self.asset_genre = asset_genre + self.creator_type = creator_type + self.creator_id = creator_id + self.moderation_status = moderation_status + + self.is_for_sale = is_for_sale + self.price_robux = price_robux + self.price_tix = price_tix + self.is_limited = is_limited + self.is_limited_unique = is_limited_unique + self.serial_count = serial_count + self.sale_count = sale_count + self.offsale_at = offsale_at + + if force_asset_id is not None: + self.id = force_asset_id + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/asset_favorite.py b/app/models/asset_favorite.py new file mode 100644 index 0000000..f9adeb8 --- /dev/null +++ b/app/models/asset_favorite.py @@ -0,0 +1,13 @@ +from app.extensions import db + +class AssetFavorite( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True ) + assetid = db.Column( db.BigInteger, nullable=False, index=True ) + userid = db.Column( db.BigInteger, nullable=False, index=True ) + + def __init__(self, assetid : int, userid : int): + self.assetid = assetid + self.userid = userid + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/asset_moderation_link.py b/app/models/asset_moderation_link.py new file mode 100644 index 0000000..e001d5a --- /dev/null +++ b/app/models/asset_moderation_link.py @@ -0,0 +1,27 @@ +from app.extensions import db + +# This is used for the asset moderation system to link two assets together, eg. a Image and Shirt +# So the moderator does not need to approve both assets + +class AssetModerationLink(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + ParentAssetId = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Parent asset ID, eg. Shirt + ChildAssetId = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Child asset ID eg. Image + + ParentAsset = db.relationship("Asset", foreign_keys=[ParentAssetId], uselist=False, lazy="joined") + ChildAsset = db.relationship("Asset", foreign_keys=[ChildAssetId], uselist=False, lazy="joined") + + def __init__( + self, + ParentAssetId, + ChildAssetId + ): + self.ParentAssetId = ParentAssetId + self.ChildAssetId = ChildAssetId + + def __repr__(self): + return "".format( + id=self.id, + ParentAssetId=self.ParentAssetId, + ChildAssetId=self.ChildAssetId + ) \ No newline at end of file diff --git a/app/models/asset_rap.py b/app/models/asset_rap.py new file mode 100644 index 0000000..547a47a --- /dev/null +++ b/app/models/asset_rap.py @@ -0,0 +1,23 @@ +from app.extensions import db +from datetime import datetime + +class AssetRap(db.Model): + assetid = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) + rap = db.Column(db.BigInteger, nullable=False, default=0) + updated = db.Column(db.DateTime, nullable=False) + + def __init__( + self, + assetid, + rap=0 + ): + self.assetid = assetid + self.rap = rap + self.updated = datetime.utcnow() + + def __repr__(self): + return "".format( + assetid=self.assetid, + rap=self.rap, + updated=self.updated + ) \ No newline at end of file diff --git a/app/models/asset_thumbnail.py b/app/models/asset_thumbnail.py new file mode 100644 index 0000000..e098d15 --- /dev/null +++ b/app/models/asset_thumbnail.py @@ -0,0 +1,36 @@ +from app.extensions import db + +class AssetThumbnail(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + asset_id = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Asset ID + asset_version_id = db.Column(db.BigInteger, nullable=False) # Asset version ID + content_hash = db.Column(db.String(512), nullable=False) # Asset thumbnail content hash + created_at = db.Column(db.DateTime, nullable=False) # Asset thumbnail creation date + updated_at = db.Column(db.DateTime, nullable=False) # Asset thumbnail last update date + moderation_status = db.Column(db.SmallInteger, nullable=False) # Asset thumbnail moderation status ( 0 = Approved, 1 = Pending, 2 = Declined ) + + asset = db.relationship('Asset', backref=db.backref('thumbnails', lazy=True, uselist=True), uselist=False) + def __init__( + self, + asset_id, + asset_version_id, + content_hash, + created_at, + moderation_status + ): + self.asset_id = asset_id + self.asset_version_id = asset_version_id + self.content_hash = content_hash + self.created_at = created_at + self.updated_at = created_at + self.moderation_status = moderation_status + + def __repr__(self): + return "".format( + asset_id=self.asset_id, + asset_version_id=self.asset_version_id, + content_hash=self.content_hash, + created_at=self.created_at, + updated_at=self.updated_at, + moderation_status=self.moderation_status + ) \ No newline at end of file diff --git a/app/models/asset_version.py b/app/models/asset_version.py new file mode 100644 index 0000000..d305f1d --- /dev/null +++ b/app/models/asset_version.py @@ -0,0 +1,35 @@ +from app.extensions import db + +class AssetVersion(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + asset_id = db.Column(db.BigInteger, nullable=False, index=True) + version = db.Column(db.BigInteger, nullable=False) + content_hash = db.Column(db.String(512), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + uploaded_by = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) + + def __init__( + self, + asset_id, + version, + content_hash, + created_at, + uploaded_by=None + ): + self.asset_id = asset_id + self.version = version + self.content_hash = content_hash + self.created_at = created_at + self.updated_at = created_at + self.uploaded_by = uploaded_by + + def __repr__(self): + return "".format( + id=self.id, + asset_id=self.asset_id, + version=self.version, + content_hash=self.content_hash, + created_at=self.created_at, + updated_at=self.updated_at + ) \ No newline at end of file diff --git a/app/models/asset_votes.py b/app/models/asset_votes.py new file mode 100644 index 0000000..0721622 --- /dev/null +++ b/app/models/asset_votes.py @@ -0,0 +1,15 @@ +from app.extensions import db + +class AssetVote( db.Model ): + id = db.Column( db.BigInteger, primary_key=True ) + assetid = db.Column( db.BigInteger, nullable=False, index=True ) + userid = db.Column( db.BigInteger, nullable=False, index=True ) + vote = db.Column( db.Boolean, nullable=False, default=True ) + + def __init__(self, assetid : int, userid : int, vote : bool): + self.assetid = assetid + self.userid = userid + self.vote = vote + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/cryptomus_invoice.py b/app/models/cryptomus_invoice.py new file mode 100644 index 0000000..fed0e3f --- /dev/null +++ b/app/models/cryptomus_invoice.py @@ -0,0 +1,52 @@ +from app.extensions import db +from datetime import datetime +from app.enums.CryptomusPaymentStatus import CryptomusPaymentStatus + +class CryptomusInvoice(db.Model): + id = db.Column( db.Text, primary_key=True, unique=True, nullable=False, index = True ) + cryptomus_invoice_id = db.Column( db.Text, nullable=False, index = True ) + + initiator_id = db.Column( db.Integer, db.ForeignKey('user.id'), nullable=False, index = True ) + + required_amount = db.Column( db.Float, nullable=False ) + paid_amount_usd = db.Column( db.Float, nullable=False, default=0 ) + currency = db.Column( db.Text, nullable=False ) + status = db.Column( db.Enum(CryptomusPaymentStatus), nullable=False ) + is_final = db.Column( db.Boolean, nullable=False, default=False ) + + extra_data = db.Column( db.Text, nullable=True ) + + created_at = db.Column( db.DateTime, nullable=False ) + updated_at = db.Column( db.DateTime, nullable=False ) + expires_at = db.Column( db.DateTime, nullable=False ) + + assigned_key = db.Column( db.Text, nullable=True ) + + def __init__( + self, + id : str, + cryptomus_invoice_id : str, + + initiator_id : int, + + required_amount : float, + currency : str, + status : CryptomusPaymentStatus, + + expires_at : datetime, + created_at : datetime = None, + updated_at : datetime = None, + paid_amount_usd : float = 0, + extra_data : str = None + ): + self.id = id + self.cryptomus_invoice_id = cryptomus_invoice_id + self.initiator_id = initiator_id + self.required_amount = required_amount + self.currency = currency + self.status = status + self.expires_at = expires_at + self.created_at = created_at if created_at is not None else datetime.utcnow() + self.updated_at = updated_at if updated_at is not None else datetime.utcnow() + self.paid_amount_usd = paid_amount_usd + self.extra_data = extra_data \ No newline at end of file diff --git a/app/models/exchange_offer.py b/app/models/exchange_offer.py new file mode 100644 index 0000000..6a2681d --- /dev/null +++ b/app/models/exchange_offer.py @@ -0,0 +1,54 @@ +from app.extensions import db +from datetime import datetime, timedelta + +class ExchangeOffer(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + creator_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + creator = db.relationship('User', backref=db.backref('exchange_offers', lazy=True), foreign_keys=[creator_id], uselist=False) + + offer_value = db.Column(db.BigInteger, nullable=False) # Amount of currency the creator is sending + receive_value = db.Column(db.BigInteger, nullable=False) # Amount of currency the creator is receiving + + offer_currency_type = db.Column(db.SmallInteger, nullable=False) # Currency type of the offer value, 0 = Robux, 1 = Tix + # Recieve currency type is the opposite of the offer currency type + + reciever_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) # If the offer is accepted by someone, this will be set to the user's id + reciever = db.relationship('User', backref=db.backref('exchange_offers_recieved', lazy=True), foreign_keys=[reciever_id], uselist=False) + + created_at = db.Column(db.DateTime, nullable=False) + expires_at = db.Column(db.DateTime, nullable=False) + + ratio = db.Column(db.Float, nullable=False, default=0) # The ratio of the offer value to the receive value + worth = db.Column(db.Float, nullable=False, default=0, index = True) + + def __init___( + self, + creator_id, + offer_value, + receive_value, + offer_currency_type=0, # Robux + reciever_id=None, + ratio = None, + created_at=None, + expires_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + + if expires_at is None: + expires_at = datetime.utcnow() + timedelta(days=31) + + self.creator_id = creator_id + self.offer_value = offer_value + self.receive_value = receive_value + self.offer_currency_type = offer_currency_type + self.reciever_id = reciever_id + self.created_at = created_at + self.expires_at = expires_at + + if ratio is None: + self.ratio = (offer_value / receive_value) if offer_currency_type == 0 else (receive_value / offer_value) + else: + self.ratio = ratio + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/fflag_group.py b/app/models/fflag_group.py new file mode 100644 index 0000000..d053ea1 --- /dev/null +++ b/app/models/fflag_group.py @@ -0,0 +1,35 @@ +from app.extensions import db + +class FflagGroup(db.Model): + group_id = db.Column(db.BigInteger, primary_key=True, nullable=False, index=True) # Group ID + name = db.Column(db.String(128), nullable=False) # Group name + description = db.Column(db.String(512), nullable=False) # Group description + created_at = db.Column(db.DateTime, nullable=False) # Group creation date + updated_at = db.Column(db.DateTime, nullable=False) # Group last update date + enabled = db.Column(db.Boolean, nullable=False) # Group enabled + apikey = db.Column(db.String(128), nullable=True) # Group API key ( optional ) + gameserver_only = db.Column(db.Boolean, nullable=False) # Group is for gameserver only + + def __init__( + self, + group_id, + name, + description, + created_at, + enabled, + apikey + ): + self.group_id = group_id + self.name = name + self.description = description + self.created_at = created_at + self.updated_at = created_at + self.enabled = enabled + self.apikey = apikey + + def __repr__(self): + return "".format( + group_id=self.group_id, + name=self.name, + enabled=self.enabled + ) \ No newline at end of file diff --git a/app/models/fflag_value.py b/app/models/fflag_value.py new file mode 100644 index 0000000..d5504cb --- /dev/null +++ b/app/models/fflag_value.py @@ -0,0 +1,29 @@ +from app.extensions import db + +class FflagValue(db.Model): + flag_id = db.Column(db.BigInteger, primary_key=True, nullable=False, autoincrement=True) # Flag ID + group_id = db.Column(db.BigInteger, nullable=False, index=True) # Group ID + name = db.Column(db.String(128), nullable=False) # Flag name + + flag_type = db.Column(db.Integer, nullable=False, default=1) # Flag type ( 1 = bool, 2 = number, 3 = string) + flag_value = db.Column(db.Text, nullable=False) # Flag value ( base64 ) + + def __init__( + self, + group_id, + name, + flag_type, + flag_value + ): + self.group_id = group_id + self.name = name + self.flag_type = flag_type + self.flag_value = flag_value + + def __repr__(self): + return "".format( + flag_id=self.flag_id, + group_id=self.group_id, + name=self.name, + flag_type=self.flag_type + ) diff --git a/app/models/follow_relationship.py b/app/models/follow_relationship.py new file mode 100644 index 0000000..9c36517 --- /dev/null +++ b/app/models/follow_relationship.py @@ -0,0 +1,20 @@ +from app.extensions import db +from datetime import datetime + +class FollowRelationship(db.Model): + id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True) + followerUserId = db.Column(db.BigInteger, nullable=False, index=True) + followeeUserId = db.Column(db.BigInteger, nullable=False, index=True) + created = db.Column(db.DateTime, nullable=False) + + def __init__(self, followerUserId, followeeUserId): + self.followerUserId = followerUserId + self.followeeUserId = followeeUserId + self.created = datetime.utcnow() + + def __repr__(self): + return "".format( + followerUserId=self.followerUserId, + followeeUserId=self.followeeUserId, + created=self.created + ) \ No newline at end of file diff --git a/app/models/friend_relationship.py b/app/models/friend_relationship.py new file mode 100644 index 0000000..c5b35cb --- /dev/null +++ b/app/models/friend_relationship.py @@ -0,0 +1,16 @@ +from app.extensions import db +from datetime import datetime + +class FriendRelationship(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + user_id = db.Column(db.BigInteger, nullable=False, index=True) + friend_id = db.Column(db.BigInteger, nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + def __init__(self, user_id, friend_id): + self.user_id = user_id + self.friend_id = friend_id + self.created_at = datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/friend_request.py b/app/models/friend_request.py new file mode 100644 index 0000000..90257b6 --- /dev/null +++ b/app/models/friend_request.py @@ -0,0 +1,17 @@ +from app.extensions import db +from datetime import datetime + +class FriendRequest(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + requester_id = db.Column(db.BigInteger, db.ForeignKey("user.id") ,nullable=False, index=True) # The person who sent the friend request + requestee_id = db.Column(db.BigInteger, nullable=False, index=True) # The person who received the friend request + created_at = db.Column(db.DateTime, nullable=False) + + requester = db.relationship("User", foreign_keys=[requester_id], backref="friend_requests_sent", uselist=False) + + def __init__(self, requester_id, requestee_id): + self.requester_id = requester_id + self.requestee_id = requestee_id + self.created_at = datetime.utcnow() + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/game_session_log.py b/app/models/game_session_log.py new file mode 100644 index 0000000..6611711 --- /dev/null +++ b/app/models/game_session_log.py @@ -0,0 +1,36 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID +from datetime import datetime, timedelta + +class GameSessionLog( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True, nullable = False ) + user_id = db.Column( db.BigInteger, db.ForeignKey( "user.id" ), nullable = False, index=True) + serveruuid = db.Column( UUID(as_uuid=True), nullable=False, index=True ) + joined_at = db.Column( db.DateTime, nullable = False, index = True ) + left_at = db.Column( db.DateTime, nullable = True ) + place_id = db.Column( db.BigInteger, nullable = False, index=True ) + + def __init__( + self, + user_id, + serveruuid, + place_id, + joined_at = None, + left_at = None + ): + self.user_id = user_id + self.serveruuid = serveruuid + self.place_id = place_id + self.joined_at = joined_at or datetime.utcnow() + self.left_at = left_at + + def __repr__(self): + return "".format( + user_id=self.user_id, + serveruuid=self.serveruuid, + place_id=self.place_id, + joined_at=self.joined_at, + left_at=self.left_at + ) + + \ No newline at end of file diff --git a/app/models/gamepass_link.py b/app/models/gamepass_link.py new file mode 100644 index 0000000..eddd619 --- /dev/null +++ b/app/models/gamepass_link.py @@ -0,0 +1,24 @@ +from app.extensions import db +import datetime + +class GamepassLink(db.Model): + gamepass_id = db.Column(db.BigInteger, db.ForeignKey("asset.id"), primary_key=True, nullable=False) + place_id = db.Column(db.BigInteger, db.ForeignKey("asset.id"), primary_key=True, nullable=False, index=True) # DEPRECATED + creator_id = db.Column(db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + gamepass = db.relationship("Asset", foreign_keys=[gamepass_id], uselist=False, lazy="joined") + place = db.relationship("Asset", foreign_keys=[place_id], uselist=False, lazy="joined") + creator = db.relationship("User", foreign_keys=[creator_id], uselist=False, lazy="joined") + + universe_id = db.Column(db.BigInteger, db.ForeignKey("universe.id"), nullable=True, index=True) + + def __init__(self, place_id, gamepass_id, universe_id, creator_id): + self.place_id = place_id + self.gamepass_id = gamepass_id + self.universe_id = universe_id + self.creator_id = creator_id + self.created_at = datetime.datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/gameservers.py b/app/models/gameservers.py new file mode 100644 index 0000000..6d84ea8 --- /dev/null +++ b/app/models/gameservers.py @@ -0,0 +1,45 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID +import uuid + +class GameServer(db.Model): + serverId = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, unique=True, default=uuid.uuid4) + serverName = db.Column(db.String(128), nullable=False) + serverIP = db.Column(db.String(128), nullable=False) + serverPort = db.Column(db.Integer, nullable=False) + accessKey = db.Column(db.String(128), nullable=False) + + lastHeartbeat = db.Column(db.DateTime, nullable=True, default=None) + heartbeatResponseTime = db.Column(db.Float, nullable=True, default=0) + isRCCOnline = db.Column(db.Boolean, nullable=False, default=False) + thumbnailQueueSize = db.Column(db.Integer, nullable=False, default=0) + RCCmemoryUsage = db.Column(db.BigInteger, nullable=False, default=0) + + allowThumbnailGen = db.Column(db.Boolean, nullable=False, default=True) # If false, the server will not be able to generate thumbnails + allowGameServerHost = db.Column(db.Boolean, nullable=False, default=True) # If false, the server will not be able to host game servers + + def __init__( + self, + serverId, + serverName, + serverIP, + serverPort, + accessKey, + allowThumbnailGen=True, + allowGameServerHost=True + ): + self.serverId = serverId + self.serverName = serverName + self.serverIP = serverIP + self.serverPort = serverPort + self.accessKey = accessKey + self.allowThumbnailGen = allowThumbnailGen + self.allowGameServerHost = allowGameServerHost + + def __repr__(self): + return "".format( + serverId=self.serverId, + serverName=self.serverName, + serverIP=self.serverIP, + serverPort=self.serverPort + ) \ No newline at end of file diff --git a/app/models/giftcard_key.py b/app/models/giftcard_key.py new file mode 100644 index 0000000..0407664 --- /dev/null +++ b/app/models/giftcard_key.py @@ -0,0 +1,31 @@ +from app.extensions import db +from app.enums.GiftcardType import GiftcardType +from datetime import datetime + +class GiftcardKey(db.Model): + id = db.Column(db.BigInteger, primary_key=True) + key = db.Column(db.String(255), nullable=False) + type = db.Column(db.Enum(GiftcardType), nullable=False) + value = db.Column(db.BigInteger, nullable=True) + + created_at = db.Column(db.DateTime, nullable=False) + redeemed_at = db.Column(db.DateTime, nullable=True) + redeemed_by = db.Column(db.BigInteger, nullable=True) + + def __init__( + self, + key: str, + type: GiftcardType, + value: int = None, + created_at: datetime = None, + ): + if created_at is None: + created_at = datetime.utcnow() + + self.key = key + self.type = type + self.value = value + self.created_at = created_at + + def __repr__(self): + return f'' diff --git a/app/models/groups.py b/app/models/groups.py new file mode 100644 index 0000000..5b62f47 --- /dev/null +++ b/app/models/groups.py @@ -0,0 +1,296 @@ +from app.extensions import db +from datetime import datetime + +class Group(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + owner_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) # Can be nullable since owners can leave groups + name = db.Column(db.String(255), nullable=False, index=True) + description = db.Column(db.String(1024), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + locked = db.Column(db.Boolean, nullable=False, default=False) + + owner = db.relationship('User', backref=db.backref('groups', lazy=True)) + + def __init__( + self, + owner_id, + name, + description, + created_at=None, + updated_at=None, + ): + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + + self.owner_id = owner_id + self.name = name + self.description = description + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.name + +class GroupIcon(db.Model): + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True) + content_hash = db.Column(db.String(512), nullable=False, index=True) + moderation_status = db.Column(db.Integer, nullable=False, default=1) + creator_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('icon', lazy=True, uselist=False), uselist=False) + creator = db.relationship('User', backref=db.backref('group_icons', lazy=True)) + + def __init__( + self, + group_id, + content_hash, + moderation_status, + creator_id, + created_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + + self.group_id = group_id + self.content_hash = content_hash + self.moderation_status = moderation_status + self.creator_id = creator_id + self.created_at = created_at + + def __repr__(self): + return '' % self.group_id + +class GroupSettings(db.Model): + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True) + approval_required = db.Column(db.Boolean, nullable=False, default=False) + enemies_allowed = db.Column(db.Boolean, nullable=False, default=False) + funds_visible = db.Column(db.Boolean, nullable=False, default=False) + games_visible = db.Column(db.Boolean, nullable=False, default=False) + membership_required = db.Column(db.Boolean, nullable=False, default=False) + + last_updated = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('settings', lazy=True, uselist=False), uselist=False) + + def __init__( + self, + group_id, + approval_required = False, + enemies_allowed = False, + funds_visible = False, + games_visible = False, + membership_required = False, + last_updated=None + ): + if last_updated is None: + last_updated = datetime.utcnow() + + self.group_id = group_id + self.approval_required = approval_required + self.enemies_allowed = enemies_allowed + self.funds_visible = funds_visible + self.games_visible = games_visible + self.membership_required = membership_required + self.last_updated = last_updated + + def __repr__(self): + return '' % self.group_id + +class GroupRole(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + name = db.Column(db.String(255), nullable=False) + description = db.Column(db.String(255), nullable=False) + rank = db.Column(db.Integer, nullable=False, default=1) + member_count = db.Column(db.Integer, nullable=False, default=0) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('roles', lazy=True)) + + def __init__( + self, + group_id, + name, + description, + rank, + member_count, + created_at=None, + updated_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + + self.group_id = group_id + self.name = name + self.description = description + self.rank = rank + self.member_count = member_count + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.name + +class GroupRolePermission(db.Model): + group_role_id = db.Column(db.BigInteger, db.ForeignKey('group_role.id'), primary_key=True) + # One to one relationship + group_roleset = db.relationship('GroupRole', backref=db.backref('permissions', uselist=False, lazy=True), lazy=True, uselist=False) + + delete_from_wall = db.Column(db.Boolean, nullable=False, default=False) + post_to_wall = db.Column(db.Boolean, nullable=False, default=False) + invite_members = db.Column(db.Boolean, nullable=False, default=False) + post_to_status = db.Column(db.Boolean, nullable=False, default=False) + remove_members = db.Column(db.Boolean, nullable=False, default=False) + view_status = db.Column(db.Boolean, nullable=False, default=False) + view_wall = db.Column(db.Boolean, nullable=False, default=False) + change_rank = db.Column(db.Boolean, nullable=False, default=False) + advertise_group = db.Column(db.Boolean, nullable=False, default=False) + manage_relationships = db.Column(db.Boolean, nullable=False, default=False) + add_group_places = db.Column(db.Boolean, nullable=False, default=False) + view_audit_logs = db.Column(db.Boolean, nullable=False, default=False) + create_items = db.Column(db.Boolean, nullable=False, default=False) + manage_items = db.Column(db.Boolean, nullable=False, default=False) + spend_group_funds = db.Column(db.Boolean, nullable=False, default=False) + manage_clan = db.Column(db.Boolean, nullable=False, default=False) + manage_group_games = db.Column(db.Boolean, nullable=False, default=False) + + def __init__( + self, + group_role_id + ): + self.group_role_id = group_role_id + + def __repr__(self): + return '' % self.group_role_id + +class GroupMember(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + group_role_id = db.Column(db.BigInteger, db.ForeignKey('group_role.id'), nullable=False, index=True) + + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('members', lazy=True)) + user = db.relationship('User', backref=db.backref('group_members', lazy=True)) + group_role = db.relationship('GroupRole', backref=db.backref('members', lazy=True)) + + def __init__( + self, + group_id, + user_id, + group_role_id, + created_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + self.group_id = group_id + self.user_id = user_id + self.group_role_id = group_role_id + + def __repr__(self): + return '' % self.id + +class GroupEconomy(db.Model): + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True) + robux_balance = db.Column(db.BigInteger, nullable=False, default=0) + tix_balance = db.Column(db.BigInteger, nullable=False, default=0) + + group = db.relationship('Group', backref=db.backref('economy', lazy=True, uselist=False), uselist=False) + + def __init__( + self, + group_id + ): + self.group_id = group_id + + def __repr__(self): + return '' % self.group_id + +class GroupJoinRequest(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('join_requests', lazy=True)) + user = db.relationship('User', backref=db.backref('group_join_requests', lazy=True)) + + def __init__( + self, + group_id, + user_id, + created_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + self.group_id = group_id + self.user_id = user_id + self.created_at = created_at + + def __repr__(self): + return '' % self.id + +class GroupStatus(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + poster_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + content = db.Column(db.String(1024), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('statuses', lazy=True)) + poster = db.relationship('User', backref=db.backref('group_statuses', lazy=True)) + + def __init__( + self, + group_id, + poster_id, + content, + created_at=None + ): + self.group_id = group_id + self.poster_id = poster_id + self.content = content + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + + def __repr__(self): + return '' % self.id + +class GroupWallPost(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + poster_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + content = db.Column(db.String(1024), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('wall_posts', lazy=True)) + poster = db.relationship('User', backref=db.backref('group_wall_posts', lazy=True, uselist=False), uselist=False) + + def __init__( + self, + group_id, + poster_id, + content, + created_at=None + ): + self.group_id = group_id + self.poster_id = poster_id + self.content = content + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/invite_key.py b/app/models/invite_key.py new file mode 100644 index 0000000..a2a26ac --- /dev/null +++ b/app/models/invite_key.py @@ -0,0 +1,25 @@ +from app.extensions import db +from datetime import datetime + +class InviteKey(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + key = db.Column(db.String(255), nullable=False) # NEXIUM-randomstring + created_at = db.Column(db.DateTime, nullable=False) + created_by = db.Column(db.BigInteger, db.ForeignKey('user.id') ,nullable=True, index=True) + used_by = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True) + used_on = db.Column(db.DateTime, nullable=True) + + creator = db.relationship('User', backref=db.backref('invite_keys', lazy=True), foreign_keys=[created_by], uselist=False) + user = db.relationship('User', backref=db.backref('used_invite_keys', lazy=True), foreign_keys=[used_by], uselist=False) + + def __init__( + self, + key, + created_by + ): + self.key = key + self.created_by = created_by + self.created_at = datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/kofi_transaction.py b/app/models/kofi_transaction.py new file mode 100644 index 0000000..3310cb3 --- /dev/null +++ b/app/models/kofi_transaction.py @@ -0,0 +1,41 @@ +from app.extensions import db + +class KofiTransaction(db.Model): + kofi_transaction_id = db.Column(db.Text, primary_key=True) + timestamp = db.Column(db.DateTime, nullable=False) + donation_type = db.Column(db.Text, nullable=False) + amount = db.Column(db.Float, nullable=False) + currency = db.Column(db.Text, nullable=False) + is_subscription_payment = db.Column(db.Boolean, nullable=False) + message = db.Column(db.Text, nullable=False) + from_name = db.Column(db.Text, nullable=False) + from_email = db.Column(db.Text, nullable=False) + + assigned_key = db.Column(db.Text ,nullable=True) + + def __init__( + self, + kofi_transaction_id, + timestamp, + donation_type, + amount, + currency, + is_subscription_payment, + message, + from_name, + from_email, + assigned_key=None + ): + self.kofi_transaction_id = kofi_transaction_id + self.timestamp = timestamp + self.donation_type = donation_type + self.amount = amount + self.currency = currency + self.is_subscription_payment = is_subscription_payment + self.message = message + self.from_name = from_name + self.from_email = from_email + self.assigned_key = assigned_key + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/legacy_data_persistence.py b/app/models/legacy_data_persistence.py new file mode 100644 index 0000000..0c2ba71 --- /dev/null +++ b/app/models/legacy_data_persistence.py @@ -0,0 +1,31 @@ +from app.extensions import db +from datetime import datetime + +class LegacyDataPersistence( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True ) + userid = db.Column( db.BigInteger, nullable=False, index=True ) + placeid = db.Column( db.BigInteger, nullable=False, index=True ) # DEPRECATED + data = db.Column( db.LargeBinary, nullable=False ) + + last_updated = db.Column( db.DateTime, nullable=False ) + + universe_id = db.Column( db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True ) + + def __init__( + self, + userid, + placeid, + universe_id + ): + self.userid = userid + self.placeid = placeid + self.last_updated = datetime.utcnow() + self.universe_id = universe_id + + def __repr__(self): + return "".format( + id=self.id, + userid=self.userid, + placeid=self.placeid + ) + diff --git a/app/models/limited_item_transfers.py b/app/models/limited_item_transfers.py new file mode 100644 index 0000000..bda0190 --- /dev/null +++ b/app/models/limited_item_transfers.py @@ -0,0 +1,33 @@ +from app.extensions import db +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod + +from datetime import datetime + +class LimitedItemTransfer(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + + original_owner_id = db.Column(db.BigInteger, nullable=False, index=True) + new_owner_id = db.Column(db.BigInteger, nullable=False, index=True) + + asset_id = db.Column(db.BigInteger, nullable=False, index=True) + user_asset_id = db.Column(db.BigInteger, nullable=False, index=True) + transferred_at = db.Column(db.DateTime, nullable=False) + + transfer_method = db.Column(db.Enum(LimitedItemTransferMethod), nullable=False, index=True) + purchased_price = db.Column(db.BigInteger, nullable=True, default=None) + associated_trade_id = db.Column(db.BigInteger, nullable=True, default=None) + + def __init__(self, original_owner_id, new_owner_id, asset_id, user_asset_id, transfer_method=LimitedItemTransferMethod.Purchase, transferred_at=None, purchased_price=None, associated_trade_id = None): + self.original_owner_id = original_owner_id + self.new_owner_id = new_owner_id + self.asset_id = asset_id + self.user_asset_id = user_asset_id + self.transfer_method = transfer_method + + if transferred_at is None: + self.transferred_at = datetime.utcnow() + else: + self.transferred_at = transferred_at + + self.purchased_price = purchased_price + self.associated_trade_id = associated_trade_id \ No newline at end of file diff --git a/app/models/linked_discord.py b/app/models/linked_discord.py new file mode 100644 index 0000000..c401c09 --- /dev/null +++ b/app/models/linked_discord.py @@ -0,0 +1,49 @@ +from app.extensions import db +from datetime import datetime + +class LinkedDiscord(db.Model): + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True) + discord_id = db.Column(db.BigInteger, nullable=False) + discord_username = db.Column(db.String(255), nullable=False) + discord_discriminator = db.Column(db.String(255), nullable=True) + discord_avatar = db.Column(db.Text, nullable=True) + discord_access_token = db.Column(db.String(512), nullable=True) + discord_refresh_token = db.Column(db.String(512), nullable=True) + discord_expiry = db.Column(db.DateTime, nullable=True) + + last_updated = db.Column(db.DateTime, nullable=False) + linked_on = db.Column(db.DateTime, nullable=False) + + user = db.relationship('User', backref=db.backref('discord', lazy=True)) + + def __init__(self, + user_id, + discord_id, + discord_username, + discord_discriminator, + discord_avatar, + discord_access_token, + discord_refresh_token, + discord_expiry, + last_updated=None, + linked_on=None + ): + self.user_id = user_id + self.discord_id = discord_id + self.discord_username = discord_username + self.discord_discriminator = discord_discriminator + self.discord_avatar = discord_avatar + self.discord_access_token = discord_access_token + self.discord_refresh_token = discord_refresh_token, + self.discord_expiry = discord_expiry + + if last_updated is None: + self.last_updated = datetime.utcnow() + else: + self.last_updated = last_updated + if linked_on is None: + self.linked_on = datetime.utcnow() + else: + self.linked_on = linked_on + def __repr__(self): + return '' % self.user_id \ No newline at end of file diff --git a/app/models/login_records.py b/app/models/login_records.py new file mode 100644 index 0000000..c51b705 --- /dev/null +++ b/app/models/login_records.py @@ -0,0 +1,21 @@ +from app.extensions import db + +class LoginRecord(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + ip = db.Column(db.Text, nullable=False, index=True) + useragent = db.Column(db.Text, nullable=False) + timestamp = db.Column(db.DateTime, nullable=False) + session_token = db.Column(db.Text, nullable=True, index=True) + + User = db.relationship('User', backref=db.backref('login_records', lazy=True), uselist=False) + + def __init__(self, userid, ip, useragent, timestamp, session_token = None): + self.userid = userid + self.ip = ip + self.useragent = useragent + self.timestamp = timestamp + self.session_token = session_token + + def __repr__(self): + return ''.format(self.id, self.userid, self.ip) \ No newline at end of file diff --git a/app/models/messages.py b/app/models/messages.py new file mode 100644 index 0000000..839b0ed --- /dev/null +++ b/app/models/messages.py @@ -0,0 +1,33 @@ +from app.extensions import db +from datetime import datetime + +class Message( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True, nullable=False ) + sender_id = db.Column( db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True ) + recipient_id = db.Column( db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True ) + created = db.Column( db.DateTime, nullable=False ) + read = db.Column( db.Boolean, nullable=False ) + subject = db.Column( db.String( 128 ), nullable=False ) + content = db.Column( db.Text, nullable=False ) + + sender = db.relationship( "User", foreign_keys=[sender_id], uselist=False) + recipient = db.relationship( "User", foreign_keys=[recipient_id], uselist=False) + + def __init__( + self, + sender_id, + recipient_id, + content, + subject, + + read=False + ): + self.sender_id = sender_id + self.recipient_id = recipient_id + self.content = content + self.read = read + self.subject = subject + self.created = datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/moderator_note.py b/app/models/moderator_note.py new file mode 100644 index 0000000..9cac09b --- /dev/null +++ b/app/models/moderator_note.py @@ -0,0 +1,36 @@ +from app.extensions import db +from datetime import datetime + +class ModeratorNote( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True ) + user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True) + note_creator_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True) + note = db.Column( db.Text ) + + created_at = db.Column( db.DateTime, index=True, nullable=False ) + updated_at = db.Column( db.DateTime, index=True, nullable=False ) + + related_action_id = db.Column( db.BigInteger, db.ForeignKey('user_ban.id'), nullable = True, index = True) + + def __init__( self, user_id, note_creator_id, note, related_action_id = None ): + self.user_id = user_id + self.note_creator_id = note_creator_id + self.note = note + self.related_action_id = related_action_id + + self.created_at = datetime.utcnow() + self.updated_at = datetime.utcnow() + + def __repr__( self ): + return '' % self.id + +class ModeratorNoteAttachment( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True ) + moderator_note_id = db.Column( db.BigInteger, db.ForeignKey( 'moderator_note.id' ), index = True) + attachment_hash = db.Column( db.String( 512 ), index = True, nullable = False ) + attachment_name = db.Column( db.String( 512 ), index = True, nullable = False ) + + def __init__( self, moderator_note_id, attachment_hash, attachment_name ): + self.moderator_note_id = moderator_note_id + self.attachment_hash = attachment_hash + self.attachment_name = attachment_name \ No newline at end of file diff --git a/app/models/package_asset.py b/app/models/package_asset.py new file mode 100644 index 0000000..2fd3f32 --- /dev/null +++ b/app/models/package_asset.py @@ -0,0 +1,13 @@ +from app.extensions import db + +class PackageAsset( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True) + package_asset_id = db.Column( db.BigInteger, nullable=False, index=True ) + asset_id = db.Column( db.BigInteger, nullable=False ) + + def __init__( self, package_asset_id, asset_id ): + self.package_asset_id = package_asset_id + self.asset_id = asset_id + + def __repr__( self ): + return '' % self.package_asset_id \ No newline at end of file diff --git a/app/models/past_usernames.py b/app/models/past_usernames.py new file mode 100644 index 0000000..0c7b031 --- /dev/null +++ b/app/models/past_usernames.py @@ -0,0 +1,16 @@ +from app.extensions import db +from datetime import datetime + +class PastUsername(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + username = db.Column(db.Text, nullable=False) + created = db.Column(db.DateTime, nullable=False) + + def __init__(self, user_id, username): + self.user_id = user_id + self.username = username + self.created = datetime.utcnow() + + def __repr__(self): + return ''.format(self.username, str(self.id)) diff --git a/app/models/place.py b/app/models/place.py new file mode 100644 index 0000000..6382adb --- /dev/null +++ b/app/models/place.py @@ -0,0 +1,51 @@ +from app.extensions import db +from app.models.asset import Asset +from app.enums.PlaceYear import PlaceYear +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.enums.ChatStyle import ChatStyle + +class Place( db.Model ): + placeid = db.Column( db.BigInteger, db.ForeignKey('asset.id') ,primary_key=True, nullable=False, unique=True ) # Should be the same as the asset id + visitcount = db.Column( db.BigInteger, nullable=False, default=0 ) + is_public = db.Column( db.Boolean, nullable=False, default=True ) + maxplayers = db.Column( db.BigInteger, nullable=False, default=10 ) + placeyear = db.Column( db.Enum( PlaceYear ), nullable=False, default=PlaceYear.Sixteen ) + featured = db.Column( db.Boolean, nullable=False, default=False, index=True) + bc_required = db.Column( db.Boolean, nullable=False, default=False, index=True) + rig_choice = db.Column( db.Enum( PlaceRigChoice ), nullable=False, default=PlaceRigChoice.UserChoice ) + chat_style = db.Column( db.Enum( ChatStyle ), nullable=False, default=ChatStyle.ClassicAndBubble ) + min_account_age = db.Column( db.Integer, nullable=False, default=0) + + parent_universe_id = db.Column( db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True ) + + assetObj = db.relationship( 'Asset', backref=db.backref('place', lazy=True, uselist=False), uselist=False ) + + def __init__( + self, + placeid, + visitcount = 0, + is_public = True, + maxplayers = 10, + placeyear = PlaceYear.Sixteen, + rig_choice = PlaceRigChoice.UserChoice, + chat_style = ChatStyle.ClassicAndBubble, + min_account_age = 0, + parent_universe_id = None + ): + self.placeid = placeid + self.visitcount = visitcount + self.is_public = is_public + self.maxplayers = maxplayers + self.placeyear = placeyear + self.rig_choice = rig_choice + self.chat_style = chat_style + self.min_account_age = min_account_age + self.parent_universe_id = parent_universe_id + + def __repr__(self): + return "".format( + placeid=self.placeid, + visitcount=self.visitcount, + is_public=self.is_public, + maxplayers=self.maxplayers + ) \ No newline at end of file diff --git a/app/models/place_badge.py b/app/models/place_badge.py new file mode 100644 index 0000000..3a2a6e8 --- /dev/null +++ b/app/models/place_badge.py @@ -0,0 +1,48 @@ +from app.extensions import db +from datetime import datetime + +class PlaceBadge( db.Model ): + id = db.Column( db.BigInteger, primary_key=True ) + associated_place_id = db.Column( db.BigInteger, db.ForeignKey( 'place.placeid' ), index = True ) # DEPRECATED + icon_image_id = db.Column( db.BigInteger, db.ForeignKey( 'asset.id' ), nullable = False ) + + name = db.Column( db.String( 255 ), nullable = False ) + description = db.Column( db.String( 1024 ), nullable = False ) + created_at = db.Column( db.DateTime, nullable = False, index = True ) + updated_at = db.Column( db.DateTime, nullable = False, index = True ) + + enabled = db.Column( db.Boolean, nullable = False, default = True ) + asset_reward = db.Column( db.BigInteger, nullable = True, default = None ) + + universe_id = db.Column( db.BigInteger, db.ForeignKey( 'universe.id' ), nullable = True, index = True ) + + def __init__( self, name, description, icon_image_id, associated_place_id, universe_id): + self.name = name + self.description = description + self.icon_image_id = icon_image_id + self.associated_place_id = associated_place_id + self.universe_id = universe_id + + self.created_at = datetime.utcnow() + self.updated_at = datetime.utcnow() + + def __repr__( self ): + return '' % self.id + +class UserBadge( db.Model ): + id = db.Column( db.BigInteger, primary_key=True ) + badge_id = db.Column( db.BigInteger, db.ForeignKey( 'place_badge.id' ), index = True ) + user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True ) + + awarded_at = db.Column( db.DateTime, nullable = False, index = True ) + + badge = db.relationship( 'PlaceBadge', backref = db.backref( 'user_badges', lazy = 'dynamic' ) ) + + def __init__( self, badge_id, user_id ): + self.badge_id = badge_id + self.user_id = user_id + + self.awarded_at = datetime.utcnow() + + def __repr__( self ): + return '' % self.id \ No newline at end of file diff --git a/app/models/place_datastore.py b/app/models/place_datastore.py new file mode 100644 index 0000000..08752d5 --- /dev/null +++ b/app/models/place_datastore.py @@ -0,0 +1,34 @@ +from app.extensions import db +from datetime import datetime + +class PlaceDatastore( db.Model ): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + placeid = db.Column(db.BigInteger, nullable=False, index=True) # DEPRECATED + + scope = db.Column(db.String(255), nullable=False, index=True) + key = db.Column(db.String(255), nullable=False, index=True) + name = db.Column(db.String(255), nullable=False) + value = db.Column(db.String(1024 * 1024), nullable=False) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + + universe_id = db.Column(db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True) + + def __init__(self, placeid, scope, key, name, value, created_at=None, updated_at=None, universe_id = None): + self.placeid = placeid + self.scope = scope + self.key = key + self.name = name + self.value = value + self.universe_id = universe_id + + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/place_developer_product.py b/app/models/place_developer_product.py new file mode 100644 index 0000000..22a0542 --- /dev/null +++ b/app/models/place_developer_product.py @@ -0,0 +1,48 @@ +from app.extensions import db +from datetime import datetime + +class DeveloperProduct( db.Model ): + productid = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True ) + placeid = db.Column( db.BigInteger, db.ForeignKey( 'place.placeid' ), nullable=True, index=True ) # DEPRECATED + name = db.Column( db.String( 256 ), nullable=False ) + description = db.Column( db.String( 1024 ), nullable=False ) + iconimage_assetid = db.Column( db.BigInteger, db.ForeignKey( 'asset.id' ), nullable=True, index=True ) + + robux_price = db.Column( db.BigInteger, nullable=False, default = 0 ) + sales_count = db.Column( db.BigInteger, nullable=False, default = 0 ) + is_for_sale = db.Column( db.Boolean, nullable=False, default = False ) + + created_at = db.Column( db.DateTime, nullable=False ) + updated_at = db.Column( db.DateTime, nullable=False ) + + creator_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), nullable=False, index=True ) + universe_id = db.Column( db.BigInteger, db.ForeignKey( 'universe.id' ), nullable=True, index=True ) + + placeObj = db.relationship( 'Place', lazy='joined', uselist=False ) + creatorObj = db.relationship( 'User', lazy='joined', uselist=False ) + iconimageObj = db.relationship( 'Asset', lazy='joined', uselist=False ) + + def __init__( self, placeid, name, description, iconimage_assetid, creator_id, universe_id ): + self.placeid = placeid + self.name = name + self.description = description + self.iconimage_assetid = iconimage_assetid + self.creator_id = creator_id + self.universe_id = universe_id + + self.created_at = datetime.utcnow() + self.updated_at = datetime.utcnow() + + def __repr__( self ): + return "".format( + productid=self.productid, + placeid=self.placeid, + name=self.name, + description=self.description, + iconimage_assetid=self.iconimage_assetid, + robux_price=self.robux_price, + sales_count=self.sales_count, + created_at=self.created_at, + updated_at=self.updated_at, + creator_id=self.creator_id + ) \ No newline at end of file diff --git a/app/models/place_icon.py b/app/models/place_icon.py new file mode 100644 index 0000000..cd4c2cc --- /dev/null +++ b/app/models/place_icon.py @@ -0,0 +1,22 @@ +from app.extensions import db + +class PlaceIcon(db.Model): + placeid = db.Column(db.BigInteger, db.ForeignKey('asset.id'), primary_key=True, nullable=False, unique=True) + contenthash = db.Column(db.String(512), nullable=True) + updated_at = db.Column(db.DateTime, nullable=True) + moderation_status = db.Column(db.SmallInteger, nullable=False, default=1) # Asset thumbnail moderation status ( 0 = Approved, 1 = Pending, 2 = Declined ) + + asset = db.relationship('Asset', backref=db.backref('place_icon', lazy=True, uselist=False), uselist=False) + + def __init__(self, placeid, contenthash, updated_at, moderation_status=1): + self.placeid = placeid + self.contenthash = contenthash + self.updated_at = updated_at + self.moderation_status = moderation_status + + def __repr__(self): + return "".format( + placeid=self.placeid, + contenthash=self.contenthash, + updated_at=self.updated_at + ) \ No newline at end of file diff --git a/app/models/place_ordered_datastore.py b/app/models/place_ordered_datastore.py new file mode 100644 index 0000000..fa6975b --- /dev/null +++ b/app/models/place_ordered_datastore.py @@ -0,0 +1,33 @@ +from app.extensions import db +from datetime import datetime + +class PlaceOrderedDatastore( db.Model ): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + placeid = db.Column(db.BigInteger, nullable=False) + + scope = db.Column(db.String(255), nullable=False) + key = db.Column(db.String(255), nullable=False) + name = db.Column(db.String(255), nullable=False) + value = db.Column(db.BigInteger, nullable=False) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + + universe_id = db.Column(db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True) + + def __init__(self, placeid, scope, key, name, value, created_at=None, updated_at=None, universe_id=None): + self.placeid = placeid + self.scope = scope + self.key = key + self.name = name + self.value = value + + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/placeserver_players.py b/app/models/placeserver_players.py new file mode 100644 index 0000000..86f8577 --- /dev/null +++ b/app/models/placeserver_players.py @@ -0,0 +1,23 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID + +class PlaceServerPlayer(db.Model): + userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True, nullable=False, unique=True) + serveruuid = db.Column(UUID(as_uuid=True), nullable=False, index=True) + joinTime = db.Column(db.DateTime, nullable=False) + lastHeartbeat = db.Column(db.DateTime, nullable=True, default=None) + + user = db.relationship('User', backref=db.backref('placeserver_players', lazy=True), uselist=False) + + def __init__(self, userid, serveruuid, joinTime): + self.userid = userid + self.serveruuid = serveruuid + self.joinTime = joinTime + self.lastHeartbeat = joinTime + + def __repr__(self): + return "".format( + userid=self.userid, + serveruuid=self.serveruuid, + joinTime=self.joinTime + ) diff --git a/app/models/placeservers.py b/app/models/placeservers.py new file mode 100644 index 0000000..8c715df --- /dev/null +++ b/app/models/placeservers.py @@ -0,0 +1,52 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID +from datetime import datetime, timedelta + +class PlaceServer(db.Model): + serveruuid = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, unique=True) + originServerId = db.Column(UUID(as_uuid=True), nullable=False, index=True) + serverIP = db.Column(db.String(128), nullable=False) + serverPort = db.Column(db.Integer, nullable=False) + + serverPlaceId = db.Column(db.BigInteger, nullable=False, index=True) + serverRunningTime = db.Column(db.BigInteger, nullable=False, default=0) + + playerCount = db.Column(db.Integer, nullable=False, default=0) + maxPlayerCount = db.Column(db.Integer, nullable=False, default=20) + + lastping = db.Column(db.DateTime, nullable=True) + + reservedServerAccessCode = db.Column(db.Text, nullable=True) + + def __init__( + self, + serveruuid, + originServerId, + serverIP, + serverPort, + serverPlaceId, + + serverRunningTime=0, + playerCount=0, + maxPlayerCount=20, + reservedServerAccessCode=None + ): + self.serveruuid = serveruuid + self.originServerId = originServerId + self.serverIP = serverIP + self.serverPort = serverPort + self.serverPlaceId = serverPlaceId + self.serverRunningTime = serverRunningTime + self.playerCount = playerCount + self.maxPlayerCount = maxPlayerCount + self.lastping = datetime.utcnow() + self.reservedServerAccessCode = reservedServerAccessCode + + def __repr__(self): + return "".format( + serveruuid=self.serveruuid, + originServerId=self.originServerId, + serverIP=self.serverIP, + serverPort=self.serverPort, + serverPlaceId=self.serverPlaceId + ) diff --git a/app/models/pointsservice.py b/app/models/pointsservice.py new file mode 100644 index 0000000..5b7a480 --- /dev/null +++ b/app/models/pointsservice.py @@ -0,0 +1,15 @@ +from app.extensions import db + +class PointsService(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + placeId = db.Column(db.BigInteger, nullable=False, index=True) + userId = db.Column(db.BigInteger, nullable=False, index=True) + points = db.Column(db.BigInteger, nullable=False, default=0) + + def __init__(self, placeId, userId, points): + self.placeId = placeId + self.userId = userId + self.points = points + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/previously_played.py b/app/models/previously_played.py new file mode 100644 index 0000000..3663743 --- /dev/null +++ b/app/models/previously_played.py @@ -0,0 +1,16 @@ +from app.extensions import db +from datetime import datetime + +class PreviouslyPlayed(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, unique=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + lastplayed = db.Column(db.DateTime, nullable=False) + placeid = db.Column(db.BigInteger, nullable=False, index=True) + + def __init__(self, userid, placeid): + self.userid = userid + self.placeid = placeid + self.lastplayed = datetime.utcnow() + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/product_receipt.py b/app/models/product_receipt.py new file mode 100644 index 0000000..918418f --- /dev/null +++ b/app/models/product_receipt.py @@ -0,0 +1,31 @@ +from app.extensions import db +from datetime import datetime + +class ProductReceipt( db.Model ): + receipt_id = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True ) + user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), nullable=False, index=True ) + product_id = db.Column( db.BigInteger, db.ForeignKey( 'developer_product.productid' ), nullable=False, index=True ) + robux_amount = db.Column( db.BigInteger, nullable=False ) + is_processed = db.Column( db.Boolean, nullable=False, default = False ) + + created_at = db.Column( db.DateTime, nullable=False ) + + userObj = db.relationship( 'User', lazy='joined', uselist=False ) + productObj = db.relationship( 'DeveloperProduct', lazy='joined', uselist=False ) + + def __init__( self, user_id, product_id, robux_amount ): + self.user_id = user_id + self.product_id = product_id + self.robux_amount = robux_amount + + self.created_at = datetime.utcnow() + + def __repr__( self ): + return "".format( + receipt_id=self.receipt_id, + user_id=self.user_id, + product_id=self.product_id, + robux_amount=self.robux_amount, + is_processed=self.is_processed, + created_at=self.created_at + ) \ No newline at end of file diff --git a/app/models/universe.py b/app/models/universe.py new file mode 100644 index 0000000..69c343d --- /dev/null +++ b/app/models/universe.py @@ -0,0 +1,56 @@ +from app.extensions import db +from datetime import datetime +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.enums.PlaceYear import PlaceYear + +class Universe( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True, nullable=False ) + root_place_id = db.Column( db.BigInteger, nullable=False, index=True, unique=True ) + creator_id = db.Column( db.BigInteger, nullable=False, index=True ) + creator_type = db.Column( db.SmallInteger, nullable=False ) + + created_at = db.Column( db.DateTime, nullable=False ) + updated_at = db.Column( db.DateTime, nullable=False ) + + place_rig_choice = db.Column( db.Enum( PlaceRigChoice ), nullable=False, default = PlaceRigChoice.UserChoice ) + place_year = db.Column( db.Enum( PlaceYear ), nullable=False, default = PlaceYear.Sixteen ) + is_featured = db.Column( db.Boolean, nullable=False, default = False, index=True ) + minimum_account_age = db.Column( db.Integer, nullable=False, default = 0 ) + bc_required = db.Column( db.Boolean, nullable=False, default = False, index=True ) + allow_direct_join = db.Column( db.Boolean, nullable=False, default = False, index=True ) + is_public = db.Column( db.Boolean, nullable=False, default = True, index=True ) + moderation_status = db.Column( db.SmallInteger, nullable=False, default = 0, index=True ) + visit_count = db.Column( db.BigInteger, nullable=False, default = 0, index=True ) + + def __init__( + self, + root_place_id : int, + creator_id : int, + creator_type : int, + + place_rig_choice : PlaceRigChoice = PlaceRigChoice.UserChoice, + place_year : PlaceYear = PlaceYear.Sixteen, + is_featured : bool = False, + minimum_account_age : int = 0, + bc_required : bool = False, + allow_direct_join : bool = False, + is_public : bool = True, + + updated_at : datetime = None, + created_at : datetime = None + ): + self.root_place_id = root_place_id + self.creator_id = creator_id + self.creator_type = creator_type + + self.place_rig_choice = place_rig_choice + self.place_year = place_year + + self.is_featured = is_featured + self.minimum_account_age = minimum_account_age + self.bc_required = bc_required + self.allow_direct_join = allow_direct_join + self.is_public = is_public + + self.created_at = datetime.utcnow() if created_at is None else created_at + self.updated_at = datetime.utcnow() if updated_at is None else updated_at \ No newline at end of file diff --git a/app/models/user.py b/app/models/user.py new file mode 100644 index 0000000..f0ea84b --- /dev/null +++ b/app/models/user.py @@ -0,0 +1,25 @@ +from app.extensions import db + +class User(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, unique=True, nullable=False) + username = db.Column(db.Text, index=True, unique=True, nullable=False) + password = db.Column(db.Text, nullable=False) + + created = db.Column(db.DateTime, nullable=False) + description = db.Column(db.Text, nullable=False, default="") + lastonline = db.Column(db.DateTime, nullable=False) + + # 1 = OK, 2 = Banned, 3 = Deleted, 4 = Forgotten + accountstatus = db.Column(db.Integer, nullable=False, default=1) + TOTPEnabled = db.Column(db.Boolean, nullable=False, default=False) + + def __init__( self, username, password, created, lastonline): + self.username = username + self.password = password + self.created = created + self.lastonline = lastonline + self.description = "Hi! I just joined NEXIUM!" + + def __repr__(self): + return ''.format(self.username, str(self.id)) + diff --git a/app/models/user_avatar.py b/app/models/user_avatar.py new file mode 100644 index 0000000..696e671 --- /dev/null +++ b/app/models/user_avatar.py @@ -0,0 +1,43 @@ +from app.extensions import db + +class UserAvatar(db.Model): + user_id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) # User ID + content_hash = db.Column(db.String(512), nullable=True, default=None) # User avatar content hash + avatar_type = db.Column(db.SmallInteger, nullable=False, default=1) # Deprecated + + # Refer to https://create.roblox.com/docs/reference/engine/datatypes/BrickColor + # for BrickColor IDs and names + # The only IDs that should be used is 1001-1032 + head_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar head color ID + torso_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar torso color ID + right_arm_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar right arm color ID + left_arm_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar left arm color ID + right_leg_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar right leg color ID + left_leg_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar left leg color ID + + r15 = db.Column(db.Boolean, nullable=True, default=False) # Is the user using R15? + + height_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar height scale + width_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar width scale + head_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar head scale + proportion_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar proportion scale + body_type_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar body type scale + + def __init__( + self, + user_id + ): + self.user_id = user_id + + def __repr__(self): + return "".format( + user_id=self.user_id, + content_hash=self.content_hash, + avatar_type=self.avatar_type, + head_color_id=self.head_color_id, + torso_color_id=self.torso_color_id, + right_arm_color_id=self.right_arm_color_id, + left_arm_color_id=self.left_arm_color_id, + right_leg_color_id=self.right_leg_color_id, + left_leg_color_id=self.left_leg_color_id + ) \ No newline at end of file diff --git a/app/models/user_avatar_asset.py b/app/models/user_avatar_asset.py new file mode 100644 index 0000000..313f68b --- /dev/null +++ b/app/models/user_avatar_asset.py @@ -0,0 +1,22 @@ +from app.extensions import db + +class UserAvatarAsset(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) # ID + user_id = db.Column(db.BigInteger, nullable=False, index=True) # User ID + asset_id = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Asset ID + + asset = db.relationship('Asset', uselist=False) + + def __init__( + self, + user_id, + asset_id + ): + self.user_id = user_id + self.asset_id = asset_id + + def __repr__(self): + return "".format( + user_id=self.user_id, + asset_id=self.asset_id + ) \ No newline at end of file diff --git a/app/models/user_ban.py b/app/models/user_ban.py new file mode 100644 index 0000000..3764491 --- /dev/null +++ b/app/models/user_ban.py @@ -0,0 +1,40 @@ +from app.extensions import db +from datetime import datetime, timedelta +from app.enums.BanType import BanType + +class UserBan(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False) + author_userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False) + reason = db.Column(db.String(512), nullable=False) + ban_type = db.Column(db.Enum(BanType), nullable=False) + moderator_note = db.Column(db.String(512), nullable=True) + + created_at = db.Column(db.DateTime, nullable=False) + expires_at = db.Column(db.DateTime, nullable=True) + + acknowledged = db.Column(db.Boolean, nullable=False, default=False) + + def __init__( + self, + userid: int, + author_userid: int, + reason: str, + ban_type: BanType, + moderator_note: str, + expires_at: datetime, + created_at: datetime = None + ): + self.userid = userid + self.author_userid = author_userid + self.reason = reason + self.ban_type = ban_type + self.moderator_note = moderator_note + self.expires_at = expires_at + + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + + def __repr__(self): + return f'' \ No newline at end of file diff --git a/app/models/user_email.py b/app/models/user_email.py new file mode 100644 index 0000000..eb2e932 --- /dev/null +++ b/app/models/user_email.py @@ -0,0 +1,19 @@ +from app.extensions import db +from datetime import datetime + +class UserEmail( db.Model ): + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True) + email = db.Column(db.String(256), nullable=False, primary_key=True) + verified = db.Column(db.Boolean, nullable=False, default=False) + updated_at = db.Column(db.DateTime, nullable=False) + + user = db.relationship("User", foreign_keys=[user_id], uselist=False, lazy="joined") + + def __init__(self, user_id, email, verified): + self.user_id = user_id + self.email = email + self.verified = verified + self.updated_at = datetime.utcnow() + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/user_hwid_log.py b/app/models/user_hwid_log.py new file mode 100644 index 0000000..3b16973 --- /dev/null +++ b/app/models/user_hwid_log.py @@ -0,0 +1,18 @@ +from app.extensions import db +from datetime import datetime, timedelta + +class UserHWIDLog( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True, nullable = False ) + user_id = db.Column( db.BigInteger, db.ForeignKey( "user.id" ), nullable = False, index=True) + hwid = db.Column( db.Text, nullable = False, index=True ) + created_at = db.Column( db.DateTime, nullable = False ) + + def __init__( + self, + user_id, + hwid, + created_at = None + ): + self.user_id = user_id + self.hwid = hwid + self.created_at = created_at or datetime.utcnow() \ No newline at end of file diff --git a/app/models/user_membership.py b/app/models/user_membership.py new file mode 100644 index 0000000..a49b2ba --- /dev/null +++ b/app/models/user_membership.py @@ -0,0 +1,24 @@ +from app.extensions import db +from app.enums.MembershipType import MembershipType +from datetime import datetime, timedelta + +class UserMembership(db.Model): + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True) + membership_type = db.Column(db.Enum(MembershipType), nullable=False) + created = db.Column(db.DateTime, nullable=True) + expiration = db.Column(db.DateTime, nullable=True) + next_stipend = db.Column(db.DateTime, nullable=True) + + def __init__(self, user_id, membership_type, created, expiration): + self.user_id = user_id + self.membership_type = membership_type + self.created = created + self.expiration = expiration + if created is not None: + self.next_stipend = created + timedelta(hours=24) + else: + self.next_stipend = None + + def __repr__(self): + return '' % self.user_id + \ No newline at end of file diff --git a/app/models/user_thumbnail.py b/app/models/user_thumbnail.py new file mode 100644 index 0000000..2d2c659 --- /dev/null +++ b/app/models/user_thumbnail.py @@ -0,0 +1,24 @@ +from app.extensions import db + +class UserThumbnail(db.Model): + userid = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) + full_contenthash = db.Column(db.String(512), nullable=True) + headshot_contenthash = db.Column(db.String(512), nullable=True) + full_3dcontenthash = db.Column(db.String(512), nullable=True) # column for 3D avatar + updated_at = db.Column(db.DateTime, nullable=True) + + def __init__(self, userid, full_contenthash, headshot_contenthash, updated_at, full_3dcontenthash=None): + self.userid = userid + self.full_contenthash = full_contenthash + self.headshot_contenthash = headshot_contenthash + self.full_3dcontenthash = full_3dcontenthash + self.updated_at = updated_at + + def __repr__(self): + return "".format( + userid=self.userid, + full_contenthash=self.full_contenthash, + headshot_contenthash=self.headshot_contenthash, + full_3dcontenthash=self.full_3dcontenthash, + updated_at=self.updated_at + ) diff --git a/app/models/user_trade_items.py b/app/models/user_trade_items.py new file mode 100644 index 0000000..6af6013 --- /dev/null +++ b/app/models/user_trade_items.py @@ -0,0 +1,17 @@ +from app.extensions import db + +class UserTradeItem(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + tradeid = db.Column(db.BigInteger, nullable=False, index=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + user_asset_id = db.Column(db.BigInteger, db.ForeignKey("user_asset.id"), nullable=False) + + userasset = db.relationship("UserAsset", backref="tradeitems", lazy=True) + + def __init__(self, tradeid : int, userid : int, user_asset_id : int): + self.tradeid = tradeid + self.userid = userid + self.user_asset_id = user_asset_id + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/user_trades.py b/app/models/user_trades.py new file mode 100644 index 0000000..a8d52df --- /dev/null +++ b/app/models/user_trades.py @@ -0,0 +1,39 @@ +from app.extensions import db +from app.enums.TradeStatus import TradeStatus +from datetime import datetime, timedelta +class UserTrade(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + sender_userid = db.Column(db.BigInteger, nullable=False, index=True) + recipient_userid = db.Column(db.BigInteger, nullable=False, index=True) + + sender_userid_robux = db.Column(db.BigInteger, nullable=False, default=0) # Robux the sender is offering + recipient_userid_robux = db.Column(db.BigInteger, nullable=False, default=0) # Robux the recipient is offering + + status = db.Column(db.Enum(TradeStatus), nullable=False, default=TradeStatus.Pending) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + expires_at = db.Column(db.DateTime, nullable=False) + + def __init__( + self, + sender_userid : int, + recipient_userid : int, + sender_userid_robux : int = 0, + recipient_userid_robux : int = 0, + status : TradeStatus = TradeStatus.Pending, + created_at : datetime = None, + updated_at : datetime = None, + expires_at : datetime = None + ): + self.sender_userid = sender_userid + self.recipient_userid = recipient_userid + self.sender_userid_robux = sender_userid_robux + self.recipient_userid_robux = recipient_userid_robux + self.status = status + self.created_at = created_at or datetime.utcnow() + self.updated_at = updated_at or datetime.utcnow() + self.expires_at = expires_at or datetime.utcnow() + timedelta(days=7) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/user_transactions.py b/app/models/user_transactions.py new file mode 100644 index 0000000..3662f38 --- /dev/null +++ b/app/models/user_transactions.py @@ -0,0 +1,51 @@ +from app.extensions import db +from app.enums.TransactionType import TransactionType +from sqlalchemy import Enum +from datetime import datetime + +class UserTransaction(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + + reciever_id = db.Column(db.BigInteger, nullable=False, index=True) + reciever_type = db.Column(db.Integer, nullable=False, default=0) # 0 = User, 1 = Group + sender_id = db.Column(db.BigInteger, nullable=False, index=True) + sender_type = db.Column(db.Integer, nullable=False, default=0) # 0 = User, 1 = Group + + currency_amount = db.Column(db.BigInteger, nullable=False) + currency_type = db.Column(db.Integer, nullable=False, default=0) # 0 = Robux, 1 = Tix + + assetId = db.Column(db.BigInteger, nullable=True, default=None, index=True) + custom_text = db.Column(db.Text, nullable=True, default=None) + + transaction_type = db.Column(Enum(TransactionType), nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + def __init__( + self, + reciever_id, + reciever_type, + sender_id, + sender_type, + currency_amount, + currency_type, + transaction_type, + asset_id=None, + custom_text=None, + created_at=None + ): + self.reciever_id = reciever_id + self.reciever_type = reciever_type + self.sender_id = sender_id + self.sender_type = sender_type + self.currency_amount = currency_amount + self.currency_type = currency_type + self.transaction_type = transaction_type + self.assetId = asset_id + self.custom_text = custom_text + + if created_at is None: + self.created_at = datetime.utcnow() + else: + self.created_at = created_at + def __repr__(self): + return "" % self.id \ No newline at end of file diff --git a/app/models/userassets.py b/app/models/userassets.py new file mode 100644 index 0000000..448727a --- /dev/null +++ b/app/models/userassets.py @@ -0,0 +1,43 @@ +from app.extensions import db +from datetime import datetime + +class UserAsset(db.Model): + id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + assetid = db.Column(db.BigInteger, db.ForeignKey("asset.id"), nullable=False, index=True) + + serial = db.Column(db.BigInteger, nullable=True, default=None) + price = db.Column(db.BigInteger, nullable=False, default=0) + + created = db.Column(db.DateTime, nullable=False) + updated = db.Column(db.DateTime, nullable=False) + + is_for_sale = db.Column(db.Boolean, nullable=False, default=False) + + asset = db.relationship("Asset", foreign_keys=[assetid], uselist=False, lazy="joined") + + def __init__( + self, + userid, + assetid, + + serial=None, + price=0 + ): + self.userid = userid + self.assetid = assetid + self.serial = serial + self.price = price + self.created = datetime.utcnow() + self.updated = datetime.utcnow() + + def __repr__(self): + return "".format( + id=self.id, + userid=self.userid, + assetid=self.assetid, + serial=self.serial, + price=self.price, + created=self.created, + updated=self.updated + ) \ No newline at end of file diff --git a/app/models/usereconomy.py b/app/models/usereconomy.py new file mode 100644 index 0000000..3aaffa0 --- /dev/null +++ b/app/models/usereconomy.py @@ -0,0 +1,16 @@ +from app.extensions import db + +class UserEconomy(db.Model): + userid = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True, unique=True, nullable=False ) + robux = db.Column(db.Integer, nullable=False, default=0) + tix = db.Column(db.Integer, nullable=False, default=0) + + user = db.relationship('User', backref=db.backref('economy', lazy=True, uselist=False), uselist=False) + + def __init__(self, userid, robux, tix): + self.userid = userid + self.robux = robux + self.tix = tix + + def __repr__(self): + return ''.format(self.userid, str(self.robux), str(self.tix)) \ No newline at end of file diff --git a/app/pages/403.html b/app/pages/403.html new file mode 100644 index 0000000..383feb2 --- /dev/null +++ b/app/pages/403.html @@ -0,0 +1,31 @@ +{% extends '__layout__.html' %} +{% block title %}Not Found{% endblock %} +{% block head %} +{% endblock %} +{% block content %} + +
+
+

403 Forbidden

+

You do not have the required permission to access this page, please contact an administrator if you think this is a mistake.

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/404.html b/app/pages/404.html new file mode 100644 index 0000000..378b34d --- /dev/null +++ b/app/pages/404.html @@ -0,0 +1,33 @@ +{% extends '__layout__.html' %} +{% block title %}Not Found{% endblock %} +{% block head %} +{% endblock %} +{% block content %} + +
+
+

404 Not Found

+

This page does not exist or has been removed, we apologise for any inconvenience caused.

+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/pages/405.html b/app/pages/405.html new file mode 100644 index 0000000..df6cbe4 --- /dev/null +++ b/app/pages/405.html @@ -0,0 +1,31 @@ +{% extends '__layout__.html' %} +{% block title %}Method Not Allowed{% endblock %} +{% block head %} +{% endblock %} +{% block content %} + +
+
+

405 Method Not Allowed

+

The method is not allowed for the requested URL.

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/500.html b/app/pages/500.html new file mode 100644 index 0000000..b9ef295 --- /dev/null +++ b/app/pages/500.html @@ -0,0 +1,44 @@ +{% extends '__layout__.html' %} +{% block title %}Not Found{% endblock %} +{% block head %} +{% endblock %} +{% block content %} + +
+
+

500 Internal Server Error

+

Uh oh, something went wrong on our end, we apologise for any inconvenience caused.

+ {% if error %} +
+ + +
+ {% endif %} +

Route: {{page}} | Please report this error in our Discord Server

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/__embed__.html b/app/pages/__embed__.html new file mode 100644 index 0000000..3fb7f3f --- /dev/null +++ b/app/pages/__embed__.html @@ -0,0 +1,20 @@ + + + + + {{ og_title }} - {{ site_name }} + + + + {% if og_description %}{% endif %} + + + + + + + + +
{{ og_title }} + + diff --git a/app/pages/__layout__.html b/app/pages/__layout__.html new file mode 100644 index 0000000..27c1ba0 --- /dev/null +++ b/app/pages/__layout__.html @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + {% if currentuser: %}{% endif %} + + + {% block title %}{% endblock %} - NEXIUM + + {% block head %}{% endblock %} + + + + {% block content %}{% endblock %} + {% if currentuser: %} + + {% endif %} + + + + + + + \ No newline at end of file diff --git a/app/pages/__layout__.html.1 b/app/pages/__layout__.html.1 new file mode 100644 index 0000000..088b4a2 --- /dev/null +++ b/app/pages/__layout__.html.1 @@ -0,0 +1,156 @@ + + + + {% block title %}{% endblock %} - Nexium + + + + + {% if currentuser: %} + + {% endif %} + + + + + + + + + + + + + + + + + + + + {% if currentuser: %}{% endif %} + + {% block head %}{% endblock %} + + + + {% if website_wide_message: %} + + {% endif %} + + {% if currentuser: %} + + + + + + {% endif %} + +
+ {% block content %}{% endblock %} +
+ + {% if currentuser: %} +
+
+ {% endif %} + + {% if currentuser: %} + + + + + + + + + + + + + +
+ +
+
+ +
+ {% endif %} + + + + + \ No newline at end of file diff --git a/app/pages/about.html b/app/pages/about.html new file mode 100644 index 0000000..72a303c --- /dev/null +++ b/app/pages/about.html @@ -0,0 +1,7 @@ +{% extends '__layout__.html' %} +{% block title %}About us{% endblock %} +{% block content %} +
+

About NEXIUM

+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/admin.py b/app/pages/admin/admin.py new file mode 100644 index 0000000..c912ada --- /dev/null +++ b/app/pages/admin/admin.py @@ -0,0 +1,3309 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from functools import wraps +from app.extensions import db, redis_controller, csrf, limiter +import uuid +import json +import base64 +import re +from datetime import datetime, timedelta, timezone +from app.enums.AssetType import AssetType +import hashlib +import os +import requests +import logging +import secrets +import random +import time +import requests +import threading +import string +from sqlalchemy import or_, and_, func +from config import Config +config = Config() + +from app.routes.asset import migrateAsset +from app.util import auth, assetversion, discord, redislock, announcement +from app.services import economy, gameserver_comm +from app.models.admin_permissions import AdminPermissions +from app.models.user import User +from app.models.gameservers import GameServer +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.fflag_group import FflagGroup +from app.models.fflag_value import FflagValue +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.models.asset_moderation_link import AssetModerationLink +from app.models.asset_thumbnail import AssetThumbnail +from app.models.place_icon import PlaceIcon +from app.models.past_usernames import PastUsername +from app.models.usereconomy import UserEconomy +from app.models.login_records import LoginRecord +from app.models.place import Place +from app.models.linked_discord import LinkedDiscord +from app.models.user_ban import UserBan +from app.models.giftcard_key import GiftcardKey +from app.models.invite_key import InviteKey +from app.models.groups import Group, GroupIcon +from app.models.userassets import UserAsset +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user_hwid_log import UserHWIDLog +from app.models.game_session_log import GameSessionLog +from app.models.user_transactions import UserTransaction +from app.models.moderator_note import ModeratorNote +from app.models.universe import Universe +from app.models.limited_item_transfers import LimitedItemTransfer +from app.models.user_email import UserEmail +from app.models.messages import Message +from app.models.friend_request import FriendRequest +from app.models.friend_relationship import FriendRelationship +from app.models.follow_relationship import FollowRelationship +from app.models.groups import GroupMember, GroupJoinRequest, GroupWallPost +from app.models.user_avatar import UserAvatar +from app.models.user_thumbnail import UserThumbnail +from app.enums.GiftcardType import GiftcardType +from app.enums.BanType import BanType +from app.enums.TransactionType import TransactionType +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from app.routes.jobreporthandler import EvictPlayer +from app.routes.thumbnailer import TakeThumbnail, TakeUserThumbnail +from app.pages.admin.permissionsdefinition import PermissionsDefinition +from app.pages.messages.messages import CreateSystemMessage +from app.services import invitekeys as invitekeyservice + +def GetCreatorOfAsset( AssetObj : Asset ) -> User | Group | None: + if AssetObj.creator_type == 0: + return User.query.filter_by(id=AssetObj.creator_id).first() + elif AssetObj.creator_type == 1: + return Group.query.filter_by(id=AssetObj.creator_id).first() + return None + +def AdminPermissionRequired(permission): + UserObj : User = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id, permission=permission).first() + if UserAdminPermission is None: + abort(403) + +def HasAdminPermission(permission) -> bool: + UserObj : User = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id, permission=permission).first() + if UserAdminPermission is None: + return False + return True + +def IsUserAnAdministrator( UserObj : User, AvoidCache : bool = False) -> bool: + if not AvoidCache: + CachedResult = redis_controller.get(f"IsUserAnAdministrator:Lookup:{UserObj.id}") + if CachedResult is not None: + try: + return CachedResult == "1" + except: + pass + isUserAdministrator = AdminPermissions.query.filter_by(userid=UserObj.id).first() is not None + redis_controller.set(f"IsUserAnAdministrator:Lookup:{UserObj.id}", int(isUserAdministrator), ex = 60) + + return isUserAdministrator + +def GetAmountOfPendingAssets( AvoidCache : bool = False ) -> int: + if not AvoidCache: + CachedResult = redis_controller.get("GetAmountOfPendingAssets:Lookup") + if CachedResult is not None: + try: + return int(CachedResult) + except: + pass + PendingAssetsCount = Asset.query.filter_by(moderation_status=1).count() + PlaceIcon.query.filter_by(moderation_status=1).count() + AssetThumbnail.query.filter_by(moderation_status=1).count() + GroupIcon.query.filter_by(moderation_status=1).count() + redis_controller.set("GetAmountOfPendingAssets:Lookup", str(PendingAssetsCount), ex = 10) + + return PendingAssetsCount + +def MustBeAdmin(f): + @wraps(f) + def decorated_function(*args, **kwargs): + if not auth.isAuthenticated(): + return redirect("/login") + UserObj : User = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id).first() + if UserAdminPermission is None: + return redirect("/home") + return f(*args, **kwargs) + return decorated_function + +def GetAdminPermissions(): + # Get admin permissions for the current user + # and returns them in a array + UserObj : User = auth.GetCurrentUser() + UserAdminPermissions = AdminPermissions.query.filter_by(userid=UserObj.id).all() + if UserAdminPermissions is None: + return [] + UserAdminPermissionsArray = [] + for UserAdminPermission in UserAdminPermissions: + UserAdminPermissionsArray.append(UserAdminPermission.permission) + return UserAdminPermissionsArray + +AdminRoute = Blueprint('admin', __name__, url_prefix='/admin') + +@AdminRoute.before_request +def before_request(): + if not auth.isAuthenticated(): + return redirect("/login") + UserObj = auth.GetCurrentUser() # Fixed line + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id).first() + if UserAdminPermission is None: + return redirect("/home") + + +@AdminRoute.route('/', methods=['GET']) +def admin(): + userPermissions = [] + for permission in GetAdminPermissions(): + if permission in PermissionsDefinition: + userPermissions.append(PermissionsDefinition[permission]) + AuthenticatedUser : User = auth.GetCurrentUser() + stats = {} + stats['UsersPlaying'] = PlaceServerPlayer.query.count() + stats['PlaceServersCount'] = PlaceServer.query.count() + stats['UsersOnline'] = User.query.filter(User.lastonline > (datetime.utcnow() - timedelta(minutes=1))).count() + stats['UsersSignedUpToday'] = User.query.filter(User.created > (datetime.utcnow() - timedelta(days=1))).count() + stats['PendingAssets'] = Asset.query.filter_by(moderation_status=1).count() + PlaceIcon.query.filter_by(moderation_status=1).count() + AssetThumbnail.query.filter_by(moderation_status=1).count() + GroupIcon.query.filter_by(moderation_status=1).count() + stats['SystemTime'] = datetime.utcnow() + return render_template('admin/index.html', permissions = userPermissions, stats = stats, user = AuthenticatedUser) + +@AdminRoute.route('/gameservers', methods=['GET']) +def gameservers(): + AdminPermissionRequired('GameServerManager') + + gameServers = GameServer.query.all() + + return render_template('admin/gameservers/index.html', gameservers = gameServers) + +@AdminRoute.route('/gameservers/', methods=['GET']) +def gameservers_view(serverid): + AdminPermissionRequired('GameServerManager') + + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + + return render_template('admin/gameservers/view.html', gameserver = gameServer) + +@AdminRoute.route('/gameservers//delete', methods=['GET']) +def gameservers_delete(serverid): + AdminPermissionRequired('GameServerManager') + + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + return render_template("/admin/gameservers/delete.html", gameserver = gameServer) + +@AdminRoute.route('/gameservers//delete', methods=['POST']) +def gameservers_delete_post(serverid): + AdminPermissionRequired('GameServerManager') + + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + + db.session.delete(gameServer) + db.session.commit() + + return redirect("/admin/gameservers") + +@AdminRoute.route('/gameservers//edit', methods=['POST']) +def gameservers_edit(serverid): + AdminPermissionRequired('GameServerManager') + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + if request.form['name'] == "" or request.form['serverip'] == "" or request.form['serverport'] == "" or request.form['accesskey'] == "": + flash("Please fill in all fields", "danger") + return redirect("/admin/gameservers/" + serverid) + + gameServer.serverName = request.form['name'] + gameServer.serverIP = request.form['serverip'] + gameServer.serverPort = request.form['serverport'] + gameServer.accessKey = request.form['accesskey'] + gameServer.allowThumbnailGen = True if 'isThumbnailer' in request.form else False + gameServer.allowGameServerHost = True if 'isGameHoster' in request.form else False + db.session.commit() + + flash("Game server updated", "success") + return redirect("/admin/gameservers/" + serverid) + +@AdminRoute.route("/gameservers//refresh-accesskey", methods=['GET', 'POST']) +def gameservers_refresh_accesskey(serverid): + AdminPermissionRequired('GameServerManager') + GameServerObj : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if GameServerObj is None: + return abort(404) + + if request.method == "GET": + return render_template("admin/gameservers/refresh_accesskey.html", gameserver = GameServerObj) + else: + NewAccessKey = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(secrets.choice(range(60, 91)))) + req_response = gameserver_comm.perform_post( + TargetGameserver = GameServerObj, + Endpoint = "ResetAccessKeyAndRestart", + JSONData = { + "NewAccessKey": NewAccessKey + }, + RequestTimeout = 30 + ) + + if req_response.status_code != 200: + flash("Failed to send request to game server", "danger") + return redirect(f"/admin/gameservers/{serverid}") + + GameServerObj.accessKey = NewAccessKey + db.session.commit() + + flash("Access key reset and game server restarted", "success") + return redirect(f"/admin/gameservers/{serverid}") + +@AdminRoute.route('/gameservers/create', methods=['GET']) +def gameservers_create(): + AdminPermissionRequired('GameServerManager') + + return render_template('admin/gameservers/create.html') + +@AdminRoute.route('/gameservers/create', methods=['POST']) +def gameservers_create_post(): + AdminPermissionRequired('GameServerManager') + if request.form['name'] == "" or request.form['serverip'] == "" or request.form['serverport'] == "" or request.form['accesskey'] == "": + flash("Please fill in all fields", "danger") + return redirect("/admin/gameservers/create") + newServerID = str(uuid.uuid4()) + gameServer = GameServer( + serverId = newServerID, + serverName= request.form['name'], + serverIP = request.form['serverip'], + serverPort = request.form['serverport'], + accessKey = request.form['accesskey'], + allowThumbnailGen = True if 'isThumbnailer' in request.form else False, + allowGameServerHost = True if 'isGameHoster' in request.form else False + ) + db.session.add(gameServer) + db.session.commit() + + return redirect("/admin/gameservers/" + newServerID) + +@AdminRoute.route('/websitemessage', methods=['GET']) +def websitemessage(): + AdminPermissionRequired('UpdateWebsiteMessage') + + return render_template('admin/websitewidemsg.html', message = redis_controller.get("website_wide_message") or "") + +@AdminRoute.route('/websitemessage', methods=['POST']) +def websitemessage_post(): + AdminPermissionRequired('UpdateWebsiteMessage') + + raw_message = request.form.get('message', '').strip() + + is_valid, error_msg = announcement.validate_announcement(raw_message) + if not is_valid: + flash(f"Invalid announcement: {error_msg}", "danger") + return redirect("/admin/websitemessage") + + sanitized_message = announcement.sanitize_announcement(raw_message) + + AuthenticatedUser: User = auth.GetCurrentUser() + announcement.log_announcement_to_discord( + username=AuthenticatedUser.username, + user_id=AuthenticatedUser.id, + message=sanitized_message, + action="updated" + ) + + redis_controller.set("website_wide_message", sanitized_message) + flash("Announcement updated successfully", "success") + return redirect("/admin/websitemessage") + +@AdminRoute.route('/fflags', methods=['GET']) +def fflags(): + AdminPermissionRequired('ManageFFlags') + + return render_template('admin/fflagsettings/index.html', groups = FflagGroup.query.all()) + +@AdminRoute.route('/fflags/', methods=['GET']) +def fflags_view(groupid : int): + AdminPermissionRequired('ManageFFlags') + + FFlagGroupObj : FflagGroup = FflagGroup.query.filter_by(group_id=groupid).first() + if FFlagGroupObj is None: + return redirect("/admin/fflags") + PageNumber = max( request.args.get('page', default=1, type=int), 1 ) + SearchQuery = request.args.get('search', default=None, type=str) + GroupFlagsPagination = FflagValue.query.filter_by(group_id=groupid) + + if SearchQuery is not None: + GroupFlagsPagination = GroupFlagsPagination.filter(FflagValue.name.ilike(f"%{SearchQuery}%")) + + GroupFlagsPagination = GroupFlagsPagination.paginate( + page = PageNumber, + per_page = 50, + error_out = False + ) + return render_template('admin/fflagsettings/view.html', group = FFlagGroupObj, FFlagsLookupResults = GroupFlagsPagination, flagcount = GroupFlagsPagination.total, search = SearchQuery) + +@AdminRoute.route('/fflags//import', methods=['POST']) +def fflags_import(groupid: int): + from app.routes.fflagssettings import ClearCache + AdminPermissionRequired('ManageFFlags') + + group: FflagGroup = FflagGroup.query.filter_by(group_id=groupid).first() + if group is None: + return redirect("/admin/fflags") + + if 'file' not in request.files: + flash("No file uploaded", "danger") + return redirect(f"/admin/fflags/{str(groupid)}") + + file = request.files['file'] + + if file.filename == '': + flash("Filename empty", "danger") + return redirect(f"/admin/fflags/{str(groupid)}") + + try: + json.loads(file.read(2000000)) # no worker freezing (2mb limit) + except: + flash("Invalid JSON file", "danger") + return redirect(f"/admin/fflags/{str(groupid)}") + + try: + FflagValue.query.filter_by(group_id=groupid).delete() + db.session.commit() + + file.seek(0) + data = json.loads(file.read()) + for flag in data: + FlagName = flag + FlagValue = data[flag] + + FlagType = 1 + try: + if isinstance(FlagValue, str): + if FlagValue.lower() == "true": + FlagValue = True + elif FlagValue.lower() == "false": + FlagValue = False + else: + raise Exception() + except: + try: + FlagValue = int(FlagValue) + FlagType = 2 + except: + FlagType = 3 + + newFlag = FflagValue( + group_id=groupid, + name=FlagName, + flag_type=FlagType, + flag_value=base64.b64encode(str(FlagValue).encode('utf-8')).decode('utf-8') + ) + db.session.add(newFlag) + + group.updated_at = datetime.utcnow() + db.session.commit() + ClearCache(groupid) + flash("Flags imported", "success") + return redirect(f"/admin/fflags/{str(groupid)}") + + except Exception as e: + db.session.rollback() + flash(f"Error importing flags: {str(e)}", "danger") + return redirect(f"/admin/fflags/{str(groupid)}") + +@AdminRoute.route('/fflags/create', methods=['GET', 'POST']) +def fflags_create(): + AdminPermissionRequired('ManageFFlags') + + if request.method == 'POST': + name = request.form.get('name', '').strip() + description = request.form.get('description', '').strip() + enabled = request.form.get('enabled', 'false') == 'true' + apikey = request.form.get('apikey', '').strip() + gameserver_only = request.form.get('gameserver_only', 'false') == 'true' + category = request.form.get('category', '2019+') + + if not name: + flash("Group name is required", "danger") + return redirect("/admin/fflags/create") + + if not description: + flash("Description is required", "danger") + return redirect("/admin/fflags/create") + + if not apikey: + flash("API Key is required", "danger") + return redirect("/admin/fflags/create") + + if FflagGroup.query.filter_by(name=name).first() is not None: + flash("A group with this name already exists", "danger") + return redirect("/admin/fflags/create") + + try: + if category == "2019+": + if not name.startswith("application_"): + name = f"application_{name}" + + last_group = FflagGroup.query.order_by(FflagGroup.group_id.desc()).first() + new_group_id = last_group.group_id + 1 if last_group else 1 + + current_time = datetime.utcnow() + new_group = FflagGroup( + group_id=new_group_id, + name=name, + description=description, + created_at=current_time, + enabled=enabled, + apikey=apikey + ) + new_group.gameserver_only = gameserver_only + new_group.updated_at = current_time + + db.session.add(new_group) + db.session.commit() + + flash("FFlag group created successfully", "success") + return redirect(f"/admin/fflags/{new_group.group_id}") + + except Exception as e: + db.session.rollback() + flash(f"Error creating FFlag group: {str(e)}", "danger") + return redirect("/admin/fflags/create") + + return render_template('admin/fflagsettings/create.html') + + +@AdminRoute.route("/asset-copier", methods=['GET']) +def asset_copier(): + AdminPermissionRequired('CopyAssets') + return render_template('admin/assetcopier.html') + +@AdminRoute.route("/asset-copier", methods=['POST']) +def asset_copier_post(): + AdminPermissionRequired('CopyAssets') + AssetURL = request.form.get('asseturl') + if AssetURL is None: + flash("No URL provided", "danger") + return redirect("/admin/asset-copier") + if AssetURL == "": + flash("URL is empty", "danger") + return redirect("/admin/asset-copier") + AssetRegex = re.compile(r"https?://([a-z0-9-]+\.)*roblox\.com/catalog/(\d+)/") # makes sure the host is roblox, can be www.roblox.com or roblox.com or web.roblox.com etc etc + AssetMatch = AssetRegex.search(request.form.get("asseturl")) + if AssetMatch is None: + flash("Invalid asset URL", "error") + return redirect("/admin/asset-copier") + AssetID = AssetMatch.group(2) + # Check if asset exists + if not AssetID.isdigit(): abort(400) # prevent potential dos + AssetObj = Asset.query.filter_by(roblox_asset_id=int(AssetID)).first() + if AssetObj is not None: + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + AuthenticatedUser = auth.GetAuthenticatedUser(request.cookies.get(".ROBLOSECURITY")) + AssetMigrationCooldown = redis_controller.get(f"asset_migration_cooldown_{str(AuthenticatedUser.id)}") + if AssetMigrationCooldown is not None and AuthenticatedUser.id != 1: + flash(f"You are copying assets too fast!", "danger") + return redirect("/admin/asset-copier") + redis_controller.set(f"asset_migration_cooldown_{str(AuthenticatedUser.id)}", "1", 20) + + # Migrate asset + NewAsset : Asset = migrateAsset(int(AssetID), forceMigration=False, allowedTypes=[2, 8, 11, 12, 17, 18, 19, 41, 42, 43, 44, 45, 46, 47], creatorId=1, keepRobloxId=False, migrateInfo=True) + if NewAsset is None: + flash("Failed to migrate asset", "danger") + return redirect("/admin/asset-copier") + TakeThumbnail(NewAsset.id) + return redirect(f"/admin/manage-assets/{str(NewAsset.id)}") + +def IsItemInReleasePool( AssetId : int ) -> bool: + return redis_controller.lrange("ItemReleasePool:Items", 0, -1).count(str(AssetId)) > 0 +def GetNextItemDropDateTime() -> datetime: + LastItemDropTimestamp : str | None = redis_controller.get("ItemReleasePool:LastDropTimestamp") + if LastItemDropTimestamp is None: + LastItemDropTimestamp = round(time.time()) + else: + try: + LastItemDropTimestamp = int(LastItemDropTimestamp) + except Exception as e: + logging.warn(f"Admin > GetNextItemDropDateTime: Exception raised while trying to convert to integer, {str(e)}") + LastItemDropTimestamp = round(time.time()) + RandomSeed = f"{LastItemDropTimestamp}-{config.FLASK_SESSION_KEY}" + random.seed( RandomSeed ) + NextDropDatetime = datetime.utcfromtimestamp( LastItemDropTimestamp + random.randint( 60 * 60 * 6, 60 * 60 * 20 ) ) + return NextDropDatetime + +def InsertItemIntoItemReleasePool( AssetObj : Asset, Name : str, Description : str, RobuxPrice : int = 0, TicketsPrice : int = 0, IsLimited : bool = False, IsLimitedUnique : bool = False, SerialCount : int | None = None, OffsaleAfter : timedelta | None = None ): + if IsItemInReleasePool( AssetObj.id ): + raise Exception("InsertItemIntoItemReleasePool: Attempted to insert item which is already inside item release pool") + if RobuxPrice < 0 or TicketsPrice < 0: + raise Exception("InsertItemIntoItemReleasePool: RobuxPrice and TicketsPrice cannot be a negative integer") + if IsLimitedUnique: + IsLimited = True + + ItemReleaseMetaData = json.dumps({ + "Name" : Name, + "Description" : Description, + "RobuxPrice" : RobuxPrice, + "TicketsPrice" : TicketsPrice, + "IsLimited" : IsLimited, + "IsLimitedUnique" : IsLimitedUnique, + "SerialCount": SerialCount, + "OffsaleAfter" : None if OffsaleAfter is None else OffsaleAfter.total_seconds() + }) + + redis_controller.set(f"ItemReleasePool:Item_Metadata:{AssetObj.id}", ItemReleaseMetaData) + redis_controller.rpush("ItemReleasePool:Items", str(AssetObj.id)) + logging.info(f"Inserted Item {AssetObj.id} into Item Release Pool") + + AssetObj.name = "Asset" + AssetObj.description = "" + AssetObj.price_robux = 0 + AssetObj.price_tix = 0 + AssetObj.is_limited = False + AssetObj.is_limited_unique = False + AssetObj.moderation_status = 2 # Hides the asset from people scraping every asset + + db.session.commit() + +@AdminRoute.route("/manage-assets/", methods=['GET']) +@AdminRoute.route("/manage-assets", methods=['GET']) +def manage_assets(assetid = None): + AdminPermissionRequired('ManageAsset') + if assetid is not None: + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]:#[1,2,3,4,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + CanManageItemReleasePool = HasAdminPermission("ManageItemReleases") + IsItemEligibleForItemReleasePool = AssetObj.is_for_sale is False and AssetObj.is_limited is False and AssetObj.sale_count == 0 + return render_template('admin/manageassets.html', asset = AssetObj, CanManageItemReleasePool = CanManageItemReleasePool, IsItemEligibleForItemReleasePool = IsItemEligibleForItemReleasePool) + return render_template('admin/manageassets.html') + +@AdminRoute.route("/manage-assets//insert-item-pool", methods=['GET']) +def insert_item_into_pool( assetid : int ): + AdminPermissionRequired('ManageAsset') + AdminPermissionRequired('ManageItemReleases') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]:#[1,2,3,4,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + + if IsItemInReleasePool(AssetObj.id): + flash("Item is already inside the item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + IsItemEligibleForItemReleasePool = AssetObj.is_for_sale is False and AssetObj.is_limited is False and AssetObj.sale_count == 0 + if not IsItemEligibleForItemReleasePool: + flash("Item is not eligible for item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + return render_template('admin/insertitemrelasepool.html', asset = AssetObj) + +@AdminRoute.route("/manage-assets//insert-item-pool", methods=['POST']) +def insert_item_into_pool_post( assetid : int ): + AdminPermissionRequired('ManageAsset') + AdminPermissionRequired('ManageItemReleases') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]:#[1,2,3,4,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + + if IsItemInReleasePool(AssetObj.id): + flash("Item is already inside the item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + IsItemEligibleForItemReleasePool = AssetObj.is_for_sale is False and AssetObj.is_limited is False and AssetObj.sale_count == 0 + if not IsItemEligibleForItemReleasePool: + flash("Item is not eligible for item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + AssetName = request.form.get('assetname', default=AssetObj.name, type=str) + AssetDescription = request.form.get('assetdescription', default=AssetObj.description, type=str) + AssetPriceRobux = request.form.get('assetpricerobux', default = None, type=int) + AssetPriceTickets = request.form.get('assetpricetix', default = None, type=int) + AssetSerialAmount = request.form.get('assetserialamount', default = None, type=int) + isLimited = request.form.get('isLimited') == "on" + isLimitedUnique = request.form.get('isLimitedUnique') == "on" + + if AssetName is None or AssetName == "": + flash("Asset name is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetDescription is None: + flash("Asset description is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + + if isLimitedUnique: + isLimited = True + if not HasAdminPermission("ModifyLimitedAssets") and isLimited: + flash("You do not have permission to create Limiteds", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetSerialAmount < 0: + flash("Asset serial amount cannot be negative", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetPriceRobux < 0 or AssetPriceRobux > 1000000: + flash("Asset Robux price must be in range ( 0 - 1000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetPriceTickets < 0 or AssetPriceTickets > 10000000: + flash("Asset Tix price must be in range ( 0 - 10000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetSerialAmount > 0 and not isLimitedUnique: + flash("Asset serial cannot be greater than 0 if not a limited unique", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + + AssetOffsaleHours = request.form.get('offsale-at-hours', default=None, type=int) + AssetOffsaleMinutes = request.form.get('offsale-at-minutes', default=None, type=int) + AssetOffsaleSeconds = request.form.get('offsale-at-seconds', default=None, type=int) + if AssetOffsaleHours is not None or AssetOffsaleMinutes is not None or AssetOffsaleSeconds is not None: + AssetOffsaleHours = AssetOffsaleHours or 0 + AssetOffsaleMinutes = AssetOffsaleMinutes or 0 + AssetOffsaleSeconds = AssetOffsaleSeconds or 0 + + OffsaleDelta = timedelta( + hours = AssetOffsaleHours, + minutes = AssetOffsaleMinutes, + seconds = AssetOffsaleSeconds + ) + if timedelta(minutes = 5) > OffsaleDelta: + flash("Offsale Time cannot be lesser than 5 minutes", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + else: + OffsaleDelta = None + + if OffsaleDelta and isLimited: + flash("Limited unique assets cannot have a offsale date", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + + InsertItemIntoItemReleasePool( + AssetObj = AssetObj, + Name = AssetName, + Description = AssetDescription, + RobuxPrice = AssetPriceRobux, + TicketsPrice = AssetPriceTickets, + IsLimited = isLimited, + IsLimitedUnique = isLimitedUnique, + SerialCount = AssetSerialAmount + ) + + flash("Successfully inserted item into item release pool", "success") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + +@AdminRoute.route("/item-release-pool", methods=["GET"]) +def item_release_pool_view(): + AdminPermissionRequired('ManageItemReleases') + PlannedItems = [] + AllAssetIds = redis_controller.lrange("ItemReleasePool:Items", 0, -1) + for AssetId in AllAssetIds: + AssetMetadata = redis_controller.get(f"ItemReleasePool:Item_Metadata:{AssetId}") + if AssetMetadata is None: + logging.warn(f"item_release_pool_view failed to get asset metadata for {AssetId}, removing it from list") + redis_controller.lrem("ItemReleasePool:Items", 0, AssetId) + return + try: + AssetMetadata = json.loads(AssetMetadata) + except Exception as e: + logging.warn(f"item_release_pool_view failed to parse json from item metadata {AssetId}, {str(e)}") + redis_controller.lrem("ItemReleasePool:Items", 0, AssetId) + return + + PlannedItems.append({ + "id": int(AssetId), + "name": AssetMetadata["Name"], + "description": AssetMetadata["Description"], + "robux_price": AssetMetadata["RobuxPrice"], + "tickets_price": AssetMetadata["TicketsPrice"], + "is_limited": AssetMetadata["IsLimited"], + "is_limited_unique": AssetMetadata["IsLimitedUnique"], + "serial_count": AssetMetadata["SerialCount"], + "offsale_after": AssetMetadata["OffsaleAfter"] + }) + + if HasAdminPermission("ViewItemReleasePoolDrop"): + NextItemDropDatetime = f"{GetNextItemDropDateTime()} UTC" + else: + NextItemDropDatetime = "You do not have permission to view the next Drop Time" + + return render_template("admin/itemreleasepool.html", PlannedItems=PlannedItems, NextItemDropDatetime=NextItemDropDatetime) + + +@AdminRoute.route("/manage-assets", methods=['POST']) +def manage_assets_post(): + AdminPermissionRequired('ManageAsset') + AssetID = request.form.get('assetid') + if AssetID is None: + flash("No asset ID provided", "danger") + return redirect("/admin/manage-assets") + if AssetID == "": + flash("Asset ID is empty", "danger") + return redirect("/admin/manage-assets") + AssetObj : Asset = Asset.query.filter_by(id=int(AssetID)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + return redirect(f"/admin/manage-assets/{str(AssetID)}") + +from app.extensions import scheduler +def SetAssetOffsaleJob( assetId : int ): + with scheduler.app.app_context(): + AssetObj : Asset = Asset.query.filter_by(id=assetId).first() + if AssetObj is None: + return + if AssetObj.offsale_at is None: + return + if AssetObj.offsale_at > datetime.utcnow() + timedelta(minutes=5): + logging.warning(f"Asset {str(AssetObj.id)} has a offsale date in the future more than 5 minutes diff, skipping") + return + AssetObj.is_for_sale = False + AssetObj.offsale_at = None + db.session.commit() + logging.info(f"Asset {str(AssetObj.id)} has been set offsale at {str(datetime.utcnow())}") + redis_controller.delete(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}") + +@AdminRoute.route("/manage-assets/", methods=['POST']) +def manage_assets_post_update(assetid): + AdminPermissionRequired('ManageAsset') + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + if AssetObj.is_limited or AssetObj.is_limited_unique: + if not HasAdminPermission("ModifyLimitedAssets"): + flash("You do not have permission to modify limited assets", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if IsItemInReleasePool(AssetObj.id): + flash("You cannot edit an item which is in the item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + # Validate form + AssetName = request.form.get('assetname') + AssetDescription = request.form.get('assetdescription') + AssetPriceRobux = request.form.get('assetpricerobux') + AssetPriceTickets = request.form.get('assetpricetix') + AssetSerialAmount = request.form.get('assetserialamount') + + AssetOffsaleAt = request.form.get('offsale-at', None) # Year-Month-DayTHour:Minute + OffsaleTimezone = request.form.get('offsale-timezone', 0, int) # 0, 1, 2, ... or -1, -2, ... + if AssetOffsaleAt is not None and AssetOffsaleAt != "": + try: + AssetOffsaleAt = datetime.strptime(AssetOffsaleAt, "%Y-%m-%dT%H:%M") + # We need to convert the time to UTC + AssetOffsaleAt = AssetOffsaleAt.replace(tzinfo=timezone(timedelta(hours=OffsaleTimezone))) + AssetOffsaleAt = AssetOffsaleAt.astimezone(timezone.utc) + AssetOffsaleAt = datetime( + AssetOffsaleAt.year, + AssetOffsaleAt.month, + AssetOffsaleAt.day, + AssetOffsaleAt.hour, + AssetOffsaleAt.minute, + AssetOffsaleAt.second, + AssetOffsaleAt.microsecond + ) + except: + flash("Invalid offsale date", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if datetime.utcnow() > AssetOffsaleAt: + flash("Offsale date cannot be in the past", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + AssetOffsaleAt = None + + isForSale = request.form.get('isForsale') == "on" + isLimited = request.form.get('isLimited') == "on" + isLimitedUnique = request.form.get('isLimitedUnique') == "on" + + if AssetName is None or AssetName == "": + flash("Asset name is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetDescription is None: + flash("Asset description is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceRobux is None or AssetPriceRobux == "": + flash("Asset price is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + try: + AssetPriceRobux = int(AssetPriceRobux) + except: + flash("Asset price is not a number", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceTickets is None or AssetPriceTickets == "": + flash("Asset price is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + try: + AssetPriceTickets = int(AssetPriceTickets) + except: + flash("Asset price is not a number", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetSerialAmount is None or AssetSerialAmount == "": + flash("Asset serial amount is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + try: + AssetSerialAmount = int(AssetSerialAmount) + except: + flash("Asset serial amount is not a number", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetSerialAmount < 0: + flash("Asset serial amount cannot be negative", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceRobux < 0 or AssetPriceRobux > 1000000: + flash("Asset Robux price must be in range ( 0 - 1000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceTickets < 0 or AssetPriceTickets > 10000000: + flash("Asset Tix price must be in range ( 0 - 10000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetSerialAmount > 0 and not isLimitedUnique: + flash("Asset serial cannot be greater than 0 if not a limited unique", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + AuthenticatedUser : User = auth.GetCurrentUser() + # Check for cooldown + AdministratorCooldown = redis_controller.get(f"Asset_AdministratorCooldown:{str(AuthenticatedUser.id)}") + if AdministratorCooldown is not None and AuthenticatedUser.id != 1: + flash("You are updating assets too quickly!", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + redis_controller.set(f"Asset_AdministratorCooldown:{str(AuthenticatedUser.id)}", "1", ex=20) + + if isLimitedUnique: + isLimited = True + + if isLimited: + if not HasAdminPermission("ModifyLimitedAssets"): + flash("You do not have permission to modify limited assets", "danger") + return redirect("/admin/manage-assets") + + if isLimitedUnique and AssetOffsaleAt is not None: + flash("Limited unique assets cannot have a offsale date", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if not isForSale and AssetOffsaleAt is not None: + flash("Asset cannot have a offsale date if not for sale", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetOffsaleAt is not None and AssetOffsaleAt < datetime.utcnow() + timedelta( minutes = 5 ): + flash("Offsale time cannot be shorter than 5 minutes", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + # Update asset + AssetObj.name = AssetName + AssetObj.description = AssetDescription + AssetObj.price_robux = AssetPriceRobux + AssetObj.price_tix = AssetPriceTickets + AssetObj.serial_count = AssetSerialAmount + AssetObj.is_for_sale = isForSale + AssetObj.is_limited = isLimited + AssetObj.is_limited_unique = isLimitedUnique + AssetObj.updated_at = datetime.utcnow() + + if AssetOffsaleAt is not None and AssetObj.offsale_at != AssetOffsaleAt: + AssetObj.offsale_at = AssetOffsaleAt + if redis_controller.exists(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}"): + try: + scheduler.remove_job(redis_controller.get(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}")) + except: + logging.warning(f"Failed to remove job {redis_controller.get(f'APSchedulerTaskJobUUID:{str(AssetObj.id)}')}") + + APSchedulerTaskJobUUID = str(uuid.uuid4()) + scheduler.add_job(id=APSchedulerTaskJobUUID, func=SetAssetOffsaleJob, trigger='date', run_date=AssetOffsaleAt, args=[AssetObj.id]) + redis_controller.set(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}", APSchedulerTaskJobUUID) + logging.info(f"Asset {str(AssetObj.id)} has been set to go offsale at {str(AssetOffsaleAt)}, job UUID: {APSchedulerTaskJobUUID}") + if not isForSale: + AssetObj.offsale_at = None + + db.session.commit() + flash("Asset updated!", "success") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + +@AdminRoute.route("/manage-assets//rerender", methods=['POST']) +def ReRenderAsset(assetid): + AdminPermissionRequired('ManageAsset') + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + # Check for cooldown + AuthenticatedUser : User = auth.GetAuthenticatedUser(request.cookies.get(".ROBLOSECURITY")) + AdministratorCooldown = redis_controller.get(f"AssetRerender_AdministratorCooldown:{str(AuthenticatedUser.id)}") + if AdministratorCooldown is not None and AuthenticatedUser.id != 1: + flash("You are rerendering assets too quickly!", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + redis_controller.set(f"AssetRerender_AdministratorCooldown:{str(AuthenticatedUser.id)}", "1", ex=5) + + TakeThumbnail(AssetObj.id, bypassCooldown=True, bypassCache=True) + flash("Asset queued for rerendering", "success") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + +@AdminRoute.route("/pending-assets", methods=['GET']) +def PendingAssets(): + AdminPermissionRequired('AssetModeration') + + PendingAssets = [] + # Only get assets that have their moderation_status set to 1 + AssetsPendingList : list[Asset] = Asset.query.filter_by(moderation_status=1).order_by(Asset.created_at.desc()).all() + for AssetObj in AssetsPendingList: + if AssetObj.asset_type not in [AssetType.Image, AssetType.Audio, AssetType.Animation]: + continue + LatestAssetVersion : AssetVersion = assetversion.GetLatestAssetVersion(AssetObj) + if LatestAssetVersion is None: + continue + ParentAsset : Asset = None + if AssetObj.asset_type == AssetType.Image: + # Try to get the parent asset + ParentAssetLink : AssetModerationLink = AssetModerationLink.query.filter_by(ChildAssetId=AssetObj.id).first() + if ParentAssetLink is not None: + ParentAsset = Asset.query.filter_by(id=ParentAssetLink.ParentAssetId).first() + PendingAssets.append({ + "Asset": AssetObj, + "AssetVersion": LatestAssetVersion, + "ParentAsset": ParentAsset + }) + if len(PendingAssets) >= 15: + break + PlaceIconPendingList : list[PlaceIcon] = PlaceIcon.query.filter_by(moderation_status=1).order_by(PlaceIcon.updated_at.desc()).all() + for PlaceIconObj in PlaceIconPendingList: + AssetObj : Asset = Asset.query.filter_by(id=PlaceIconObj.placeid).first() + if AssetObj is None: + continue + PendingAssets.append({ + "Asset": AssetObj, + "AssetVersion": PlaceIconObj, + "ParentAsset": None, + "PlaceIcon": True, + "AssetThumbnail": False + }) + if len(PendingAssets) >= 15: + break + + AssetThumbnailPendingList : list[AssetThumbnail] = AssetThumbnail.query.filter_by(moderation_status=1).order_by(AssetThumbnail.updated_at.desc()).all() + for AssetThumbnailObj in AssetThumbnailPendingList: + AssetObj : Asset = Asset.query.filter_by(id=AssetThumbnailObj.asset_id).first() + if AssetObj is None: + continue + PendingAssets.append({ + "Asset": AssetObj, + "AssetVersion": AssetThumbnailObj, + "ParentAsset": None, + "PlaceIcon": False, + "AssetThumbnail": True + }) + + GroupIconPendingList : list[GroupIcon] = GroupIcon.query.filter_by(moderation_status=1).order_by(GroupIcon.created_at.desc()).all() + for GroupIconObj in GroupIconPendingList: + GroupObj : Group = GroupIconObj.group + if GroupObj is None: + continue + PendingAssets.append({ + "Group": GroupObj, + "Creator": GroupIconObj.creator, + "Icon": GroupIconObj, + "ParentAsset": None, + "PlaceIcon": False, + "AssetThumbnail": False + }) + + return render_template("admin/assetmoderation.html", PendingAssets=PendingAssets) + +def LogModerationAction( + Actor : User, + isApproved : bool = True, + relatedAssets : list = [] +): + """ + relatedAssets = [ + { + "mainId": 1, + "relatedId": 2, + "type": "Image", + "view_name": "Awesome Shirt", + "source": "https://NEXIUM.economy-simulator.org/", + "page": "https://www.nexium.fit/catalog/1/", + "creator": User | Group + } + ] + """ + fields = [] + for asset in relatedAssets: + fields.append({ + "name": asset["view_name"], + "value": f"Type: **{asset['type']}** - { 'AssetId' if asset['type'] != 'GroupIcon' else 'GroupId' }: **{asset['mainId']}** - Creator: [{ asset['creator'].username if isinstance(asset['creator'], User) else asset['creator'].name }](https://www.nexium.fit/{ 'users/'+str(asset['creator'].id)+'/profile' if isinstance(asset['creator'], User) else 'groups/'+str(asset['creator'].id)+'/' }){ ' - Related AssetId: **' + str(asset['relatedId']) +'**' if asset['relatedId'] else ''} - [View]({asset['page']}){ ' - [Source](' + asset['source'] +')' if asset['source'] else ''}", + "inline": False + }) + + embed = { + "type": "rich", + "title": f"{'Approved' if isApproved else 'Denied'} {str(len(relatedAssets))} Asset{'s' if len(relatedAssets) > 1 else ''}", + "description": "", + "color": 0x26ff00 if isApproved else 0xef0000, + "fields": fields, + "author": { + "name": Actor.username, + "icon_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + }, + "footer": { + "text": f"NEXIUM - Moderation Logs" + }, + "timestamp": datetime.utcnow().isoformat() + } + def thread_func(): + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "NEXIUM - Moderation Logs", + "embeds": [embed], + "avatar_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + }, + timeout = 15 # without timeout the thread will hang if request hangs + ) + except Exception as e: + logging.warn(f"Admin > LogModerationAction: Exception raised when sending webhook - {str(e)}") + threading.Thread(target=thread_func).start() + +@AdminRoute.route("/pending-assets//approve-group-icon", methods=['POST']) +@csrf.exempt +def ApprovePendingGroupIcon( content_hash ): + AdminPermissionRequired('AssetModeration') + + GroupIconObj : list[GroupIcon] = GroupIcon.query.filter_by(content_hash=content_hash).all() + if len(GroupIconObj) == 0: + return redirect("/admin/pending-assets") + for iconObj in GroupIconObj: + if iconObj.moderation_status != 1: + continue + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=[{ + "mainId": iconObj.group.id, + "relatedId": None, + "type": "GroupIcon", + "view_name": iconObj.group.name, + "source": f"{config.CDN_URL}/{iconObj.content_hash}", + "page": f"https://www.nexium.fit/groups/{str(iconObj.group.id)}/", + "creator": iconObj.creator + }]) + iconObj.moderation_status = 0 + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//deny-group-icon", methods=['POST']) +@csrf.exempt +def DenyPendingGroupIcon( content_hash ): + AdminPermissionRequired('AssetModeration') + + GroupIconObj : list[GroupIcon] = GroupIcon.query.filter_by(content_hash=content_hash).all() + if len(GroupIconObj) == 0: + return redirect("/admin/pending-assets") + for iconObj in GroupIconObj: + if iconObj.moderation_status != 1: + continue + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=[{ + "mainId": iconObj.group.id, + "relatedId": None, + "type": "GroupIcon", + "view_name": iconObj.group.name, + "source": f"{config.CDN_URL}/{iconObj.content_hash}", + "page": f"https://www.nexium.fit/groups/{str(iconObj.group.id)}/", + "creator": iconObj.creator + }]) + iconObj.moderation_status = 2 + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//approve", methods=['POST']) +@csrf.exempt +def ApprovePendingAsset(assetid): + AdminPermissionRequired('AssetModeration') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetObj.moderation_status != 1: + flash("Asset is not pending", "danger") + return redirect("/admin/pending-assets") + if AssetObj.asset_type not in [AssetType.Image, AssetType.Audio, AssetType.Place, AssetType.Animation]: + flash("Asset type is not supported", "danger") + return redirect("/admin/pending-assets") + RelatedAssets = [] + AssetObj.moderation_status = 0 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "Asset", + "view_name": AssetObj.name, + "source": None, + "page": f"https://www.nexium.fit/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).first() + if AssetThumbnailObj is not None: + if AssetThumbnailObj.moderation_status == 1: + AssetThumbnailObj.moderation_status = 0 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetObj.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.nexium.fit/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + + # Get the parent asset + ParentAssetLink : AssetModerationLink = AssetModerationLink.query.filter_by(ChildAssetId=AssetObj.id).first() + if ParentAssetLink is not None: + ParentAsset : Asset = Asset.query.filter_by(id=ParentAssetLink.ParentAssetId).first() + if ParentAsset is not None: + if ParentAsset.moderation_status == 1: + ParentAsset.moderation_status = 0 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": AssetObj.asset_type.name, + "view_name": ParentAsset.name, + "source": None, + "page": f"https://www.nexium.fit/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + ParentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=ParentAsset.id).first() + if ParentAssetThumbnail is not None: + if ParentAssetThumbnail.moderation_status == 1: + ParentAssetThumbnail.moderation_status = 0 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": "AssetThumbnail", + "view_name": ParentAsset.name, + "source": f"{config.CDN_URL}/{ParentAssetThumbnail.content_hash}", + "page": f"https://www.nexium.fit/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=RelatedAssets) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//decline", methods=['POST']) +@csrf.exempt +def DeclinePendingAsset(assetid): + AdminPermissionRequired('AssetModeration') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetObj.moderation_status != 1: + flash("Asset is not pending", "danger") + return redirect("/admin/pending-assets") + if AssetObj.asset_type not in [AssetType.Image, AssetType.Audio, AssetType.Place, AssetType.Animation]: + flash("Asset type is not supported", "danger") + return redirect("/admin/pending-assets") + RelatedAssets = [] + AssetObj.moderation_status = 2 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "Asset", + "view_name": AssetObj.name, + "source": None, + "page": f"https://www.nexium.fit/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).first() + if AssetThumbnailObj is not None: + if AssetThumbnailObj.moderation_status == 1: + AssetThumbnailObj.moderation_status = 2 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetObj.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.nexium.fit/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + + # Get the parent asset + ParentAssetLink : AssetModerationLink = AssetModerationLink.query.filter_by(ChildAssetId=AssetObj.id).first() + if ParentAssetLink is not None: + ParentAsset : Asset = Asset.query.filter_by(id=ParentAssetLink.ParentAssetId).first() + if ParentAsset is not None: + if ParentAsset.moderation_status == 1: + ParentAsset.moderation_status = 2 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": AssetObj.asset_type.name, + "view_name": ParentAsset.name, + "source": None, + "page": f"https://www.nexium.fit/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + ParentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=ParentAsset.id).first() + if ParentAssetThumbnail is not None: + ParentAssetThumbnail.moderation_status = 2 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": "AssetThumbnail", + "view_name": ParentAsset.name, + "source": f"{config.CDN_URL}/{ParentAssetThumbnail.content_hash}", + "page": f"https://www.nexium.fit/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=RelatedAssets) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//approve-icon", methods=['POST']) +@csrf.exempt +def ApprovePendingIcon(assetid): + AdminPermissionRequired('AssetModeration') + + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=int(assetid)).first() + if PlaceIconObj is None: + flash("Icon does not exist", "danger") + return redirect("/admin/pending-assets") + if PlaceIconObj.moderation_status != 1: + flash("Icon is not pending", "danger") + return redirect("/admin/pending-assets") + PlaceAssetObj : Asset = Asset.query.filter_by(id=PlaceIconObj.placeid).first() + if PlaceAssetObj is None: + flash("Icon does not exist", "danger") + return redirect("/admin/pending-assets") + if PlaceAssetObj.moderation_status == 1: + PlaceAssetObj.moderation_status = 0 + PlaceIconObj.moderation_status = 0 + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=[{ + "mainId": PlaceAssetObj.id, + "relatedId": None, + "type": "PlaceIcon", + "view_name": PlaceAssetObj.name, + "source": f"{config.CDN_URL}/{PlaceIconObj.contenthash}", + "page": f"https://www.nexium.fit/games/{str(PlaceAssetObj.id)}/", + "creator": GetCreatorOfAsset(PlaceAssetObj) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//decline-icon", methods=['POST']) +@csrf.exempt +def DeclinePendingIcon(assetid): + AdminPermissionRequired('AssetModeration') + + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=int(assetid)).first() + if PlaceIconObj is None: + flash("Icon does not exist", "danger") + return redirect("/admin/pending-assets") + if PlaceIconObj.moderation_status != 1: + flash("Icon is not pending", "danger") + return redirect("/admin/pending-assets") + PlaceIconObj.moderation_status = 2 + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=[{ + "mainId": PlaceIconObj.placeid, + "relatedId": None, + "type": "PlaceIcon", + "view_name": PlaceIconObj.asset.name, + "source": f"{config.CDN_URL}/{PlaceIconObj.contenthash}", + "page": f"https://www.nexium.fit/games/{str(PlaceIconObj.placeid)}/", + "creator": GetCreatorOfAsset(PlaceIconObj.asset) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//approve-thumbnail", methods=['POST']) +@csrf.exempt +def ApprovePendingThumbnail(thumbnailid : int): + AdminPermissionRequired('AssetModeration') + + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(id=int(thumbnailid)).first() + if AssetThumbnailObj is None: + flash("Thumbnail does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetThumbnailObj.moderation_status != 1: + flash("Thumbnail is not pending", "danger") + return redirect("/admin/pending-assets") + AssetThumbnailObj.moderation_status = 0 + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=[{ + "mainId": AssetThumbnailObj.asset_id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetThumbnailObj.asset.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.nexium.fit/catalog/{str(AssetThumbnailObj.asset_id)}/", + "creator": GetCreatorOfAsset(AssetThumbnailObj.asset) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//decline-thumbnail", methods=['POST']) +@csrf.exempt +def DeclinePendingThumbnail(thumbnailid : int): + AdminPermissionRequired('AssetModeration') + + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(id=int(thumbnailid)).first() + if AssetThumbnailObj is None: + flash("Thumbnail does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetThumbnailObj.moderation_status != 1: + flash("Thumbnail is not pending", "danger") + return redirect("/admin/pending-assets") + AssetThumbnailObj.moderation_status = 2 + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=[{ + "mainId": AssetThumbnailObj.asset_id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetThumbnailObj.asset.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.nexium.fit/catalog/{str(AssetThumbnailObj.asset_id)}/", + "creator": GetCreatorOfAsset(AssetThumbnailObj.asset) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/manage-users", methods=['GET']) +def ManageUsers(): + AdminPermissionRequired('ManageUsers') + + query = request.args.get(key = "query", default = None, type = str) + page = request.args.get(key = "page", default = 1, type = int) + searchType = request.args.get(key = "searchType", default = "userid", type = str) # userid, username + orderBy = request.args.get(key = "orderBy", default = "userid", type = str) # userid, creation, lastonline, robux, tix + orderType = request.args.get(key = "orderType", default = "asc", type = str) # asc, desc + + if searchType not in ["userid", "username", "discordid"]: + searchType = "userid" + if orderBy not in ["userid", "creation", "lastonline", "robux", "tix"]: + orderBy = "userid" + if orderType not in ["asc", "desc"]: + orderType = "desc" + + if type(query) is not str: + query = None + + + def CreateUserInfo( userObj : User ): + userEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=userObj.id).first() + if userEconomyObj is None: + userEconomyObj = UserEconomy(userid=userObj.id) + db.session.add(userEconomyObj) + db.session.commit() + return { + "id": userObj.id, + "username": userObj.username, + "creation": userObj.created, + "lastonline": userObj.lastonline, + "robux": userEconomyObj.robux, + "tix": userEconomyObj.tix, + "accountstatus": userObj.accountstatus + } + + returnList = [] + + if query is not None: + if searchType == "userid": + userObject : list[User] = [User.query.filter_by(id=int(query)).first()] + elif searchType == "username": + userObject : list[User] = User.query.filter(User.username.ilike(f"%{query}%")).offset((page-1)*15).limit(15).all() + elif searchType == "discordid": + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=int(query)).first() + if LinkedDiscordObj is not None: + userObject = [User.query.filter_by(id=LinkedDiscordObj.user_id).first()] + else: + userObject = [] + + for userObj in userObject: + if userObj is None: + continue + if len(returnList) >= 15: + break + returnList.append(CreateUserInfo(userObj)) + else: + UserQuery = None + if orderBy == "userid": + UserQuery = User.id + elif orderBy == "creation": + UserQuery = User.created + elif orderBy == "lastonline": + UserQuery = User.lastonline + elif orderBy == "robux": + UserQuery = UserEconomy.robux + elif orderBy == "tix": + UserQuery = UserEconomy.tix + + if orderType == "asc": + UserQuery = UserQuery.asc() + elif orderType == "desc": + UserQuery = UserQuery.desc() + + # If we are ordering by robux or tix, we need to join the UserEconomy table and only select the userEconomy column for that user by selecting its id + if orderBy in ["robux", "tix"]: + UserQuery = User.query.join(UserEconomy, User.id == UserEconomy.userid).order_by(UserQuery) + else: + UserQuery = User.query.order_by(UserQuery) + + UserQuery = UserQuery.paginate(page=page, per_page=15, error_out=False) + for userObj in UserQuery.items: + returnList.append(CreateUserInfo(userObj)) + + isThereNextPage = False + if len(returnList) == 15: + isThereNextPage = True + + return render_template("admin/usermanage/search.html", + query=query, + searchType=searchType, + orderBy=orderBy, + orderType=orderType, + returnList=returnList, + isThereNextPage=isThereNextPage, + page=page + ) + +@AdminRoute.route("/manage-users", methods=['POST']) +def ManageUserQuery(): + AdminPermissionRequired('ManageUsers') + + query = request.form.get(key = "user-search-input", default=None, type=str) + searchType = request.form.get(key = "user-search-type", default = "userid", type = str) # userid, username + orderBy = request.form.get(key = "user-order-by", default = "userid", type = str) # userid, creation, lastonline, robux, tix + orderType = request.form.get(key = "user-order-direction", default = "asc", type = str) # asc, desc + + if searchType not in ["userid", "username", "discordid"]: + searchType = "userid" + if orderBy not in ["userid", "creation", "lastonline", "robux", "tix"]: + orderBy = "userid" + if orderType not in ["asc", "desc"]: + orderType = "desc" + + if searchType == "userid" and query != "": + try: + query = int(query) + except: + searchType = "username" + if query == "": + query = None + + if query is None: + return redirect(f"/admin/manage-users?searchType={searchType}&orderBy={orderBy}&orderType={orderType}") + else: + return redirect(f"/admin/manage-users?query={query}&searchType={searchType}&orderBy={orderBy}&orderType={orderType}") + +@AdminRoute.route("/manage-users/", methods=['GET']) +def ManageUser(userid : int): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + isAdministrator = AdminPermissions.query.filter_by(userid=userid).first() is not None + TotalVisits = 0 + UniverseList : list[Universe] = Universe.query.filter_by( creator_id = userObj.id, creator_type = 0 ).all() + for UniverseObj in UniverseList: + TotalVisits += UniverseObj.visit_count + UserEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=userObj.id).first() + if UserEconomyObj is None: + UserEconomyObj = UserEconomy(userid=userObj.id) + db.session.add(UserEconomyObj) + db.session.commit() + DescriptionLines = userObj.description.split("\n") + if HasAdminPermission('ViewLoginHistoryDetailed'): + LastLogin : LoginRecord = LoginRecord.query.filter_by(userid=userObj.id).order_by(LoginRecord.timestamp.desc()).first() + else: + LastLogin = None + + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=userObj.id).first() + if LinkedDiscordObj is not None: + DiscordUserInfo : discord.DiscordUserInfo = discord.DiscordUserInfo( + UserId = LinkedDiscordObj.discord_id, + Username = LinkedDiscordObj.discord_username, + Discriminator = LinkedDiscordObj.discord_discriminator, + AvatarHash = LinkedDiscordObj.discord_avatar, + ) + else: + DiscordUserInfo = None + + InviteKeyUsed : InviteKey = InviteKey.query.filter_by(used_by=userObj.id).first() + LastestUserBanObj : UserBan = UserBan.query.filter_by(userid=userObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + + return render_template( + "admin/usermanage/view.html", + userObj=userObj, + isAdministrator=isAdministrator, + TotalVisits=TotalVisits, + UserEconomyObj=UserEconomyObj, + DescriptionLines=DescriptionLines, + LastLogin=LastLogin, + LinkedDiscordObj=LinkedDiscordObj, + DiscordUserInfo=DiscordUserInfo, + LastestUserBanObj=LastestUserBanObj, + InviteKeyUsed=InviteKeyUsed, + HasAdminPermission=HasAdminPermission + ) + +@AdminRoute.route("/manage-users//reset-username", methods=['POST']) +def ResetUserUsername(userid: int): + AdminPermissionRequired('ManageUsers') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + new_username = f"NEXIUM-user-{userObj.id}" + userObj.username = new_username + db.session.commit() + + flash(f"Username reset to {new_username}", "success") + return redirect(f"/admin/manage-users/{userObj.id}") + +@AdminRoute.route("/manage-users//reset-bio", methods=['POST']) +def ResetUserBio(userid: int): + AdminPermissionRequired('ManageUsers') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + userObj.description = "[ Content Deleted ]" + db.session.commit() + + flash("User bio reset", "success") + return redirect(f"/admin/manage-users/{userObj.id}") + +@AdminRoute.route("/manage-users//reset-password", methods=['POST']) +def ResetUserPassword(userid: int): + AdminPermissionRequired('ManageUsers') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + NewPassword = secrets.token_urlsafe(12) + auth.SetPassword(userObj, NewPassword) + + UserLoginRecords : list[LoginRecord] = LoginRecord.query.filter_by(userid=userid).all() + for LoginRecordObj in UserLoginRecords: + if LoginRecordObj.session_token: + auth.invalidateToken(LoginRecordObj.session_token) + + flash(f"Password reset to: {NewPassword}", "success") + return redirect(f"/admin/manage-users/{userObj.id}") + +@AdminRoute.route("/manage-users//manage-admin-permissions", methods=["GET"]) +def ManageUserAdminPermissions( userid : int ): + AdminPermissionRequired('ManageAdminPermissions') + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + return render_template( + "admin/usermanage/manage-admin-perms.html", + userObj = userObj + ) + +@AdminRoute.route("/manage-users//manage-admin-permissions/api/fetch-permissions", methods=["GET"]) +def ManageUserAdminPermissionsFetchPermissions( userid : int ): + AdminPermissionRequired('ManageAdminPermissions') + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + PermissionsData : list[dict] = [] + + for permission in PermissionsDefinition: + permissionData = PermissionsDefinition[permission] + PermissionsData.append({ + "internal_name": permission, + "friendly_name": permissionData["Name"], + "description": permissionData["Description"], + "is_hidden": permissionData["Hidden"] if "Hidden" in permissionData else False, + "hasPermission": AdminPermissions.query.filter_by(userid=userObj.id, permission=permission).first() is not None, + "bi_icon": permissionData["icon"] if "icon" in permissionData else None + }) + + data_response = make_response(json.dumps(PermissionsData)) + data_response.headers['Content-Type'] = 'application/json' + data_response.headers['Cache-Control'] = 'no-cache' + return data_response + +@AdminRoute.route("/manage-users//manage-admin-permissions/api/set-permissions", methods=["POST"]) +@limiter.limit("30/minute") +def ManageUserAdminPermissionsSetPermission(userid: int): + AdminPermissionRequired('ManageAdminPermissions') + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + UpdatedPermissionData = request.json + + # Check for permissions data in the request + if "permissions" not in UpdatedPermissionData: + return jsonify({ + "success": False, + "reason": "Bad Data: No permissions provided." + }), 400 # Use 400 for bad requests + + # Validate each permission in the provided list + for permission in UpdatedPermissionData["permissions"]: + if permission not in PermissionsDefinition: + return jsonify({ + "success": False, + "reason": f"Unknown permission {permission}" + }), 400 + + # Remove existing permissions for the user + AdminPermissions.query.filter_by(userid=userObj.id).delete() + db.session.commit() + + # Add new permissions + for permission in UpdatedPermissionData["permissions"]: + db.session.add(AdminPermissions(userid=userObj.id, permission=permission)) + db.session.commit() + + return jsonify({ + "success": True, + "reason": "" + }), 200 + + +@AdminRoute.route("/manage-users//ban-history", methods=['GET']) +def ManageUserBanHistory( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + UserBanHistory : list[UserBan] = UserBan.query.filter_by(userid=userObj.id).order_by(UserBan.id.desc()).paginate(page=1, per_page=10, error_out=False) + def GetBanAuthorName( banObj : UserBan ): + Author : User = User.query.filter_by(id=banObj.author_userid).first() + if Author is None: + return "Unknown" + return Author.username + return render_template( + "admin/usermanage/banhistory.html", + userObj = userObj, + BanHistory = UserBanHistory, + GetBanAuthorName = GetBanAuthorName + ) + +@AdminRoute.route("/manage-users//invite-keys", methods=['GET']) +def ManageUserInviteKeysview(userid : int): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + PageNumber = request.args.get( key = "page", default = 1, type = int ) + if PageNumber < 1: + PageNumber = 1 + + UserInviteKeys = InviteKey.query.filter_by(created_by = userObj.id).order_by(InviteKey.created_at.desc()).paginate( page = PageNumber, per_page = 15, error_out = False ) + return render_template( + "admin/usermanage/invitekeys.html", + userObj = userObj, + InviteKeys = UserInviteKeys + ) + +def LogUserBanAction( BannedUser : User, Actor : User, BanObject : UserBan ): + BanEmbed = { + "type": "rich", + "title": f"{BannedUser.username} ({BannedUser.id}) Banned", + "description": "", + "color": 0xef0000, + "fields": [ + { + "name": "Ban Author", + "value": f"[{Actor.username}]({config.BaseURL}/admin/manage-users/{Actor.id}) ({Actor.id})", + "inline": False + }, + { + "name": "Banned User", + "value": f"[{BannedUser.username}]({config.BaseURL}/admin/manage-users/{BannedUser.id}) ({BannedUser.id})", + "inline": False + }, + { + "name": "Ban Type", + "value": f"{BanObject.ban_type.name}", + "inline": False + }, + { + "name": "Ban Reason", + "value": f"{BanObject.reason}", + "inline": False + }, + { + "name": "Internal Reason", + "value": f"{BanObject.moderator_note}", + "inline": False + }, + { + "name": "Expiration", + "value": f"{BanObject.expires_at}", + "inline": False + } + ], + "author": { + "name": BannedUser.username, + "icon_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(BannedUser.id)}" + }, + "footer": { + "text": "NEXIUM - Moderation Logs" + }, + "timestamp": datetime.utcnow().isoformat() + } + def thread_func(): + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "NEXIUM - Moderation Logs", + "embeds": [BanEmbed], + "avatar_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(BannedUser.id)}" + }, + timeout = 15 # without timeout the thread will hang if request hangs + ) + except Exception as e: + logging.warn(f"Admin > LogUserBanAction: Exception raised when sending webhook - {str(e)}") + + threading.Thread(target=thread_func).start() + +def LogUserUnbanAction( TargetUser : User, Actor : User, BanObj : UserBan ): + Author : User = User.query.filter_by( id = BanObj.author_userid ).first() + BanEmbed = { + "type": "rich", + "title": f"{TargetUser.username} ({TargetUser.id}) Unbanned", + "description": "", + "color": 0xfcdb03, + "fields": [ + { + "name": "Ban Author", + "value": f"[{Author.username}]({config.BaseURL}/admin/manage-users/{Author.id}) ({Author.id})", + "inline": False + }, + { + "name": "Unbanned By", + "value": f"[{Actor.username}]({config.BaseURL}/admin/manage-users/{Actor.id}) ({Actor.id})", + "inline": False + }, + { + "name": "Banned User", + "value": f"[{TargetUser.username}]({config.BaseURL}/admin/manage-users/{TargetUser.id}) ({TargetUser.id})", + "inline": False + }, + { + "name": "Ban Type", + "value": f"{BanObj.ban_type.name}", + "inline": False + }, + { + "name": "Ban Reason", + "value": f"{BanObj.reason}", + "inline": False + }, + { + "name": "Internal Reason", + "value": f"{BanObj.moderator_note}", + "inline": False + }, + { + "name": "Expiration", + "value": f"{BanObj.expires_at}", + "inline": False + } + ], + "author": { + "name": TargetUser.username, + "icon_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(TargetUser.id)}" + }, + "footer": { + "text": "NEXIUM - Moderation Logs" + }, + "timestamp": datetime.utcnow().isoformat() + } + + def thread_func(): + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "NEXIUM - Moderation Logs", + "embeds": [BanEmbed], + "avatar_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(TargetUser.id)}" + }, + timeout = 15 # without timeout the thread will hang if request hangs + ) + except Exception as e: + logging.warn(f"Admin > LogUserUnbanAction: Exception raised when sending webhook - {str(e)}") + + threading.Thread(target=thread_func).start() + +@AdminRoute.route("/manage-users//ban-user", methods=['GET']) +def BanUser(userid: int): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('BanUser') + + userObj = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + isAdministrator = AdminPermissions.query.filter_by(userid=userid).first() is not None # Check if they have at least one admin permission + if isAdministrator: + flash("You cannot ban an administrator", "danger") + return redirect(f"/admin/manage-users/{str(userid)}") + + LastestUserBanObj = UserBan.query.filter_by(userid=userObj.id, acknowledged=False).order_by(UserBan.id.desc()).first() + + return render_template("admin/usermanage/ban.html", userObj=userObj, LastestUserBanObj=LastestUserBanObj) + +@AdminRoute.route("/manage-users//ban-user", methods=['POST']) +def BanUserPost(userid: int): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('BanUser') + AuthenticatedUser = auth.GetCurrentUser() + userObj = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + isAdministrator = AdminPermissions.query.filter_by(userid=userid).first() is not None # Check if they have at least one admin permission + if isAdministrator: + flash("You cannot ban an administrator", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + LastestUserBanObj = UserBan.query.filter_by(userid=userObj.id, acknowledged=False).order_by(UserBan.id.desc()).first() + if LastestUserBanObj is not None: + flash("User is already banned", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + BanTypeInput = request.form.get(key='ban_type', default=None, type=int) + BanReason = request.form.get(key='ban_reason', default=None, type=str) + ModeratorNote = request.form.get(key='ban_notes', default=None, type=str) + + if BanTypeInput is None or BanTypeInput not in [0, 1, 2, 3, 4, 5, 6] or BanReason is None or ModeratorNote is None: + flash("Invalid request", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + BanTypeInput = BanType(BanTypeInput) + if len(BanReason) > 512: + flash("Ban reason is too long", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if len(ModeratorNote) > 512: + flash("Moderator note is too long", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if len(BanReason) < 10: + flash("Ban reason is too short", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if len(ModeratorNote) < 10: + flash("Moderator note is too short", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if redis_controller.exists(f"admin_ban_cooldown:{AuthenticatedUser.id}"): + flash("You are banning users too fast!", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + BanTypeToTimeLength = { + BanType.Warning: timedelta(days=0), + BanType.Day1Ban: timedelta(days=1), + BanType.Day3Ban: timedelta(days=3), + BanType.Day7Ban: timedelta(days=7), + BanType.Day14Ban: timedelta(days=14), + BanType.Day30Ban: timedelta(days=30) + } + ExpirationDate = None + if BanTypeInput in BanTypeToTimeLength: + ExpirationDate = datetime.utcnow() + BanTypeToTimeLength[BanTypeInput] + + BanObj = UserBan( + userid=userObj.id, + author_userid=AuthenticatedUser.id, + ban_type=BanTypeInput, + reason=BanReason, + moderator_note=ModeratorNote, + expires_at=ExpirationDate + ) + db.session.add(BanObj) + if BanTypeInput == BanType.Deleted: + userObj.accountstatus = 3 + else: + userObj.accountstatus = 2 + db.session.commit() + LogUserBanAction(userObj, AuthenticatedUser, BanObj) + redis_controller.set(f"admin_ban_cooldown:{AuthenticatedUser.id}", "1", ex=15) + flash("User banned", "success") + + PlaceserverPlayerObj = PlaceServerPlayer.query.filter_by(userid=userObj.id).first() + if PlaceserverPlayerObj is not None: + CurrentPlaceServerObj = PlaceServer.query.filter_by(serveruuid=PlaceserverPlayerObj.serveruuid).first() + EvictPlayer(CurrentPlaceServerObj, userObj.id) + + return redirect(f"/admin/manage-users/{str(userid)}") + +@AdminRoute.route("/manage-users//ban-user/revoke-ban", methods=["POST"]) +def UnbanUserPost( userid : int): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('BanUser') + AuthenticatedUser : User = auth.GetCurrentUser() + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + banid = request.args.get( key = "banid", default = None, type = int ) + if banid is None: + flash("Invalid BanID", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if userObj.accountstatus == 1: + flash("User does not have an active ban", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if userObj.accountstatus == 4: + flash("User is forgotten, cannot revoke any bans", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + TargetBanObj : UserBan = UserBan.query.filter_by( id = banid, userid = userid ).first() + if TargetBanObj is None: + flash("Invalid BanID", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if TargetBanObj.acknowledged: + flash("Ban has already been acknowledged by user", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if redis_controller.exists(f"admin_unban_user_cooldown:{AuthenticatedUser.id}"): + flash("You are unbanning users too quickly!", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + LogUserUnbanAction( userObj, AuthenticatedUser, TargetBanObj ) + + db.session.delete(TargetBanObj) + userObj.accountstatus = 1 + db.session.commit() + redis_controller.set(f"admin_unban_user_cooldown:{AuthenticatedUser.id}", "1", ex=30) + + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + +@AdminRoute.route("/manage-users//login-history", methods=['GET']) +def ViewUserLoginHistory( userid : int ): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('ViewUserLoginHistory') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + PageNumber = request.args.get(key = "page", default = 1, type = int) + if PageNumber < 1: + PageNumber = 1 + LoginHistory : list[LoginRecord] = LoginRecord.query.filter_by(userid=userObj.id).order_by(LoginRecord.timestamp.desc()).paginate(page=PageNumber, per_page=15, error_out=False) + + AllUniqueLoginRecords : list[LoginRecord] = LoginRecord.query.filter_by( userid = userObj.id ).order_by(LoginRecord.ip, LoginRecord.session_token).distinct(LoginRecord.ip, LoginRecord.session_token).all() + AlreadySearchedIPs : list[str] = [] + AlreadySearchedSessionTokens : list[str] = [] + AlternateAccounts : list[User] = [] + + for LoginRecordObj in AllUniqueLoginRecords: + if LoginRecordObj.ip in AlreadySearchedIPs and LoginRecordObj.session_token in AlreadySearchedSessionTokens: + continue + + AlreadySearchedIPs.append(LoginRecordObj.ip) + AlreadySearchedSessionTokens.append(LoginRecordObj.session_token) + + MatchingLoginRecords : list[LoginRecord] = LoginRecord.query.filter( + and_( + or_( + LoginRecord.ip == LoginRecordObj.ip, + LoginRecord.session_token == LoginRecordObj.session_token + ), + LoginRecord.userid != userObj.id + ) + ).distinct(LoginRecord.userid).all() + + for MatchingLoginRecord in MatchingLoginRecords: + MatchingUserObj : User = User.query.filter_by(id=MatchingLoginRecord.userid).first() + if MatchingUserObj is not None and MatchingUserObj not in AlternateAccounts and MatchingLoginRecord.session_token is not None: + MatchingUserObj.flags = { + "ipmatch" : MatchingLoginRecord.ip == LoginRecordObj.ip, + "sessiontokenmatch" : MatchingLoginRecord.session_token == LoginRecordObj.session_token, + "useragentmatch" : MatchingLoginRecord.useragent == LoginRecordObj.useragent, + "hwidmatch" : False + } + AlternateAccounts.append(MatchingUserObj) + elif MatchingUserObj is not None and MatchingUserObj in AlternateAccounts and MatchingLoginRecord.session_token is not None: + MatchingUserIndex = AlternateAccounts.index(MatchingUserObj) + AlternateAccounts[MatchingUserIndex].flags = { + "ipmatch" : MatchingLoginRecord.ip == LoginRecordObj.ip or AlternateAccounts[MatchingUserIndex].flags["ipmatch"], + "sessiontokenmatch" : MatchingLoginRecord.session_token == LoginRecordObj.session_token or AlternateAccounts[MatchingUserIndex].flags["sessiontokenmatch"], + "useragentmatch" : MatchingLoginRecord.useragent == LoginRecordObj.useragent or AlternateAccounts[MatchingUserIndex].flags["useragentmatch"], + "hwidmatch" : False + } + + AllUniqueHWIDLogs : list[UserHWIDLog] = UserHWIDLog.query.filter_by( user_id = userObj.id ).order_by(UserHWIDLog.hwid).distinct(UserHWIDLog.hwid).all() + for HWIDLog in AllUniqueHWIDLogs: + MatchingHWIDLogs : list[UserHWIDLog] = UserHWIDLog.query.filter( + and_( + UserHWIDLog.hwid == HWIDLog.hwid, + UserHWIDLog.user_id != userObj.id + ) + ).distinct(UserHWIDLog.user_id).all() + for MatchingHWIDLog in MatchingHWIDLogs: + MatchingUserObj : User = User.query.filter_by(id=MatchingHWIDLog.user_id).first() + if MatchingUserObj is not None and MatchingUserObj not in AlternateAccounts: + MatchingUserObj.flags = { + "ipmatch" : False, + "sessiontokenmatch" : False, + "useragentmatch" : False, + "hwidmatch" : True + } + AlternateAccounts.append(MatchingUserObj) + elif MatchingUserObj is not None and MatchingUserObj in AlternateAccounts: + MatchingUserIndex = AlternateAccounts.index(MatchingUserObj) + AlternateAccounts[MatchingUserIndex].flags["hwidmatch"] = True + + canViewSensitiveInfo = HasAdminPermission('ViewLoginHistoryDetailed') + + return render_template("admin/usermanage/loginhistory.html", userObj=userObj, LoginHistory=LoginHistory, AlternateAccounts=AlternateAccounts, canViewSensitiveInfo=canViewSensitiveInfo) + +@AdminRoute.route("/manage-users//game-sessions", methods=['GET']) +def ViewUserGameSessions( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + PageNumber = request.args.get(key = "page", default = 1, type = int) + if PageNumber < 1: + PageNumber = 1 + SessionsLogs : list[GameSessionLog] = GameSessionLog.query.filter_by( user_id = userObj.id ).order_by(GameSessionLog.joined_at.desc()).paginate(page=PageNumber, per_page=15, error_out=False) + + def get_place_name( place_id : int ): + PlaceAssetObj : Asset = Asset.query.filter_by( id = place_id ).first() + if PlaceAssetObj is None: + return "Unknown Place" + return PlaceAssetObj.name + + return render_template("admin/usermanage/gamesessions.html", userObj=userObj, GameSessions=SessionsLogs, get_place_name=get_place_name) + +CategoryToEnum = { + "purchase": TransactionType.Purchase, + "sale": TransactionType.Sale, + "group-payout": TransactionType.GroupPayout, + "stipends": TransactionType.BuildersClubStipend, +} + +@AdminRoute.route("/manage-users//transactions", methods=['GET']) +def ViewUserTransactions( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + CategoryArg = request.args.get('category', default="purchase", type=str) + if CategoryArg not in CategoryToEnum: + Category : TransactionType = TransactionType.Purchase + else: + Category : TransactionType = CategoryToEnum[CategoryArg] + + PageNumber = request.args.get('page', default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + TransactionQuery = UserTransaction.query.filter_by( transaction_type = Category) + CategoryQueryDict = { + TransactionType.Purchase: lambda queryObj: queryObj.filter_by( + sender_id = userObj.id, + sender_type = 0 + ), + TransactionType.Sale: lambda queryObj: queryObj.filter_by( + reciever_id = userObj.id, + reciever_type = 0 + ), + TransactionType.GroupPayout: lambda queryObj: queryObj.filter_by( + reciever_id = userObj.id, + reciever_type = 0 + ), + TransactionType.BuildersClubStipend: lambda queryObj: queryObj.filter_by( + reciever_id = userObj.id, + reciever_type = 0 + ), + } + TransactionQuery = CategoryQueryDict[Category](TransactionQuery) + TransactionQuery = TransactionQuery.order_by(UserTransaction.created_at.desc()) + TransactionQuery = TransactionQuery.paginate( page=PageNumber, per_page=15, error_out=False ) + + FormattedTransactions = [] + for Transaction in TransactionQuery.items: + Transaction : UserTransaction = Transaction + TransactionInfo = {} + #TransactionInfo["source"] = { + # "id": Transaction.sender_id if Transaction.sender_id != userObj.id else Transaction.reciever_id, + # "type": Transaction.sender_type if Transaction.sender_id != userObj.id else Transaction.reciever_type, # VV I know this is bad but im too lazy to think of another way to do it + # "name": ( User.query.filter_by(id = Transaction.sender_id).first().username if Transaction.sender_type != 1 else Group.query.filter_by( id = Transaction.sender_id ) ) if Transaction.sender_id != userObj.id else ( User.query.filter_by(id = Transaction.reciever_id).first().username if Transaction.reciever_type != 1 else Group.query.filter_by( id = Transaction.reciever_id ) ), + #} + TransactionInfo["source"] = { + "id": Transaction.sender_id if Transaction.sender_id != userObj.id or Transaction.sender_type != 0 else Transaction.reciever_id, + "type": Transaction.sender_type if Transaction.sender_id != userObj.id or Transaction.sender_type != 0 else Transaction.reciever_type, # VV I know this is bad but im too lazy to think of another way to do it + "name": ( User.query.filter_by(id = Transaction.sender_id).first().username if Transaction.sender_type != 1 else Group.query.filter_by( id = Transaction.sender_id ).first().name ) if Transaction.sender_id != userObj.id or Transaction.sender_type != 0 else ( User.query.filter_by(id = Transaction.reciever_id).first().username if Transaction.reciever_type != 1 else Group.query.filter_by( id = Transaction.reciever_id ).first().name ), + } + TransactionInfo["currency_amount"] = Transaction.currency_amount + TransactionInfo["currency_type"] = Transaction.currency_type + TransactionInfo["created_at"] = Transaction.created_at.strftime("%d/%m/%Y %H:%M:%S UTC") + TransactionInfo["custom_text"] = Transaction.custom_text + if Transaction.assetId: + TransactionInfo["asset"] = { + "id": Transaction.assetId, + "name": Asset.query.filter_by(id = Transaction.assetId).first().name, + } + else: + TransactionInfo["asset"] = None + FormattedTransactions.append(TransactionInfo) + + return render_template( + "admin/usermanage/transactions.html", + userObj = userObj, + PageCategory = CategoryArg, + TransactionInfo = FormattedTransactions, + Pagination = TransactionQuery + ) +from app.util.membership import GetUserMembership, RemoveUserMembership, GiveUserMembership +from app.enums.MembershipType import MembershipType +from datetime import timedelta, datetime + +from datetime import datetime, timedelta + +@AdminRoute.route("/manage-currency", methods=['GET', 'POST']) +def ManageCurrencyAdmin(): + AdminPermissionRequired('ManageCurrency') + + AuthenticatedUser: User = auth.GetCurrentUser() + if request.method == 'GET': + return render_template("admin/managecurrency.html", user=AuthenticatedUser) + + target_user = None + user_id = request.form.get("userid", type=int) + username = request.form.get("username", default="", type=str).strip() + if user_id: + target_user = User.query.filter_by(id=user_id).first() + elif username: + target_user = User.query.filter_by(username=username).first() + else: + target_user = AuthenticatedUser + + if target_user is None: + flash("Target user not found", "danger") + return render_template("admin/managecurrency.html", user=AuthenticatedUser) + + form_action = request.form.get("form_action", "") + bc_type = request.form.get("bc_type") + bc_duration = request.form.get("bc_duration", 0) + + logging.info(f"ManageCurrencyAdmin POST: form_action={form_action}, bc_type={bc_type}, amount={request.form.get('amount')}") + + if form_action == "builders_club" or bc_type: + return handle_builders_club_update(target_user, bc_type, bc_duration) + + return handle_currency_update(target_user) + + +@AdminRoute.route("/manage-users//manage-currency", methods=['GET', 'POST']) +def ManageUserCurrency(userid: int): + AdminPermissionRequired('ManageCurrency') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + if request.method == 'GET': + return render_template("admin/usermanage/managecurrency.html", userObj=userObj) + + form_action = request.form.get("form_action", "") + bc_type = request.form.get("bc_type") + logging.info(f"ManageUserCurrency POST: userid={userid}, form_action={form_action}, bc_type={bc_type}, amount={request.form.get('amount')}") + + if form_action == "builders_club" or bc_type: + return handle_builders_club_update(userObj, bc_type, request.form.get("bc_duration", 0)) + + return handle_currency_update(userObj) + + +def handle_currency_update(user: User): + action = request.form.get("action", "add").strip().lower() + amount_raw = request.form.get("amount", "") + + if amount_raw in (None, ""): + flash("Amount is required", "warning") + return redirect(request.url) + + try: + amount = int(amount_raw) + except ValueError: + flash("Invalid amount entered", "danger") + return redirect(request.url) + + if amount == 0: + flash("Amount must not be zero", "warning") + return redirect(request.url) + + currency_type = request.form.get("currency_type", "robux") + currency_id = 1 if currency_type == "tix" else 0 + currency_name = "Tix" if currency_type == "tix" else "Robux" + + amount = abs(amount) + if action == "subtract": + economy.DecrementTargetBalance(user, amount, currency_id) + flash(f"Successfully removed {amount} {currency_name} from {user.username}", "success") + else: + economy.IncrementTargetBalance(user, amount, currency_id) + flash(f"Successfully added {amount} {currency_name} to {user.username}", "success") + + return redirect(request.url) + + +def handle_builders_club_update(user: User, bc_type: str, bc_duration: str): + if not bc_type: + flash("No Builders Club action selected", "warning") + return redirect(request.url) + if bc_type == "none": + RemoveUserMembership(user.id) + flash("Successfully removed Builders Club from the user", "success") + return redirect(request.url) + + membership_map = { + "classic": MembershipType.BuildersClub, + "turbo": MembershipType.TurboBuildersClub, + "outrageous": MembershipType.OutrageousBuildersClub + } + + membership_type = membership_map.get(bc_type) + if not membership_type: + flash("Invalid Builders Club type selected", "danger") + return redirect(request.url) + + try: + duration_days = int(bc_duration) + except ValueError: + flash("Invalid Builders Club duration", "danger") + return redirect(request.url) + + if duration_days < 0: + flash("Builders Club duration cannot be negative", "danger") + return redirect(request.url) + + duration = timedelta(days=duration_days) + RemoveUserMembership(user.id) + try: + GiveUserMembership(user.id, membership_type, expiration=duration) + except Exception as e: + logging.error(f"Failed to update Builders Club for user {user.id}: {e}") + flash("Failed to update Builders Club membership", "danger") + return redirect(request.url) + + amount_raw = request.form.get("amount", "") + if amount_raw not in (None, ""): + try: + amount = int(amount_raw) + except ValueError: + flash("Invalid amount entered", "danger") + return redirect(request.url) + + if amount == 0: + flash("Amount must not be zero", "warning") + return redirect(request.url) + + currency_type = request.form.get("currency_type", "robux") + currency_id = 1 if currency_type == "tix" else 0 + currency_name = "Tix" if currency_type == "tix" else "Robux" + + if amount > 0: + economy.IncrementTargetBalance(user, amount, currency_id) + flash(f"Successfully added {amount} {currency_name} to {user.username}", "success") + else: + economy.DecrementTargetBalance(user, abs(amount), currency_id) + flash(f"Successfully removed {abs(amount)} {currency_name} from {user.username}", "success") + else: + flash(f"Successfully updated Builders Club membership for {user.username}", "success") + + return redirect(request.url) + + +@AdminRoute.route("/manage-users//manage-inventory", methods=['GET']) +def ManageUserInventory(userid: int): + AdminPermissionRequired('ManageInventory') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + PageNumber = request.args.get("page", 1, type=int) + UserInventory = UserAsset.query.filter_by(userid=userid).order_by(UserAsset.created.desc()).paginate(page=PageNumber, per_page=24, error_out=False) + + return render_template("admin/usermanage/manageinventory.html", userObj=userObj, UserInventory=UserInventory, PageNumber=PageNumber) + +@AdminRoute.route("/manage-users//manage-inventory/give", methods=['POST']) +def GiveUserItem(userid: int): + AdminPermissionRequired('ManageInventory') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + assetid = request.form.get("assetid", type=int) + if not assetid: + flash("Please provide an Asset ID", "warning") + return redirect(f"/admin/manage-users/{userid}/manage-inventory") + + AssetObj: Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Asset not found", "danger") + return redirect(f"/admin/manage-users/{userid}/manage-inventory") + + if AssetObj.is_limited_unique: + if AssetObj.sale_count >= AssetObj.serial_count: + flash("This limited item has no serials left to give out", "danger") + return redirect(f"/admin/manage-users/{userid}/manage-inventory") + ItemSerial = AssetObj.sale_count + 1 + NewUserAsset = UserAsset(userid=userid, assetid=AssetObj.id, serial=ItemSerial) + AssetObj.sale_count += 1 + if AssetObj.sale_count >= AssetObj.serial_count: + AssetObj.is_for_sale = False + else: + NewUserAsset = UserAsset(userid=userid, assetid=AssetObj.id) + + db.session.add(NewUserAsset) + db.session.commit() + + flash(f"Gave {AssetObj.name} to {userObj.username}", "success") + return redirect(f"/admin/manage-users/{userid}/manage-inventory") + +@AdminRoute.route("/manage-users//manage-inventory/take/", methods=['POST']) +def TakeUserItem(userid: int, uaid: int): + AdminPermissionRequired('ManageInventory') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + UserAssetObj: UserAsset = UserAsset.query.filter_by(id=uaid, userid=userid).first() + if UserAssetObj is None: + flash("Item not found in this user's inventory", "danger") + return redirect(f"/admin/manage-users/{userid}/manage-inventory") + + AssetName = UserAssetObj.asset.name if UserAssetObj.asset else "item" + + TargetUserAvatarAsset: UserAvatarAsset = UserAvatarAsset.query.filter_by(user_id=userid, asset_id=UserAssetObj.assetid).first() + if TargetUserAvatarAsset is not None: + db.session.delete(TargetUserAvatarAsset) + + db.session.delete(UserAssetObj) + db.session.commit() + + flash(f"Took {AssetName} away from {userObj.username}", "success") + return redirect(f"/admin/manage-users/{userid}/manage-inventory") + + +@AdminRoute.route("/manage-users//gdpr-delete", methods=["GET"]) +def GDPRDeleteUserPage(userid: int): + AdminPermissionRequired('GDPRDeleteUser') + + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + return render_template("admin/usermanage/gdprdelete.html", userObj=userObj) + + +@AdminRoute.route("/manage-users//gdpr-delete", methods=["POST"]) +def GDPRDeleteUserPost(userid: int): + AdminPermissionRequired('GDPRDeleteUser') + + AuthenticatedUser: User = auth.GetCurrentUser() + userObj: User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + if userObj.accountstatus == 4: + flash("This user has already been forgotten", "danger") + return redirect(f"/admin/manage-users/{userid}") + + ConfirmUsername = request.form.get("confirm_username", default="", type=str).strip() + + if ConfirmUsername != userObj.username: + flash("Typed username did not match, nothing was deleted", "danger") + return redirect(f"/admin/manage-users/{userid}/gdpr-delete") + + if redis_controller.exists(f"admin_gdpr_delete_cooldown:{AuthenticatedUser.id}"): + flash("You are erasing users too fast!", "danger") + return redirect(f"/admin/manage-users/{userid}/gdpr-delete") + + OriginalUsername = userObj.username + + # Revoke every session we have a record of for this user + UserLoginRecords : list[LoginRecord] = LoginRecord.query.filter_by(userid=userid).all() + for LoginRecordObj in UserLoginRecords: + if LoginRecordObj.session_token: + auth.invalidateToken(LoginRecordObj.session_token) + db.session.delete(LoginRecordObj) + + # Wipe directly identifying data + for UserHWIDLogObj in UserHWIDLog.query.filter_by(user_id=userid).all(): + db.session.delete(UserHWIDLogObj) + for PastUsernameObj in PastUsername.query.filter_by(user_id=userid).all(): + db.session.delete(PastUsernameObj) + for UserEmailObj in UserEmail.query.filter_by(user_id=userid).all(): + db.session.delete(UserEmailObj) + + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=userid).first() + if LinkedDiscordObj is not None: + db.session.delete(LinkedDiscordObj) + + # Social graph + FriendRequest.query.filter(or_(FriendRequest.requester_id == userid, FriendRequest.requestee_id == userid)).delete(synchronize_session=False) + FriendRelationship.query.filter(or_(FriendRelationship.user_id == userid, FriendRelationship.friend_id == userid)).delete(synchronize_session=False) + FollowRelationship.query.filter(or_(FollowRelationship.followerUserId == userid, FollowRelationship.followeeUserId == userid)).delete(synchronize_session=False) + + # Scrub content this user authored, without breaking the other side of a conversation + Message.query.filter_by(sender_id=userid).update({"content": "[This message has been removed]", "subject": "[Removed]"}, synchronize_session=False) + GroupWallPost.query.filter_by(poster_id=userid).delete(synchronize_session=False) + GroupMember.query.filter_by(user_id=userid).delete(synchronize_session=False) + GroupJoinRequest.query.filter_by(user_id=userid).delete(synchronize_session=False) + + # Send any eligible (limited) items through the lottery instead of just deleting them, then nuke everything else they own + db.session.commit() + DistributedCount, LotteryError = DistributeUserLimitedsToLottery(userObj, AuthenticatedUser, NotifyOriginalOwner=False) + if LotteryError is not None: + logging.info(f"GDPR erasure for user {userid}: lottery distribution skipped ({LotteryError}), remaining limiteds will be deleted instead") + + for RemainingUserAssetObj in UserAsset.query.filter_by(userid=userid).all(): + db.session.delete(RemainingUserAssetObj) + + # Reset avatar, wipe the cached render, & kick from any active game server + for UserAvatarAssetObj in UserAvatarAsset.query.filter_by(user_id=userid).all(): + db.session.delete(UserAvatarAssetObj) + UserAvatarObj : UserAvatar = UserAvatar.query.filter_by(user_id=userid).first() + if UserAvatarObj is not None: + db.session.delete(UserAvatarObj) + UserThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userid).first() + if UserThumbnailObj is not None: + db.session.delete(UserThumbnailObj) + + PlaceserverPlayerObj = PlaceServerPlayer.query.filter_by(userid=userid).first() + if PlaceserverPlayerObj is not None: + CurrentPlaceServerObj = PlaceServer.query.filter_by(serveruuid=PlaceserverPlayerObj.serveruuid).first() + EvictPlayer(CurrentPlaceServerObj, userid) + + # Anonymize the account itself and lock it + userObj.username = f"deleted_user_{userid}" + userObj.password = secrets.token_hex(64) + userObj.description = "" + userObj.TOTPEnabled = False + userObj.accountstatus = 4 + + db.session.commit() + + redis_controller.set(f"admin_gdpr_delete_cooldown:{AuthenticatedUser.id}", "1", ex=30) + + logging.info(f"GDPR erasure performed on user {userid} (formerly '{OriginalUsername}') by admin {AuthenticatedUser.id}") + flash(f"User {OriginalUsername} has been permanently erased and locked", "success") + return redirect(f"/admin/manage-users/{userid}") + +''' +@AdminRoute.route("/manage-users//moderator-notes", methods=['GET']) +def ViewUserModeratorNotes( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + PageNumber = request.args.get('page', default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + Robux : list[ModeratorNote] = ModeratorNote.query.filter_by( user_id = userObj.id ).order_by(ModeratorNote.created_at.desc()).paginate(page=PageNumber, per_page=15, error_out=False) + + def GetUserName( TargetUserId : int ) -> str: + return User.query.filter_by( id = TargetUserId ).first().username + + return render_template( + "admin/usermanage/currency.html", + userObj = userObj, + Robux = Robux, + GetUserName = GetUserName + ) +''' + +from app.pages.admin.websitefeaturesdefinition import WebsiteFeaturesDefinition +from app.util.websiteFeatures import GetWebsiteFeature, SetWebsiteFeature + +@AdminRoute.route("/manage-website-features", methods=['GET']) +def ManageWebsiteFeatures(): + AdminPermissionRequired('ManageWebsiteFeatures') + + SitesFeaturesStatus = [] + for feature in WebsiteFeaturesDefinition: + SitesFeaturesStatus.append( { + "name" : feature["name"], + "enabled" : GetWebsiteFeature(feature["name"]), + }) + + return render_template("admin/websitefeatures.html", SitesFeaturesStatus=SitesFeaturesStatus) + +@AdminRoute.route("/manage-website-features//disable", methods=['POST']) +def ManageWebsiteFeaturesDisable(featurename : str): + AdminPermissionRequired('ManageWebsiteFeatures') + SetWebsiteFeature(featurename, False) + return redirect("/admin/manage-website-features") + +@AdminRoute.route("/manage-website-features//enable", methods=['POST']) +def ManageWebsiteFeaturesEnable(featurename : str): + AdminPermissionRequired('ManageWebsiteFeatures') + SetWebsiteFeature(featurename, True) + return redirect("/admin/manage-website-features") + +@AdminRoute.route("/create-user", methods=['GET']) +def CreateUser(): + AdminPermissionRequired('CreateUser') + return render_template("admin/createuser.html") + +@AdminRoute.route("/create-user", methods=['POST']) +@limiter.limit("1/second") +def CreateUserPost(): + AdminPermissionRequired('CreateUser') + + Username = request.form.get( key='username', default=None, type=str ) + Password = request.form.get( key='password', default=None, type=str ) + + if Username is None or Password is None: + flash("Invalid request", "error") + return redirect("/admin/create-user") + + from app.pages.signup.signup import isUsernameAllowed + from app.util.textfilter import FilterText, TextNotAllowedException + from app.models.user_avatar import UserAvatar + import hashlib + from sqlalchemy import func + + if len(Password) < 8: + flash("Password must be at least 8 characters long") + return redirect("/signup") + + try: + FilterText( Text = Username, ThrowException = True) + except TextNotAllowedException: + flash("Username is not friendly for NEXIUM") + return redirect("/signup") + + UserSignupLock = redislock.acquire_lock("UserSignupLock", acquire_timeout = 20, lock_timeout=1) + if not UserSignupLock: + flash("Failed to acquire user signup lock, please contact administrator", "error") + return redirect("/admin/create-user") + + user = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if user is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken", "error") + return redirect("/admin/create-user") + + pastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == func.lower(Username)).first() + if pastUsername is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken", "error") + return redirect("/admin/create-user") + + hashedPassword = hashlib.sha512(Password.encode("utf-8")).hexdigest() + user = User(username=Username, password=hashedPassword, created=datetime.utcnow(), lastonline=datetime.utcnow()) + db.session.add(user) + db.session.commit() + userEconomy = UserEconomy(userid=user.id, robux=0, tix=10) + db.session.add(userEconomy) + userAvatar = UserAvatar(user_id=user.id) + db.session.add(userAvatar) + db.session.commit() + redislock.release_lock("UserSignupLock", UserSignupLock) + TakeUserThumbnail(user.id) + + flash("User created", "success") + return redirect("/admin/create-user") + +@AdminRoute.route("/create-giftcard", methods=['GET']) +def CreateGiftcard(): + AdminPermissionRequired('CreateGiftcard') + return render_template("admin/creategiftcard.html") + +@AdminRoute.route("/create-giftcard", methods=['POST']) +def CreateGiftcardPost(): + AdminPermissionRequired('CreateGiftcard') + + GiftcardTypeInput = request.form.get( key='giftcard-type', default=None, type=int ) + CopiesAmount = request.form.get( key='copies', default=None, type=int ) + GiftcardValue = request.form.get( key='value', default=None, type=int ) + + if GiftcardTypeInput is None or CopiesAmount is None or GiftcardValue is None: + flash("Invalid request", "error") + return redirect("/admin/create-giftcard") + + if CopiesAmount < 1 or CopiesAmount > 15: + flash("Copies value must be between 1 and 15", "error") + return redirect("/admin/create-giftcard") + + if GiftcardTypeInput not in [0,1,2,3,4]: + flash("Invalid giftcard type", "error") + return redirect("/admin/create-giftcard") + + if GiftcardValue < 1: + flash("Giftcard value must be at least 1", "error") + return redirect("/admin/create-giftcard") + + GiftcardTypeInput : GiftcardType = GiftcardType(GiftcardTypeInput) + + if GiftcardTypeInput in [GiftcardType.RobuxCurrency, GiftcardType.TixCurrency]: + AuthenticatedUser : User = auth.GetCurrentUser() + if GiftcardValue > 100000000 and AuthenticatedUser.id not in (1): + flash("Giftcard value must be at most 100000000 (why do u want that much wtf??)", "error") + return redirect("/admin/create-giftcard") + elif GiftcardTypeInput in [GiftcardType.Outrageous_BuildersClub, GiftcardType.Turbo_BuildersClub]: + if GiftcardValue > 12: + flash("Giftcard value must be at most 12", "error") + return redirect("/admin/create-giftcard") + elif GiftcardTypeInput == GiftcardType.Item: + AssetObj : Asset = Asset.query.filter_by(id=GiftcardValue).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/create-giftcard") + else: + flash("Invalid giftcard type", "error") + return redirect("/admin/create-giftcard") + + AuthenticatedUser : User = auth.GetCurrentUser() + + if redis_controller.get(f"GiftcardCooldown_{AuthenticatedUser.id}") is not None: + flash("You are on cooldown bruv", "error") + return redirect("/admin/create-giftcard") + redis_controller.set(f"GiftcardCooldown_{AuthenticatedUser.id}", "1", ex=60) + + def GenerateCode(): + Code = "" + for i in range(0, 5): + Chunk = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(5)) + Code += Chunk + if i != 4: + Code += "-" + return Code + + AllCodes = [] + + for i in range(0, CopiesAmount): + Code = GenerateCode() + GiftcardObj : GiftcardKey = GiftcardKey(key=Code, value=GiftcardValue, type=GiftcardTypeInput) + db.session.add(GiftcardObj) + AllCodes.append(Code) + db.session.commit() + + flash(f"Created {CopiesAmount} giftcards", "success") + return render_template("admin/creategiftcard.html", codes=AllCodes) + +@AdminRoute.route("/update-asset-file", methods=['GET']) +def UpdateAssetFile(): + AdminPermissionRequired('UpdateAssetFile') + return render_template("admin/updateassetfile.html") +from app.util import s3helper +@AdminRoute.route("/update-asset-file", methods=['POST']) +def UpdateAssetFilePost(): + AdminPermissionRequired('UpdateAssetFile') + AuthenticatedUser : User = auth.GetCurrentUser() + AssetID = request.form.get( key='asset-id', default=None, type=int ) + if AssetID is None: + flash("Invalid request", "error") + return redirect("/admin/update-asset-file") + + AssetObj : Asset = Asset.query.filter_by(id=AssetID).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/update-asset-file") + if AssetObj.creator_id not in [1] or AssetObj.creator_type != 0: + flash("Asset is not owned by NEXIUM", "error") + return redirect("/admin/update-asset-file") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(24), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]: + if AuthenticatedUser.id not in (1): + flash("You are not allowed to update this type of asset", "error") + return redirect("/admin/update-asset-file") + + if 'file' not in request.files: + flash("No file uploaded", "error") + return redirect("/admin/update-asset-file") + + AssetFile = request.files['file'] + if AssetFile.filename == '': + flash("No file uploaded", "error") + return redirect("/admin/update-asset-file") + + AssetFile.seek(0) + AssetFileContent = AssetFile.read() + AssetFileHash = hashlib.sha512(AssetFileContent).hexdigest() + + from app.util.assetvalidation import ValidateClothingImage, ValidatePlaceFile + + if AssetObj.asset_type == AssetType.Image: + isAllowed = ValidateClothingImage( AssetFile, verifyResolution=False) + if not isAllowed: + flash("Invalid image", "error") + return redirect("/admin/update-asset-file") + else: + isValidPlaceFile = ValidatePlaceFile( AssetFile) + if type(isValidPlaceFile) is str: + flash(f"Validation Failed: {isValidPlaceFile}", "error") + return redirect("/admin/update-asset-file") + + if not s3helper.DoesKeyExist(AssetFileHash): + s3helper.UploadBytesToS3(AssetFileContent, AssetFileHash) + + NewAssetVersion : AssetVersion = assetversion.CreateNewAssetVersion(AssetObj, AssetFileHash) + AssetObj.updated_at = datetime.utcnow() + db.session.commit() + + flash("Asset file updated", "success") + return redirect("/admin/update-asset-file") + +@AdminRoute.route("/copy-bundle", methods=['GET']) +def CopyBundle(): + AdminPermissionRequired('CopyBundle') + return render_template("admin/bundlecopier.html") + +@AdminRoute.route("/copy-bundle", methods=['POST']) +def CopyBundlePost(): + AdminPermissionRequired('CopyBundle') + + BundleID = request.form.get( key='bundle-id', default=None, type=int ) + if BundleID is None: + flash("Invalid request", "error") + return redirect("/admin/copy-bundle") + + from app.routes.asset import MigrateBundle, MigrateBundleException + try: + NewBundle : Asset = MigrateBundle(BundleID) + except MigrateBundleException as e: + flash(e.message, "error") + return redirect("/admin/copy-bundle") + except Exception as e: + flash(f"An error occured, {str(e)}", "error") + return redirect("/admin/copy-bundle") + + return redirect(f"/admin/manage-assets/{str(NewBundle.id)}") + +@AdminRoute.route("/create-asset", methods=['GET']) +def CreateAsset(): + AdminPermissionRequired('CreateAsset') + return render_template("admin/createasset.html") + +@AdminRoute.route("/create-asset", methods=['POST']) +def CreateAssetPost(): + AdminPermissionRequired('CreateAsset') + + AssetTypeInput = request.form.get( key='asset-type', default=None, type=int ) + AssetName = request.form.get( key='asset-name', default=None, type=str ) + AssetFile = request.files.get(key='file', default=None) + + if AssetTypeInput is None or AssetName is None or AssetFile is None: + flash("Invalid request", "error") + return redirect("/admin/create-asset") + + if AssetTypeInput not in [8,17,18,19,41,42,43,44,45,46,47,62]: + flash("Invalid asset type", "error") + return redirect("/admin/create-asset") + + if AssetName == "": + flash("Asset name cannot be empty", "error") + return redirect("/admin/create-asset") + if len(AssetName) > 64: + flash("Asset name is too long", "error") + return redirect("/admin/create-asset") + + if AssetFile.content_length > 1024*1024*5: + flash("File is too big", "error") + return redirect("/admin/create-asset") + + from app.util.assetvalidation import ValidatePlaceFile + if AssetTypeInput not in [62, 8]: + isValidBinaryFile = ValidatePlaceFile( AssetFile ) + if isValidBinaryFile != True: + flash(f"Validation Failed: {isValidBinaryFile}", "error") + return redirect("/admin/create-asset") + + AssetTypeInput : AssetType = AssetType(AssetTypeInput) + + NewAssetObj : Asset = Asset( + name = AssetName, + creator_id = 1, + creator_type = 0, + asset_type = AssetTypeInput, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + description = "", + moderation_status = 0, + asset_genre = 1 + ) + db.session.add(NewAssetObj) + db.session.commit() + + AssetFile.seek(0) + AssetFileContent = AssetFile.read() + AssetFileHash = hashlib.sha512(AssetFileContent).hexdigest() + s3helper.UploadBytesToS3(AssetFileContent, AssetFileHash) + NewAssetVersion : AssetVersion = assetversion.CreateNewAssetVersion(NewAssetObj, AssetFileHash) + + return redirect(f"/admin/manage-assets/{str(NewAssetObj.id)}") + +@AdminRoute.route("/moderate-asset", methods=['GET']) +def ModerateAsset(): + AdminPermissionRequired('ModerateAsset') + return render_template("admin/moderateUGC.html") + + +@AdminRoute.route("/moderate-asset/", methods=['GET']) +def ModerateAssetView( assetid : int ): + AdminPermissionRequired('ModerateAsset') + + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=assetid).order_by(AssetThumbnail.id.desc()).all() + AllAssetVersions : list[AssetVersion] = AssetVersion.query.filter_by(asset_id=assetid).order_by(AssetVersion.id.desc()).all() + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + if AssetObj.creator_type == 0: + CreatorObj : User = User.query.filter_by(id=AssetObj.creator_id).first() + else: + CreatorObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + + RelatedAssets : list[Asset] = [] + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + RelatedAssets.append(assetlink.ChildAsset) + else: + RelatedAssets.append(assetlink.ParentAsset) + + return render_template( + "admin/moderateUGC.html", + AssetObj=AssetObj, + AllAssetThumbnails=AllAssetThumbnails, + AllAssetVersions=AllAssetVersions, + CreatorObj=CreatorObj, + RelatedAssets=RelatedAssets + ) +StatusToColor = { + 0 : { + "color" : 0x0ef05d, + "name" : "Approved" + }, + 1 : { + "color" : 0xffc107, + "name" : "Pending Review" + }, + 2 : { + "color" : 0xff0000, + "name" : "Deleted" + } +} + +def LogAssetModerationAction( Actor : User, AssetObj : Asset ): + def thread_func(): + EmbedObj = { + "type": "rich", + "title": "Asset Moderation", + "description": f"Asset [{AssetObj.id}](https://www.nexium.fit/admin/moderate-asset/{AssetObj.id}) moderation status has been updated by **{Actor.username}** ({Actor.id})", + "color": StatusToColor[AssetObj.moderation_status]["color"], + "fields": [ + { + "name": "Asset Type", + "value": AssetObj.asset_type.name, + "inline": False + }, + { + "name": "Asset Moderation Status", + "value": StatusToColor[AssetObj.moderation_status]["name"], + "inline": False + } + ], + "author": { + "name": Actor.username, + "icon_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + }, + "footer": { + "text": "NEXIUM - Moderation Logs" + }, + "timestamp": datetime.utcnow().isoformat() + } + + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "NEXIUM - Moderation Logs", + "embeds" : [EmbedObj], + "avatar_url": f"https://www.nexium.fit/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + }, + timeout = 15 # without timeout the thread will hang if request hangs + ) + except Exception as e: + logging.warn(f"Admin > LogAssetModerationAction: Exception raised when sending webhook - {str(e)}") + threading.Thread(target=thread_func).start() + +@AdminRoute.route("/moderate-asset//quick-delete", methods=['POST']) +def ModerateAssetQuickDelete( assetid : int ): + AdminPermissionRequired('ModerateAsset') + + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.moderation_status == 2: + flash("Asset is already deleted", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.exists(f"ModerateAssetCooldown_{AuthenticatedUser.id}") and AuthenticatedUser.id != 1: + flash("You are on cooldown", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + redis_controller.set(f"ModerateAssetCooldown_{AuthenticatedUser.id}", "1", ex=20) + + def ContentDeleteAssetObj( AssetObj : Asset ): + AssetObj.moderation_status = 2 # Deleted + AssetObj.name = f"[ Content Deleted {AssetObj.id} ]" + AssetObj.description = "" + AssetObj.updated_at = datetime.utcnow() + AssetObj.is_for_sale = False + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).order_by(AssetThumbnail.id.desc()).all() + + for assetthumbnail in AllAssetThumbnails: + assetthumbnail.moderation_status = 2 + assetthumbnail.updated_at = datetime.utcnow() + + if AssetObj.asset_type == AssetType.Place: + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetObj.id).first() + if PlaceIconObj is not None: + PlaceIconObj.moderation_status = 2 + PlaceIconObj.updated_at = datetime.utcnow() + db.session.commit() + + ContentDeleteAssetObj(AssetObj) + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + ContentDeleteAssetObj(assetlink.ChildAsset) + flash(f"Asset [{assetlink.ChildAssetId}] deleted as it was linked.", "success") + else: + ContentDeleteAssetObj(assetlink.ParentAsset) + flash(f"Asset [{assetlink.ParentAssetId}] deleted as it was linked.", "success") + + flash("Asset Content deleted", "success") + LogAssetModerationAction(AuthenticatedUser, AssetObj) + return redirect(f"/admin/moderate-asset/{str(assetid)}") + +@AdminRoute.route("/moderate-asset//quick-approve", methods=['POST']) +def ModerateAssetQuickApporve( assetid : int ): + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.moderation_status == 0: + flash("Asset is already approved", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.exists(f"ModerateAssetCooldown_{AuthenticatedUser.id}") and AuthenticatedUser.id != 1: + flash("You are on cooldown", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + redis_controller.set(f"ModerateAssetCooldown_{AuthenticatedUser.id}", "1", ex=20) + + def AllowContentAssetObj( AssetObj : Asset ): + AssetObj.moderation_status = 0 + AssetObj.updated_at = datetime.utcnow() + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).order_by(AssetThumbnail.id.desc()).all() + for assetthumbnail in AllAssetThumbnails: + assetthumbnail.moderation_status = 0 + assetthumbnail.updated_at = datetime.utcnow() + + if AssetObj.asset_type == AssetType.Place: + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetObj.id).first() + if PlaceIconObj is not None: + PlaceIconObj.moderation_status = 0 + PlaceIconObj.updated_at = datetime.utcnow() + db.session.commit() + + AllowContentAssetObj(AssetObj) + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + AllowContentAssetObj(assetlink.ChildAsset) + flash(f"Asset [{assetlink.ChildAssetId}] approved as it was linked.", "success") + else: + AllowContentAssetObj(assetlink.ParentAsset) + flash(f"Asset [{assetlink.ParentAssetId}] approved as it was linked.", "success") + + flash("Asset approved", "success") + LogAssetModerationAction(AuthenticatedUser, AssetObj) + return redirect(f"/admin/moderate-asset/{str(assetid)}") + +@AdminRoute.route("/moderate-asset//quick-pending", methods=['POST']) +def ModerateAssetQuickPending( assetid : int ): + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.moderation_status == 1: + flash("Asset is already pending", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.exists(f"ModerateAssetCooldown_{AuthenticatedUser.id}") and AuthenticatedUser.id != 1: + flash("You are on cooldown", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + redis_controller.set(f"ModerateAssetCooldown_{AuthenticatedUser.id}", "1", ex=20) + + def PendingContentAssetObj( AssetObj : Asset ): + AssetObj.moderation_status = 1 + AssetObj.updated_at = datetime.utcnow() + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).order_by(AssetThumbnail.id.desc()).all() + for assetthumbnail in AllAssetThumbnails: + assetthumbnail.moderation_status = 1 + assetthumbnail.updated_at = datetime.utcnow() + + if AssetObj.asset_type == AssetType.Place: + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetObj.id).first() + if PlaceIconObj is not None: + PlaceIconObj.moderation_status = 1 + PlaceIconObj.updated_at = datetime.utcnow() + db.session.commit() + + PendingContentAssetObj(AssetObj) + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + PendingContentAssetObj(assetlink.ChildAsset) + flash(f"Asset [{assetlink.ChildAssetId}] pending as it was linked.", "success") + else: + PendingContentAssetObj(assetlink.ParentAsset) + flash(f"Asset [{assetlink.ParentAssetId}] pending as it was linked.", "success") + + flash("Asset set to pending", "success") + LogAssetModerationAction(AuthenticatedUser, AssetObj) + return redirect(f"/admin/moderate-asset/{str(assetid)}") + +@AdminRoute.route("/moderate-asset", methods=['POST']) +def ModerateAssetSearch(): + AdminPermissionRequired('ModerateAsset') + + AssetID = request.form.get( key='asset-id', default=None, type=int ) + if AssetID is None: + flash("Invalid request", "error") + return redirect("/admin/moderate-asset") + if AssetID < 0: + flash("Invalid request", "error") + return redirect("/admin/moderate-asset") + return redirect(f"/admin/moderate-asset/{str(AssetID)}") + +@AdminRoute.route("/lottery", methods=["GET"]) +def LotteryIndex(): + AdminPermissionRequired('Lottery') + + EligibleUsers = User.query.filter(or_( User.accountstatus == 3, User.accountstatus == 4, User.lastonline < datetime.utcnow() - timedelta( days = 31 ) )) + EligibleUsers = EligibleUsers.outerjoin( UserAsset, UserAsset.userid == User.id ).outerjoin( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).group_by( User.id ).all() + + def GetTotalLimiteds( UserObject : User ) -> int: + if redis_controller.exists(f"LotteryLimitedCountCache:{UserObject.id}"): + return int(redis_controller.get(f"LotteryLimitedCountCache:{UserObject.id}")) + TotalLimiteds : int = UserAsset.query.filter_by( userid = UserObject.id ).join( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).count() + redis_controller.set(f"LotteryLimitedCountCache:{UserObject.id}", str(TotalLimiteds), ex=120) + return TotalLimiteds + + return render_template("admin/lottery/index.html", EligibleUsers=EligibleUsers, GetTotalLimiteds=GetTotalLimiteds, InactiveTime = (datetime.utcnow() - timedelta( days = 31 )) ) + +def DistributeUserLimitedsToLottery(UserObject: User, ActorUser: User, NotifyOriginalOwner: bool = True): + """ + Randomly redistributes every limited item owned by UserObject to currently online users. + Returns (number_of_items_distributed, error_message). error_message is None when nothing went wrong + (which includes the case where the user simply had no limiteds to give away). + """ + EligibleLimiteds : list[UserAsset] = UserAsset.query.filter_by( userid = UserObject.id ).join( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).all() + if len(EligibleLimiteds) < 1: + return 0, None + + TotalUsersOnline : int = User.query.filter( User.lastonline > datetime.utcnow() - timedelta( minutes = 2 ) ).count() + if TotalUsersOnline < 5: + return 0, "Not enough users online" + + PreviousWinner = None + DistributedCount = 0 + for UserAssetObj in EligibleLimiteds: + RandomWinner : User = User.query.filter(and_( + User.id != UserObject.id, + User.id != ActorUser.id, + User.id != PreviousWinner, + User.lastonline > datetime.utcnow() - timedelta( minutes = 2 ) + )).order_by(func.random()).first() + + if RandomWinner is None: + return DistributedCount, "Ran out of eligible winners" + + PreviousWinner = RandomWinner.id + UserAssetObj.userid = RandomWinner.id + UserAssetObj.updated = datetime.utcnow() + CreateSystemMessage( + f"You won a free limited!", + f"""You have been randomly selected to be given a free limited by NEXIUM. +You have won: {UserAssetObj.asset.name} ( {UserAssetObj.asset.id} ) [ UAID: {UserAssetObj.id} / Serial: { UserAssetObj.serial if UserAssetObj.serial is not None else 'None'} ] + +- NEXIUM Team +""", + RandomWinner.id + ) + if NotifyOriginalOwner: + CreateSystemMessage( + f"Limited Item removed", + f""""Your limited {UserAssetObj.asset.name} ( {UserAssetObj.asset.id} ) [ UAID: {UserAssetObj.id} / Serial: { UserAssetObj.serial if UserAssetObj.serial is not None else 'None'} ] has been removed from your account and was given to another ca User +This was because you are either: + - Inactive for over 31 days + - Terminated + +We apologize for any inconvenience this may have caused. + +- NEXIUM Team +""", + UserObject.id + ) + + TargetUserAvatarAsset : UserAvatarAsset = UserAvatarAsset.query.filter_by( user_id = UserObject.id, asset_id = UserAssetObj.asset.id ).first() + if TargetUserAvatarAsset is not None: + db.session.delete(TargetUserAvatarAsset) + + db.session.commit() + + try: + newLimitedTransfer = LimitedItemTransfer( + original_owner_id = UserObject.id, + new_owner_id = RandomWinner.id, + asset_id = UserAssetObj.assetid, + user_asset_id = UserAssetObj.id, + transfer_method = LimitedItemTransferMethod.WonByLottery, + purchased_price = None + ) + db.session.add(newLimitedTransfer) + db.session.commit() + except Exception: + pass + + DistributedCount += 1 + + TakeUserThumbnail( UserObject.id ) + return DistributedCount, None + +@AdminRoute.route("/lottery", methods=["POST"]) +def LotteryPost(): + AdminPermissionRequired('Lottery') + + SelectedUser : int = request.form.get( key='selected-user', default=None, type=int ) + if SelectedUser is None: + flash("Invalid request", "error") + return redirect("/admin/lottery") + + UserObject : User = User.query.filter_by( id = SelectedUser ).first() + if UserObject is None: + flash("Invalid user", "error") + return redirect("/admin/lottery") + + if UserObject.accountstatus not in [3,4] and UserObject.lastonline > datetime.utcnow() - timedelta( days = 31 ): + flash("User is not eligible", "error") + return redirect("/admin/lottery") + + AuthenticatedUser : User = auth.GetCurrentUser() + + DistributedCount, ErrorMessage = DistributeUserLimitedsToLottery(UserObject, AuthenticatedUser) + if DistributedCount == 0: + flash(ErrorMessage or "User does not have any limiteds", "error") + return redirect("/admin/lottery") + + flash("Lottery completed", "success") + return redirect("/admin/lottery") + +@AdminRoute.route("/generate-invite-keys", methods=['GET']) +def GenerateInviteKeysPage(): + AdminPermissionRequired('GenerateInviteKeys') + return render_template("admin/generateinvitekeys.html") + +@AdminRoute.route("/generate-invite-keys", methods=['POST']) +def GenerateInviteKeysPost(): + AdminPermissionRequired('GenerateInviteKeys') + + AuthenticatedUser : User = auth.GetCurrentUser() + + Amount = request.form.get(key='amount', default=None, type=int) + + if Amount is None: + flash("Invalid request", "error") + return redirect("/admin/generate-invite-keys") + + if Amount < 1 or Amount > 50: + flash("Amount must be between 1 and 50", "error") + return redirect("/admin/generate-invite-keys") + + if redis_controller.get(f"GenerateInviteKeysCooldown_{AuthenticatedUser.id}") is not None: + flash("You are on cooldown, please wait before generating more keys.", "error") + return redirect("/admin/generate-invite-keys") + redis_controller.set(f"GenerateInviteKeysCooldown_{AuthenticatedUser.id}", "1", ex=60) + + GeneratedKeys = [] + for _ in range(Amount): + NewKey = invitekeyservice.CreateInviteKey(AuthenticatedUser) + GeneratedKeys.append(NewKey.key) + + flash(f"Successfully generated {Amount} invite key(s).", "success") + return render_template("admin/generateinvitekeys.html", keys=GeneratedKeys) \ No newline at end of file diff --git a/app/pages/admin/assetcopier.html b/app/pages/admin/assetcopier.html new file mode 100644 index 0000000..bd0738a --- /dev/null +++ b/app/pages/admin/assetcopier.html @@ -0,0 +1,39 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Copier

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

Do not abuse this tool, allowed assets: ( TShirt, Hat, Shirt, Pants, Head, Face, Gear, Accessories )

+

WARNING: When cloning accessories please be careful cloning 2016+ assets as some accessories attachments are too new for our client to handle

+
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/assetmoderation.html b/app/pages/admin/assetmoderation.html new file mode 100644 index 0000000..252a2c2 --- /dev/null +++ b/app/pages/admin/assetmoderation.html @@ -0,0 +1,119 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Moderation

+

Do not approve any controversial, NSFW, racist, anti semitism, furry content and aggressive swearing

+

For images every second any transparent part of the image will change colors this will help find any hidden content

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+ {% for pendingAsset in PendingAssets: %} +
+ {% if 'Asset' in pendingAsset %} +
{{pendingAsset.Asset.name}}
+
+

AssetId: {{pendingAsset.Asset.id}}

+

Created: {{pendingAsset.Asset.created_at}}

+

CreatorId: {{pendingAsset.Asset.creator_id}}

+

Creator Type: {% if pendingAsset.Asset.creator_type == 1%}Group{%else%}User{%endif%}

+

AssetType: {{pendingAsset.Asset.asset_type.name}}

+
+ {%endif%} + {% if 'Group' in pendingAsset %} +
{{pendingAsset.Group.name}}
+
+

GroupId: {{pendingAsset.Group.id}}

+

Created: {{pendingAsset.Icon.created_at}}

+

CreatorId: {{pendingAsset.Creator.id}}

+
+ {%endif%} + {% if pendingAsset.ParentAsset: %} +
+

Parent AssetId: {{pendingAsset.ParentAsset.id}}

+

Parent Name: {{pendingAsset.ParentAsset.name}}

+

Parent AssetType: {{pendingAsset.ParentAsset.asset_type.name}}

+
+ {% endif %} + {% if 'Asset' in pendingAsset %} + {% if pendingAsset.Asset.asset_type.value == 1 and not pendingAsset.AssetThumbnail: %} +
+ +
+ {%endif%} + {% if pendingAsset.Asset.asset_type.value == 9: %} + {% if pendingAsset.PlaceIcon: %} +
+ +
+ {%endif%} + {%endif%} + {% if pendingAsset.Asset.asset_type.value == 3 %} + + {%endif%} + {%endif%} + {% if pendingAsset.AssetThumbnail: %} +
+ +
+ {%endif%} + {% if 'Group' in pendingAsset %} + {% if pendingAsset.Icon: %} +
+ +
+ {%endif%} + {%endif%} + {% if 'Asset' in pendingAsset %} +
+
+
+
+
+
+
+
+ {%else%} +
+
+
+
+
+
+
+
+ {%endif%} +
+ {% endfor %} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/bundlecopier.html b/app/pages/admin/bundlecopier.html new file mode 100644 index 0000000..6257d74 --- /dev/null +++ b/app/pages/admin/bundlecopier.html @@ -0,0 +1,39 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Bundle Copier

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

Do not abuse this tool, some extra modifications may be needed when cloning a bundle as it is not always perfect once cloned. Also it might take awhile for it copy all assets, and we recommend to not use it when anyone is in game.

+

WARNING: PLEASE make sure the bundle you are copying has not already been uploaded

+
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/createasset.html b/app/pages/admin/createasset.html new file mode 100644 index 0000000..4dfea7c --- /dev/null +++ b/app/pages/admin/createasset.html @@ -0,0 +1,59 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Create Asset

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/creategiftcard.html b/app/pages/admin/creategiftcard.html new file mode 100644 index 0000000..055fa90 --- /dev/null +++ b/app/pages/admin/creategiftcard.html @@ -0,0 +1,67 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Create Giftcard

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+ + +
+

OBC GC Value = How many months

+

TBC GC Value = How many weeks

+

Robux and Tickets GC Value = How much currency

+

Item GC Value = Asset ID

+ + +
+ {% if codes: %} +
+

Giftcard Codes

+
+ {% for code in codes: %} + {{code}} +
+ {%endfor%} +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/createuser.html b/app/pages/admin/createuser.html new file mode 100644 index 0000000..50491e1 --- /dev/null +++ b/app/pages/admin/createuser.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Create User

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/fflagsettings/index.html b/app/pages/admin/fflagsettings/index.html new file mode 100644 index 0000000..c0925a8 --- /dev/null +++ b/app/pages/admin/fflagsettings/index.html @@ -0,0 +1,38 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/fflagsettings/view.html b/app/pages/admin/fflagsettings/view.html new file mode 100644 index 0000000..1c59425 --- /dev/null +++ b/app/pages/admin/fflagsettings/view.html @@ -0,0 +1,81 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to FFlag GroupsDelete Group +

{{group.name}}

+

{{group.description}}

+
+
+
+

Created: {{group.created_at}}

+
+
+

Last Updated: {{group.updated_at}}

+
+
+

Enabled: {{ group.enabled }}

+
+
+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

Import from file

+

Note: This will remove all current flags and replace them with the file

+
+
+ +
+ + +
+
+

Flags ({{flagcount}})

+
+
+ + +
+
+ + + + + + + + + + {% for fflag in FFlagsLookupResults %} + + + + + + {% endfor %} + +
NameTypeValue
{{fflag.name}}{% if fflag.flag_type == 1: %}boolean{% endif %}{% if fflag.flag_type == 2: %}number{% endif %}{% if fflag.flag_type == 3: %}string{% endif %}{{ b64decode(fflag.flag_value).decode('utf-8') }}
+
+ Previous +

Page {{FFlagsLookupResults.page}} of {{FFlagsLookupResults.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/create.html b/app/pages/admin/gameservers/create.html new file mode 100644 index 0000000..970ae87 --- /dev/null +++ b/app/pages/admin/gameservers/create.html @@ -0,0 +1,61 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Game Server Manager +

Create Server

+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/delete.html b/app/pages/admin/gameservers/delete.html new file mode 100644 index 0000000..13fb28e --- /dev/null +++ b/app/pages/admin/gameservers/delete.html @@ -0,0 +1,21 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

Are you sure?

+

You are deleting {{gameserver.serverName}} ( {{gameserver.serverId}} )

+
+ + + + Back +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/index.html b/app/pages/admin/gameservers/index.html new file mode 100644 index 0000000..ffa3b8b --- /dev/null +++ b/app/pages/admin/gameservers/index.html @@ -0,0 +1,44 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/refresh_accesskey.html b/app/pages/admin/gameservers/refresh_accesskey.html new file mode 100644 index 0000000..dccf9a8 --- /dev/null +++ b/app/pages/admin/gameservers/refresh_accesskey.html @@ -0,0 +1,21 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

Are you sure?

+

Are you sure you want to refresh the AccessKey for {{gameserver.serverName}} ( {{gameserver.serverId}} )

+
+ + + + Back +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/view.html b/app/pages/admin/gameservers/view.html new file mode 100644 index 0000000..6ca0139 --- /dev/null +++ b/app/pages/admin/gameservers/view.html @@ -0,0 +1,81 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ +

{{gameserver.serverName}}

+

{{gameserver.serverId}}

+
+
+
+

Last heartbeat: {{gameserver.lastHeartbeat}}

+
+
+

RCC Memory Usage: {{gameserver.RCCmemoryUsage}} MB

+
+
+

Response Time: {{ round(gameserver.heartbeatResponseTime,3) }} secs

+
+
+

Thumbnail Queue Size: {{gameserver.thumbnailQueueSize}}

+
+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/generateinvitekeys.html b/app/pages/admin/generateinvitekeys.html new file mode 100644 index 0000000..08a4e21 --- /dev/null +++ b/app/pages/admin/generateinvitekeys.html @@ -0,0 +1,49 @@ +{% extends '__layout__.html' %} +{% block title %}Admin - Generate Invite Keys{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Generate Invite Keys

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+ + +
+ {% if keys %} +
+

Generated Keys

+
+ {% for key in keys %} + {{ key }} +
+ {% endfor %} +
+ {% endif %} +
+
+{% endblock %} diff --git a/app/pages/admin/index.html b/app/pages/admin/index.html new file mode 100644 index 0000000..7526f33 --- /dev/null +++ b/app/pages/admin/index.html @@ -0,0 +1,48 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+
+
+ +
+

, {{user.username}}!

+

Server Time: {{stats.SystemTime}} UTC

+

ava was here! :3

+
+
+
+

Online: {{stats.UsersOnline}}

+

In-Game: {{stats.UsersPlaying}}

+

Active Servers: {{stats.PlaceServersCount}}

+

Users today: {{stats.UsersSignedUpToday}}

+

Assets Pending: {{stats.PendingAssets}}

+
+
+
+ {% for permission in permissions %} + {% if "Hidden" not in permission: %} + + {% endif %} + {% endfor %} +
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/insertitemrelasepool.html b/app/pages/admin/insertitemrelasepool.html new file mode 100644 index 0000000..5406493 --- /dev/null +++ b/app/pages/admin/insertitemrelasepool.html @@ -0,0 +1,101 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Asset Manager +

Insert {{asset.name}} into Item Release Pool

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% if asset %} +
+ + + + +
+
+ + +
+
+ + +
+
+

note: if you want an item to be free both robux and tix prices have to be set to 0

+
+
+
Offsale After
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+

Amount of time item before the item goes offsale after it releases | Leave empty if you do not want an offsale time

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+

Created: {{asset.created_at}}

+
+
+

Updated: {{asset.updated_at}}

+
+
+

Original Roblox AssetId: {{asset.roblox_asset_id}}

+
+
+

AssetType: {{asset.asset_type.name}}

+
+
+ + +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/itemreleasepool.html b/app/pages/admin/itemreleasepool.html new file mode 100644 index 0000000..e54563a --- /dev/null +++ b/app/pages/admin/itemreleasepool.html @@ -0,0 +1,56 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Item Release Pool

+

Next Drop Time: {{NextItemDropDatetime}}

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ {% for Item in PlannedItems: %} +
+
Name: {{Item.name}}
+

Description: {{Item.description}}

+
+
+

AssetId: {{Item.id}}

+

Robux Price: {{Item.robux_price}}

+

Tickets Price: {{Item.tickets_price}}

+

IsLimited: {{Item.is_limited}}

+

IsLimitedUnique: {{Item.is_limited_unique}}

+

Serial Count: {{Item.serial_count}}

+

Offsale After: {{Item.offsale_after}}

+
+
+ {% endfor%} +
+ {% if len(PlannedItems) == 0 %} +

No planned items

+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/lottery/index.html b/app/pages/admin/lottery/index.html new file mode 100644 index 0000000..eda908e --- /dev/null +++ b/app/pages/admin/lottery/index.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Lottery

+

Give away limiteds under accounts which is deleted or inactive for more than 31 days. There must be at least 10 users online to give away any limiteds

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + +
+ {% for User in EligibleUsers: %} +
+ +
+
{{User.username}} {% if User.accountstatus != 1: %}Banned{% endif %}{% if User.lastonline < InactiveTime %}Inactive{% endif %}
+

Total Limiteds: {{ GetTotalLimiteds(User) }}

+
+ +
+ {% endfor %} +
+ +
+ {% if len(EligibleUsers) == 0: %} +

+ No eligible users found +

+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/manageassets.html b/app/pages/admin/manageassets.html new file mode 100644 index 0000000..bcc94c3 --- /dev/null +++ b/app/pages/admin/manageassets.html @@ -0,0 +1,142 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Manager

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + + +
+ {% if asset %} +
+
+
+ < View asset on catalog + {% if IsItemEligibleForItemReleasePool and CanManageItemReleasePool: %} + Insert Item into Item Release Pool + {% endif %} +
+ + + + +
+
+ + +
+
+ + +
+
+

note: if you want an item to be free both robux and tix prices have to be set to 0

+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+

(UTC) Current offsale time: {{asset.offsale_at}} | Note: To remove a offsale date you need to set the item offsale manually

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+

Created: {{asset.created_at}}

+
+
+

Updated: {{asset.updated_at}}

+
+
+

Original Roblox AssetId: {{asset.roblox_asset_id}}

+
+
+

AssetType: {{asset.asset_type.name}}

+
+
+ + +
+
+ + +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/managecurrency.html b/app/pages/admin/managecurrency.html new file mode 100644 index 0000000..51a9ab4 --- /dev/null +++ b/app/pages/admin/managecurrency.html @@ -0,0 +1,126 @@ +{% extends '__layout__.html' %} +{% block title %}Manage Currency{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ ← Return to Admin Dashboard +
+ +
+

Manage Currency

+

Admins only. Use the form below to add or remove Robux / Tix.

+
+
+ + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + +
+ +
+

Currency Control

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+ +
+

Builders Club Management

+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+
+ + +{% block scripts %} + +{% endblock %} +{% endblock %} diff --git a/app/pages/admin/moderateUGC.html b/app/pages/admin/moderateUGC.html new file mode 100644 index 0000000..21d9b5f --- /dev/null +++ b/app/pages/admin/moderateUGC.html @@ -0,0 +1,109 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Moderation

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + + +
+ {% if AssetObj %} +
+
+
+
+ +
+
+
+

{{AssetObj.name}}

+ View Asset Page +
+
+
Description
+

{{AssetObj.description}}

+
+
+

AssetID: {{AssetObj.id}}

+

Roblox AssetID: {{AssetObj.roblox_asset_id}}

+

Creator: {% if AssetObj.creator_type == 0 %}{{CreatorObj.username}} ( {{CreatorObj.id}} ){%endif%}

+

CreatorType: {% if AssetObj.creator_type == 0 %}User{%else%}Group{%endif%}

+

Created: {{AssetObj.created_at}}

+

Last Updated: {{AssetObj.updated_at}}

+

AssetType: {{AssetObj.asset_type.name}}

+

Moderation Status: {% if AssetObj.moderation_status == 0: %}Allowed{%elif AssetObj.moderation_status == 2: %}Deleted{%else%}Pending{%endif%}

+

IsForSale: {{AssetObj.is_for_sale}}

+

SaleCount: {{AssetObj.sale_count}}

+
+

Quick Moderation Actions

+
+ {% if AssetObj.moderation_status != 0 %} +
+ + +
+ {% endif %} + {% if AssetObj.moderation_status != 1 %} +
+ + +
+ {% endif %} + {% if AssetObj.moderation_status != 2 %} +
+ + +
+ {% endif %} +
+

Linked Assets

+
+ {% for asset in RelatedAssets: %} +
+
{{asset.name}}
+
+

AssetID: {{asset.id}}

+

AssetType: {{asset.asset_type.name}}

+

Creator: {% if asset.creator_type == 0 %}{{asset.creator_id}}{%endif%}

+

CreatorType: {% if asset.creator_type == 0 %}User{%else%}Group{%endif%}

+ View Asset +
+
+ {% endfor %} + {% if len(RelatedAssets) == 0: %} +

No Linked Assets

+ {% endif %} +
+
+
+
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/permissionsdefinition.py b/app/pages/admin/permissionsdefinition.py new file mode 100644 index 0000000..a8d0c39 --- /dev/null +++ b/app/pages/admin/permissionsdefinition.py @@ -0,0 +1,151 @@ +PermissionsDefinition = { + 'GameServerManager' : { + 'Name' : 'Server Manager', + 'Description' : 'View gameserver information and manage them', + 'route': '/admin/gameservers', + 'icon': 'bi-database' + }, + 'UpdateWebsiteMessage' : { + 'Name' : 'Website Message', + 'Description' : 'Update website wide message', + 'route': '/admin/websitemessage', + 'icon': 'bi-chat-square-text' + }, + 'ManageFFlags' : { + 'Name' : 'Feature Flags', + 'Description' : 'Manage feature flags for RCC and Clients', + 'route': '/admin/fflags', + 'icon': 'bi-flag' + }, + 'CopyAssets' : { + 'Name' : 'Asset Copier', + 'Description' : 'Copy assets from the Roblox Catalog', + 'route': '/admin/asset-copier', + 'icon': 'bi-files' + }, + 'ManageAsset' : { + 'Name' : 'Manage Asset', + 'Description' : 'Manage assets under the ROBLOX account', + 'route': '/admin/manage-assets', + 'icon': 'bi-file-earmark' + }, + 'CreateAsset' : { + 'Name' : 'Create Asset', + 'Description' : 'Create assets under the ROBLOX account', + 'route': '/admin/create-asset', + 'icon': 'bi-file-earmark-plus' + }, + 'AssetModeration' : { + 'Name' : 'Pending Assets', + 'Description' : 'View and moderate pending assets', + 'route': '/admin/pending-assets', + 'icon': 'bi-hourglass-split' + }, + 'ManageUsers' : { + 'Name' : 'Manage Users', + 'Description' : 'Manage users and their permissions', + 'route': '/admin/manage-users', + 'icon': 'bi-people' + }, + 'ManageWebsiteFeatures' : { + 'Name' : 'Website Features', + 'Description' : 'Toggle certain features on the website', + 'route': '/admin/manage-website-features', + 'icon': 'bi-gear' + }, + 'CreateUser' : { + 'Name' : 'Create User', + 'Description' : 'Create a user on the website', + 'route': '/admin/create-user', + 'icon': 'bi-person-plus' + }, + 'CreateGiftcard' : { + 'Name' : 'Create Giftcard', + 'Description' : 'Create a giftcard on the website', + 'route': '/admin/create-giftcard', + 'icon': 'bi-gift' + }, + 'UpdateAssetFile' : { + 'Name' : 'Update RBXM', + 'Description' : 'Update the RBXM file of an asset', + 'route': '/admin/update-asset-file', + 'icon': 'bi-file-earmark-arrow-up' + }, + 'CopyBundle' : { + 'Name' : 'Copy Bundle', + 'Description' : 'Copy a bundle from the Roblox Catalog', + 'route': '/admin/copy-bundle', + 'icon': 'bi-collection' + }, + 'ModerateAsset' : { + 'Name' : 'Moderate Asset', + 'Description' : 'Change the status of a user generated asset', + 'route': '/admin/moderate-asset', + 'icon': 'bi-file-earmark-check' + }, + 'Lottery' : { + 'Name' : 'Lottery', + 'Description' : 'Give away limiteds under inactive accounts', + 'route': '/admin/lottery', + 'icon': 'bi-cash-stack' + }, + 'ManageItemReleases' : { + 'Name' : 'Item Release Pool', + 'Description' : 'Manage items in the item release pool', + 'route': '/admin/item-release-pool', + 'icon': 'bi-shuffle' + }, + + 'BanUser' : { + 'Name' : 'Ban User', + 'Description' : 'Ban a user from the website', + 'Hidden' : True + }, + 'ViewUserLoginHistory' : { + 'Name' : 'View User Login History', + 'Description' : 'View the login history of a user', + 'Hidden' : True + }, + 'ViewLoginHistoryDetailed' : { + 'Name' : 'View Sensitive Login History', + 'Description' : 'Extra permission to viewing sensitive info in login history like hashed IPs and Session Tokens', + 'Hidden' : True + }, + 'ModifyLimitedAssets' : { + 'Name' : 'Modify Limited Assets', + 'Description' : 'Modify limited assets', + 'Hidden' : True + }, + 'ViewItemReleasePoolDrop' : { + 'Name' : 'View Item Release Pool Drop Time', + 'Description' : 'Able to see the next item release drop', + 'Hidden' : True + }, + "ManageAdminPermissions" : { + 'Name' : 'Manage Admin Permissions', + 'Description' : 'Manage admin permissions', + 'Hidden' : True + }, + "ManageCurrency" : { + 'Name' : 'Manage Currency', + 'Description' : 'Manage user robux/tix', + 'route': '/admin/manage-currency', + 'icon': 'bi-cash-stack' + }, + "ManageInventory" : { + 'Name' : 'Manage Inventory', + 'Description' : 'Give or take away items from a user\'s inventory', + 'Hidden' : True + }, + "GDPRDeleteUser" : { + 'Name' : 'GDPR Erase User', + 'Description' : 'Permanently erase a user\'s personal data (right to erasure). Separate from normal ban/delete permissions.', + 'Hidden' : True + }, + 'GenerateInviteKeys' : { + 'Name' : 'Generate Invite Keys', + 'Description' : 'Bulk-generate invite keys for new users', + 'route': '/admin/generate-invite-keys', + 'icon': 'bi-key' + } +} \ No newline at end of file diff --git a/app/pages/admin/updateassetfile.html b/app/pages/admin/updateassetfile.html new file mode 100644 index 0000000..7e419d7 --- /dev/null +++ b/app/pages/admin/updateassetfile.html @@ -0,0 +1,42 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Update RBXM

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+ + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/ban.html b/app/pages/admin/usermanage/ban.html new file mode 100644 index 0000000..cb43128 --- /dev/null +++ b/app/pages/admin/usermanage/ban.html @@ -0,0 +1,86 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

Ban {{userObj.username}}

+

UserId: {{userObj.id}}

+
+
+ {% if LastestUserBanObj != None: %} +
+ This user currently has a ongoing ban, please revoke the previous ban before banning again. +
+ {% endif %} + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+ + +
+
+ + +
+
+ + +
+

Please try to include links to evidence that lead to this ban

+
+ + +
+ +
+ {% if not LastestUserBanObj != None: %} + + {% else%} + + {% endif %} +
+ {% if LastestUserBanObj != None: %} +
+ + +
+ {%endif%} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/banhistory.html b/app/pages/admin/usermanage/banhistory.html new file mode 100644 index 0000000..800ecc6 --- /dev/null +++ b/app/pages/admin/usermanage/banhistory.html @@ -0,0 +1,69 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Ban History

+

UserId: {{userObj.id}}

+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + +
+ {% for banRecord in BanHistory %} +
+

{{banRecord.ban_type.name}}

+

Reason: {{banRecord.reason}}

+

Moderator Note: {{banRecord.moderator_note}}

+

Ban Author: {{GetBanAuthorName(banRecord)}}

+
+
+

Banned At: {{banRecord.created_at}}

+

Expires At: {{banRecord.expires_at}}

+

Acknowledged: {{banRecord.acknowledged}}

+
+
+ {% endfor %} + {% if len(BanHistory.items) == 0 %} +

No previous bans

+ {% endif %} +
+
+ Previous +

Page {{BanHistory.page}} of {{BanHistory.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/gamesessions.html b/app/pages/admin/usermanage/gamesessions.html new file mode 100644 index 0000000..a7e5ed0 --- /dev/null +++ b/app/pages/admin/usermanage/gamesessions.html @@ -0,0 +1,65 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Game Sessions

+

UserId: {{userObj.id}}

+
+
+ + + + + + + + + + + + {% for session in GameSessions: %} + + + + + + + + {% endfor %} + +
IDJobIdJoined AtLeft AtPlace
{{session.id}}{{session.serveruuid}}{{session.joined_at}} UTC{{session.left_at}} UTC{{get_place_name(session.place_id)}} ({{session.place_id}})
+ {% if len(GameSessions.items) == 0: %} +
+

No Game Session Logs Found

+
+ {%endif%} +
+ Previous +

Page {{GameSessions.page}} of {{GameSessions.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/gdprdelete.html b/app/pages/admin/usermanage/gdprdelete.html new file mode 100644 index 0000000..d6d09ec --- /dev/null +++ b/app/pages/admin/usermanage/gdprdelete.html @@ -0,0 +1,60 @@ +{% extends '__layout__.html' %} +{% block title %}GDPR Erase User{% endblock %} + +{% block head %} + +{% endblock %} + +{% block content %} +
+
+ ← Return to User Page +
+ +
+

GDPR Erase {{userObj.username}}

+

UserId: {{userObj.id}}

+
+
+ + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + +
+

This is permanent and cannot be undone.

+

This will, right now:

+
    +
  • Rename the account, wipe the password (locking the account permanently) and clear the bio
  • +
  • Log out and revoke every session we have a record of for this user
  • +
  • Delete their email, linked Discord account, login history, HWID logs, and past usernames
  • +
  • Delete their friends, followers/following, and group memberships
  • +
  • Delete their group wall posts, and blank out the content of messages they sent
  • +
  • Send any limited items they own through the lottery to random online users, then delete everything left in their inventory
  • +
  • Wipe their avatar (body, worn items, and cached render) and kick them from any active game server
  • +
+

Their profile page will 404 immediately after. Trade history and transaction/payment records are kept for economy integrity and legal/tax obligations.

+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+{% endblock %} diff --git a/app/pages/admin/usermanage/invitekeys.html b/app/pages/admin/usermanage/invitekeys.html new file mode 100644 index 0000000..fa47d98 --- /dev/null +++ b/app/pages/admin/usermanage/invitekeys.html @@ -0,0 +1,74 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Invite Keys

+

UserId: {{userObj.id}}

+
+
+ + + + + + + + + + + + {% for invite in InviteKeys: %} + + + + + + + + {% endfor %} + +
IDKeyCreatedUsed OnUsed By
{{invite.id}}{{invite.key}}{{invite.created_at}} UTC{% if invite.used_on != None: %}{{invite.used_on}} UTC{%else%}Unused{%endif%} + {% if invite.used_by != None: %} + + + {{invite.user.username}} + + {% else%} + Unused + {%endif%} +
+ {% if len(InviteKeys.items) == 0: %} +
+

No Invite Keys found

+
+ {%endif%} +
+ Previous +

Page {{InviteKeys.page}} of {{InviteKeys.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/loginhistory.html b/app/pages/admin/usermanage/loginhistory.html new file mode 100644 index 0000000..ca4d910 --- /dev/null +++ b/app/pages/admin/usermanage/loginhistory.html @@ -0,0 +1,105 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Login History

+

UserId: {{userObj.id}}

+
+
+ {% if len(AlternateAccounts) != 0 %} + + {% endif %} + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% if canViewSensitiveInfo %} +
+ {% for loginRecord in LoginHistory %} +
+
+
+
{{loginRecord.ip}}
+

Timestamp: {{loginRecord.timestamp}} UTC

+
+ +
+
+
+

Login Record ID: {{loginRecord.id}}

+
+

User Agent

+

{{loginRecord.useragent}}

+
+
+

Session Token

+

{{loginRecord.session_token}}

+
+
+
+
+ {% endfor %} +
+
+ Previous +

Page {{LoginHistory.page}} of {{LoginHistory.pages}}

+ Next +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/manage-admin-perms.html b/app/pages/admin/usermanage/manage-admin-perms.html new file mode 100644 index 0000000..320913a --- /dev/null +++ b/app/pages/admin/usermanage/manage-admin-perms.html @@ -0,0 +1,208 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Admin Permissions

+

UserId: {{userObj.id}}

+
+
+
+ +
+ +
+
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/managecurrency.html b/app/pages/admin/usermanage/managecurrency.html new file mode 100644 index 0000000..5574948 --- /dev/null +++ b/app/pages/admin/usermanage/managecurrency.html @@ -0,0 +1,118 @@ +{% extends '__layout__.html' %} +{% block title %}Manage User{% endblock %} + +{% block head %} + + +{% endblock %} + +{% block content %} +
+
+ ← Return to User Page +
+ +
+

Manage Robux & Builders Club for {{userObj.username}}

+

UserId: {{userObj.id}}

+
+
+ + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + +
+ +
+

Robux & Tix Management

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+

Builders Club Management

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ +{% block scripts %} + +{% endblock %} +{% endblock %} diff --git a/app/pages/admin/usermanage/manageinventory.html b/app/pages/admin/usermanage/manageinventory.html new file mode 100644 index 0000000..766b42a --- /dev/null +++ b/app/pages/admin/usermanage/manageinventory.html @@ -0,0 +1,78 @@ +{% extends '__layout__.html' %} +{% block title %}Manage User{% endblock %} + +{% block head %} + +{% endblock %} + +{% block content %} +
+
+ ← Return to User Page +
+ +
+

Manage Inventory for {{userObj.username}}

+

UserId: {{userObj.id}}

+
+
+ + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + +
+ +
+

Give Item

+
+
+ + +
+ +
+ +
+
+ +

Current Inventory ( {{UserInventory.total}} )

+
+ {% for UserAssetObj in UserInventory.items %} +
+
+ + + +

{{UserAssetObj.asset.name if UserAssetObj.asset else "Unknown Asset"}}

+

+ AssetId: {{UserAssetObj.assetid}}{% if UserAssetObj.serial != None %} | Serial: {{UserAssetObj.serial}}{% endif %} +

+
+ + +
+
+
+ {% endfor %} + {% if UserInventory.total == 0 %} +

This user has no items

+ {% endif %} +
+ +
+ Previous +

Page {{PageNumber}} of {{UserInventory.pages}}

+ Next +
+
+
+{% endblock %} diff --git a/app/pages/admin/usermanage/moderatornotes.html b/app/pages/admin/usermanage/moderatornotes.html new file mode 100644 index 0000000..b02fc99 --- /dev/null +++ b/app/pages/admin/usermanage/moderatornotes.html @@ -0,0 +1,61 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Moderator Notes

+

UserId: {{userObj.id}}

+
+
+
+ {% for note in UserModeratorNotes.items %} +
+
+ +
+
{{ GetUserName(note.note_creator_id) }}
+

Created at {{note.created_at}} UTC

+
+
+
+ {% for note_line in note.note.split("\n") %} +

{{note_line}}

+ {% endfor %} +
+
+ {% endfor %} +
+ {% if len(UserModeratorNotes.items) == 0 %} +
+ This user currently has no moderator notes. +
+ {% endif %} +
+ Previous +

Page {{UserModeratorNotes.page}} of {{UserModeratorNotes.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/search.html b/app/pages/admin/usermanage/search.html new file mode 100644 index 0000000..1baabcb --- /dev/null +++ b/app/pages/admin/usermanage/search.html @@ -0,0 +1,82 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

User Manager

+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + + + + + + + + + + + {% for user in returnList: %} + + + + + + + + + + {%endfor%} + +
IDUsernameCreatedLast OnlineRobuxTicketsAction
{{user.id}}{{user.username}}{{user.creation}}{{user.lastonline}}{{user.robux}}{{user.tix}}View
+ {% if len(returnList) == 0: %} +

No results found

+ {%endif%} + +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/transactions.html b/app/pages/admin/usermanage/transactions.html new file mode 100644 index 0000000..aae58a4 --- /dev/null +++ b/app/pages/admin/usermanage/transactions.html @@ -0,0 +1,113 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Transactions

+

UserId: {{userObj.id}}

+
+
+
+ + +
+ + + + + + + + + + + {% for Transaction in TransactionInfo: %} + + + + + + + {% endfor %} + +
DateSourceDescriptionAmount
{{Transaction.created_at}} + {% if Transaction["source"]["type"] == 0: %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% else %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% endif %} + + {% if Transaction['custom_text'] != None %} + {{Transaction['custom_text']}} + {% else %} + {% if Transaction['asset'] != None: %} + + {{Transaction['asset']['name']}} + {{Transaction['asset']['name']}} + + {% else %} + Unknown + {%endif%} + {% endif %} + + {% if Transaction['currency_type'] == 0 %} + R$ {{Transaction['currency_amount']}} + {% else %} + T$ {{Transaction['currency_amount']}} + {% endif %} +
+ {% if len(TransactionInfo) == 0: %} +
+

No transactions found

+
+ {%endif%} + +
+ Previous +

Page {{Pagination.page}} of {{Pagination.pages}}

+ Next +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/view.html b/app/pages/admin/usermanage/view.html new file mode 100644 index 0000000..e2a58be --- /dev/null +++ b/app/pages/admin/usermanage/view.html @@ -0,0 +1,214 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+
+
+ +
{{userObj.username}}
+
+
+ + {% if isAdministrator: %} +
+

Administrator

+
+ {% endif %} + {% if userObj.accountstatus == 2: %} +
+

This account is temporarily banned

+
+ {% endif %} + {% if userObj.accountstatus == 3: %} +
+

This account has been deleted

+
+ {% endif %} + {% if userObj.accountstatus == 4: %} +
+

This account is GDPR deleted

+
+ {% endif %} +
+ Created: {{userObj.created}} +
+ Last Online: {{userObj.lastonline}} +
+ 2FA Enabled: {{userObj.TOTPEnabled}} +
+ Place Visits: {{TotalVisits}} +
+
+
+
+
Economy
+
+
+ Robux: R${{UserEconomyObj.robux}} +
+ Tickets: T${{UserEconomyObj.tix}} +
+
+
+
+ {% if LastestUserBanObj != None: %} +
+
+
Ban Information
+
+
+ Ban Type: {{LastestUserBanObj.ban_type.name}} +
+ Banned On: {{LastestUserBanObj.created_at}} +
+ Expires On: {{LastestUserBanObj.expires_at}} +
+ Reason: {{LastestUserBanObj.reason}} +
+ Moderator Note: {{LastestUserBanObj.moderator_note}} +
+ Banned By: {{LastestUserBanObj.author_userid}} +
+
+ {%endif%} +
+
+
Description
+
+
+ {% for line in DescriptionLines %} +

{{line}}

+ {% endfor %} +
+
+ {% if LastLogin != None: %} +
+
+
Latest Login
+
+
+ User-Agent: {{LastLogin.useragent}} +
+ Login Timestamp: {{LastLogin.timestamp}} +
+
+ {%endif%} + {% if LinkedDiscordObj != None: %} +
+
+
Discord Account
+
+
+
+
+ Discord ID: {{DiscordUserInfo.UserId}} +
+ Username: {{DiscordUserInfo.Username}} +
+ Discriminator: {{DiscordUserInfo.Discriminator}} +
+ Linked On: {{LinkedDiscordObj.linked_on}} +
+ Last Refresh: {{LinkedDiscordObj.last_updated}} +
+
+ +
+
+
+
+ {%endif%} + {% if InviteKeyUsed != None: %} +
+
+
Invite Key Info
+
+
+ Invite Key: {{InviteKeyUsed.key}} +
+ Creator: {% if InviteKeyUsed.created_by != None: %}{{InviteKeyUsed.creator.username}}{%else%}Unknown{%endif%} +
+ Created At: {{InviteKeyUsed.created_at}} +
+
+ {%endif%} +
+
+
+
+
Actions
+
+ Ban User +
+ + +
+
+ + +
+
+ + +
+ {% if HasAdminPermission("ManageAdminPermissions") %} Manage Permissions{%endif%} + {% if HasAdminPermission("ManageCurrency") %} Manage Robux & BC{%endif%} + {% if HasAdminPermission("ManageInventory") %} Manage Inventory{%endif%} + +
+ + {% if HasAdminPermission("GDPRDeleteUser") %} +
+
+
Danger Zone
+
+ GDPR Erase User +
+ {% endif %} +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/websitefeatures.html b/app/pages/admin/websitefeatures.html new file mode 100644 index 0000000..8b90bf5 --- /dev/null +++ b/app/pages/admin/websitefeatures.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Website Features

+

Only turn off certain features when its an emergency!

+
+ {% for feature in SitesFeaturesStatus: %} +
+
+
+
+

{{feature.name}}

+ {% if feature.enabled: %} +
+ + +
+ {% else %} +
+ + +
+ {% endif %} +
+
+
+ {% endfor %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/websitefeaturesdefinition.py b/app/pages/admin/websitefeaturesdefinition.py new file mode 100644 index 0000000..fd5e635 --- /dev/null +++ b/app/pages/admin/websitefeaturesdefinition.py @@ -0,0 +1,83 @@ +WebsiteFeaturesDefinition = [ + { + "name": "WebSignup" + }, + { + "name": "WebLogin" + }, + { + "name": "UsernameChange" + }, + { + "name": "PasswordChange" + }, + { + "name": "DiscordLinking" + }, + { + "name": "GameJoinAPI" + }, + { + "name": "ThumbnailRendering" + }, + { + "name": "GroupJoining" + }, + { + "name": "GroupLeaving" + }, + { + "name": "GroupWallPosting" + }, + { + "name": "GroupCreation" + }, + { + "name": "AssetCreation" + }, + { + "name": "AssetEditing" + }, + { + "name": "AssetValidationService" + }, + { + "name": "EconomyPurchase" + }, + { + "name": "MessageSending" + }, + { + "name": "ItemReselling" + }, + { + "name": "ItemTrading" + }, + { + "name": "AvatarUpdate" + }, + { + "name": "ClothingMigrator" + }, + { + "name": "SendFriendRequest" + }, + { + "name": "FollowingUsers" + }, + { + "name": "GiftcardRedeem" + }, + { + "name": "EmailChange" + }, + { + "name": "SendResetPassword" + }, + { + "name": "AudioMigrator" + }, + { + "name": "CurrencyExchange" + } +] \ No newline at end of file diff --git a/app/pages/admin/websitewidemsg.html b/app/pages/admin/websitewidemsg.html new file mode 100644 index 0000000..c24be1a --- /dev/null +++ b/app/pages/admin/websitewidemsg.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error' %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'danger' %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success' %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

Website wide message

+

plz do not put anything useless on here thxxx

+
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/audiomigrator/audiomigrator.py b/app/pages/audiomigrator/audiomigrator.py new file mode 100644 index 0000000..a7b1085 --- /dev/null +++ b/app/pages/audiomigrator/audiomigrator.py @@ -0,0 +1,104 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.routes.asset import GetOriginalAssetInfo, AddAudioAssetToAudioMigrationQueue +from app.models.asset import Asset +from app.models.user import User +from app.services import economy +from app.util import auth, websiteFeatures, turnstile, transactions +from app.extensions import db, redis_controller +from app.enums.TransactionType import TransactionType + +AudioMigratorRoute = Blueprint('assetmigrator', __name__, template_folder='pages') + +@AudioMigratorRoute.route('/audiomigrator', methods=['GET']) +@auth.authenticated_required +def audiomigrator(): + return render_template('audiomigrator/index.html') + +@AudioMigratorRoute.route('/audiomigrator', methods=['POST']) +@auth.authenticated_required +def audiomigrator_post(): + AuthenticatedUser : User = auth.GetCurrentUser() + if not websiteFeatures.GetWebsiteFeature("AudioMigrator"): + flash("Audio migration is temporarily disabled", "error") + return redirect("/audiomigrator") + + CFTurnstileResponse = request.form.get( key="cf-turnstile-response", default=None, type=str) + if CFTurnstileResponse is None: + flash("Invalid captcha", "error") + return redirect("/audiomigrator") + if not turnstile.VerifyToken(CFTurnstileResponse): + flash("Invalid captcha", "error") + return redirect("/audiomigrator") + + PlaceId = request.form.get( key = "placeid", default = None, type = int ) + if PlaceId is None: + flash("Invalid place ID", "error") + return redirect("/audiomigrator") + RequestedAudioIds = request.form.get( key = "audio-ids", default = None, type = str ) + if RequestedAudioIds is None: + flash("Invalid audio IDs", "error") + return redirect("/audiomigrator") + + RequestedAudioIds = RequestedAudioIds.split("\n") + for i in range(len(RequestedAudioIds)): + RequestedAudioIds[i] = RequestedAudioIds[i].strip() + if RequestedAudioIds[i].isdigit(): + RequestedAudioIds[i] = int(RequestedAudioIds[i]) + else: + RequestedAudioIds.remove(RequestedAudioIds[i]) + + if len(RequestedAudioIds) > 100: + flash("You can only migrate 100 audios at a time", "error") + return redirect("/audiomigrator") + if len(RequestedAudioIds) < 1: + flash("You must migrate at least 1 audio", "error") + return redirect("/audiomigrator") + + if PlaceId < 1: + flash("Invalid place ID", "error") + return redirect("/audiomigrator") + + RobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + RequiredAmountRobux = 0 + AudioIdsToMigrate : list[int] = [] + for RequestedAudio in RequestedAudioIds: + if Asset.query.filter_by(id = RequestedAudio ).first(): + continue + if redis_controller.lrange("migrate_audio_assets_queue", 0, -1).count(str(RequestedAudio)) > 0: + continue + if RequestedAudio in AudioIdsToMigrate: + continue + AudioIdsToMigrate.append(RequestedAudio) + RequiredAmountRobux += 5 + + if len(AudioIdsToMigrate) == 0: + flash(f"Queued 0 / {len(RequestedAudioIds)} audios to be migrated", "success") + return redirect("/audiomigrator") + + if RobuxBalance < RequiredAmountRobux: + flash(f"You don't have enough robux to migrate these audios, Required R${RequiredAmountRobux}", "error") + return redirect("/audiomigrator") + + try: + economy.DecrementTargetBalance( AuthenticatedUser, Amount = RequiredAmountRobux, CurrencyType = 0 ) + except economy.InsufficientFundsException: + flash(f"You don't have enough robux to migrate these audios, Required R${RequiredAmountRobux}", "error") + return redirect("/audiomigrator") + except Exception as e: + flash(f"An error occured while deducting robux", "error") + return redirect("/audiomigrator") + + transactions.CreateTransaction( + Reciever = User.query.filter_by(id = 1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = RequiredAmountRobux, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + CustomText = f"Audio migration" + ) + + for AudioId in AudioIdsToMigrate: + AddAudioAssetToAudioMigrationQueue(AudioId, bypassQueueLimit = True ,placeId=PlaceId) + + flash(f"Queued {len(AudioIdsToMigrate)} / {len(RequestedAudioIds)} audios to be migrated", "success") + return redirect("/audiomigrator") \ No newline at end of file diff --git a/app/pages/audiomigrator/index.html b/app/pages/audiomigrator/index.html new file mode 100644 index 0000000..f3c7bcb --- /dev/null +++ b/app/pages/audiomigrator/index.html @@ -0,0 +1,51 @@ +{% extends '__layout__.html' %} +{% block title %}Audio Migrator{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Audio Migrator

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+

Note: As a processing fee, each Audio will cost R$5 even if audio migration fails, this is to prevent spam and abuse of our systems. It can take a few minutes for audios to be processed so please be patient, you will not be charged for any audios that already exist on NEXIUM.

+
+ +
+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/avatar/avatar.html b/app/pages/avatar/avatar.html new file mode 100644 index 0000000..551bcc0 --- /dev/null +++ b/app/pages/avatar/avatar.html @@ -0,0 +1,148 @@ +{% extends '__layout__.html' %} +{% block title %}Avatar{% endblock %} +{% block head %} + + + + + + + + + + +{% endblock %} +{% block content %} +
+
+

Avatar

+
+
+
+
+ Your Avatar + + + + +
+ + +
+

Avatar isn't loading correctly? Redraw

+
+
Body Colors
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+

Page 1

+
+
+
Currently Wearing
+
+
+
+ +
+
+
+
+{% endblock %} diff --git a/app/pages/avatar/avatar.html1 b/app/pages/avatar/avatar.html1 new file mode 100644 index 0000000..e4ea441 --- /dev/null +++ b/app/pages/avatar/avatar.html1 @@ -0,0 +1,124 @@ +{% extends '__layout__.html' %} +{% block title %}Avatar{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Avatar

+
+
+
+ Your Avatar + + +
+ +
+

Avatar isn't loading? Redraw

+
+
Body Colors
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+ +

Page 1

+ +
+
+
Currently Wearing
+
+
+ +
+
+
+
+{% endblock %} diff --git a/app/pages/avatar/avatar.py b/app/pages/avatar/avatar.py new file mode 100644 index 0000000..5209027 --- /dev/null +++ b/app/pages/avatar/avatar.py @@ -0,0 +1,277 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +import base64 +import json +from app.extensions import db, redis_controller, limiter, csrf +from app.util import auth, websiteFeatures +from app.enums.AssetType import AssetType + +from app.models.asset import Asset +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user_avatar import UserAvatar +from app.models.userassets import UserAsset +from app.models.user_thumbnail import UserThumbnail +from app.models.user import User + +from app.routes.thumbnailer import TakeUserThumbnail +AllowedBodyColors = [361, 192, 217, 153, 359, 352, 5, 101, 1007, 1014, 38, 18, 125, 1030, 133, 106, 105, 1017, 24, 334, 226, 141, 1021, 28, 37, 310, 317, 119, 1011, 1012, 1010, 23, 305, 102, 45, 107, 1018, 1027, 1019, 1013, 11, 1024, 104, 1023, 321, 1015, 1031, 1006, 1026, 21, 1004, 1032, 1016, 330, 9, 1025, 364, 351, 1008, 29, 1022, 151, 135, 1020, 1028, 1009, 1029, 1003, 26, 199, 194, 1002, 208, 1, 1001] +ScalingLimits = { + "height": { + "min": 0.9, + "max": 1.05, + "increment": 0.01 + }, + "width": { + "min": 0.7, + "max": 1, + "increment": 0.01 + }, + "head": { + "min": 0.95, + "max": 1, + "increment": 0.01 + }, + "proportion": { + "min": 0, + "max": 1, + "increment": 0.01 + }, + "bodyType": { + "min": 0, + "max": 1, + "increment": 0.01 + } +} +AvatarRoute = Blueprint('avatar', __name__, template_folder='pages') + +@AvatarRoute.route('/avatar', methods=['GET']) +@auth.authenticated_required +def avatar(): + AuthenticatedUser : User = auth.GetCurrentUser() + return render_template('avatar/avatar.html', user=AuthenticatedUser) + +@AvatarRoute.route("/avatar/getassets", methods=["GET"]) +@auth.authenticated_required_api +def get_assets(): + ReqAssetType = request.args.get("type") + if ReqAssetType is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + try: + ReqAssetType = int(ReqAssetType) + except: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if ReqAssetType not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58]: + return jsonify({"success": False, "message": "Invalid request"}), 400 + PageNumber = request.args.get("page") or 0 + try: + PageNumber = int(PageNumber) + except: + return jsonify({"success": False, "message": "Invalid request"}), 400 + PageNumber += 1 + + AuthenticatedUser : User = auth.GetCurrentUser() + AssetsList : list[UserAsset] = UserAsset.query.filter_by(userid=AuthenticatedUser.id).join(Asset, Asset.id == UserAsset.assetid).filter(Asset.asset_type == AssetType(ReqAssetType)).distinct(Asset.id).paginate( page=PageNumber, per_page=12, error_out=False) + AssetList = [] + for AssetObj in AssetsList.items: + AssetObj : Asset = Asset.query.filter_by(id=AssetObj.assetid).first() + if AssetObj is None: + continue + AssetList.append({ + "id": AssetObj.id, + "name": AssetObj.name, + "moderation_status": AssetObj.moderation_status + }) + + return jsonify({ + "success": True, + "assets": AssetList, + "lastPage": not AssetsList.has_next + }) + +@AvatarRoute.route('/avatar/getavatar', methods=['GET']) +@auth.authenticated_required_api +def get_avatar(): + AuthenticatedUser : User = auth.GetCurrentUser() + userCurrentlyWearing : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id=AuthenticatedUser.id).all() + userCurrentlyWearingList : list[int] = [] + for asset in userCurrentlyWearing: + AssetObj : Asset = Asset.query.filter_by(id=asset.asset_id).first() + userCurrentlyWearingList.append({ + "id": AssetObj.id, + "name": AssetObj.name, + "type": AssetObj.asset_type.value, + "moderation_status": AssetObj.moderation_status + }) + avatar : UserAvatar = UserAvatar.query.filter_by(user_id=AuthenticatedUser.id).first() + return jsonify({ + "success": True, + "currentlyWearing": userCurrentlyWearingList, + "bodyColors": [ + avatar.head_color_id, + avatar.torso_color_id, + avatar.left_arm_color_id, + avatar.right_arm_color_id, + avatar.left_leg_color_id, + avatar.right_leg_color_id + ], + "rigType": "R15" if avatar.r15 else "R6", + "scales": { + "height": avatar.height_scale, + "width": avatar.width_scale, + "head": avatar.head_scale, + "proportion": avatar.proportion_scale, + "bodyType": avatar.body_type_scale + } + }) + +@AvatarRoute.route("/avatar/setavatar", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def set_wearing_assets(): + if not websiteFeatures.GetWebsiteFeature("AvatarUpdate"): + return jsonify({"success": False, "message": "Avatar updating is currently disabled."}), 400 + + newAvatarData = request.json + if "bodyColors" not in newAvatarData or "assets" not in newAvatarData or "rigType" not in newAvatarData: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if len(newAvatarData["bodyColors"]) != 6: + return jsonify({"success": False, "message": "Invalid request"}), 400 + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return redirect('/login') + if redis_controller.get(f"avatar:lock:{AuthenticatedUser.id}") is not None: + return jsonify({"success": False, "message": "You are changing your avatar too fast."}), 429 + redis_controller.set(f"avatar:lock:{AuthenticatedUser.id}", "1", ex=5) + avatar : UserAvatar = UserAvatar.query.filter_by(user_id=AuthenticatedUser.id).first() + + if len(newAvatarData["assets"]) > 32: + return jsonify({"success": False, "message": "Too many assets"}), 400 + AssetTypeCount = {} + for asset in newAvatarData["assets"]: + AssetObj : Asset = Asset.query.filter_by(id=asset).first() + if AssetObj is None: + return jsonify({"success": False, "message": "Invalid asset"}), 400 + if AssetObj.asset_type.value not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58]: + return jsonify({"success": False, "message": "Invalid asset"}), 400 + if AssetTypeCount.get(AssetObj.asset_type.value) is None: + AssetTypeCount[AssetObj.asset_type.value] = 1 + else: + AssetTypeCount[AssetObj.asset_type.value] += 1 + if AssetTypeCount[AssetObj.asset_type.value] > 1 and AssetObj.asset_type != AssetType.Hat and AssetObj.asset_type != AssetType.HairAccessory and AssetObj.asset_type != AssetType.FaceAccessory: + return jsonify({"success": False, "message": "Invalid configuration"}), 400 + elif AssetTypeCount[AssetObj.asset_type.value] > 5 and AssetObj.asset_type == AssetType.Hat: + return jsonify({"success": False, "message": "Invalid configuration"}), 400 + + if AssetObj.moderation_status != 0: + newAvatarData["assets"].remove(asset) + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=asset).first() + if UserAssetObj is None: + return jsonify({"success": False, "message": "Invalid asset"}), 400 + for Color in newAvatarData["bodyColors"]: + if Color not in AllowedBodyColors: + return jsonify({"success": False, "message": "Invalid body color"}), 400 + + UserAvatarAsset.query.filter_by(user_id=AuthenticatedUser.id).delete() + db.session.commit() + for asset in newAvatarData["assets"]: + UserAvatarAssetObj = UserAvatarAsset( + user_id=AuthenticatedUser.id, + asset_id=asset + ) + db.session.add(UserAvatarAssetObj) + avatar.head_color_id = newAvatarData["bodyColors"][0] + avatar.torso_color_id = newAvatarData["bodyColors"][1] + avatar.left_arm_color_id = newAvatarData["bodyColors"][2] + avatar.right_arm_color_id = newAvatarData["bodyColors"][3] + avatar.left_leg_color_id = newAvatarData["bodyColors"][4] + avatar.right_leg_color_id = newAvatarData["bodyColors"][5] + avatar.r15 = newAvatarData["rigType"] == "R15" + + if "scales" in newAvatarData: + if "height" not in newAvatarData["scales"] or "width" not in newAvatarData["scales"] or "head" not in newAvatarData["scales"] or "proportion" not in newAvatarData["scales"]: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if newAvatarData["scales"]["height"] < ScalingLimits["height"]["min"] or newAvatarData["scales"]["height"] > ScalingLimits["height"]["max"]: + return jsonify({"success": False, "message": "Invalid height scale"}), 400 + if newAvatarData["scales"]["width"] < ScalingLimits["width"]["min"] or newAvatarData["scales"]["width"] > ScalingLimits["width"]["max"]: + return jsonify({"success": False, "message": "Invalid width scale"}), 400 + if newAvatarData["scales"]["head"] < ScalingLimits["head"]["min"] or newAvatarData["scales"]["head"] > ScalingLimits["head"]["max"]: + return jsonify({"success": False, "message": "Invalid head scale"}), 400 + if newAvatarData["scales"]["proportion"] < ScalingLimits["proportion"]["min"] or newAvatarData["scales"]["proportion"] > ScalingLimits["proportion"]["max"]: + return jsonify({"success": False, "message": "Invalid proportion scale"}), 400 + + avatar.height_scale = round(newAvatarData["scales"]["height"], 2) + avatar.width_scale = round(newAvatarData["scales"]["width"], 2) + avatar.head_scale = round(newAvatarData["scales"]["head"], 2) + avatar.proportion_scale = round(newAvatarData["scales"]["proportion"], 2) + + db.session.commit() + + UserThumbnail.query.filter_by(userid=AuthenticatedUser.id).delete() + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id, True, False) + # handle 3d within + TakeUserThumbnail(AuthenticatedUser.id, bypassCooldown=True, bypassCache=True, Is3D=True) + return jsonify({"success": True}), 200 + +@AvatarRoute.route("/avatar/forceredraw", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def force_redraw(): + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.get(f"avatar:lock:{AuthenticatedUser.id}") is not None: + return jsonify({"success": False, "message": "A redraw has recently been started please try again later."}), 429 + redis_controller.set(f"avatar:lock:{AuthenticatedUser.id}", "1", ex=5) + UserThumbnail.query.filter_by(userid=AuthenticatedUser.id).delete() + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id, True, True) + # handle 3d within + TakeUserThumbnail(AuthenticatedUser.id, bypassCooldown=True, bypassCache=True, Is3D=True) + return jsonify({"success": True}), 200 + + + +@AvatarRoute.route("/avatar/3d", methods=["GET"]) +@auth.authenticated_required_api +def get_3d_avatar(): + AuthenticatedUser: User = auth.GetCurrentUser() + + target_user_id = request.args.get("userId", None) + + if target_user_id: + target_id = target_user_id + else: + target_id = AuthenticatedUser.id + + UserThumbnailObj: UserThumbnail = UserThumbnail.query.filter_by(userid=target_id).first() + + if UserThumbnailObj and UserThumbnailObj.full_3dcontenthash: + return jsonify({ + "targetId": target_id, + "state": "Completed", + "imageUrl": UserThumbnailObj.full_3dcontenthash, + "version": "TN3" + }) + else: + TakeUserThumbnail(target_id, bypassCooldown=True, bypassCache=False, Is3D=True) + + return jsonify({ + "targetId": target_id, + "state": "Pending", + "imageUrl": "", + "version": "TN3" + }) + + +@AvatarRoute.route("/avatar/isthumbnailready", methods=["GET"]) +@auth.authenticated_required_api +@csrf.exempt +def is_thumbnail_ready(): + AuthenticateUser : User = auth.GetCurrentUser() + UserThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=AuthenticateUser.id).first() + if UserThumbnailObj is None: + return jsonify({"success": True, "ready": False}), 200 + else: + if UserThumbnailObj.full_contenthash is None: + return jsonify({"success": True, "ready": False}), 200 + return jsonify({"success": True, "ready": True}), 200 \ No newline at end of file diff --git a/app/pages/catalog/asset.html b/app/pages/catalog/asset.html new file mode 100644 index 0000000..72ef18f --- /dev/null +++ b/app/pages/catalog/asset.html @@ -0,0 +1,181 @@ +{% extends '__layout__.html' %} +{% block title %}{{asset.name}}{% endblock %} +{% block head %} + + + +
+ +{% endblock %} +{% block content %} +
+
+ < Return to Catalog +

{{asset.name}}

+
+
+
+ {{asset.name}} + {% if asset.is_limited: %}

LIMITED {%if asset.is_limited_unique: %}U{%else%}{%endif%}

{% endif %} +
+
+
+
+ {% if asset.creator_type == 0 :%} + {{creator.username}} +
+

Creator: {{creator.username}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% else %} + {{creator.name}} +
+

Creator: {{creator.name}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% endif %} +
+
+

+ {{asset.description}} +

+
+
+ {% if OffsaleAt: %} +

Offsale in: 00:00:00

+ {% endif %} +
+ {% if asset.is_for_sale: %} + {% if asset.price_robux == 0 and asset.price_tix == 0: %} +

Price: FREE

+ Take One + {% endif %} + {% if asset.price_robux > 0: %} +

Price: {{asset.price_robux}} Robux

+ Buy with Robux + {% endif %} + {% if asset.price_robux > 0 and asset.price_tix > 0: %} +
+
+

OR

+
+
+ {% endif %} + {% if asset.price_tix > 0: %} +

Price: {{asset.price_tix}} Tickets

+ Buy with Tickets + {% endif %} + {% else: %} + {% if asset.is_limited: %} + {% if BestPrice != "None": %} +

Best Price: R$ {{BestPrice}}

+ {% if BestPriceResult.userid != currentuser.id %} + Buy Now + {%else%} + Buy with Robux + {%endif%} + {%else%} + No Resellers Available + {%endif%} + {% if userOwnAmountCount > 0: %} +

( {{userOwnAmountCount}} owned )

+ {%endif%} + {%else%} +

Price: Offsale

+ Buy with Robux + {%endif%} + {% endif %} +

( {{asset.sale_count}} sold )

+
+ {% if asset.is_limited and userOwnAmountCount > 0 and not asset.is_for_sale: %} + + {%endif%} +
+
+ {% if asset.is_limited and not asset.is_for_sale: %} +
+
+
+
Private Sales
+ {% for sale in PrivateSales: %} +
+ {{sale.seller}} +
+ {{sale.seller}} +

R$ {{sale.price}}

+

Serial: {%if asset.is_limited_unique: %}{{sale.serial}}{%else%}N/A{%endif%}

+
+
+ {% if sale.sellerid != currentuser.id: %} + + {%else%} + + {%endif%} +
+
+ {%endfor%} +
+ {% if PreviousPage > 0: %} + Previous + {%else%} + Previous + {% endif %} +

{{PageNumber}}

+ {% if NextPage > 0: %} + Next + {%else%} + Next + {% endif %} +
+
+
+

Recent Average Price: R${{AssetRap}}

+
+
+ {%endif%} +
+
+ +{% endblock %} diff --git a/app/pages/catalog/badges.html b/app/pages/catalog/badges.html new file mode 100644 index 0000000..18ea282 --- /dev/null +++ b/app/pages/catalog/badges.html @@ -0,0 +1,50 @@ +{% extends '__layout__.html' %} +{% block title %}{{badge.name}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{{badge.name}}

+
+
+
+ {{badge.name}} +
+ {% if AssociatedPlaceAssetObj != None: %} +
+

Earn this Badge in: {{AssociatedPlaceAssetObj.name}}

+ +
+ {% endif %} +
+
+
+ {% if AssociatedPlaceAssetObj.creator_type == 0 :%} + {{creator.username}} +
+

Creator: {{creator.username}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% else %} + {{creator.name}} +
+

Creator: {{creator.name}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% endif %} +
+
+

+ {{badge.description}} +

+
+
+
+
+{% endblock %} diff --git a/app/pages/catalog/catalog.py b/app/pages/catalog/catalog.py new file mode 100644 index 0000000..df2cdb3 --- /dev/null +++ b/app/pages/catalog/catalog.py @@ -0,0 +1,875 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.util import auth, turnstile, websiteFeatures +from app.util.embeds import RenderAssetEmbed +from app.routes.thumbnailer import TakeUserThumbnail +from app.util.redislock import acquire_lock, release_lock +from app.extensions import db, csrf, limiter, redis_controller, user_limiter +from app.models.asset import Asset +from app.models.usereconomy import UserEconomy +from app.models.userassets import UserAsset +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user import User +from app.models.package_asset import PackageAsset +from app.models.gamepass_link import GamepassLink +from app.models.asset_rap import AssetRap +from app.models.groups import Group +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.universe import Universe +from app.models.limited_item_transfers import LimitedItemTransfer +from app.routes.badgesapi import CalculateBadgeRarity, GetBadgeAwardedPastDay +from app.pages.catalog.catalogtypes import CatalogTypes +from app.pages.messages.messages import CreateSystemMessage +from slugify import slugify +from datetime import datetime +from config import Config +config = Config() +from sqlalchemy import text, and_, or_ +import math +from app.enums.AssetType import AssetType +from app.util.transactions import CreateTransactionForSale +import logging +import calendar +import time +import requests +import redis_lock +from app.util.membership import GetUserMembership +from app.enums.MembershipType import MembershipType +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from app.models.user_ban import UserBan +from app.enums.BanType import BanType +from app.services.economy import IncrementTargetBalance, AdjustAssetRap, GetAssetRap, TaxCurrencyAmount, GetUserBalance, GetGroupBalance, DecrementTargetBalance,EconomyLockAcquireException, InsufficientFundsException +from app.services.groups import GetUserFromId, GetGroupFromId + +CatalogRoute = Blueprint('catalog', __name__, template_folder="pages", url_prefix="/catalog") +LibraryRoute = Blueprint('library', __name__, template_folder="pages", url_prefix="/library") +BadgesPageRoute = Blueprint('badges_page', __name__, template_folder="pages", url_prefix="/badges") + +def IncrementAssetCreator( AssetObject : Asset, AmountGiven : int, CurrencyType : int): + """ Increments the robux of the asset creator""" + CurrencyToGive = math.floor(AmountGiven * 0.7) + if CurrencyToGive <= 0: + return True + + if AssetObject.creator_type == 0: + # User + IncrementTargetBalance(GetUserFromId(AssetObject.creator_id), CurrencyToGive, CurrencyType) + return True + + elif AssetObject.creator_type == 1: + # Group + IncrementTargetBalance(GetGroupFromId(AssetObject.creator_id), CurrencyToGive, CurrencyType) + return True + +def ConvertQueryToAsset( queryResult ): + """Converts a query result to a dict with the same keys as the Asset model""" + return { + "id": queryResult[0], + "roblox_asset_id": queryResult[1], + "name": queryResult[2], + "description": queryResult[3], + "created_at": queryResult[4], + "updated_at": queryResult[5], + "asset_type": queryResult[6], + "asset_genre": queryResult[7], + "creator_type": queryResult[8], + "creator_id": queryResult[9], + "moderation_status": queryResult[10], + "is_for_sale": queryResult[11], + "price_robux": queryResult[12], + "price_tix": queryResult[13], + "is_limited": queryResult[14], + "is_limited_unique": queryResult[15], + "serial_count": queryResult[16], + "sale_count": queryResult[17], + "offsale_at": queryResult[18] + } + +OrderTypes = { + 0: "created_at DESC", # Default + 1: "price_robux ASC", # Lowest to Highest + 2: "price_robux DESC", # Highest to Lowest + 3: "updated_at DESC", # Recently Updated + 4: "sale_count DESC" # Best Selling +} + +import urllib.parse + +@CatalogRoute.route("/", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def catalog_search(): + CategoryType = int(request.args.get(key="category", default=0, type=int)) + OrderBy = request.form.get(key="order-by", default=0, type=int) + if OrderBy not in OrderTypes: + OrderBy = 0 + SearchQuery = request.form.get(key="search-input", default="", type=str) + if len(SearchQuery) < 3: + SearchQuery = "" + if SearchQuery == "": + return redirect(f"/catalog/?sort={OrderBy}&category={str(CategoryType)}") + # Make sure the query is url safe + SearchQuery = urllib.parse.quote(SearchQuery) + + return redirect(f"/catalog/?q={SearchQuery}&sort={OrderBy}&category={str(CategoryType)}") + +@CatalogRoute.route("/", methods=["GET"]) +@auth.authenticated_required +def catalog_page(): + CatalogType = int(request.args.get("category", 0)) + if CatalogType not in CatalogTypes: + return redirect("/catalog/") + if request.args.get("page") is None: + Page = 1 + else: + try: + Page = int(request.args.get("page")) + except: + Page = 1 + SearchInput = request.args.get("q", "", type=str) + """ + Types of sorting: + 0 - Relevance (Default) [ Just sort by created_at ] + 1 - Price (Lowest to Highest) + 2 - Price (Highest to Lowest) + 3 - Recently Updated + 4 - Best Selling + """ + if request.args.get("sort") is None: + SortType = 0 + else: + try: + SortType = int(request.args.get("sort")) + except: + SortType = 0 + if SortType > 4 or SortType < 0: + SortType = 0 + SearchQuery = Asset.query + CatalogTypesDict = { + 0: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.TShirt, + AssetType.Shirt, + AssetType.Pants, + AssetType.Gear, + AssetType.Face, + AssetType.Head, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + AssetType.Package + ))).filter(and_(Asset.creator_id.in_([1]), Asset.creator_type == 0)).filter(or_( + Asset.is_for_sale == True, Asset.is_limited == True + )), + 1: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))).filter(and_(Asset.creator_id.in_([1]), Asset.creator_type == 0)).filter(or_( + Asset.is_for_sale == True, Asset.is_limited == True + )), + 2: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Gear).filter(and_(Asset.creator_id.in_([1]), Asset.creator_type == 0, Asset.is_for_sale == True)), + 3: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Face).filter(and_(Asset.creator_id.in_([1]), Asset.creator_type == 0, Asset.is_for_sale == True)), + 4: lambda queryObj: queryObj.filter_by(is_limited = True), + 5: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))).filter_by(is_limited = True), + 6: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Gear).filter_by(is_limited = True), + 7: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Face).filter_by(is_limited = True), + 8: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.TShirt, + AssetType.Shirt, + AssetType.Pants, + AssetType.Package, + ))).filter_by(is_for_sale = True), + 9: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))).filter_by(is_for_sale = True), + 10: lambda queryObj: queryObj.filter_by(asset_type = AssetType.Shirt).filter_by(is_for_sale = True), + 11: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.TShirt).filter_by(is_for_sale = True), + 12: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Pants).filter_by(is_for_sale = True), + 13: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Package).filter_by(is_for_sale = True), + 14: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Head, + AssetType.Face, + AssetType.Package + ))).filter_by(is_for_sale = True), + 15: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Head).filter_by(is_for_sale = True), + 16: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Face).filter_by(is_for_sale = True), + 41: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.HairAccessory).filter_by(is_for_sale = True), + } + if CatalogType > 41 or CatalogType < 0: + CatalogType = 0 + SearchQuery = CatalogTypesDict[CatalogType](SearchQuery) + if SearchInput != "" and len(SearchInput) > 3: + SearchQuery = SearchQuery.filter( Asset.name.ilike(f"%{SearchInput}%") ) + else: + SearchInput = "" + if SortType == 0: + SearchQuery = SearchQuery.order_by(Asset.created_at.desc()) + elif SortType == 1: + SearchQuery = SearchQuery.order_by(Asset.price_robux.asc()) + elif SortType == 2: + SearchQuery = SearchQuery.order_by(Asset.price_robux.desc()) + elif SortType == 3: + SearchQuery = SearchQuery.order_by(Asset.updated_at.desc()) + elif SortType == 4: + SearchQuery = SearchQuery.order_by(Asset.sale_count.desc()) + else: + SearchQuery = SearchQuery.order_by(Asset.created_at.desc()) + SearchQuery = SearchQuery.paginate( + page=Page, + per_page=24, + error_out=False + ) + for AssetObj in SearchQuery.items: + if AssetObj.is_limited and not AssetObj.is_for_sale: + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=AssetObj.id, is_for_sale=True).order_by(UserAsset.price.asc()).first() + if BestPriceResult is not None: + AssetObj.best_price = str(BestPriceResult.price) + else: + AssetObj.best_price = "--" + if Page == 1: + PreviousPage = -1 + else: + PreviousPage = Page -1 + if SearchQuery.has_next: + NextPage = Page + 1 + else: + NextPage = -1 + + return render_template("catalog/index.html", + categoryname=CatalogTypes[CatalogType]["name"], + queryResults = SearchQuery.items, + categoryid=CatalogType, + PreviousPage=PreviousPage, + NextPage=NextPage, + PageNumber=Page, + CatalogType=CatalogType, + SortType=SortType, + query=SearchInput, + totalPages = SearchQuery.pages, + totalResults = SearchQuery.total) + +@CatalogRoute.route("//", methods=["GET"]) +@CatalogRoute.route("//", methods=["GET"]) +@auth.authenticated_or_bot_required +def asset_page(assetid, assetname=None): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/catalog") + SlugName = slugify(AssetObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + if assetname is None: + if request.args.get("page") is None: + return redirect(f"/catalog/{assetid}/{SlugName}") + else: + return redirect(f"/catalog/{assetid}/{SlugName}?page={request.args.get('page')}") + if assetname != SlugName: + if request.args.get("page") is None: + return redirect(f"/catalog/{assetid}/{SlugName}") + else: + return redirect(f"/catalog/{assetid}/{SlugName}?page={request.args.get('page')}") + if AssetObject.asset_type.value not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + if AssetObject.asset_type.value == 9: + return redirect(f"/games/{assetid}/") + if AssetObject.asset_type.value in [1,3,4,5,10,13,24,34,38,40]: + return redirect(f"/library/{assetid}/") + return redirect("/catalog/") + if auth.IsCrawlerBot(): + return RenderAssetEmbed( + title=AssetObject.name, + description=AssetObject.description, + image_path=f"/Thumbs/Asset.ashx?assetId={AssetObject.id}&x=420&y=420", + canonical_path=f"/catalog/{AssetObject.id}/{SlugName}" + ) + CreatorObj : User | Group = User.query.filter_by(id=AssetObject.creator_id).first() if AssetObject.creator_type == 0 else Group.query.filter_by(id=AssetObject.creator_id).first() + Created = AssetObject.created_at.strftime("%d/%m/%Y") + Updated = AssetObject.updated_at.strftime("%d/%m/%Y") + AuthenticatedUser : User = auth.GetCurrentUser() + doesUserOwnAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).first() is not None + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).first() + BestPrice = "None" + if BestPriceResult is not None: + BestPrice = str(BestPriceResult.price) + UserOwns = 0 + PrivateSaleList = [] + NextPage = 0 + PreviousPage = 0 + PageNumber = 0 + AssetRap = 0 + if AssetObject.is_limited and not AssetObject.is_for_sale: + AssetRap = GetAssetRap(assetid) + UserOwns = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).count() + Page = 1 + if request.args.get("page"): + try: + Page = int(request.args.get("page")) + except: + pass + PrivateSales = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).paginate(page=Page, per_page=5) + for sale in PrivateSales.items: + SellerUser : User = User.query.filter_by(id=sale.userid).first() + PrivateSaleList.append({ + "price": sale.price, + "seller": SellerUser.username, + "sellerid": SellerUser.id, + "serial": sale.serial, + "uaid": sale.id + }) + if PrivateSales.has_next: + NextPage = Page + 1 + else: + NextPage = -1 + if Page > 1: + PreviousPage = Page - 1 + else: + PreviousPage = -1 + PageNumber = Page + OffsaleAt = None + if AssetObject.offsale_at is not None: + if datetime.utcnow() > AssetObject.offsale_at: + AssetObject.is_for_sale = False + AssetObject.offsale_at = None + db.session.commit() + else: + OffsaleAt = int(calendar.timegm(AssetObject.offsale_at.timetuple())) + return render_template("catalog/asset.html", asset=AssetObject, creator=CreatorObj, createddate=Created, + updateddate=Updated, doesUserOwnAsset=doesUserOwnAsset, BestPrice=BestPrice, + BestPriceResult=BestPriceResult, userOwnAmountCount=UserOwns, PrivateSales=PrivateSaleList, + NextPage=NextPage, PreviousPage=PreviousPage, PageNumber=PageNumber, AssetRap=AssetRap, + OffsaleAt=OffsaleAt) + +@CatalogRoute.route("/resell/", methods=["GET"]) +@auth.authenticated_required +def resell_page(assetid): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/catalog") + if not AssetObject.is_limited: + return redirect(f"/catalog/{str(AssetObject.id)}/") + if AssetObject.is_for_sale: + return redirect(f"/catalog/{str(AssetObject.id)}/") # Users cant resell items when it is still for sale + AuthenticatedUser : User = auth.GetCurrentUser() + UserOwns = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).count() + if UserOwns == 0: + return redirect(f"/catalog/{str(AssetObject.id)}/") + AllUserAssets = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).all() + UserAssetCurrentlyForSale = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid, is_for_sale=True).count() + UserAssetNotForSale = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid, is_for_sale=False).count() + return render_template("catalog/resell.html", asset=AssetObject, userassets=AllUserAssets, userassetforsalecount=UserAssetCurrentlyForSale, userassetnotforsalecount=UserAssetNotForSale, isOTPRequired = AuthenticatedUser.TOTPEnabled) + +@CatalogRoute.route("/resell/", methods=["POST"]) +@auth.authenticated_required +@user_limiter.limit("1/second") +def resell_page_post(assetid): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/catalog") + if not AssetObject.is_limited: + return redirect(f"/catalog/{str(AssetObject.id)}/") + if AssetObject.is_for_sale: + return redirect(f"/catalog/{str(AssetObject.id)}/") + AuthenticatedUser : User = auth.GetCurrentUser() + if "uaid" not in request.form or "itemprice" not in request.form: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + try: + ItemPrice = int(request.form["itemprice"]) + UAID = int(request.form["uaid"]) + except: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=UAID).first() + if UserAssetObj is None: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if UserAssetObj.userid != AuthenticatedUser.id: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if UserAssetObj.assetid != AssetObject.id: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + + if not websiteFeatures.GetWebsiteFeature("ItemReselling"): + flash("Item reselling is currently disabled", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + + if AuthenticatedUser.TOTPEnabled: + if "2fa-code" not in request.form: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + TOTPCode = request.form["2fa-code"] + if len(TOTPCode) != 6: + flash("Invalid 2FA code", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if not auth.Validate2FACode(AuthenticatedUser.id, TOTPCode): + flash("Invalid 2FA code", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if ItemPrice < 1 or ItemPrice > 999999999: + flash("Invalid price ( 1 - 999999999 )", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if ItemPrice <= 49 or ItemPrice > 3000: + ExistingWarning : UserBan = UserBan.query.filter_by(userid=AuthenticatedUser.id, acknowledged=False).order_by(UserBan.id.desc()).first() + if ExistingWarning is None: + AutoWarning = UserBan( + userid=AuthenticatedUser.id, + author_userid=1, + ban_type=BanType.Warning, + reason="Don't list an item for under 50 or over 3000 Robux.", + moderator_note=f"Auto ban, listed {AssetObject.id} ({AssetObject.name}) for {ItemPrice} Robux.", + expires_at=None + ) + db.session.add(AutoWarning) + AuthenticatedUser.accountstatus = 2 + db.session.commit() + try: + requests.post( + url=config.DISCORD_ADMIN_LOGS_WEBHOOK, + json={"content": f"**[{AuthenticatedUser.username}]({config.BaseURL}/admin/manage-users/{AuthenticatedUser.id})** has been autobanned for selling {AssetObject.name} for {ItemPrice} Robux."}, + timeout=10 + ) + except Exception as e: + logging.warning(f"resell automod webhook failed: {e}") + flash("Your listing was removed.", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if UserAssetObj.is_for_sale: + flash("This asset is already for sale", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub: + flash("You must be a Builders Club member to sell items", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + UserAssetObj.is_for_sale = True + UserAssetObj.price = ItemPrice + db.session.commit() + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + +@CatalogRoute.route("/resell//takeoff", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def resell_takeoff(uaid): + AuthenticatedUser : User = auth.GetCurrentUser() + UserAssetObject : UserAsset = UserAsset.query.filter_by(id=uaid).first() + if UserAssetObject is None: + flash("Invalid asset", "error") + return redirect("/catalog") + if UserAssetObject.userid != AuthenticatedUser.id: + flash("Invalid asset", "error") + return redirect("/catalog") + if not UserAssetObject.is_for_sale: + flash("This asset is not for sale", "error") + return redirect(f"/catalog/resell/{str(UserAssetObject.assetid)}") + UserAssetObject.is_for_sale = False + UserAssetObject.price = 0 + db.session.commit() + return redirect(f"/catalog/resell/{str(UserAssetObject.assetid)}") + +@CatalogRoute.route("/api/purchase", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("1/second") +@user_limiter.limit("1/second") +def api_purchase(): + JSONData = request.json + if "assetId" not in JSONData or "expectedPrice" not in JSONData or "currencyType" not in JSONData: + return jsonify({"success": False, "message": "Invalid request"}),400 + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"success": False, "message": "Purchasing is temporarily disabled"}),400 + + try: + JSONData["assetId"] = int(JSONData["assetId"]) + JSONData["expectedPrice"] = int(JSONData["expectedPrice"]) + JSONData["currencyType"] = int(JSONData["currencyType"]) + except: + return jsonify({"success": False, "message": "Invalid request"}),400 + + AssetObject : Asset = Asset.query.filter_by(id=JSONData["assetId"]).first() + if AssetObject is None: + return jsonify({"success": False, "message": "Invalid asset"}),400 + + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + with redis_lock.Lock(redis_client = redis_controller, name=f"asset:{str(AssetObject.id)}", expire=15, auto_renewal=True, strict=True) as lock: + if AssetObject.offsale_at is not None: + if datetime.utcnow() > AssetObject.offsale_at: + AssetObject.is_for_sale = False + AssetObject.offsale_at = None + db.session.commit() + if AssetObject.is_for_sale == False: + return jsonify({"success": False, "message": "Asset is not for sale"}),400 + if JSONData["currencyType"] == 0: + if JSONData["expectedPrice"] != AssetObject.price_robux: + return jsonify({"success": False, "message": "Expected Price is different from current price"}),400 + elif JSONData["currencyType"] == 1: + if JSONData["expectedPrice"] != AssetObject.price_tix: + return jsonify({"success": False, "message": "Expected Price is different from current price"}),400 + else: + return jsonify({"success": False, "message": "Invalid currency type"}),400 + + if AssetObject.price_robux == 0 and AssetObject.price_tix != 0 and JSONData["currencyType"] == 0: + return jsonify({"success": False, "message": "Asset is not being sold in this currency"}),400 + if AssetObject.price_tix == 0 and AssetObject.price_robux != 0 and JSONData["currencyType"] == 1: + return jsonify({"success": False, "message": "Asset is not being sold in this currency"}),400 + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=AssetObject.id).first() + if UserAssetObj is not None: + return jsonify({"success": False, "message": "User already owns asset"}),400 + PurchaserRobuxBal, PurchaserTicketsBal = GetUserBalance(AuthenticatedUser) + if JSONData["currencyType"] == 0: + if PurchaserRobuxBal < AssetObject.price_robux: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + try: + DecrementTargetBalance( + Target = AuthenticatedUser, + Amount = AssetObject.price_robux, + CurrencyType = 0 + ) + except InsufficientFundsException: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + except EconomyLockAcquireException: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + except Exception as e: + logging.error(f"/api/purchase : Failed to decrement balance for user {str(AuthenticatedUser.id)}, message: {str(e)}") + return jsonify({"success": False, "message": "Failed to decrement balance"}),400 + + IncrementAssetCreator( + AssetObject = AssetObject, + AmountGiven = AssetObject.price_robux, + CurrencyType = 0 + ) + elif JSONData["currencyType"] == 1: + if PurchaserTicketsBal < AssetObject.price_tix: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + + try: + DecrementTargetBalance( + Target = AuthenticatedUser, + Amount = AssetObject.price_tix, + CurrencyType = 1 + ) + except InsufficientFundsException: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + except EconomyLockAcquireException: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + except Exception as e: + logging.error(f"/api/purchase : Failed to decrement balance for user {str(AuthenticatedUser.id)}, message: {str(e)}") + return jsonify({"success": False, "message": "Failed to decrement balance"}),400 + + IncrementAssetCreator( + AssetObject = AssetObject, + AmountGiven = AssetObject.price_tix, + CurrencyType = 1 + ) + else: + return jsonify({"success": False, "message": "Invalid currency type"}),400 + + if AssetObject.is_limited_unique: + ItemSerial = AssetObject.sale_count + 1 + if AssetObject.sale_count + 1 >= AssetObject.serial_count: + AssetObject.is_for_sale = False + if AssetObject.is_limited_unique: + UserAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=AssetObject.id, serial=ItemSerial) + else: + UserAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=AssetObject.id) + + if AssetObject.asset_type == AssetType.Package: + PackageAssets = PackageAsset.query.filter_by(package_asset_id=AssetObject.id).all() + for PackageAssetObj in PackageAssets: + NewPackageAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=PackageAssetObj.asset_id) + db.session.add(NewPackageAssetObj) + + AssetObject.sale_count += 1 + db.session.add(UserAssetObj) + db.session.commit() + + try: + if AssetObject.creator_type == 0: + SellerUserObj : User = User.query.filter_by(id=AssetObject.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObject, + PurchasePrice = JSONData["expectedPrice"], + PurchaseCurrencyType = JSONData["currencyType"], + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + else: + GroupObj : Group = Group.query.filter_by(id=AssetObject.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObject, + PurchasePrice = JSONData["expectedPrice"], + PurchaseCurrencyType = JSONData["currencyType"], + Seller = GroupObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObject.id)}, message: {str(e)}") + pass + + return jsonify({"success": True, "message": "Asset purchased successfully"}),200 + except AssertionError as e: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + +@CatalogRoute.route("/api/purchase-limited", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("1/second") +@user_limiter.limit("1/second") +def api_purchase_limited(): + JSONData = request.json + if "assetId" not in JSONData or "expectedPrice" not in JSONData or "expectedOwner" not in JSONData or "itemOwnershipId" not in JSONData: + return jsonify({"success": False, "message": "Invalid request"}),400 + # Expected Types: assetId (int), expectedPrice (int), expectedOwner (int), itemOwnershipId (int) + if type(JSONData["assetId"]) != int or type(JSONData["expectedPrice"]) != int or type(JSONData["expectedOwner"]) != int or type(JSONData["itemOwnershipId"]) != int: + return jsonify({"success": False, "message": "Invalid request"}),400 + AuthenticatedUser : User = auth.GetAuthenticatedUser(request.cookies.get(".ROBLOSECURITY")) + EconomyLock = acquire_lock(f"economy:{str(AuthenticatedUser.id)}", acquire_timeout=5, lock_timeout=1) + if EconomyLock is False: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + AssetObject : Asset = Asset.query.filter_by(id=JSONData["assetId"]).first() + if AssetObject is None: + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Invalid asset"}),400 + if AssetObject.is_limited == False: + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Asset is not limited"}),400 + LimitedAsset : UserAsset = UserAsset.query.filter_by(assetid=AssetObject.id, id=JSONData["itemOwnershipId"]).first() + if LimitedAsset is None: + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Invalid asset info"}),400 + ItemLock = acquire_lock(f"item:{str(LimitedAsset.id)}", acquire_timeout=5, lock_timeout=1) + if ItemLock is False: + return jsonify({"success": False, "message": "Failed to acquire lock ( This is usually caused by too many people purchasing this item at the same time. )"}),400 + if LimitedAsset.is_for_sale == False: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Item is not for sale"}),400 + if JSONData["expectedOwner"] != LimitedAsset.userid: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": f"Expected Owner ({str(JSONData['expectedOwner'])}) does not match current item owner({str(LimitedAsset.userid)})"}),400 + if JSONData["expectedPrice"] != LimitedAsset.price: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": f"Expected Price ({str(JSONData['expectedPrice'])}) does not match current item price ({str(LimitedAsset.price)})"}),400 + if AuthenticatedUser.id == LimitedAsset.userid: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "You cannot purchase your own item"}),400 + + UserEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=AuthenticatedUser.id).first() + if UserEconomyObj.robux < LimitedAsset.price: + redis_controller.delete(f"economy:{str(AuthenticatedUser.id)}") + return jsonify({"success": False, "message": "Insufficient funds"}),400 + + UserEconomyObj.robux -= LimitedAsset.price + OriginalPrice : int = LimitedAsset.price + db.session.commit() + IncrementTargetBalance(GetUserFromId(LimitedAsset.userid), TaxCurrencyAmount(LimitedAsset.price), 0) + AdjustAssetRap(LimitedAsset.assetid, LimitedAsset.price) + LimitedAsset.userid = AuthenticatedUser.id + LimitedAsset.is_for_sale = False + LimitedAsset.price = 0 + LimitedAsset.updated = datetime.utcnow() + db.session.commit() + # We release the locks first as taking a thumbnail can take a while + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + PreviousOwnerId : int = JSONData["expectedOwner"] + # Check how many items the previous owner had of the same asset + PreviousOwnerItems = UserAsset.query.filter_by(userid=PreviousOwnerId, assetid=AssetObject.id).count() + if PreviousOwnerItems == 0: + # Remove the asset from the previous owner avatar if there is any + AvatarAsset = UserAvatarAsset.query.filter_by(user_id=PreviousOwnerId, asset_id=AssetObject.id).first() + if AvatarAsset is not None: + db.session.delete(AvatarAsset) + db.session.commit() + TakeUserThumbnail(PreviousOwnerId, True, False) + CreateSystemMessage( + f"Your {AssetObject.name} has been sold!", + f"Your item {AssetObject.name} ( UAID: {str(LimitedAsset.id)} / Serial: {str(LimitedAsset.serial)} ) has been sold for R$ {str(OriginalPrice)} to {AuthenticatedUser.username} ( {str(AuthenticatedUser.id)} ).", + PreviousOwnerId + ) + SellerUserObj : User = User.query.filter_by(id=PreviousOwnerId).first() + + try: + CreateTransactionForSale( + AssetObj = AssetObject, + PurchasePrice = OriginalPrice, + PurchaseCurrencyType = 0, + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObject.id)}, message: {str(e)}") + pass + + try: + newLimitedTransfer = LimitedItemTransfer( + original_owner_id = SellerUserObj.id, + new_owner_id = AuthenticatedUser.id, + asset_id = AssetObject.id, + user_asset_id = LimitedAsset.id, + transfer_method = LimitedItemTransferMethod.Purchase, + purchased_price = OriginalPrice + ) + db.session.add(newLimitedTransfer) + db.session.commit() + except Exception as e: + logging.warn(f"Failed to create limited item transfer log for asset {str(AssetObject.id)}, message: {str(e)}") + pass + + return jsonify({"success": True, "message": "Item purchased successfully"}),200 + + +@LibraryRoute.route("//", methods=["GET"]) +@LibraryRoute.route("//", methods=["GET"]) +@auth.authenticated_or_bot_required +def asset_page(assetid, assetname=None): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/library") + SlugName = slugify(AssetObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + if assetname is None: + if request.args.get("page") is None: + return redirect(f"/library/{assetid}/{SlugName}") + else: + return redirect(f"/library/{assetid}/{SlugName}?page={request.args.get('page')}") + if assetname != SlugName: + if request.args.get("page") is None: + return redirect(f"/library/{assetid}/{SlugName}") + else: + return redirect(f"/library/{assetid}/{SlugName}?page={request.args.get('page')}") + if AssetObject.asset_type.value in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + return redirect(f"/catalog/{str(AssetObject.id)}/") + if AssetObject.asset_type.value == 9: + return redirect(f"/games/{assetid}/") + if auth.IsCrawlerBot(): + return RenderAssetEmbed( + title=AssetObject.name, + description=AssetObject.description, + image_path=f"/Thumbs/Asset.ashx?assetId={AssetObject.id}&x=420&y=420", + canonical_path=f"/library/{AssetObject.id}/{SlugName}" + ) + CreatorObj : User | Group = User.query.filter_by(id=AssetObject.creator_id).first() if AssetObject.creator_type == 0 else Group.query.filter_by(id=AssetObject.creator_id).first() + Created = AssetObject.created_at.strftime("%d/%m/%Y") + Updated = AssetObject.updated_at.strftime("%d/%m/%Y") + AuthenticatedUser : User = auth.GetCurrentUser() + doesUserOwnAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).first() is not None + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).first() + BestPrice = "None" + if BestPriceResult is not None: + BestPrice = str(BestPriceResult.price) + UserOwns = 0 + PrivateSaleList = [] + NextPage = 0 + PreviousPage = 0 + PageNumber = 0 + AssetRap = 0 + if AssetObject.is_limited and not AssetObject.is_for_sale: + AssetRap = GetAssetRap(assetid) + UserOwns = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).count() + Page = 1 + if request.args.get("page"): + try: + Page = int(request.args.get("page")) + except: + pass + PrivateSales = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).paginate(page=Page, per_page=5).items + for sale in PrivateSales: + SellerUser : User = User.query.filter_by(id=sale.userid).first() + PrivateSaleList.append({ + "price": sale.price, + "seller": SellerUser.username, + "sellerid": SellerUser.id, + "serial": sale.serial, + "uaid": sale.id + }) + if len(UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).paginate(page=Page+1, per_page=5, error_out=False).items) > 0: + NextPage = Page + 1 + else: + NextPage = -1 + if Page > 1: + PreviousPage = Page - 1 + else: + PreviousPage = -1 + PageNumber = Page + + GamepassLinkObj = None + GamepassRootPlaceAsset = None + if AssetObject.asset_type == AssetType.GamePass: + GamepassLinkObj : GamepassLink = GamepassLink.query.filter_by(gamepass_id=AssetObject.id).first() + GamepassUniverse : Universe = Universe.query.filter_by(id=GamepassLinkObj.universe_id).first() + GamepassRootPlaceAsset : Asset = Asset.query.filter_by( id = GamepassUniverse.root_place_id ).first() + return render_template("catalog/library.html", asset=AssetObject, creator=CreatorObj, createddate=Created, + updateddate=Updated, doesUserOwnAsset=doesUserOwnAsset, BestPrice=BestPrice, + BestPriceResult=BestPriceResult, userOwnAmountCount=UserOwns, PrivateSales=PrivateSaleList, + NextPage=NextPage, PreviousPage=PreviousPage, PageNumber=PageNumber, AssetRap=AssetRap, + GamepassLinkObj=GamepassLinkObj, GamepassRootPlaceAsset=GamepassRootPlaceAsset) + +@BadgesPageRoute.route("//", methods=["GET"]) +@BadgesPageRoute.route("//", methods=["GET"]) +@auth.authenticated_or_bot_required +def badge_page( badgeid : int, badgename : str = None ): + BadgeObject : PlaceBadge = PlaceBadge.query.filter_by(id=badgeid).first() + if BadgeObject is None: + return abort(404) + + SlugName = slugify(BadgeObject.name, lowercase=False) + if badgename is None: + return redirect(f"/badges/{badgeid}/{SlugName}") + elif badgename != SlugName: + return redirect(f"/badges/{badgeid}/{SlugName}") + if auth.IsCrawlerBot(): + return RenderAssetEmbed( + title=BadgeObject.name, + description=BadgeObject.description, + image_path=f"/Thumbs/Asset.ashx?assetId={BadgeObject.icon_image_id}&x=420&y=420", + canonical_path=f"/badges/{BadgeObject.id}/{SlugName}" + ) + + AuthenticatedUser : User = auth.GetCurrentUser() + UserBadgeObj : UserBadge = UserBadge.query.filter_by(user_id=AuthenticatedUser.id, badge_id=badgeid).first() + AssociatedPlaceAssetObj : Asset = Asset.query.filter_by(id=BadgeObject.associated_place_id).first() + CreatorObj : User | Group = User.query.filter_by(id=AssociatedPlaceAssetObj.creator_id).first() if AssociatedPlaceAssetObj.creator_type == 0 else Group.query.filter_by(id=AssociatedPlaceAssetObj.creator_id).first() + Created = BadgeObject.created_at.strftime("%d/%m/%Y") + Updated = BadgeObject.updated_at.strftime("%d/%m/%Y") + + return render_template( + "catalog/badges.html", + badge = BadgeObject, + userbadge = UserBadgeObj, + AssociatedPlaceAssetObj = AssociatedPlaceAssetObj, + creator = CreatorObj, + createddate = Created, + updateddate = Updated + ) diff --git a/app/pages/catalog/catalogtypes.py b/app/pages/catalog/catalogtypes.py new file mode 100644 index 0000000..dab4ae5 --- /dev/null +++ b/app/pages/catalog/catalogtypes.py @@ -0,0 +1,76 @@ +from app.models.asset import Asset + +CatalogTypes = { + 0 : { + "name": "Featured Items", + "query": "SELECT * FROM asset WHERE asset_type IN ('TShirt','Hat','Shirt','Pants','Decal','Head','Face','Gear','Package','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 1 : { + "name": "Featured Hats", + "query": "SELECT * FROM asset WHERE asset_type IN ('Hat','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 2 : { + "name": "Featured Gears", + "query": "SELECT * FROM asset WHERE asset_type IN ('Gear') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 3 : { + "name": "Featured Faces", + "query": "SELECT * FROM asset WHERE asset_type IN ('Face') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 4 : { + "name": "Collectible Items", + "query": "SELECT * FROM asset WHERE is_limited = true" + }, + 5 : { + "name": "Collectible Hats", + "query": "SELECT * FROM asset WHERE asset_type IN ('Hat','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND is_limited = true" + }, + 6 : { + "name": "Collectible Gears", + "query": "SELECT * FROM asset WHERE asset_type IN ('Gear') AND is_limited = true" + }, + 7 : { + "name": "Collectible Faces", + "query": "SELECT * FROM asset WHERE asset_type IN ('Face') AND is_limited = true" + }, + 8 : { + "name": "All Clothing", + "query": "SELECT * FROM asset WHERE asset_type IN ('TShirt','Hat','Shirt','Pants','Package') AND is_for_sale = true" + }, + 9 : { + "name": "Hats", + "query": "SELECT * FROM asset WHERE asset_type IN ('Hat','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND is_for_sale = true" + }, + 10 : { + "name": "Shirts", + "query": "SELECT * FROM asset WHERE asset_type IN ('Shirt') AND is_for_sale = true" + }, + 11 : { + "name": "T-Shirts", + "query": "SELECT * FROM asset WHERE asset_type IN ('TShirt') AND is_for_sale = true" + }, + 12 : { + "name": "Pants", + "query": "SELECT * FROM asset WHERE asset_type IN ('Pants') AND is_for_sale = true" + }, + 13 : { + "name": "Packages", + "query": "SELECT * FROM asset WHERE asset_type in ('Package') AND is_for_sale = true" + }, + 14 : { + "name": "Body Parts", + "query": "SELECT * FROM asset WHERE asset_type IN ('Head','Face') AND is_for_sale = true" + }, + 15 : { + "name": "Heads", + "query": "SELECT * FROM asset WHERE asset_type IN ('Head') AND is_for_sale = true" + }, + 16 : { + "name": "Faces", + "query": "SELECT * FROM asset WHERE asset_type IN ('Face') AND is_for_sale = true" + }, + 41 : { + "name": "Hairs", + "query": "SELECT * FROM asset WHERE asset_type IN ('HairAccessory') AND (is_for_sale = true OR is_limited = true)" + }, +} diff --git a/app/pages/catalog/index.html b/app/pages/catalog/index.html new file mode 100644 index 0000000..9529004 --- /dev/null +++ b/app/pages/catalog/index.html @@ -0,0 +1,182 @@ +{% extends '__layout__.html' %} +{% block title %}Catalog{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+
+

Catalog

+
+
+
+
+ + +
+
+ + +
+ +
+
+
+
+
+ + +
+
+
+{% endblock %} diff --git a/app/pages/catalog/library.html b/app/pages/catalog/library.html new file mode 100644 index 0000000..7b618cc --- /dev/null +++ b/app/pages/catalog/library.html @@ -0,0 +1,183 @@ +{% extends '__layout__.html' %} +{% block title %}{{asset.name}}{% endblock %} +{% block head %} + + + +
+ +{% endblock %} +{% block content %} +
+
+

{{asset.name}}

+
+
+
+ {{asset.name}} + {% if asset.is_limited: %}

LIMITED {%if asset.is_limited_unique: %}U{%else%}{%endif%}

{% endif %} +
+ {% if GamepassLinkObj != None: %} +
+

Use this Gamepass in: {{GamepassRootPlaceAsset.name}}

+ +
+ {% endif %} +
+
+
+ {% if asset.creator_type == 0 :%} + {{creator.username}} +
+

Creator: {{creator.username}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% else %} + {{creator.name}} +
+

Creator: {{creator.name}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% endif %} +
+
+

+ {{asset.description}} +

+
+
+
+ {% if asset.is_for_sale: %} + {% if asset.price_robux == 0 and asset.price_tix == 0: %} +

Price: FREE

+ Take One + {% endif %} + {% if asset.price_robux > 0: %} +

Price: {{asset.price_robux}} Robux

+ Buy with Robux + {% endif %} + {% if asset.price_robux > 0 and asset.price_tix > 0: %} +
+
+

OR

+
+
+ {% endif %} + {% if asset.price_tix > 0: %} +

Price: {{asset.price_tix}} Tickets

+ Buy with Tickets + {% endif %} + {% else: %} + {% if asset.is_limited: %} + {% if BestPrice != "None": %} +

Best Price: R$ {{BestPrice}}

+ {% if BestPriceResult.userid != currentuser.id %} + Buy Now + {%else%} + Buy with Robux + {%endif%} + {%else%} + No Resellers Available + {%endif%} + {% if userOwnAmountCount > 0: %} +

( {{userOwnAmountCount}} owned )

+ {%endif%} + {%else%} +

Price: Offsale

+ Buy with Robux + {%endif%} + {% endif %} +

( {{asset.sale_count}} sold )

+
+ {% if asset.is_limited and userOwnAmountCount > 0 and not asset.is_for_sale: %} + + {%endif%} +
+
+ {% if asset.is_limited and not asset.is_for_sale: %} +
+
+
+
Private Sales
+ {% for sale in PrivateSales: %} +
+ {{sale.seller}} +
+ {{sale.seller}} +

R$ {{sale.price}}

+

Serial: {%if asset.is_limited_unique: %}{{sale.serial}}{%else%}N/A{%endif%}

+
+
+ {% if sale.sellerid != currentuser.id: %} + + {%else%} + + {%endif%} +
+
+ {%endfor%} +
+ {% if PreviousPage > 0: %} + Previous + {%else%} + Previous + {% endif %} +

{{PageNumber}}

+ {% if NextPage > 0: %} + Next + {%else%} + Next + {% endif %} +
+
+
+

Recent Average Price: R${{AssetRap}}

+
+
+ {%endif%} +
+
+ +{% endblock %} diff --git a/app/pages/catalog/resell.html b/app/pages/catalog/resell.html new file mode 100644 index 0000000..928b339 --- /dev/null +++ b/app/pages/catalog/resell.html @@ -0,0 +1,65 @@ +{% extends '__layout__.html' %} +{% block title %}{{asset.name}}{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ < Return to Item Page +

{{asset.name}}

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% if userassetnotforsalecount > 0: %} +
+
+ + +

Note: Once sold you will only recieve 70% of the actual price it was sold for.

+ {%if isOTPRequired: %} + +

As you have 2FA Enabled it is required to authorise any sale of your items

+ {%endif%} + + +
+ {%endif%} + {% if userassetforsalecount > 0: %} +
+
Manage onsale items
+ {% for userasset in userassets %} + {% if userasset.is_for_sale: %} +
+
+
+
UAID: {{userasset.id}} | Serial: {% if asset.is_limited_unique: %}{{userasset.serial}}{%else%}N/A{%endif%}
+

Price: {{userasset.price}}

+
+
+
+ +
+
+
+
+ {%endif%} + {%endfor%} + {%endif%} +
+
+{% endblock %} diff --git a/app/pages/clientpages/clientpages.py b/app/pages/clientpages/clientpages.py new file mode 100644 index 0000000..606e200 --- /dev/null +++ b/app/pages/clientpages/clientpages.py @@ -0,0 +1,11 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify + +ClientPages = Blueprint('clientpages', __name__, template_folder="pages") + +@ClientPages.route("/UploadMedia/PostImage.aspx", methods=["GET"]) +def UploadMediaPostImage(): + seostr = request.args.get("seostr") + filename = request.args.get("filename") + if seostr is None or filename is None: + return "Invalid request" + return render_template("clientpages/screenshot.html", seostr=seostr, filename=filename) \ No newline at end of file diff --git a/app/pages/clientpages/screenshot.html b/app/pages/clientpages/screenshot.html new file mode 100644 index 0000000..caa4d1e --- /dev/null +++ b/app/pages/clientpages/screenshot.html @@ -0,0 +1,17 @@ + + + + Screenshot + + + +

NEXIUM Screenshot

+

Hey, you just took a screenshot in NEXIUM! You could:

+
    +
  • Go to My Pictures folder to check it out!
  • +
  • Paste it to your favorite painting software
  • +
+
+ Not interested, don't bother me again + + \ No newline at end of file diff --git a/app/pages/clothingmigrator/index.html b/app/pages/clothingmigrator/index.html new file mode 100644 index 0000000..8db4ca2 --- /dev/null +++ b/app/pages/clothingmigrator/index.html @@ -0,0 +1,38 @@ +{% extends '__layout__.html' %} +{% block title %}Clothing Migrator{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

Clothing Migrator

+

This will take a clothing from the Roblox website and will be sold for 5 robux. ( Allowed assets: TShirt, Shirt, Pants )

+
+
+ +
+
+ +
+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/clothingmigrator/migrator.py b/app/pages/clothingmigrator/migrator.py new file mode 100644 index 0000000..b5e75ed --- /dev/null +++ b/app/pages/clothingmigrator/migrator.py @@ -0,0 +1,61 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.extensions import db, redis_controller, limiter +from app.util import auth, turnstile, websiteFeatures +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.routes.asset import migrateAsset +from datetime import datetime +import re + +ClothingMigratorRoute = Blueprint('clothingmigrator', __name__, template_folder='pages') + +@ClothingMigratorRoute.route('/clothing-migrator', methods=['GET']) +@auth.authenticated_required +def clothing_migrator(): + return render_template('clothingmigrator/index.html') + +@ClothingMigratorRoute.route('/clothing-migrator', methods=['POST']) +@auth.authenticated_required +@limiter.limit("1/second") +def clothing_migrator_post(): + if not websiteFeatures.GetWebsiteFeature("ClothingMigrator"): + flash("Clothing migration is temporarily disabled", "error") + return redirect("/clothing-migrator") + + if "asseturl" not in request.form or "cf-turnstile-response" not in request.form: + flash("Please fill in all the fields", "error") + return redirect("/clothing-migrator") + AssetRegex = re.compile(r".com\/catalog\/(\d+)\/") + AssetMatch = AssetRegex.search(request.form.get("asseturl")) + if AssetMatch is None: + flash("Invalid asset URL", "error") + return redirect("/clothing-migrator") + AssetID = AssetMatch.group(1) + if not turnstile.VerifyToken(request.form.get("cf-turnstile-response")): + flash("Invalid captcha", "error") + return redirect("/clothing-migrator") + AssetObject : Asset = Asset.query.filter_by(roblox_asset_id=AssetID).first() + if AssetObject is not None: + return redirect(f"/catalog/{AssetID}/") + AuthenticatedUser = auth.GetCurrentUser() + DayOfYear = datetime.utcnow().timetuple().tm_yday + RedisResult = redis_controller.get(f"clothingmigrator:{str(AuthenticatedUser.id)}:{str(DayOfYear)}") + if RedisResult is None: + redis_controller.setex(f"clothingmigrator:{str(AuthenticatedUser.id)}:{str(DayOfYear)}", 86400, "1") + else: + Count = int(RedisResult) + if Count >= 5: + flash("You have reached the daily limit of 5 per day, please try again tommorow.", "error") + return redirect("/clothing-migrator") + redis_controller.setex(f"clothingmigrator:{str(AuthenticatedUser.id)}:{str(DayOfYear)}", 86400, str(Count + 1)) + MigratedAsset : Asset = migrateAsset(AssetID, forceMigration=False, allowedTypes=[2, 11, 12], creatorId=2, keepRobloxId=False, migrateInfo=True) + if MigratedAsset is None: + flash("Unable to migrate asset", "error") + return redirect("/clothing-migrator") + if MigratedAsset.creator_id == 2 and MigratedAsset.creator_type == 0: + if (datetime.utcnow() - MigratedAsset.created_at).total_seconds() < 2: + MigratedAsset.is_for_sale = True + MigratedAsset.price_robux = 5 + MigratedAsset.description = f"This item was taken from the Roblox Catalog using the Clothing Migrator. This item was requested by {AuthenticatedUser.username} ({AuthenticatedUser.id})." + db.session.commit() + return redirect(f"/catalog/{str(MigratedAsset.id)}/") diff --git a/app/pages/cryptomus/dashboard.html b/app/pages/cryptomus/dashboard.html new file mode 100644 index 0000000..5c54f52 --- /dev/null +++ b/app/pages/cryptomus/dashboard.html @@ -0,0 +1,74 @@ +{% extends '__layout__.html' %} +{% block title %}Cryptomus Dashboard{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+ Return to payment methods +
+

Pay with Cryptomus

+ +
+
+
+
+ {% if len(UserInvoices.items) == 0 %} +

No past payments

+ {% else %} + {% for invoice in UserInvoices.items %} +
+
+
{{invoice.cryptomus_invoice_id}}
+
+

{{invoice.created_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

| {{invoice.status.name}}

+
+
+ View Payment +
+ {% endfor %} + {% endif %} +
+
+ Previous +

Page {{UserInvoices.page}} of {{UserInvoices.pages}}

+ Next +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/cryptomus/view_payment.html b/app/pages/cryptomus/view_payment.html new file mode 100644 index 0000000..3f90aff --- /dev/null +++ b/app/pages/cryptomus/view_payment.html @@ -0,0 +1,63 @@ +{% extends '__layout__.html' %} +{% block title %}View Payment{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+ Return to payment dashboard +
+
+
+

Invoice

+

ID: {{InvoiceObj.cryptomus_invoice_id}}

+
+ +
+
+
+
+
+

Invoice Details

+
+

Created at: {{InvoiceObj.created_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

Expires at: {{InvoiceObj.expires_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

Last Status Update: {{InvoiceObj.updated_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

Invoice Status: {{InvoiceObj.status.name}}

+

Is Finalised: {% if InvoiceObj.is_final %}Yes{% else %}No{% endif %}

+
+
+
+

Payment Details

+
+

Required Amount: {{ round( InvoiceObj.required_amount, 2 )}} {{InvoiceObj.currency}}

+

USD received: {{ round( InvoiceObj.paid_amount_usd, 2 )}} USD

+
+
+
+
+
+

Additional Details

+
+ {% if InvoiceObj.assigned_key == None %} +

No additional details

+ {% else %} +
+

Outrageous Builders Club 1 Month

+
+ + +
+

Redeem this key at www.nexium.fit/giftcard-redeem or give it to a friend

+
+ {% endif %} +
+
+
+
+
+

If you have any issues with paying, viewing or receving your item please open a billing ticket in our Discord Server

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/currencyexchange/controller.py b/app/pages/currencyexchange/controller.py new file mode 100644 index 0000000..3f1235d --- /dev/null +++ b/app/pages/currencyexchange/controller.py @@ -0,0 +1,379 @@ +from app.services.economy import GetUserBalance, DecrementTargetBalance, IncrementTargetBalance +from app.enums.TransactionType import TransactionType +from app.models.exchange_offer import ExchangeOffer +from app.models.user import User +from app.util import auth, transactions, redislock, websiteFeatures +from app.util.redirect import safe_redirect +from app.extensions import db, limiter, redis_controller +from datetime import datetime, timedelta +from app.pages.messages.messages import CreateSystemMessage +from sqlalchemy import case +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash, abort + +import redis_lock +CurrencyExchangeRoute = Blueprint("currencyexchange", __name__, url_prefix="/currency-exchange") + +@CurrencyExchangeRoute.errorhandler(429) +def ratelimit_handler(e): + flash("You are being ratelimited.", "danger") + return redirect(safe_redirect(fallback_url="/currency-exchange")) + +@CurrencyExchangeRoute.route("/", methods=["GET"]) +@auth.authenticated_required +def index(): + CategoryType : str = request.args.get( + key = "category", + default = "all", + type = str + ) + SortType : str = request.args.get( + key = "sort", + default = "best", + type = str + ) + PageNumber : int = request.args.get( + key = "page", + default = 1, + type = int + ) + + if CategoryType not in ["tr", "rt", "all"]: + CategoryType = "all" + if SortType not in ["best", "worst", "created"]: + SortType = "best" + if PageNumber < 1: + PageNumber = 1 + + QueryObj = ExchangeOffer.query + QueryObj = QueryObj.filter_by( + reciever_id = None + ) + if CategoryType == "tr": + QueryObj = QueryObj.filter_by( + offer_currency_type = 1 + ) + elif CategoryType == "rt": + QueryObj = QueryObj.filter_by( + offer_currency_type = 0 + ) + + if SortType == "best": + if CategoryType == "rt": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.asc() + ) + elif CategoryType == "tr": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.desc() + ) + else: + QueryObj = QueryObj.order_by( + ExchangeOffer.worth.desc() + ) + elif SortType == "worst": + if CategoryType == "rt": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.desc() + ) + elif CategoryType == "tr": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.asc() + ) + else: + QueryObj = QueryObj.order_by( + ExchangeOffer.worth.asc() + ) + else: + QueryObj = QueryObj.order_by( + ExchangeOffer.created_at.desc() + ) + + QueryObj = QueryObj.paginate( + page = PageNumber, + per_page = 15, + error_out = False + ) + + for Offer in QueryObj.items: + Offer : ExchangeOffer + if Offer.expires_at < datetime.utcnow(): + IncrementTargetBalance(Offer.creator, Offer.offer_value, Offer.offer_currency_type) + transactions.CreateTransaction( + Reciever = Offer.creator, + Sender = User.query.filter_by(id = 1).first(), + CurrencyAmount = Offer.offer_value, + CurrencyType = Offer.offer_currency_type, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = "Offer expired." + ) + + db.session.delete(Offer) + db.session.commit() + continue + + return render_template( + "currencyexchange/index.html", + offers = QueryObj.items, + hasNextPage = QueryObj.has_next, + hasPrevPage = QueryObj.has_prev, + PageCategory = CategoryType, + SortType = SortType, + PageNumber = PageNumber + ) + +@CurrencyExchangeRoute.route("/view/", methods=["GET"]) +@auth.authenticated_required +def viewOffer(OfferId : int): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + return render_template( + "currencyexchange/view.html", + offer = OfferObj, + AuthenticatedUser = AuthenticatedUser + ) + +@CurrencyExchangeRoute.route("/delete/", methods=["POST"]) +@auth.authenticated_required +def deleteOffer(OfferId : int): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if OfferObj.creator_id != AuthenticatedUser.id: + return abort(403) + + if websiteFeatures.GetWebsiteFeature("CurrencyExchange") is False: + flash("Currency exchange is currently disabled.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"currency_exchange_order:{OfferId}", expire = 15, auto_renewal = True ): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj.reciever_id is not None: + return abort(403) + + IncrementTargetBalance(OfferObj.creator, OfferObj.offer_value, OfferObj.offer_currency_type) + transactions.CreateTransaction( + Reciever = OfferObj.creator, + Sender = User.query.filter_by(id = 1).first(), + CurrencyAmount = OfferObj.offer_value, + CurrencyType = OfferObj.offer_currency_type, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = "Offer cancelled." + ) + + db.session.delete(OfferObj) + db.session.commit() + + flash("Offer successfully deleted.", "success") + return redirect("/currency-exchange/") + except AssertionError: + flash("Failed to delete offer, try again later.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + +@CurrencyExchangeRoute.route("/fill/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("40/minute") +def fillOffer(OfferId : int): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj is None: + return abort(404) + + if websiteFeatures.GetWebsiteFeature("CurrencyExchange") is False: + flash("Currency exchange is currently disabled.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + + LockName = f"currency_exchange_order:{str(OfferId)}" + try: + with redis_lock.Lock( redis_client = redis_controller, name = LockName, expire = 15, auto_renewal = True ): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + + AuthenticatedUser : User = auth.GetCurrentUser() + if OfferObj.creator_id == AuthenticatedUser.id: + return abort(403) + if OfferObj.reciever_id is not None: + return abort(403) + + if OfferObj.expires_at < datetime.utcnow(): + return abort(403) + + SendingCurrencyType : int = 0 if OfferObj.offer_currency_type == 1 else 1 + UserRobuxBal, UserTicketsBal = GetUserBalance(AuthenticatedUser) + if SendingCurrencyType == 0: + if UserRobuxBal < OfferObj.receive_value: + flash("You do not have enough Robux to fill this offer.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + else: + if UserTicketsBal < OfferObj.receive_value: + flash("You do not have enough Tickets to fill this offer.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + + transactions.CreateTransaction( + Reciever = OfferObj.creator, + Sender = User.query.filter_by(id = 1).first(), # Remain anonymous + CurrencyAmount = OfferObj.receive_value, + CurrencyType = SendingCurrencyType, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = f"Currency Exchange Order ({OfferId}) Filled" + ) + transactions.CreateTransaction( + Reciever = AuthenticatedUser, + Sender = User.query.filter_by(id = 1).first(), # Remain anonymous + CurrencyAmount = OfferObj.offer_value, + CurrencyType = OfferObj.offer_currency_type, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = f"Currency Exchange Order ({OfferId}) Filled" + ) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id = 1).first(), # Remain anonymous + Sender = AuthenticatedUser, + CurrencyAmount = OfferObj.receive_value, + CurrencyType = SendingCurrencyType, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = f"Currency Exchange Order ({OfferId}) Filled" + ) + DecrementTargetBalance(AuthenticatedUser, OfferObj.receive_value, SendingCurrencyType) + IncrementTargetBalance(AuthenticatedUser, OfferObj.offer_value, OfferObj.offer_currency_type) + IncrementTargetBalance(OfferObj.creator, OfferObj.receive_value, SendingCurrencyType) + + OfferObj.reciever_id = AuthenticatedUser.id + db.session.commit() + + CreateSystemMessage( + subject = "Offer Filled", + message = f"Your currency exchange offer ({OfferId}) has been filled, you have received {OfferObj.receive_value} {'Robux' if OfferObj.offer_currency_type == 1 else 'Tickets'} in exchange for {OfferObj.offer_value} {'Robux' if OfferObj.offer_currency_type == 0 else 'Tickets'}.", + userid = OfferObj.creator_id + ) + + flash("Offer successfully filled.", "success") + return redirect(f"/currency-exchange/view/{OfferId}") + except AssertionError: + flash("Failed to fill offer, try again later.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + +@CurrencyExchangeRoute.route("/create", methods=["GET"]) +@auth.authenticated_required +def createOfferPage(): + return render_template("currencyexchange/create.html") + +@CurrencyExchangeRoute.route("/create", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("40/minute") +def createOffer(): + AuthenticatedUser : User = auth.GetCurrentUser() + + OfferCurrencyType : int = request.form.get( + key = "offer-currency-type", + default = None, + type = int + ) + OfferValue : int = request.form.get( + key = "offer-currency-amount", + default = None, + type = int + ) + ReceiveValue : int = request.form.get( + key = "exchange-currency-amount", + default = None, + type = int + ) + if OfferCurrencyType is None or OfferValue is None or ReceiveValue is None: + flash("Invalid request", "error") + return redirect("/currency-exchange/create") + + if OfferValue <= 0 or ReceiveValue <= 0: + flash("Invalid request", "error") + return redirect("/currency-exchange/create") + + if websiteFeatures.GetWebsiteFeature("CurrencyExchange") is False: + flash("Currency exchange is currently disabled.", "error") + return redirect(f"/currency-exchange/create") + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"currency_exchange_create_offer:{AuthenticatedUser.id}", expire = 15, auto_renewal = True ): + ActiveOffers : int = ExchangeOffer.query.filter_by( + creator_id = AuthenticatedUser.id, + reciever_id = None + ).filter( + ExchangeOffer.expires_at > datetime.utcnow() + ).count() + + if ActiveOffers >= 25: + flash("You have too many active offers, please cancel them to create a new offer.", "error") + return redirect("/currency-exchange/create") + + if OfferCurrencyType == 0: + if OfferValue < 5: + flash("You can only create offers of 5 Robux or more.", "error") + return redirect("/currency-exchange/create") + if OfferValue > 10000: + flash("You can only create offers up to 10,000 Robux.", "error") + return redirect("/currency-exchange/create") + Ratio = ReceiveValue / OfferValue + else: + if OfferValue < 10: + flash("You can only create offers of 10 Tickets or more.", "error") + return redirect("/currency-exchange/create") + if OfferValue > 100000: + flash("You can only create offers up to 100,000 Tickets.", "error") + return redirect("/currency-exchange/create") + Ratio = OfferValue / ReceiveValue + + if Ratio < 2 or Ratio > 20: + flash("Bad exchange ratio", "error") + return redirect("/currency-exchange/create") + + UserRobuxBal, UserTicketsBal = GetUserBalance(AuthenticatedUser) + if OfferCurrencyType == 0 and UserRobuxBal < OfferValue: + flash("You do not have enough Robux to create this offer.", "error") + return redirect("/currency-exchange/create") + elif OfferCurrencyType == 1 and UserTicketsBal < OfferValue: + flash("You do not have enough Tickets to create this offer.", "error") + return redirect("/currency-exchange/create") + + DecrementTargetBalance(AuthenticatedUser, OfferValue, OfferCurrencyType) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = OfferValue, + CurrencyType = OfferCurrencyType, + TransactionType = TransactionType.Purchase, + CustomText = "Created Exchange Order" + ) + + NewOffer : ExchangeOffer = ExchangeOffer( + creator_id = AuthenticatedUser.id, + offer_value = OfferValue, + receive_value = ReceiveValue, + offer_currency_type = OfferCurrencyType, + created_at = datetime.utcnow(), + expires_at = datetime.utcnow() + timedelta(days=31), + ratio = Ratio, + worth = abs( 20 - Ratio ) if OfferCurrencyType == 0 else ( 20 - abs( Ratio - 20 ) ) + ) + db.session.add(NewOffer) + db.session.commit() + + flash("Offer created successfully", "success") + return redirect("/currency-exchange/") + except AssertionError: + flash("Failed to create offer, try again later.", "error") + return redirect("/currency-exchange/create") \ No newline at end of file diff --git a/app/pages/currencyexchange/create.html b/app/pages/currencyexchange/create.html new file mode 100644 index 0000000..6d68240 --- /dev/null +++ b/app/pages/currencyexchange/create.html @@ -0,0 +1,165 @@ +{% extends '__layout__.html' %} +{% block title %}Create Offer{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+
+
+
You are offering
+
+
+
+
+ + +
+
+ + +
+
+
+
+
In exchange for
+
+
+
+
+ + +
+
+ + +
+
+

Robux to Tix Ratio: 0:0

+ + +
+
+
+ Return to Currency Exchange +

New Exchange Offer

+

You can create an offer to be placed onto the currency exchange system, this will allow other users to trade for example Robux to Tickets or vice versa.

+ +

Note: The minimum for Robux to Tix is 1:2 while the maximum is 1:20

+
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/pages/currencyexchange/index.html b/app/pages/currencyexchange/index.html new file mode 100644 index 0000000..023a600 --- /dev/null +++ b/app/pages/currencyexchange/index.html @@ -0,0 +1,111 @@ +{% extends '__layout__.html' %} +{% block title %}Currency Exchange{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+

Currency Exchange

+ +
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + {% for OfferObj in offers: %} + + + + + + + + + {% endfor %} + +
DateExpiresOfferingRequestingR:T RatioAction
{{ OfferObj.created_at.strftime("%d/%m/%Y") }}{{ OfferObj.expires_at.strftime("%d/%m/%Y") }} + {% if OfferObj.offer_currency_type == 0 %} + R$ {{OfferObj.offer_value}} + {% else %} + T$ {{OfferObj.offer_value}} + {% endif %} + + {% if OfferObj.offer_currency_type == 1 %} + R$ {{OfferObj.receive_value}} + {% else %} + T$ {{OfferObj.receive_value}} + {% endif %} + + 1:{{round(OfferObj.ratio, 3)}} + View
+ {% if len(offers) == 0: %} +
+

No offers found

+
+ {%endif%} +
+ Previous +

Page {{PageNumber}}

+ Next +
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/pages/currencyexchange/view.html b/app/pages/currencyexchange/view.html new file mode 100644 index 0000000..105bc61 --- /dev/null +++ b/app/pages/currencyexchange/view.html @@ -0,0 +1,75 @@ +{% extends '__layout__.html' %} +{% block title %}View Offer{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + Return to Currency Exchange +

Viewing Offer

+ {% if offer.creator_id == AuthenticatedUser.id: %} +

This offer was created by you

+ {% endif %} +
+
+
Offering
+

{% if offer.offer_currency_type == 0: %}R${%else%}T${%endif%}{{offer.offer_value}}

+
+
+
R:T Ratio
+

1:{{round(offer.ratio,3)}}

+
+
+
Requesting
+

{% if offer.offer_currency_type == 1: %}R${%else%}T${%endif%}{{offer.receive_value}}

+
+
+
+

Created: {{offer.created_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+

Expires: {{offer.expires_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+ {% if offer.reciever_id != None: %} +

This order has already been filled

+ {% else: %} + {% if offer.creator_id == AuthenticatedUser.id: %} +
+ + +
+ {%else%} +
+ + +
+ {%endif%} + {%endif%} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/develop.py b/app/pages/develop/develop.py new file mode 100644 index 0000000..56f140c --- /dev/null +++ b/app/pages/develop/develop.py @@ -0,0 +1,2107 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, abort, after_this_request, Response +from app.util import auth, redislock, websiteFeatures, s3helper, transactions +from app.util.redirect import safe_redirect +from app.util.assetvalidation import ValidateClothingImage, ValidatePlaceFile, ValidateMP3File, ValidateMP3AndConvertToOGG +from app.routes.thumbnailer import TakeThumbnail +from app.models.userassets import UserAsset +from app.util.assetversion import CreateNewAssetVersion, GetLatestAssetVersion +from app.util.textfilter import FilterText +from app.util.membership import GetUserMembership +from app.util.placeinfo import ClearUniversePlayingCountCache, ClearPlayingCountCache +from app.enums.MembershipType import MembershipType +from app.enums.ChatStyle import ChatStyle +from app.models.place import Place +from app.models.asset_version import AssetVersion +from app.models.asset import Asset +from app.models.user import User +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.gameservers import GameServer +from app.models.asset_moderation_link import AssetModerationLink +from app.extensions import db, limiter, csrf, user_limiter +from app.models.place_icon import PlaceIcon +from app.models.asset_thumbnail import AssetThumbnail +from app.models.gamepass_link import GamepassLink +from app.models.place_developer_product import DeveloperProduct +from app.models.product_receipt import ProductReceipt +from app.models.groups import Group, GroupRole, GroupRolePermission, GroupMember +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.universe import Universe +from app.enums.AssetType import AssetType +from app.enums.TransactionType import TransactionType +from app.enums.PlaceYear import PlaceYear +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.services import economy, groups +from datetime import datetime, timedelta +from io import BytesIO +from config import Config +import requests +import logging +import hashlib +import os +import random +import time +import math + +config = Config() + +DevelopPagesRoute = Blueprint('DevelopPagesRoute', __name__, template_folder='pages') + +def CountAlphanumericCharacters( string : str ): + count = 0 + for char in string: + if char.isalnum(): + count += 1 + return count + +@DevelopPagesRoute.errorhandler( 429 ) +def handle_ratelimit_reached(e): + flash("You are being rate limited, please try again later", "error") + return redirect(safe_redirect(fallback_url="/develop")) + +@DevelopPagesRoute.route('/develop') +@auth.authenticated_required +def develop(): + PageType = request.args.get('type', default = 9, type = int) + PageNumber = request.args.get('page', default = 1, type = int) + GroupIdContext = request.args.get('groupId', default = None, type = int) + + AuthenticatedUser : User = auth.GetCurrentUser() + + CreatorId : int = AuthenticatedUser.id + CreatorType : int = 0 + + if GroupIdContext is not None and GroupIdContext > 0: + GroupContext : Group = Group.query.filter_by(id=GroupIdContext).first() + if GroupContext is None: + return abort(404) + ViewerGroupRole : GroupRole | None = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupContext ) + if ViewerGroupRole is None: + return abort(403) + ViewerRolePermissions : GroupRolePermission = groups.GetRolesetPermission( ViewerGroupRole ) + if not ViewerRolePermissions.manage_items: + return abort(403) + + CreatorId = GroupContext.id + CreatorType = 1 + else: + GroupIdContext = None + + UserGroups : list[Group] = Group.query.join(GroupMember, GroupMember.group_id == Group.id).filter(GroupMember.user_id == AuthenticatedUser.id).join(GroupRolePermission, GroupRolePermission.group_role_id == GroupMember.group_role_id).filter(GroupRolePermission.manage_items == True).all() + + PreviousPage = -1 + if PageNumber > 1: + PreviousPage = PageNumber - 1 + NextPage = -1 + if PageType == 9: + # Get all the places + UserPlaces : list[Asset] = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Place ).join( Universe, Universe.root_place_id == Asset.id ).filter( Universe.id != None ).order_by( Universe.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserPlaces.has_next: + NextPage = PageNumber + 1 + def GetPlaceUniverse( AssetObj : Asset ): + return Universe.query.filter_by( root_place_id = AssetObj.id ).first() + return render_template('develop/subpages/games.html', PageType=PageType, UserPlaces=UserPlaces.items, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups, GetPlaceUniverse = GetPlaceUniverse) + elif PageType == 11: + # Get all the clothing + UserClothing : list[Asset] = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Shirt ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserClothing.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/shirts.html', PageType=PageType, UserClothing=UserClothing.items, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 12: + UserClothing : list[Asset] = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Pants ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserClothing.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/pants.html', PageType=PageType, UserClothing=UserClothing.items, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 2: + UserClothing = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.TShirt ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserClothing.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/tshirt.html', PageType=PageType, UserClothing=UserClothing, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 24: + UserAnimation = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Animation ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserAnimation.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/animation.html', PageType=PageType, UserAnimation=UserAnimation, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 3: + UserSounds = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Audio ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserSounds.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/sound.html', PageType=PageType, UserSounds=UserSounds, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 1: + UserImages = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Image ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserImages.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/image.html', PageType=PageType, UserImages=UserImages, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + else: + return redirect(url_for("DevelopPagesRoute.develop")) + +def ValidateAnimationFile(file): + if not file or not file.filename: + return False + + allowed_extensions = {'.rbxm', '.rbxmx', '.rbxl', '.rbxlx'} + ext = os.path.splitext(file.filename.lower())[1] + + if ext not in allowed_extensions: + return False + + file.seek(0, os.SEEK_END) + file_size = file.tell() + file.seek(0) + + if file_size > 5 * 1024 * 1024: + return False + + return True + +@DevelopPagesRoute.route("/develop/create/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("15/minute") +@user_limiter.limit("15/minute") +def create(ReqAssetType): + if ReqAssetType not in [9, 11, 12, 2, 3, 1, 24]: + flash("Invalid asset type", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + if not websiteFeatures.GetWebsiteFeature("AssetCreation"): + flash("Asset creation is temporarily disabled", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + AuthenticatedUser : User = auth.GetCurrentUser() + TargetCreatorObj : User | Group = AuthenticatedUser + CreatorType = 0 + + groupIdContext = request.form.get(key = "groupIdContext", default = None, type = int) + if groupIdContext is not None and groupIdContext > 0: + GroupContext : Group = Group.query.filter_by(id=groupIdContext).first() + if GroupContext is None: + return abort(404) + ViewerGroupRole : GroupRole | None = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupContext ) + if ViewerGroupRole is None: + return abort(403) + ViewerRolePermissions : GroupRolePermission = groups.GetRolesetPermission( ViewerGroupRole ) + if not ViewerRolePermissions.manage_items: + return abort(403) + if not ViewerRolePermissions.create_items: + flash("You do not have permission to create assets in this group", "error") + return redirect(url_for("DevelopPagesRoute.develop", groupId=groupIdContext, type=ReqAssetType)) + if ReqAssetType == 9 and not ViewerRolePermissions.manage_group_games: + flash("You do not have permission to create places in this group", "error") + return redirect(url_for("DevelopPagesRoute.develop", groupId=groupIdContext, type=ReqAssetType)) + + TargetCreatorObj = GroupContext + CreatorType = 1 + + CreateLockName = f"createasset_{TargetCreatorObj.id}" + CreateLock = redislock.acquire_lock(CreateLockName, acquire_timeout=10, lock_timeout=1) + if CreateLock is None: + flash("You are creating too many assets at once", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + @after_this_request + def handle_group_context( response : Response ): + if groupIdContext is not None and groupIdContext > 0: + response = redirect(url_for("DevelopPagesRoute.develop", groupId=groupIdContext, type=ReqAssetType)) + return response + + if ReqAssetType == 9: + # Check for the amount of places the user has + AmountOfPlaces = Universe.query.filter_by( creator_id = TargetCreatorObj.id, creator_type = CreatorType ).count() + MaxPlaces = 2 + if CreatorType == 0: + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.BuildersClub: + MaxPlaces = 6 + elif UserCurrentMembership == MembershipType.TurboBuildersClub: + MaxPlaces = 12 + elif UserCurrentMembership == MembershipType.OutrageousBuildersClub: + MaxPlaces = 32 + else: + MaxPlaces = 10 + + if AmountOfPlaces >= MaxPlaces: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"You can only have {str(MaxPlaces)} places max", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + HasCreatedPlaceRecently : bool = Universe.query.filter_by( creator_id = TargetCreatorObj.id, creator_type = CreatorType ).filter(Universe.created_at > datetime.utcnow() - timedelta( hours = 1 )).first() is not None + if HasCreatedPlaceRecently: + redislock.release_lock(CreateLockName, CreateLock) + flash("You can only create one place every hour", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + NewAsset : Asset = Asset( + name = f"Untitled Place", + description = "Check out my new place!", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Place, + moderation_status=0, + created_at=datetime.utcnow() + ) + db.session.add(NewAsset) + db.session.commit() + + NewPlace : Place = Place( + placeid = NewAsset.id, + ) + db.session.add(NewPlace) + db.session.commit() + + DefaultPlaceFile = open("./app/files/Baseplate.rbxlx", "rb") + PlaceFileContent = DefaultPlaceFile.read() + DefaultPlaceFile.close() + DefaultPlaceFileHash = hashlib.sha512(PlaceFileContent).hexdigest() + if not s3helper.DoesKeyExist(DefaultPlaceFileHash): + s3helper.UploadBytesToS3(PlaceFileContent, DefaultPlaceFileHash) + + NewAssetVersion : AssetVersion = CreateNewAssetVersion( NewAsset, DefaultPlaceFileHash, UploadedBy = AuthenticatedUser) + if NewAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewAsset) + db.session.delete(NewPlace) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + TakeThumbnail( AssetId=NewAsset.id, isIcon=False ) + TakeThumbnail( AssetId=NewAsset.id, isIcon=True ) + + NewUniverse : Universe = Universe( + root_place_id = NewAsset.id, + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + place_rig_choice = PlaceRigChoice.UserChoice, + place_year = PlaceYear.Sixteen + ) + db.session.add(NewUniverse) + db.session.commit() + + NewPlace.parent_universe_id = NewUniverse.id + db.session.commit() + + return redirect(url_for("DevelopPagesRoute.develop")) + + if ReqAssetType == 1: #Image + ImageName = request.form.get("name", default = "Image", type = str) + if ImageName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if ImageName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if len(ImageName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + ImageName = FilterText(ImageName) + ImageFile = request.files.get("file", default = None) + ImageObj = ValidateClothingImage( ImageFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if ImageObj == False: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid image file, Please make sure it is a PNG file and lesser than 3MB", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if ImageFile.content_length > 1024 * 1024 * 3: + redislock.release_lock(CreateLockName, CreateLock) + flash("Image file is too large, max: 3MB", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if ImageObj.size[0] > 2048 or ImageObj.size[1] > 2048: + redislock.release_lock(CreateLockName, CreateLock) + flash("Image resolution is too large, max: 2048 x 2048", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + + NewImageAsset : Asset = Asset( + name = ImageName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + ImageFile = BytesIO() + ImageObj.save(ImageFile, format="PNG") + + ImageFile.seek(0) + ImageFileContent = ImageFile.read() + ImageFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(ImageFileHash): + s3helper.UploadBytesToS3(ImageFileContent, ImageFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, ImageFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + + if ReqAssetType == 11: #shirt + ShirtName = request.form.get("name", default = "Shirt", type = str) + if ShirtName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + if ShirtName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + if len(ShirtName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + ShirtName = FilterText(ShirtName) + + ShirtFile = request.files.get("file", default = None) + isValidClothingFile = ValidateClothingImage( ShirtFile, returnImage = True ) + if not isValidClothingFile: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid shirt file, Please make sure it is a PNG file 585 x 559 and lesser than 1mb", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + NewImageAsset : Asset = Asset( + name = "Image", + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + ShirtFile = BytesIO() + isValidClothingFile.save(ShirtFile, format="PNG") + + ShirtFile.seek(0) + ImageFileContent = ShirtFile.read() + ShirtFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(ShirtFileHash): + s3helper.UploadBytesToS3(ImageFileContent, ShirtFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, ShirtFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + ShirtTemplateFile = open("./app/files/Shirt.rbxmx", "r") + ShirtTemplateFileContent = ShirtTemplateFile.read() + ShirtTemplateFile.close() + ShirtTemplateFileContent = ShirtTemplateFileContent.format(ShirtImageId = str(NewImageAsset.id)) + ShirtTemplateFileHash = hashlib.sha512(ShirtTemplateFileContent.encode()).hexdigest() + if not s3helper.DoesKeyExist(ShirtTemplateFileHash): + s3helper.UploadBytesToS3(ShirtTemplateFileContent, ShirtTemplateFileHash) + + NewShirtAsset : Asset = Asset( + name = ShirtName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Shirt, + created_at=datetime.utcnow() + ) + db.session.add(NewShirtAsset) + db.session.commit() + + NewShirtAssetVersion : AssetVersion = CreateNewAssetVersion( NewShirtAsset, ShirtTemplateFileHash, UploadedBy = AuthenticatedUser) + if NewShirtAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewShirtAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + NewAssetModerationLink : AssetModerationLink = AssetModerationLink( + ParentAssetId = NewShirtAsset.id, + ChildAssetId = NewImageAsset.id + ) + db.session.add(NewAssetModerationLink) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewShirtAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewShirtAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + if ReqAssetType == 12: #pants + PantsName = request.form.get("name", default = "Pants", type = str) + if PantsName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + if PantsName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + if len(PantsName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + PantsName = FilterText(PantsName) + + PantsFile = request.files.get("file", default = None) + isValidClothingFile = ValidateClothingImage( PantsFile, returnImage = True ) + if not isValidClothingFile: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid pants file, Please make sure it is a PNG file 585 x 559 and lesser than 1mb", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + NewImageAsset : Asset = Asset( + name = "Image", + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + PantsFile = BytesIO() + isValidClothingFile.save(PantsFile, format="PNG") + + PantsFile.seek(0) + ImageFileContent = PantsFile.read() + PantsFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(PantsFileHash): + s3helper.UploadBytesToS3(ImageFileContent, PantsFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, PantsFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + PantsTemplateFile = open("./app/files/Pants.rbxmx", "r") + PantsTemplateFileContent = PantsTemplateFile.read() + PantsTemplateFile.close() + PantsTemplateFileContent = PantsTemplateFileContent.format(PantsImageId = str(NewImageAsset.id)) + PantsTemplateFileHash = hashlib.sha512(PantsTemplateFileContent.encode()).hexdigest() + if not s3helper.DoesKeyExist(PantsTemplateFileHash): + s3helper.UploadBytesToS3(PantsTemplateFileContent, PantsTemplateFileHash) + + NewPantsAsset : Asset = Asset( + name = PantsName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Pants, + created_at=datetime.utcnow() + ) + db.session.add(NewPantsAsset) + db.session.commit() + + NewPantsAssetVersion : AssetVersion = CreateNewAssetVersion( NewPantsAsset, PantsTemplateFileHash, UploadedBy = AuthenticatedUser) + if NewPantsAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewPantsAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + NewAssetModerationLink : AssetModerationLink = AssetModerationLink( + ParentAssetId = NewPantsAsset.id, + ChildAssetId = NewImageAsset.id + ) + db.session.add(NewAssetModerationLink) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewPantsAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewPantsAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + if ReqAssetType == 24: # Animation + AnimationName = request.form.get("name", default="Animation", type=str) + + if not AnimationName or AnimationName.strip() == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=24)) + + if len(AnimationName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=24)) + + AnimationName = FilterText(AnimationName) + + AnimationFile = request.files.get("file", default=None) + if not AnimationFile or AnimationFile.filename == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No file was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=24)) + + isValidAnimation = ValidateAnimationFile(AnimationFile) + if not isValidAnimation: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid animation file. Please upload a valid .rbxm, .rbxmx, or .rbxl file under 5MB.", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=24)) + + NewAnimationAsset: Asset = Asset( + name=AnimationName, + description="", + creator_id=TargetCreatorObj.id, + creator_type=CreatorType, + asset_type=AssetType.Animation, + created_at=datetime.utcnow() + ) + db.session.add(NewAnimationAsset) + db.session.commit() + + AnimationFile.seek(0) + AnimationFileContent = AnimationFile.read() + AnimationFileHash = hashlib.sha512(AnimationFileContent).hexdigest() + + if not s3helper.DoesKeyExist(AnimationFileHash): + s3helper.UploadBytesToS3(AnimationFileContent, AnimationFileHash, contentType="application/octet-stream") + + NewAnimationAssetVersion: AssetVersion = CreateNewAssetVersion( + NewAnimationAsset, + AnimationFileHash, + UploadedBy=AuthenticatedUser + ) + + if NewAnimationAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewAnimationAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=24)) + + NewUserAsset: UserAsset = UserAsset( + userid=AuthenticatedUser.id, + assetid=NewAnimationAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + return redirect(url_for("DevelopPagesRoute.develop", type=24)) + if ReqAssetType == 2: #tshirt + TShirtName = request.form.get("name", default = "T-Shirt", type = str) + if TShirtName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + if TShirtName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + if len(TShirtName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + TShirtName = FilterText(TShirtName) + + TShirtFile = request.files.get("file", default = None) + isValidClothingFile = ValidateClothingImage( TShirtFile, verifyResolution = False, returnImage = True ) + if not isValidClothingFile: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid TShirt file, Please make sure it is a PNG file and lesser than 1mb", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + + NewImageAsset : Asset = Asset( + name = "Image", + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + TShirtFile = BytesIO() + isValidClothingFile.save(TShirtFile, format="PNG") + + TShirtFile.seek(0) + ImageFileContent = TShirtFile.read() + TShirtFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(TShirtFileHash): + s3helper.UploadBytesToS3(ImageFileContent, TShirtFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, TShirtFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + TShirtTemplateFile = open("./app/files/TShirt.rbxmx", "r") + TShirtTemplateFileContent = TShirtTemplateFile.read() + TShirtTemplateFile.close() + TShirtTemplateFileContent = TShirtTemplateFileContent.format(TShirtImageId = str(NewImageAsset.id)) + TShirtTemplateFileHash = hashlib.sha512(TShirtTemplateFileContent.encode()).hexdigest() + if not s3helper.DoesKeyExist(TShirtTemplateFileHash): + s3helper.UploadBytesToS3(TShirtTemplateFileContent, TShirtTemplateFileHash) + + NewTShirtAsset : Asset = Asset( + name = TShirtName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.TShirt, + created_at=datetime.utcnow() + ) + db.session.add(NewTShirtAsset) + db.session.commit() + + NewTShirtAssetVersion : AssetVersion = CreateNewAssetVersion( NewTShirtAsset, TShirtTemplateFileHash, UploadedBy = AuthenticatedUser) + if NewTShirtAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewTShirtAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + + NewAssetModerationLink : AssetModerationLink = AssetModerationLink( + ParentAssetId = NewTShirtAsset.id, + ChildAssetId = NewImageAsset.id + ) + db.session.add(NewAssetModerationLink) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewTShirtAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewTShirtAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + + + if ReqAssetType == 3: #sound + SoundName = request.form.get("name", default = "Sound", type = str) + if SoundName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + if SoundName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + if len(SoundName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + SoundName = FilterText(SoundName) + + SoundFile = request.files.get("file", default = None) + if SoundFile is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No file was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + if SoundFile.filename == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No file was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + # soundDuration = ValidateMP3File( SoundFile ) + # if soundDuration is None: + # redislock.release_lock(CreateLockName, CreateLock) + # flash("Invalid sound file, Please make sure it is a MP3 file and lesser than 4mb", "error") + # return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + + if SoundFile.content_length > 1024 * 1024 * 8: + redislock.release_lock(CreateLockName, CreateLock) + flash("Sound file is too large, max: 8MB", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + try: + ConvertedSoundData, soundDuration = ValidateMP3AndConvertToOGG( SoundFile ) + except Exception as e: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"Failed to validate file: {str(e)}", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + if soundDuration > 60 * 8: + redislock.release_lock(CreateLockName, CreateLock) + flash("Sound is too long, max: 8 minutes", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + soundDurationHalfed = soundDuration + if soundDuration > 20: + soundDurationHalfed = 20 + ((soundDuration - 20) * 0.5) + + + + creationCost = math.floor(max(20, soundDurationHalfed)) + robuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if robuxBalance < creationCost: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"You do not have enough robux to create this sound, Required: R${str(creationCost)}", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + try: + economy.DecrementTargetBalance(AuthenticatedUser, creationCost, 0) + except economy.EconomyLockAcquireException: + redislock.release_lock(CreateLockName, CreateLock) + flash("Failed to create sound, Please try again later", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + except economy.InsufficientFundsException: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"You do not have enough robux to create this sound, Required: R${str(creationCost)}", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + except Exception as e: + redislock.release_lock(CreateLockName, CreateLock) + logging.error(f"Failed to create sound, {str(e)}") + flash("Failed to create sound, Please try again later", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + #transactions.CreateTransaction(User.query.filter_by(id=1).first(), AuthenticatedUser, creationCost, 0, TransactionType.Purchase, None, "Created Sound") + transactions.CreateTransaction( + Sender = AuthenticatedUser, + CurrencyAmount = creationCost, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + CustomText = "Created Sound" + ) + + #SoundFile.seek(0) + SoundFileContent = ConvertedSoundData + SoundFileHash = hashlib.sha512(SoundFileContent).hexdigest() + + if not s3helper.DoesKeyExist(SoundFileHash): + s3helper.UploadBytesToS3(SoundFileContent, SoundFileHash, contentType="audio/ogg") + + NewSoundAsset : Asset = Asset( + name = SoundName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Audio, + created_at=datetime.utcnow() + ) + db.session.add(NewSoundAsset) + db.session.commit() + + NewSoundAssetVersion : AssetVersion = CreateNewAssetVersion( NewSoundAsset, SoundFileHash, UploadedBy = AuthenticatedUser) + if NewSoundAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewSoundAsset) + db.session.commit() + flash("Failed to create a new asset version, please report this error to our discord server", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewSoundAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewSoundAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + +def isUserAllowedtoViewPage( ViewerUser : User, RelatedObj : Asset | Universe, abortOnFail : bool = True, isGameContext : bool = True ): + if RelatedObj is None: + if abortOnFail: + abort(404) + else: + return False + if RelatedObj.creator_id != ViewerUser.id and RelatedObj.creator_type == 0: + if abortOnFail: + abort(404) + else: + return False + elif RelatedObj.creator_type == 1: + ViewerGroupRole : GroupRole | None = groups.GetUserRolesetInGroup( ViewerUser, RelatedObj.creator_id ) + if ViewerGroupRole is None: + if abortOnFail: + abort(404) + else: + return False + ViewerRolePermissions : GroupRolePermission = groups.GetRolesetPermission( ViewerGroupRole ) + if not ViewerRolePermissions.manage_items: + if abortOnFail: + abort(404) + else: + return False + if not ViewerRolePermissions.manage_group_games: + if abortOnFail: + abort(404) + else: + return False + if type(RelatedObj) != Universe: + if RelatedObj.asset_type != AssetType.Place and isGameContext: + if abortOnFail: + abort(404) + else: + return False + if RelatedObj.moderation_status != 0: + if abortOnFail: + abort(403) + else: + return False + + return True + +@DevelopPagesRoute.route("/develop/universes//manage", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniversePage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/manage.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + PlaceName : str = request.form.get("name", default="", type=str) + PlaceDescription : str = request.form.get("description", default="", type=str) + try: + AssetYear : PlaceYear = PlaceYear(request.form.get("place_year", default=2018, type=int)) + except ValueError: + flash("Invalid year", "error") + return redirect(f"/develop/universes/{universeid}/manage") + if AssetYear not in [ PlaceYear.Eighteen, PlaceYear.TwentyOne ]: + flash("Invalid year", "error") + return redirect(f"/develop/universes/{universeid}/manage") + if AssetYear in [ PlaceYear.Sixteen ]: + flash("2016 has been disabled girl", "error") + return redirect(f"/develop/universes/{universeid}/manage") + if len(PlaceName) < 3 or len(PlaceName) > 50: + flash("Place name has to be between 3 to 50 characters long", "error") + return redirect(f"/develop/universes/{universeid}/manage") + if len(PlaceDescription) < 3 or len(PlaceDescription) > 700: + flash("Place description has to be between 3 to 700 characters long", "error") + return redirect(f"/develop/universes/{universeid}/manage") + + if PlaceDescription.count("\n") > 10: + flash("Place description can only have 10 or less newlines", "error") + return redirect(f"/develop/universes/{universeid}/manage") + + if UniverseObj.place_year != AssetYear: + # we check active servers + TotalServersActive: int = PlaceServer.query.join( + Place, Place.placeid == PlaceServer.serverPlaceId + ).join( + Universe, Place.parent_universe_id == Universe.id + ).filter( + Universe.id == universeid + ).count() + + if TotalServersActive > 0: + flash("You cannot change the place year of the universe while there are active servers", "error") + return redirect(f"/develop/universes/{universeid}/manage") + UniverseObj.place_year = AssetYear + + all_places = Place.query.filter_by(parent_universe_id=universeid).all() + for place in all_places: + place.placeyear = AssetYear + place.updated_at = datetime.utcnow() + + flash("Successfully updated place year", "success") + + PlaceName = FilterText(PlaceName) + PlaceDescription = FilterText(PlaceDescription) + + RootPlaceAssetObj.name = PlaceName + RootPlaceAssetObj.description = PlaceDescription + RootPlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + + db.session.commit() + + flash("Successfully updated place", "success") + return redirect(f"/develop/universes/{universeid}/manage") + +@DevelopPagesRoute.route("/develop/universes//access", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseAccessPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/access.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + MinimumAccountAge : int = request.form.get("minaccountage", default=0, type=int) + if MinimumAccountAge < 0 or MinimumAccountAge > 365: + flash("Minimum account age has to be between 0 to 365", "error") + return redirect(f"/develop/universes/{universeid}/access") + isPublic : bool = request.form.get("ispublic") == "on" + BuildersClubRequired : bool = request.form.get("bcrequired") == "on" + + UniverseObj.minimum_account_age = MinimumAccountAge + UniverseObj.is_public = isPublic + UniverseObj.bc_required = BuildersClubRequired + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + + flash("Successfully updated place access", "success") + return redirect(f"/develop/universes/{universeid}/access") + +@DevelopPagesRoute.route("/develop/universes//places", methods=["GET"]) +@auth.authenticated_required +def ManageUniversePlacesPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + TotalAmountPlacesCreated : int = Place.query.filter_by(parent_universe_id = universeid).count() + + universePlaces : list[Place] = Place.query.filter_by(parent_universe_id = universeid).order_by(Place.placeid.asc()).all() + + return render_template("develop/universes/places.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, universePlaces=universePlaces, TotalAmountPlacesCreated=TotalAmountPlacesCreated) + +@DevelopPagesRoute.route("/develop/universes//create-place", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniversePlacePage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + TotalAmountPlacesCreated : int = Place.query.filter_by(parent_universe_id = universeid).count() + + if request.method == "GET": + return render_template("develop/universes/create-place.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, TotalAmountPlacesCreated=TotalAmountPlacesCreated) + else: + if TotalAmountPlacesCreated >= 10: + flash("You can only have 10 places in a universe", "error") + return redirect(f"/develop/universes/{universeid}/places") + + place_creation_lock_name = f"place_creation_lock_{universeid}" + place_creation_lock = redislock.acquire_lock( lock_name = place_creation_lock_name, acquire_timeout = 5, lock_timeout = 3 ) + if place_creation_lock is None: + flash("Failed to create place, please try again later", "error") + return redirect(f"/develop/universes/{universeid}/places") + + NewPlaceAsset : Asset = Asset( + name = f"Untitled Place", + description = "Check out my new place!", + creator_id = UniverseObj.creator_id, + creator_type = UniverseObj.creator_type, + asset_type = AssetType.Place, + moderation_status = 0, + created_at=datetime.utcnow(), + updated_at=datetime.utcnow() + ) + + db.session.add(NewPlaceAsset) + db.session.commit() + + NewPlace : Place = Place( + placeid = NewPlaceAsset.id, + parent_universe_id = universeid + ) + db.session.add(NewPlace) + db.session.commit() + + DefaultPlaceFile = open("./app/files/Baseplate.rbxlx", "rb") + PlaceFileContent = DefaultPlaceFile.read() + DefaultPlaceFile.close() + DefaultPlaceFileHash = hashlib.sha512(PlaceFileContent).hexdigest() + if not s3helper.DoesKeyExist(DefaultPlaceFileHash): + s3helper.UploadBytesToS3(PlaceFileContent, DefaultPlaceFileHash) + + redislock.release_lock(place_creation_lock_name, place_creation_lock) + + NewAssetVersion : AssetVersion = CreateNewAssetVersion( NewPlaceAsset, DefaultPlaceFileHash, UploadedBy = AuthenticatedUser) + if NewAssetVersion is None: + db.session.delete(NewPlaceAsset) + db.session.delete(NewPlace) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(f"/develop/universes/{universeid}/places") + + TakeThumbnail( AssetId=NewPlaceAsset.id, isIcon=False ) + TakeThumbnail( AssetId=NewPlaceAsset.id, isIcon=True ) + + flash("Successfully created a new place", "success") + + return redirect(f"/develop/universes/{universeid}/places") + +@DevelopPagesRoute.route("/develop/universes//gamepasses", methods=["GET"]) +@auth.authenticated_required +def ManageUniverseGamepassesPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + Gamepasses : list[GamepassLink] = GamepassLink.query.filter_by(universe_id = UniverseObj.id).all() + + return render_template("develop/universes/gamepasses.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, Gamepasses=Gamepasses) + +@DevelopPagesRoute.route("/develop/universes//gamepass/", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseGamepassPage( universeid : int, gamepassid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + GamepassObj : GamepassLink = GamepassLink.query.filter_by( gamepass_id = gamepassid, universe_id = UniverseObj.id ).first() + if GamepassObj is None: + abort(404) + + if request.method == "GET": + return render_template("develop/universes/edit-gamepass.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, GamepassObj=GamepassObj) + else: + AssetName = request.form.get("pass-name", default = "", type = str) + AssetDescription = request.form.get("pass-description", default = "", type = str) + isForSale = request.form.get("is-for-sale", default = "off") == "on" + AssetRobuxPrice = request.form.get("robux-cost", default = 0, type = int) + + if AssetName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if len(AssetName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if CountAlphanumericCharacters(AssetName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + + if AssetDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if len(AssetDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + + if (AssetRobuxPrice < 1 or AssetRobuxPrice > 1000000 ): + flash("Robux price has to be between 1 to 1,000,000", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub and isForSale: + flash("You must be Builders Club to sell items", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + + AssetName = FilterText(AssetName) + AssetDescription = FilterText(AssetDescription) + + NewIconFile = request.files.get("icon-file", default = None) + if NewIconFile is not None: + if NewIconFile.filename != "": + if NewIconFile.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + IconImage = ValidateClothingImage( NewIconFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if IconImage is False or IconImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if IconImage.width != IconImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if IconImage.width < 128 or IconImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + NewIconFile = BytesIO() + IconImage.save(NewIconFile, format="PNG") + + NewIconFile.seek(0) + IconImageHash = hashlib.sha512(NewIconFile.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + NewIconFile.seek(0) + s3helper.UploadBytesToS3(NewIconFile.read(), IconImageHash, contentType="image/png") + LatestAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=GamepassObj.gamepass_id).order_by(AssetThumbnail.asset_version_id.desc()).first() + if LatestAssetThumbnail is None: + flash("Failed to get latest asset thumbnail", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + LatestAssetThumbnail.content_hash = IconImageHash + LatestAssetThumbnail.created_at = datetime.utcnow() + LatestAssetThumbnail.moderation_status = 1 + db.session.commit() + flash("Successfully updated gamepass icon", "success") + + GamepassObj.gamepass.name = AssetName + GamepassObj.gamepass.description = AssetDescription + GamepassObj.gamepass.is_for_sale = isForSale + GamepassObj.gamepass.price_robux = AssetRobuxPrice + GamepassObj.gamepass.updated_at = datetime.utcnow() + db.session.commit() + flash("Successfully updated gamepass settings", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + +@DevelopPagesRoute.route("/develop/universes//create-gamepass", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniverseGamepassPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/create-gamepass.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + gamepassName = request.form.get("name", default="", type=str) + gamepassDescription = request.form.get("description", default="", type=str) + file = request.files.get("file", default=None) + + if gamepassName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if len(gamepassName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if CountAlphanumericCharacters(gamepassName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + if gamepassDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if len(gamepassDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + if file is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if file.filename == "": + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + GamepassCount : int = GamepassLink.query.filter_by(universe_id = UniverseObj.id).count() + if GamepassCount >= 15: + flash("You cannot create more than 15 gamepasses for a place", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + gamepassName = FilterText(gamepassName) + gamepassDescription = FilterText(gamepassDescription) + + file = BytesIO() + FileImage.save(file, format="png") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewGamepassObj : Asset = Asset( + name = gamepassName, + description = gamepassDescription, + creator_id = UniverseObj.creator_id, + creator_type = UniverseObj.creator_type, + asset_type = AssetType.GamePass, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 0 + ) + db.session.add(NewGamepassObj) + db.session.commit() + + NewGamepassLink : GamepassLink = GamepassLink( + place_id = UniverseObj.root_place_id, + universe_id = UniverseObj.id, + gamepass_id = NewGamepassObj.id, + creator_id = AuthenticatedUser.id + ) + db.session.add(NewGamepassLink) + db.session.commit() + + EmptyHash = hashlib.sha512(b"").hexdigest() + NewGamepassVersion : AssetVersion = CreateNewAssetVersion( NewGamepassObj, EmptyHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewGamepassVersion is None: + db.session.delete(NewGamepassObj) + db.session.delete(NewGamepassLink) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + NewGamepassThumbnail : AssetThumbnail = AssetThumbnail( + asset_id = NewGamepassObj.id, + asset_version_id = NewGamepassVersion.version, + content_hash = FileImageHash, + created_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewGamepassThumbnail) + db.session.commit() + + flash("Successfully created gamepass", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepasses") + +@DevelopPagesRoute.route("/develop/universes//developer-products", methods=["GET"]) +@auth.authenticated_required +def ManageUniverseDeveloperProductsPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + DeveloperProducts : list[DeveloperProduct] = DeveloperProduct.query.filter_by(universe_id = UniverseObj.id).all() + + return render_template("develop/universes/developerproducts.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, DeveloperProducts=DeveloperProducts) + +@DevelopPagesRoute.route("/develop/universes//create-product", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniveseDeveloperProductPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/create-product.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + productName = request.form.get("name", default="", type=str) + productDescription = request.form.get("description", default="", type=str) + file = request.files.get("file", default=None) + + if productName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if len(productName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if CountAlphanumericCharacters(productName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + if productDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if len(productDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + if file is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if file.filename == "": + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + productName = FilterText(productName) + productDescription = FilterText(productDescription) + + file = BytesIO() + FileImage.save(file, format="png") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "DeveloperProductImage", + description = "DeveloperProduct icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + NewDeveloperProductObj : DeveloperProduct = DeveloperProduct( + placeid = UniverseObj.root_place_id, + name = productName, + description = productDescription, + iconimage_assetid = NewImageAssetObj.id, + creator_id = AuthenticatedUser.id, + universe_id = UniverseObj.id + ) + TakeThumbnail( AssetId=NewImageAssetObj.id, isIcon=False ) + + db.session.add(NewDeveloperProductObj) + db.session.commit() + + flash("Successfully created developer product", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products") + +@DevelopPagesRoute.route("/develop/universes//developer-products/", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseDeveloperProductPage( universeid : int, productid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + DeveloperProductObj : DeveloperProduct = DeveloperProduct.query.filter_by(universe_id = UniverseObj.id, productid = productid).first() + if DeveloperProductObj is None: + abort(404) + + if request.method == "GET": + return render_template("develop/universes/edit-product.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, ProductObj=DeveloperProductObj) + else: + productName = request.form.get("product-name", default="", type=str) + productDescription = request.form.get("product-description", default="", type=str) + file = request.files.get("icon-file", default=None) + is_for_sale = request.form.get("is-for-sale", default="off") == "on" + robux_price = request.form.get("robux-cost", default=0, type=int) + + if productName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if len(productName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if CountAlphanumericCharacters(productName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + if productDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if len(productDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + if (robux_price < 1 or robux_price > 1000000 ): + flash("Robux price has to be between 1 to 1,000,000", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub and is_for_sale: + flash("You must be a Builders Club member to sell items", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + productName = FilterText(productName) + productDescription = FilterText(productDescription) + + if file is not None: + if file.filename != "": + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + file = BytesIO() + FileImage.save(file, format="PNG") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "DeveloperProductImage", + description = "DeveloperProduct icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + TakeThumbnail( AssetId = NewImageAssetObj.id, isIcon=False ) + DeveloperProductObj.iconimage_assetid = NewImageAssetObj.id + + flash("Successfully updated developer product icon", "success") + + DeveloperProductObj.name = productName + DeveloperProductObj.description = productDescription + DeveloperProductObj.is_for_sale = is_for_sale + DeveloperProductObj.robux_price = robux_price + DeveloperProductObj.updated_at = datetime.utcnow() + db.session.commit() + flash("Successfully updated developer product settings", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + +@DevelopPagesRoute.route("/develop/universes//badges", methods=["GET"]) +@auth.authenticated_required +def ManageUniverseBadgesPage( universeid : int ): + from app.pages.games.games import GetTotalBadgeAwardedCount, GetBadgeAwardedPastDay # Avoid circular import + + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + Badges : list[PlaceBadge] = PlaceBadge.query.filter_by(universe_id = UniverseObj.id).all() + + return render_template("develop/universes/badges.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, Badges=Badges, GetTotalBadgeAwardedCount=GetTotalBadgeAwardedCount, GetBadgeAwardedPastDay=GetBadgeAwardedPastDay) + +@DevelopPagesRoute.route("/develop/universes//create-badge", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniverseBadgePage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/create-badge.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + BadgeName = request.form.get("name", default = "", type = str) + BadgeDescription = request.form.get("description", default = "", type = str) + file = request.files.get("icon-file", default=None) + + if BadgeName == "": + flash("Badge name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if len(BadgeName) > 35: + flash("Badge name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if CountAlphanumericCharacters(BadgeName) < 3: + flash("Badge name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + if BadgeDescription == "": + flash("Badge description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if len(BadgeDescription) > 128: + flash("Badge description cannot be longer than 128 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if CountAlphanumericCharacters(BadgeDescription) < 3: + flash("Badge description must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + BadgeName = FilterText(BadgeName) + BadgeDescription = FilterText(BadgeDescription) + + TotalBadgeCount : int = PlaceBadge.query.filter_by(universe_id = UniverseObj.id).count() + if TotalBadgeCount >= 25: + flash("You cannot create more than 25 badges for a place", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + if file is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if file.filename == "": + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + file = BytesIO() + FileImage.save(file, format="PNG") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "BadgeImage", + description = "Badge icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + TakeThumbnail( AssetId = NewImageAssetObj.id, isIcon=False ) + NewBadgeObj : PlaceBadge = PlaceBadge( + associated_place_id = UniverseObj.root_place_id, + name = BadgeName, + description = BadgeDescription, + icon_image_id = NewImageAssetObj.id, + universe_id = UniverseObj.id + ) + db.session.add(NewBadgeObj) + db.session.commit() + + flash("Successfully created badge", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/badges") + +@DevelopPagesRoute.route("/develop/universes//badges/", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseBadgePage( universeid : int, badgeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( universe_id = UniverseObj.id, id = badgeid ).first() + if BadgeObj is None: + abort(404) + + if request.method == "GET": + return render_template("develop/universes/edit-badge.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, BadgeObj=BadgeObj) + else: + BadgeName = request.form.get("badge-name", default = "", type = str) + BadgeDescription = request.form.get("badge-description", default = "", type = str) + + if BadgeName == "": + flash("Badge name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if len(BadgeName) > 35: + flash("Badge name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if CountAlphanumericCharacters(BadgeName) < 3: + flash("Badge name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + + if BadgeDescription == "": + flash("Badge description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if len(BadgeDescription) > 128: + flash("Badge description cannot be longer than 128 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if CountAlphanumericCharacters(BadgeDescription) < 3: + flash("Badge description must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + + BadgeName = FilterText(BadgeName) + BadgeDescription = FilterText(BadgeDescription) + file = request.files.get("icon-file", default=None) + + if file is not None: + if file.filename != "": + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + file = BytesIO() + FileImage.save(file, format="PNG") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "BadgeImage", + description = "Badge icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + + TakeThumbnail( AssetId = NewImageAssetObj.id, isIcon=False ) + BadgeObj.icon_image_id = NewImageAssetObj.id + + flash("Successfully updated developer product icon", "success") + + BadgeObj.name = BadgeName + BadgeObj.description = BadgeDescription + BadgeObj.updated_at = datetime.utcnow() + + db.session.commit() + flash("Successfully updated badge", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + +@DevelopPagesRoute.route("/develop/universes//place//manage", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniversePlacePage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/manage.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj) + else: + PlaceName : str = request.form.get("name", default="", type=str) + PlaceDescription : str = request.form.get("description", default="", type=str) + try: + ChatStyleType : ChatStyle = ChatStyle(request.form.get("chat-style-type", default = 2, type = int)) + except ValueError: + flash("Invalid chat style", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + + if UniverseObj.place_year in [ PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne ]: + try: + AvatarRigType : PlaceRigChoice = PlaceRigChoice(request.form.get("avatar-rig-type", default=0, type=int)) + except ValueError: + flash("Invalid avatar rig type", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + + if len(PlaceName) < 3 or len(PlaceName) > 50: + flash("Place name has to be between 3 to 50 characters long", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + if len(PlaceDescription) < 3 or len(PlaceDescription) > 700: + flash("Place description has to be between 3 to 700 characters long", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + if PlaceDescription.count("\n") > 10: + flash("Place description can only have 10 or less newlines", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + + PlaceName : str = FilterText(PlaceName) + PlaceDescription : str = FilterText(PlaceDescription) + PlaceAssetObj.name = PlaceName + PlaceAssetObj.description = PlaceDescription + PlaceObj.chat_style = ChatStyleType + if UniverseObj.place_year in [ PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne ]: + PlaceObj.rig_choice = AvatarRigType + + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + + db.session.commit() + flash("Successfully updated place settings", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + +@DevelopPagesRoute.route("/develop/universes//place//access", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniversePlaceAccessPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/access.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj) + else: + MaxPlayers : int = request.form.get("maxplayers", default=10, type=int) + if MaxPlayers < 2 or MaxPlayers > 50: + flash("Max players has to be between 2 to 50", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/access") + PlaceObj.maxplayers = MaxPlayers + db.session.commit() + + flash("Successfully updated place access settings", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/access") + +@DevelopPagesRoute.route("/develop/universes//place//upload-version", methods=["GET", "POST"]) +@auth.authenticated_required +def UploadUniversePlaceVersionPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/upload-version.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj) + else: + with limiter.limit("5/minute"): + AssetFile = request.files.get("file", default = None) + if AssetFile is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + CreateLockName = f"UploadAssetVersion:{str(PlaceAssetObj.id)}" + CreateLock = redislock.acquire_lock(CreateLockName, acquire_timeout=20, lock_timeout=5) + + AssetFile.seek(0) + AssetFileContent = AssetFile.read() + AssetFileHash = hashlib.sha512(AssetFileContent).hexdigest() + + CurrentAssetVersion : AssetVersion = GetLatestAssetVersion( PlaceAssetObj ) + if CurrentAssetVersion is not None: + if CurrentAssetVersion.content_hash == AssetFileHash: + redislock.release_lock(CreateLockName, CreateLock) + flash("File is the same as the current version", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + + PlaceObj : Place = Place.query.filter_by(placeid=PlaceAssetObj.id).first() + + isValidPlaceFile = ValidatePlaceFile( AssetFile, keepFileWhenInvalid=False, TestPlaceYear = PlaceObj.placeyear ) # if it returns a bool its valid, if it returns a string its invalid and the string is the error + if type(isValidPlaceFile) == str: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"Validation Failed: {isValidPlaceFile}", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + + if not s3helper.DoesKeyExist(AssetFileHash): + s3helper.UploadBytesToS3(AssetFileContent, AssetFileHash) + + NewAssetVersion : AssetVersion = CreateNewAssetVersion( PlaceAssetObj, AssetFileHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("Failed to create a new asset version", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + + redislock.release_lock(CreateLockName, CreateLock) + flash("Successfully updated place file", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + +@DevelopPagesRoute.route("/develop/universes//place//placeicon", methods=["GET","POST"]) +@auth.authenticated_required +def ManageUniversePlaceIconPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/upload-icon.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj, RandomNumber=random.randint(0, 10000000)) + else: + with limiter.limit("5/minute"): + useGenerated = request.form.get("usegenerated") == "on" + if useGenerated: + PlaceAssetObj.updated_at = datetime.utcnow() + CurrentPlaceIcon : PlaceIcon = PlaceIcon.query.filter_by(placeid=PlaceAssetObj.id).first() + if CurrentPlaceIcon is not None: + db.session.delete(CurrentPlaceIcon) + db.session.commit() + TakeThumbnail( AssetId=PlaceAssetObj.id, isIcon=True ) + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + + AssetFile = request.files.get("file", default = None) + if AssetFile is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + if AssetFile.content_length > 2097152: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + IconImage = ValidateClothingImage( AssetFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if IconImage is False or IconImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + if IconImage.width != IconImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + if IconImage.width < 256 or IconImage.width > 1024: + flash("Image is not between 256x256 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + + AssetFile = BytesIO() + IconImage.save(AssetFile, format="PNG") + + AssetFile.seek(0) + IconImageHash = hashlib.sha512(AssetFile.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + AssetFile.seek(0) + s3helper.UploadBytesToS3(AssetFile.read(), IconImageHash, contentType="image/png") + + CurrentPlaceIcon : PlaceIcon = PlaceIcon.query.filter_by(placeid=PlaceAssetObj.id).first() + if CurrentPlaceIcon is None: + CurrentPlaceIcon = PlaceIcon(placeid=PlaceAssetObj.id, contenthash=IconImageHash, updated_at=datetime.utcnow(), moderation_status=1) + db.session.add(CurrentPlaceIcon) + else: + CurrentPlaceIcon.contenthash = IconImageHash + CurrentPlaceIcon.updated_at = datetime.utcnow() + CurrentPlaceIcon.moderation_status = 1 + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + + flash("Successfully updated place icon", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + +@DevelopPagesRoute.route("/develop/universes//place//thumbnails", methods=["GET","POST"]) +@auth.authenticated_required +def ManageUniversePlaceThumbnailsPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/upload-thumbnail.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj, RandomNumber=random.randint(0, 10000000)) + else: + with limiter.limit("5/minute"): + useGenerated = request.form.get("usegenerated") == "on" + if useGenerated: + PlaceAssetObj.updated_at = datetime.utcnow() + CurrentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=PlaceAssetObj.id).order_by(AssetThumbnail.asset_version_id.desc()).first() + if CurrentAssetThumbnail is not None: + db.session.delete(CurrentAssetThumbnail) + db.session.commit() + TakeThumbnail( AssetId=PlaceAssetObj.id, isIcon=False ) + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + AssetFile = request.files.get("file", default = None) + if AssetFile is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + if AssetFile.content_length > 2097152: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + ThumbnailImage = ValidateClothingImage( AssetFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if ThumbnailImage is False or ThumbnailImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + if ThumbnailImage.width / ThumbnailImage.height != 16 / 9: + flash("Image is not 16:9 aspect ratio", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + if ThumbnailImage.width < 640 or ThumbnailImage.width > 1920: + flash("Image is not between 640x360 and 1920x1080", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + if ThumbnailImage.height < 360 or ThumbnailImage.height > 1080: + flash("Image is not between 640x360 and 1920x1080", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + AssetFile = BytesIO() + ThumbnailImage.save(AssetFile, format="PNG") + + AssetFile.seek(0) + ThumbnailImageHash = hashlib.sha512(AssetFile.read()).hexdigest() + if not s3helper.DoesKeyExist(ThumbnailImageHash): + AssetFile.seek(0) + s3helper.UploadBytesToS3(AssetFile.read(), ThumbnailImageHash, contentType="image/png") + + CurrentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=PlaceAssetObj.id).order_by(AssetThumbnail.asset_version_id.desc()).first() + LatestAssetVersion : AssetVersion = GetLatestAssetVersion(PlaceAssetObj) + if LatestAssetVersion is None: + flash("No asset version found", "error") + return redirect(f"/develop/{str(PlaceAssetObj.id)}/thumbnails") + if CurrentAssetThumbnail is None: + CurrentAssetThumbnail = AssetThumbnail(asset_id=PlaceAssetObj.id, asset_version_id=LatestAssetVersion.version, content_hash=ThumbnailImageHash, created_at=datetime.utcnow(), moderation_status=1) + db.session.add(CurrentAssetThumbnail) + else: + CurrentAssetThumbnail.content_hash = ThumbnailImageHash + CurrentAssetThumbnail.created_at = datetime.utcnow() + CurrentAssetThumbnail.moderation_status = 1 + CurrentAssetThumbnail.asset_version_id = LatestAssetVersion.version + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + +@DevelopPagesRoute.route("/develop/universes//place//version-history", methods=["GET"]) +@auth.authenticated_required +def ManageUniversePlaceVersionHistoryPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + PageNumber : int = max( 1, request.args.get("page", default = 1, type = int) ) + AssetVersions : list[AssetVersion] = AssetVersion.query.filter_by(asset_id=PlaceAssetObj.id).order_by(AssetVersion.version.desc()).paginate( page = PageNumber, per_page = 10, error_out = False ) + return render_template( + "/develop/games/version-history.html", + UniverseObj = UniverseObj, + PlaceAssetObj = PlaceAssetObj, + AssetVersions = AssetVersions, + CDN_URL = config.CDN_URL + ) + +@DevelopPagesRoute.route("/develop//edit", methods=["GET"]) +@auth.authenticated_required +def EditItemPage( assetid : int ): + AuthenticatedUser = auth.GetCurrentUser() + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + abort(404) + if AssetObj.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Audio, AssetType.Image]: + abort(404) + isUserAllowedtoViewPage(AuthenticatedUser, AssetObj, abortOnFail=True, isGameContext=False) + return render_template("develop/edit.html", AssetObj=AssetObj) + +@DevelopPagesRoute.route("/develop//edit", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("5/minute") +def EditItem( assetid : int ): + AuthenticatedUser = auth.GetCurrentUser() + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + abort(404) + if AssetObj.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Audio, AssetType.Image]: + abort(404) + isUserAllowedtoViewPage(AuthenticatedUser, AssetObj, abortOnFail=True, isGameContext=False) + + if not websiteFeatures.GetWebsiteFeature("AssetEditing"): + flash("Asset editing is currently disabled", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + + AssetName = request.form.get("item-name", default = "", type = str) + AssetDescription = request.form.get("item-description", default = "", type = str) + isForSale = request.form.get("is-for-sale", default = "off") == "on" + AssetRobuxPrice = request.form.get("robux-cost", default = 0, type = int) + AssetTixPrice = request.form.get("tix-cost", default = 0, type = int) + + if AssetName == "": + flash("Item name cannot be empty", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if len(AssetName) > 35: + flash("Item name cannot be longer than 35 characters", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if len(AssetDescription) > 200: + flash("Item description cannot be longer than 200 characters", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if AssetRobuxPrice < 0 or AssetRobuxPrice > 1000000: + flash("Robux price must be between 0 and 1,000,000", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if AssetTixPrice < 0 or AssetTixPrice > 10000000: + flash("Tix price must be between 0 and 10,000,000", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if isForSale and AssetObj.moderation_status != 0: + flash("You cannot sell an item that is not approved yet", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if isForSale and (AssetObj.asset_type == AssetType.Audio or AssetObj.asset_type == AssetType.Image): + flash("You cannot sell this type of asset", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub and isForSale: + flash("You must be Builders Club to sell items", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + + AssetName = FilterText(AssetName) + AssetDescription = FilterText(AssetDescription) + + AssetObj.name = AssetName + AssetObj.description = AssetDescription + AssetObj.is_for_sale = isForSale + AssetObj.price_robux = AssetRobuxPrice + AssetObj.price_tix = AssetTixPrice + AssetObj.updated_at = datetime.utcnow() + db.session.commit() + return redirect(f"/develop/{str(AssetObj.id)}/edit") + +def ShutdownServer(JobId): + from app.routes.jobreporthandler import HandleUserTimePlayed + from app.services.gameserver_comm import perform_post + TargetPlaceServer : PlaceServer | None = PlaceServer.query.filter_by(serveruuid=JobId).first() + if TargetPlaceServer is None: + return + MasterServer : GameServer | None = GameServer.query.filter_by(serverId=TargetPlaceServer.originServerId).first() + if MasterServer is None: + return + PlaceObj : Place = Place.query.filter_by(placeid=TargetPlaceServer.serverPlaceId).first() + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + logging.info(f"CloseJob : ShutdownServer func : Closing job {str(JobId)} for place {str(PlaceObj.placeid)}") + try: + CloseJobRequest = perform_post( + TargetGameserver = MasterServer, + Endpoint = "CloseJob", + JSONData = { + "jobid": str(JobId) + } + ) + PlaceServerPlayersList : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter_by(serveruuid=JobId).all() + for player in PlaceServerPlayersList: + TotalTimePlayed = (datetime.utcnow() - player.joinTime).total_seconds() + HandleUserTimePlayed(player.user, TotalTimePlayed, serverUUID=str(JobId), placeId=PlaceObj.placeid) + db.session.delete(player) + db.session.delete(TargetPlaceServer) + db.session.commit() + + ClearPlayingCountCache( PlaceObj = PlaceObj ) + ClearUniversePlayingCountCache( UniverseObj = UniverseObj ) + except Exception as e: + logging.error(f"CloseJob : ShutdownServer func : Failed to close job {str(JobId)} for place {str(PlaceObj.placeid)} : {str(e)}") + + return diff --git a/app/pages/develop/edit.html b/app/pages/develop/edit.html new file mode 100644 index 0000000..5d6fd7b --- /dev/null +++ b/app/pages/develop/edit.html @@ -0,0 +1,79 @@ +{% extends '__layout__.html' %} +{% block title %}Edit Item{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ < Return to develop page +

Edit Item

+
+ {% if AssetObj.asset_type.value != 3 and AssetObj.asset_type.value != 1: %} + View on Catalog + {%else%} + View on Library + {%endif%} +
+
+
+
+ +
+
+
+
+ + +
+
+ + +
+ {% if AssetObj.asset_type.value != 3 and AssetObj.asset_type.value != 1: %} +
+ + +
+
+
+
+ R$ + +
+
+
+
+ T$ + +
+
+
+

* NEXIUM will take a 30% fee from the sale

+
+
+ {%endif%} + + + +
+
+
+
+
+{% endblock %} diff --git a/app/pages/develop/games/access.html b/app/pages/develop/games/access.html new file mode 100644 index 0000000..c1ac30b --- /dev/null +++ b/app/pages/develop/games/access.html @@ -0,0 +1,12 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Access

+
+ + + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/manage-template.html b/app/pages/develop/games/manage-template.html new file mode 100644 index 0000000..5dac207 --- /dev/null +++ b/app/pages/develop/games/manage-template.html @@ -0,0 +1,66 @@ +{% extends '__layout__.html' %} +{% block title %}Manage Place{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+

{{PlaceAssetObj.name}}

+ Return to Manage Universe +
+
+
+ +
+ {% block subcontent %}{% endblock %} +
+
+
+
+{% endblock %} diff --git a/app/pages/develop/games/manage.html b/app/pages/develop/games/manage.html new file mode 100644 index 0000000..7f90ff5 --- /dev/null +++ b/app/pages/develop/games/manage.html @@ -0,0 +1,52 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Basic Settings

+
+ + +
Chat Style
+
+ + +
+
+ + +
+
+ + +
+ {% if UniverseObj.place_year.value == 2018 or UniverseObj.place_year.value == 2020 or UniverseObj.place_year.value == 2021 %} +
Avatar Rig Type
+
+ + +
+
+ + +
+
+ + +
+ {% endif %} + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/upload-icon.html b/app/pages/develop/games/upload-icon.html new file mode 100644 index 0000000..9d9a882 --- /dev/null +++ b/app/pages/develop/games/upload-icon.html @@ -0,0 +1,25 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +
+
+ +

Note: Image may be cached so you may see the previous image after uploading

+
+
+

Upload Place Icon

+

Must have a 1:1 Aspect Ratio, Lesser than 2mb and be at max 1024 x 1024

+
+
+ +
+ + +
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/upload-thumbnail.html b/app/pages/develop/games/upload-thumbnail.html new file mode 100644 index 0000000..d444830 --- /dev/null +++ b/app/pages/develop/games/upload-thumbnail.html @@ -0,0 +1,25 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +
+
+ +

Note: Image may be cached so you may see the previous image after uploading

+
+
+

Upload Thumbnail

+

Must have a 16:9 Aspect Ratio, Lesser than 2mb and be at max 1920x1080

+
+
+ +
+ + +
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/upload-version.html b/app/pages/develop/games/upload-version.html new file mode 100644 index 0000000..74b3705 --- /dev/null +++ b/app/pages/develop/games/upload-version.html @@ -0,0 +1,12 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Upload Place File

+

Supported file types: .rbxl and .rbxlx Max File Size: 30mb

+
+
+ +
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/version-history.html b/app/pages/develop/games/version-history.html new file mode 100644 index 0000000..fbd18eb --- /dev/null +++ b/app/pages/develop/games/version-history.html @@ -0,0 +1,25 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Version History

+
+
+ {% for AssetVer in AssetVersions.items: %} +
+
+
+
Version {{AssetVer.version}}
+

Created on {{AssetVer.created_at.strftime("%d/%m/%Y at %H:%M:%S UTC")}} | ID: {{AssetVer.id}}

+
+ + + +
+
+ {% endfor %} +
+
+ Previous +

Page {{AssetVersions.page}} of {{AssetVersions.pages}}

+ Next +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/animation.html b/app/pages/develop/subpages/animation.html new file mode 100644 index 0000000..6acec33 --- /dev/null +++ b/app/pages/develop/subpages/animation.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+

ava was here! :3

+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for animation in UserAnimation.items: %} +
+ +
+
{{animation.name}}
+

Sales: {{animation.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserAnimation.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} diff --git a/app/pages/develop/subpages/games.html b/app/pages/develop/subpages/games.html new file mode 100644 index 0000000..b2e9a88 --- /dev/null +++ b/app/pages/develop/subpages/games.html @@ -0,0 +1,25 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for place in UserPlaces: %} +
+ +
+
{{place.name}}
+

Visits: {{place.place.visitcount}}

+
+
+ Manage +
+
+ {%endfor%} + {% if len(UserPlaces) == 0 %} +

No games found

+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/image.html b/app/pages/develop/subpages/image.html new file mode 100644 index 0000000..64ac62d --- /dev/null +++ b/app/pages/develop/subpages/image.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+

Image has to be smaller than 3MB

+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for image in UserImages.items: %} +
+ +
+
{{image.name}}
+

Sales: {{image.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserImages.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/pants.html b/app/pages/develop/subpages/pants.html new file mode 100644 index 0000000..6d2e68e --- /dev/null +++ b/app/pages/develop/subpages/pants.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +

Want to create Pants? Download the template

+
+
+ +
+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for pants in UserClothing: %} +
+ +
+
{{pants.name}}
+

Sales: {{pants.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserClothing) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/shirts.html b/app/pages/develop/subpages/shirts.html new file mode 100644 index 0000000..04bf19a --- /dev/null +++ b/app/pages/develop/subpages/shirts.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +

Want to create Shirts? Download the template

+
+
+ +
+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for shirt in UserClothing: %} +
+ +
+
{{shirt.name}}
+

Sales: {{shirt.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserClothing) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/sound.html b/app/pages/develop/subpages/sound.html new file mode 100644 index 0000000..73ae2bf --- /dev/null +++ b/app/pages/develop/subpages/sound.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+

Sound has to be a MP3 File, Lesser than 8MB and shorter than 8 minutes. Minimum: 20 Robux, every second of audio costs 0.5 robux, will round down if total is decimal point.

+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for sound in UserSounds.items: %} +
+ +
+
{{sound.name}}
+

Sales: {{sound.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserSounds.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} diff --git a/app/pages/develop/subpages/tshirt.html b/app/pages/develop/subpages/tshirt.html new file mode 100644 index 0000000..9a6331d --- /dev/null +++ b/app/pages/develop/subpages/tshirt.html @@ -0,0 +1,31 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for tshirt in UserClothing: %} +
+ +
+
{{tshirt.name}}
+

Sales: {{tshirt.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserClothing.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/template.html b/app/pages/develop/template.html new file mode 100644 index 0000000..a97891e --- /dev/null +++ b/app/pages/develop/template.html @@ -0,0 +1,55 @@ +{% extends '__layout__.html' %} +{% block title %}Develop{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Develop

+ + + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+ {% block subcontent %}{% endblock %} +
+ {% if PreviousPage > 0: %} + Previous + {%else%} + Previous + {% endif %} +

{{PageNumber}}

+ {% if NextPage > 0: %} + Next + {%else%} + Next + {% endif %} +
+
+
+ + +{% endblock %} diff --git a/app/pages/develop/universes/access.html b/app/pages/develop/universes/access.html new file mode 100644 index 0000000..b786ebb --- /dev/null +++ b/app/pages/develop/universes/access.html @@ -0,0 +1,24 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +

Access

+
+ + +
+ + +
+
+ + +
+ +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/badges.html b/app/pages/develop/universes/badges.html new file mode 100644 index 0000000..17036a9 --- /dev/null +++ b/app/pages/develop/universes/badges.html @@ -0,0 +1,30 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Badges

+ +
+
+ {% for badgeObj in Badges: %} +
+
+ +
+
{{badgeObj.name}}
+

Badge ID: {{badgeObj.id}}

+

Awarded Yesterday: {{GetBadgeAwardedPastDay(badgeObj.id)}}

+

Total Awarded: {{GetTotalBadgeAwardedCount(badgeObj.id)}}

+
+ +
+
+ {% endfor %} + {% if len(Badges) == 0: %} +

No Badges found, create one by clicking the button above

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-badge.html b/app/pages/develop/universes/create-badge.html new file mode 100644 index 0000000..14c904c --- /dev/null +++ b/app/pages/develop/universes/create-badge.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create Badge

+ +
+
+
+
+ + +
+
+ + +
+
+
Badge Icon
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-gamepass.html b/app/pages/develop/universes/create-gamepass.html new file mode 100644 index 0000000..ee3c80c --- /dev/null +++ b/app/pages/develop/universes/create-gamepass.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create Gamepass

+ +
+
+
+
+ + +
+
+ + +
+
+
Gamepass Icon
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-place.html b/app/pages/develop/universes/create-place.html new file mode 100644 index 0000000..6b99c44 --- /dev/null +++ b/app/pages/develop/universes/create-place.html @@ -0,0 +1,15 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create new place

+

{{TotalAmountPlacesCreated}} / 10 Places used

+
+
+
+

Are you sure you want to create a new place under {{RootPlaceAssetObj.name}}?

+ + + +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-product.html b/app/pages/develop/universes/create-product.html new file mode 100644 index 0000000..23f3fd5 --- /dev/null +++ b/app/pages/develop/universes/create-product.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create Developer Product

+ +
+
+
+
+ + +
+
+ + +
+
+
Product Icon
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/developerproducts.html b/app/pages/develop/universes/developerproducts.html new file mode 100644 index 0000000..248cd57 --- /dev/null +++ b/app/pages/develop/universes/developerproducts.html @@ -0,0 +1,29 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Developer Products

+ +
+
+ {% for product in DeveloperProducts: %} +
+
+ +
+
{{product.name}}
+

Product ID: {{product.productid}}

+

Total sold: {{product.sales_count}}

+
+ +
+
+ {% endfor %} + {% if len(DeveloperProducts) == 0: %} +

No Developer Products found, create one by clicking the button above

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/edit-badge.html b/app/pages/develop/universes/edit-badge.html new file mode 100644 index 0000000..56750c7 --- /dev/null +++ b/app/pages/develop/universes/edit-badge.html @@ -0,0 +1,35 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Edit Badge

+ +
+
+
+
+
+ +
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+
+
+ +
+ + +
+
+ + +
+ + + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/edit-gamepass.html b/app/pages/develop/universes/edit-gamepass.html new file mode 100644 index 0000000..69b28d6 --- /dev/null +++ b/app/pages/develop/universes/edit-gamepass.html @@ -0,0 +1,53 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Edit Gamepass

+ +
+
+
+
+
+ +
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+ R$ + +
+
+
+

* NEXIUM will take a 30% fee from the sale

+
+
+ + + + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/edit-product.html b/app/pages/develop/universes/edit-product.html new file mode 100644 index 0000000..3750613 --- /dev/null +++ b/app/pages/develop/universes/edit-product.html @@ -0,0 +1,53 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Edit Developer Product

+ +
+
+
+
+
+ +
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+ R$ + +
+
+
+

* NEXIUM will take a 30% fee from the sale

+
+
+ + + + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/gamepasses.html b/app/pages/develop/universes/gamepasses.html new file mode 100644 index 0000000..b1ed084 --- /dev/null +++ b/app/pages/develop/universes/gamepasses.html @@ -0,0 +1,29 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Gamepasses

+ +
+
+ {% for gamepassobj in Gamepasses: %} +
+
+ +
+
{{gamepassobj.gamepass.name}}
+

Gamepass ID: {{gamepassobj.gamepass_id}}

+

Total sold: {{gamepassobj.gamepass.sale_count}}

+
+ +
+
+ {% endfor %} + {% if len(Gamepasses) == 0: %} +

No gamepasses found, create one by clicking the button above

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/manage-template.html b/app/pages/develop/universes/manage-template.html new file mode 100644 index 0000000..196fda1 --- /dev/null +++ b/app/pages/develop/universes/manage-template.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}Manage Universe{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

{{RootPlaceAssetObj.name}}

+

Universe ID: {{UniverseObj.id}} Starting Place ID: {{RootPlaceAssetObj.id}}

+
+
+ +
+ {% block subcontent %}{% endblock %} +
+
+
+
+{% endblock %} diff --git a/app/pages/develop/universes/manage.html b/app/pages/develop/universes/manage.html new file mode 100644 index 0000000..0f21845 --- /dev/null +++ b/app/pages/develop/universes/manage.html @@ -0,0 +1,21 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +

Basic Settings

+
+ + +

Updating name and description will update the Starting Place name and description

+
Place Year
+ + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/places.html b/app/pages/develop/universes/places.html new file mode 100644 index 0000000..e77dd50 --- /dev/null +++ b/app/pages/develop/universes/places.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+
+

Places

+

{{TotalAmountPlacesCreated}} / 10 Places used

+
+ +
+
+ {% for placeObj in universePlaces: %} +
+ +
+
{{placeObj.assetObj.name}}
+ {% if UniverseObj.root_place_id == placeObj.placeid %}

Start Place

{% endif %} +

Place ID: {{placeObj.placeid}}

+
+ +
+ {% endfor %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/discourse/leaving-syntax.html b/app/pages/discourse/leaving-syntax.html new file mode 100644 index 0000000..2f953aa --- /dev/null +++ b/app/pages/discourse/leaving-syntax.html @@ -0,0 +1,21 @@ +{% extends '__layout__.html' %} +{% block title %}Leaving NEXIUM{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+

You are leaving NEXIUM

+

+ NEXIUM Forums is real asf cuh. +

+ Take me there +

You will be redirected to {{baseurl}}

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/discourse/sso-confirm.html b/app/pages/discourse/sso-confirm.html new file mode 100644 index 0000000..c481eda --- /dev/null +++ b/app/pages/discourse/sso-confirm.html @@ -0,0 +1,32 @@ +{% extends '__layout__.html' %} +{% block title %}SSO Login{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ +

Logged in as {{currentuser.username}}

+
+
+

Authorise SYNTAX Forums

+

+ SYNTAX Forums is a official website hosted by nexium.fit, authorising will allow SYNTAX Forums to access the following information: +

+
    +
  • Username
  • +
  • User ID
  • +
+
+ + +
+

You will be redirected to {{baseurl}}/session/sso_login

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/downloads.html b/app/pages/downloads.html new file mode 100644 index 0000000..9e290dc --- /dev/null +++ b/app/pages/downloads.html @@ -0,0 +1,55 @@ +{% extends '__layout__.html' %} +{% block title %}Downloads{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Downloads

+ +
+
+
+

Windows Client Bootstrapper

+

+ Windows 10 or newer required +

+
+
+ Download +
+
+
+
+

Linux Linux Client Bootstrapper

+

+ requires bzip2-libs / libbz2-1.0 +

+
+
+ Download +
+
+ +
+{% endblock %} diff --git a/app/pages/drivers.html b/app/pages/drivers.html new file mode 100644 index 0000000..ed5667b --- /dev/null +++ b/app/pages/drivers.html @@ -0,0 +1,14 @@ +{% extends '__layout__.html' %} +{% block title %}Drivers{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Drivers

+
+

If you have issues with NEXIUM not starting because of graphics issues you should seriously consider buying a new computer or graphics card

+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/fluttershy.html b/app/pages/fluttershy.html new file mode 100644 index 0000000..1e03656 --- /dev/null +++ b/app/pages/fluttershy.html @@ -0,0 +1,8 @@ +{% extends '__layout__.html' %} +{% block title %}Fluttershy{% endblock %} +{% block content %} +
+

Yay!

+ Fluttershy +
+{% endblock %} diff --git a/app/pages/games/games.py b/app/pages/games/games.py new file mode 100644 index 0000000..6ef582f --- /dev/null +++ b/app/pages/games/games.py @@ -0,0 +1,306 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort, flash +from app.util import auth, placeinfo +from app.util.embeds import RenderAssetEmbed +from app.models.asset import Asset +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.gameservers import GameServer +from app.models.place import Place +from app.models.gamepass_link import GamepassLink +from app.models.userassets import UserAsset +from app.models.groups import Group, GroupRole, GroupRolePermission +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.universe import Universe +from slugify import slugify +from app.pages.develop.develop import ShutdownServer +from app.enums.AssetType import AssetType +from app.models.user import User +from app.util.membership import GetUserMembership +from app.enums.MembershipType import MembershipType +from app.routes.rate import GetAssetLikesAndDislikes, GetUserVoteStatus, GetAssetVotePercentage, GetAssetFavoriteCount, GetUserFavoriteStatus +from app.routes.badgesapi import CalculateBadgeRarity, GetBadgeAwardedPastDay +from app.services import groups +from sqlalchemy import and_, func +from datetime import datetime, timedelta +import logging + +GamePagesRoute = Blueprint("games", __name__, template_folder="pages") + +def DoesUserownGamepass( gamepass_id, userid ): + GamepassObj : Asset = Asset.query.filter_by(id=gamepass_id, asset_type = AssetType.GamePass).first() + if GamepassObj is None: + return False + UserGamepass : UserAsset = UserAsset.query.filter_by(userid=userid, assetid=GamepassObj.id).first() + if UserGamepass is None: + return False + return True +def DoesUserOwnBadge( badge_id, userid ): + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by(id=badge_id).first() + if BadgeObj is None: + return False + UserBadgeObj : UserBadge = UserBadge.query.filter_by(badge_id=badge_id, user_id=userid).first() + if UserBadgeObj is None: + return False + return True + +def GetTotalBadgeAwardedCount( badge_id ) -> int: + return UserBadge.query.filter_by( badge_id = badge_id ).count() + +@GamePagesRoute.route("/games//", methods=["GET"]) +@GamePagesRoute.route("/games//", methods=["GET"]) +@auth.authenticated_or_bot_required +def game_page(placeid : int, slug=None): + AssetObject : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObject is None: + return abort(404) + if AssetObject.asset_type != AssetType.Place: + # Let catalog handle the redirect + return redirect(f"/catalog/{str(placeid)}/") + SlugName = slugify(AssetObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + if slug is None: + return redirect(f"/games/{str(placeid)}/{SlugName}") + if slug != SlugName: + return redirect(f"/games/{str(placeid)}/{SlugName}") + if auth.IsCrawlerBot(): + return RenderAssetEmbed( + title=AssetObject.name, + description=AssetObject.description, + image_path=f"/Thumbs/Asset.ashx?assetId={AssetObject.id}&x=1200&y=630", + canonical_path=f"/games/{AssetObject.id}/{SlugName}" + ) + if AssetObject.creator_type == 0: + CreatorObject : User = User.query.filter_by(id=AssetObject.creator_id).first() + else: + CreatorObject : Group = Group.query.filter_by(id=AssetObject.creator_id).first() + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + if PlaceObj is None: + return abort(404) + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + ActualRootPlace : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + + try: + SplittedDescription = AssetObject.description.split("\n") + LikeCount, DislikeCount = GetAssetLikesAndDislikes(AssetObject.id) + AuthenticatedUser : User = auth.GetCurrentUser() + + PlaceServerObjs : list[PlaceServer] = PlaceServer.query.filter_by(serverPlaceId=placeid).all() + ActiveServers = [] + for PlaceServerObj in PlaceServerObjs: + PlayersInServer : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter_by(serveruuid=PlaceServerObj.serveruuid).all() + GameServerObj : GameServer = GameServer.query.filter_by(serverId=PlaceServerObj.originServerId).first() + if GameServerObj is None: + continue + ActiveServers.append({ + "id": PlaceServerObj.serveruuid, + "playercount": PlaceServerObj.playerCount, + "maxplayercount": PlaceServerObj.maxPlayerCount, + "players": PlayersInServer, + "host": GameServerObj.serverName, + "is_reserved_server": PlaceServerObj.reservedServerAccessCode is not None + }) + + Gamepasses : list[GamepassLink] = GamepassLink.query.filter_by(universe_id = PlaceObj.parent_universe_id).all() + UserDoesNotHaveBC : bool = UniverseObj.bc_required and GetUserMembership(AuthenticatedUser) == MembershipType.NonBuildersClub + CanShutdownServer = False if AuthenticatedUser.id not in (1, 4) else True + if AssetObject.creator_type == 0: + if AuthenticatedUser.id == AssetObject.creator_id: + CanShutdownServer = True + else: + GroupObj : Group = groups.GetGroupFromId( AssetObject.creator_id ) + UserGroupRole : GroupRole = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupObj ) + if UserGroupRole is None: + CanShutdownServer = False + UserGroupRolePermission : GroupRolePermission = groups.GetRolesetPermission( UserGroupRole ) + if UserGroupRolePermission.manage_group_games: + CanShutdownServer = True + + GameBadges : list[PlaceBadge] = PlaceBadge.query.filter_by( universe_id = PlaceObj.parent_universe_id ).all() + + return render_template("games/view.html", PlaceAssetObj=AssetObject, + CreatorObj=CreatorObject, + PlaceObj=PlaceObj, + SplittedDescription=SplittedDescription, + PlayerCount=placeinfo.GetPlayingCount(PlaceObj), + LikeCount=LikeCount, + DislikeCount=DislikeCount, + UserVoteStatus=GetUserVoteStatus(AssetObject.id, AuthenticatedUser.id), + UserFavoriteStatus=GetUserFavoriteStatus(AssetObject.id, AuthenticatedUser.id), + FavoriteCount=GetAssetFavoriteCount(AssetObject.id), + ActiveServers=ActiveServers, + ActiveServerCount=len(ActiveServers), + Gamepasses=Gamepasses, + DoesUserownGamepass=DoesUserownGamepass, + UserDoesNotHaveBC=UserDoesNotHaveBC, + IsTooYoung = (datetime.utcnow() - AuthenticatedUser.created).days < UniverseObj.minimum_account_age, + MinAccountAge = UniverseObj.minimum_account_age, + CanShutdownServer = CanShutdownServer, + GameBadges = GameBadges, + CalculateBadgeRarity = CalculateBadgeRarity, + DoesUserOwnBadge = DoesUserOwnBadge, + GetTotalBadgeAwardedCount = GetTotalBadgeAwardedCount, + GetBadgeAwardedPastDay = GetBadgeAwardedPastDay, + UniverseObj = UniverseObj, + UniverseRootPlace = ActualRootPlace + ) + + except Exception as e: + logging.error(f"Error during rendering game page [{placeid}]: {str(e)}") + return redirect(f"/games/{str(placeid)}/{SlugName}") + +@GamePagesRoute.route("/games//shutdown-server/", methods=["POST"]) +@auth.authenticated_required +def game_shutdown_server(placeid : int, jobid : str): + AuthenticatedUser : User = auth.GetCurrentUser() + AssetObject : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObject is None: + return abort(404) + if AssetObject.asset_type != AssetType.Place: + return abort(404) + TargetPlaceServer : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobid).first() + if TargetPlaceServer is None: + return abort(404) + if TargetPlaceServer.serverPlaceId != placeid: + return abort(403) + if (AssetObject.creator_id != AuthenticatedUser.id and AssetObject.creator_type != 1) and AuthenticatedUser.id != 1: + return abort(403) + if AssetObject.creator_type == 1: + GroupObj : Group = groups.GetGroupFromId( AssetObject.creator_id ) + UserGroupRole : GroupRole = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupObj ) + if UserGroupRole is None: + return abort(403) + UserGroupRolePermission : GroupRolePermission = groups.GetRolesetPermission( UserGroupRole ) + if not UserGroupRolePermission.manage_group_games: + return abort(403) + ShutdownServer(TargetPlaceServer.serveruuid) + flash("Requested server shutdown", "success") + return redirect(f"/games/{str(placeid)}/") + +@GamePagesRoute.route("/games", methods=["GET"]) +@auth.authenticated_required +def games_page(): + TopPlacesInfo = [] + PageNumber = max( request.args.get('page', default = 1, type = int ), 1 ) + SearchQuery = request.args.get('q', default = None, type = str) + GameLookupResultsBackendResult = None + GameLookupResults = [] + if SearchQuery: + SearchQuery = SearchQuery.strip().replace('%', '') + if len(SearchQuery) > 0 and len(SearchQuery) <= 32: + GameLookupResultsBackendResult = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join( Asset, Asset.id == Place.placeid ).filter( Asset.name.ilike(f"%{SearchQuery}%") ).filter_by( moderation_status = 0 ).order_by( Universe.visit_count.desc() ).paginate(page=PageNumber, per_page=36, error_out=False) + else: + flash('Invalid search query.', 'danger') + + if GameLookupResultsBackendResult: + for UniverseObj in GameLookupResultsBackendResult: + UniverseObj : Universe + AssetObj : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + if AssetObj is None: + continue + + PlaceObjData = { + "id": UniverseObj.root_place_id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount(UniverseObj), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(AssetObj.id), + "placeyear": UniverseObj.place_year + } + GameLookupResults.append(PlaceObjData) + + PopularGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join( Asset, Asset.id == Place.placeid ).filter_by( moderation_status = 0 ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + PopularGames = PopularGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( Universe.visit_count.desc() ) + + UniverseObjsList = PopularGames.limit(24).all() + for UniverseObj in UniverseObjsList: + UniverseObj : Universe + AssetObj : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + if AssetObj is None: + continue + PlaceObjData = { + "id": UniverseObj.root_place_id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount( UniverseObj ), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(UniverseObj.root_place_id), + "placeyear": UniverseObj.place_year + } + TopPlacesInfo.append(PlaceObjData) + + RecentlyUpdatedUniverses : list[Universe] = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).join( Asset, Asset.id == Universe.root_place_id ).filter_by( moderation_status = 0 ).order_by(Universe.updated_at.desc()).limit(24).all() + RecentlyUpdatedUniversesInfo = [] + for UniverseObj in RecentlyUpdatedUniverses: + PlaceObj : Place = Place.query.filter_by(placeid=UniverseObj.root_place_id).first() + if PlaceObj is None: + continue + AssetObj : Asset = Asset.query.filter_by(id=PlaceObj.placeid).first() + if len(RecentlyUpdatedUniversesInfo) >= 24: + break + PlaceObjData = { + "id": AssetObj.id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount( UniverseObj ), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(AssetObj.id), + "placeyear": UniverseObj.place_year + } + RecentlyUpdatedUniversesInfo.append(PlaceObjData) + + FeaturedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0, Universe.is_featured == True ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join( Asset, Asset.id == Place.placeid ).filter_by( moderation_status = 0 ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + FeaturedGames = FeaturedGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( Universe.visit_count.desc() ) + FeaturedPlaceObjs = FeaturedGames.limit(24).all() + FeaturedPlacesInfo = [] + for UniverseObj in FeaturedPlaceObjs: + UniverseObj : Universe + AssetObj : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + if AssetObj is None: + continue + PlaceObjData = { + "id": UniverseObj.root_place_id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount( UniverseObj ), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(AssetObj.id), + "placeyear": UniverseObj.place_year + } + FeaturedPlacesInfo.append(PlaceObjData) + + return render_template("games/index.html", PopularPlaces=TopPlacesInfo, RecentlyUpdatedPlaces=RecentlyUpdatedUniversesInfo, FeaturedPlacesInfo=FeaturedPlacesInfo, GameLookupResults = GameLookupResults, PageNumber=PageNumber, SearchQuery = SearchQuery, GameLookupResultsBackendResult = GameLookupResultsBackendResult) + +from sqlalchemy import func +@GamePagesRoute.route("/games//view", methods=["GET"]) +@auth.authenticated_required +def games_genre_page(genre : str): + pageNumber = max( request.args.get("page", default=1, type=int), 1 ) + if genre == "popular": + PopularGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join(Asset, Asset.id == Place.placeid).outerjoin(PlaceServer, PlaceServer.serverPlaceId == Place.placeid).group_by(Universe.id) + PopularGames = PopularGames.filter( Asset.moderation_status == 0).order_by(func.coalesce(func.sum(PlaceServer.playerCount), 0).desc()).order_by( Universe.visit_count.desc() ) + PopularGames = PopularGames.paginate(page=pageNumber, per_page=30, error_out=False) + ViewerFacingGenre = "Popular Games" + pageResults = PopularGames + elif genre == "updated": + UpdatedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).join( Asset, Asset.id == Universe.root_place_id ).filter( Asset.moderation_status == 0 ).order_by(Universe.updated_at.desc()) + UpdatedGames = UpdatedGames.paginate(page=pageNumber, per_page=30, error_out=False) + ViewerFacingGenre = "Recently Updated" + pageResults = UpdatedGames + elif genre == "featured": + FeaturedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0, Universe.is_featured == True ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join(Asset, Asset.id == Place.placeid).outerjoin(PlaceServer, PlaceServer.serverPlaceId == Place.placeid).group_by(Universe.id) + FeaturedGames = FeaturedGames.filter( Asset.moderation_status == 0).order_by(func.coalesce(func.sum(PlaceServer.playerCount), 0).desc()).order_by( Universe.visit_count.desc() ) + FeaturedGames = FeaturedGames.paginate(page=pageNumber, per_page=30, error_out=False) + ViewerFacingGenre = "Featured Games" + pageResults = FeaturedGames + else: + return abort(404) + + if pageResults is None: + return abort(404) + + def getRootPlace( UniverseObj : Universe ) -> Place : + try: + return UniverseObj.root_place_obj + except: + UniverseObj.root_place_obj = Place.query.filter_by(placeid=UniverseObj.root_place_id).first() + return UniverseObj.root_place_obj + + return render_template("games/genre.html", Games=pageResults, Genre=genre, getPlayerCount = placeinfo.GetUniversePlayingCount, getAssetVotePercentage = GetAssetVotePercentage, ViewerFacingGenre=ViewerFacingGenre, getRootPlace=getRootPlace) \ No newline at end of file diff --git a/app/pages/games/genre.html b/app/pages/games/genre.html new file mode 100644 index 0000000..c5fc085 --- /dev/null +++ b/app/pages/games/genre.html @@ -0,0 +1,44 @@ +{% extends '__layout__.html' %} +{% block title %}Games{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/app/pages/games/index.html b/app/pages/games/index.html new file mode 100644 index 0000000..3acad7d --- /dev/null +++ b/app/pages/games/index.html @@ -0,0 +1,200 @@ +{% extends '__layout__.html' %} +{% block title %}Games{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% if GameLookupResults %} +
+
+
+ + +
+ + +
+
+ +
+ {% if GameLookupResultsBackendResult.has_prev: %} + Previous + {%else%} + Previous + {% endif %} +

Page {{GameLookupResultsBackendResult.page}} of {{GameLookupResultsBackendResult.pages}}

+ {% if GameLookupResultsBackendResult.has_next: %} + Next + {%else%} + Next + {% endif %} +
+ {% elif not GameLookupResults and SearchQuery %} +
+
+
+ + +
+ + +
+
+
+

No results found for "{{SearchQuery}}"

+
+ {% else %} +
+
+

Popular

+ View All +
+
+
+
+ + +
+ + +
+
+
+ +
+

Featured

+ View All +
+ +
+

Recently Updated

+ View All +
+ + {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/games/index.html1 b/app/pages/games/index.html1 new file mode 100644 index 0000000..bfe10e0 --- /dev/null +++ b/app/pages/games/index.html1 @@ -0,0 +1,161 @@ +{% extends '__layout__.html' %} +{% block title %}Games{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+ {% if GameLookupResults %} +
+
+ + +
+
+ +
+ {% if GameLookupResultsBackendResult.has_prev: %} + Previous + {%else%} + Previous + {% endif %} +

Page {{GameLookupResultsBackendResult.page}} of {{GameLookupResultsBackendResult.pages}}

+ {% if GameLookupResultsBackendResult.has_next: %} + Next + {%else%} + Next + {% endif %} +
+ {% elif not GameLookupResults and SearchQuery %} +
+
+ + +
+
+
+

No results found for "{{SearchQuery}}"

+
+ {% else %} +
+
+

Popular

+ View All +
+
+
+ + +
+
+
+ +
+

Featured

+ View All +
+ +
+

Recently Updated

+ View All +
+ + {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/games/view.html b/app/pages/games/view.html new file mode 100644 index 0000000..e5ec951 --- /dev/null +++ b/app/pages/games/view.html @@ -0,0 +1,380 @@ +{% extends '__layout__.html' %} +{% block title %}{{PlaceAssetObj.name}}{% endblock %} +{% block head %} + + + + +
+
+ +{% endblock %} +{% block content %} +
+
+ {% if UniverseObj.root_place_id != PlaceObj.placeid %} +
+

This game is part of {{UniverseRootPlace.name}}'s universe

+
+ {% endif %} +
+ {{PlaceAssetObj.name}} Thumbnail +
+
+

{{PlaceAssetObj.name}}

+ {% if PlaceAssetObj.creator_type == 0 %} +

By {{CreatorObj.username}}

+ {% else %} +

By {{CreatorObj.name}}

+ {% endif %} +
+ {% if UniverseObj.is_public: %} + {% if UserDoesNotHaveBC == False %} + {% if PlaceAssetObj.moderation_status != 2 or UniverseObj.moderation_status != 2 %} + {% if IsTooYoung: %} + +

Your account must be at least {{MinAccountAge}} days old to play this game

+ {% else %} + + {% endif %} + {% else %} + +

This place is currently under review

+ {% endif %} + {% else %} + +

A Builders Club membership is required to join this game

+ {% endif %} + {%else%} + +

This place has been set to private by its creator

+ {%endif%} +
+
+
+ {{FavoriteCount}} +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 +
+
+ 5 +
+
+
+
+ +
+ +
+
+
+
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + +
+ + + +{% endblock %} \ No newline at end of file diff --git a/app/pages/games/view.html1 b/app/pages/games/view.html1 new file mode 100644 index 0000000..9554aec --- /dev/null +++ b/app/pages/games/view.html1 @@ -0,0 +1,363 @@ +{% extends '__layout__.html' %} +{% block title %}{{PlaceAssetObj.name}}{% endblock %} +{% block head %} + + + + + +
+
+{% endblock %} +{% block content %} +
+
+ {% if UniverseObj.root_place_id != PlaceObj.placeid %} +
+

This game is part of {{UniverseRootPlace.name}}'s universe

+
+ {% endif %} +
+ {{PlaceAssetObj.name}} Thumbnail +
+
+

{{PlaceAssetObj.name}}

+ {% if PlaceAssetObj.creator_type == 0 %} +

By {{CreatorObj.username}}

+ {% else %} +

By {{CreatorObj.name}}

+ {% endif %} +
+ {% if UniverseObj.is_public: %} + {% if UserDoesNotHaveBC == False %} + {% if PlaceAssetObj.moderation_status != 2 or UniverseObj.moderation_status != 2 %} + {% if IsTooYoung: %} + +

Your account must be at least {{MinAccountAge}} days old to play

+ {% else %} + + {% endif %} + {% else %} + +

This place is currently under review

+ {% endif %} + {% else %} + +

A Builders Club membership is required

+ {% endif %} + {%else%} + +

This place has been set to private by its creator

+ {%endif%} +
+
+
+ {{FavoriteCount}} +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
5
+
5
+
+
+
+ +
+ +
+
+
+
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
{{ message }}
+ {% endif %} + {% if category == 'success': %} +
{{ message }}
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + +
+ + + + + +
+
+
+
Confirm Purchase
+ +
+
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/giftcardredeem/index.html b/app/pages/giftcardredeem/index.html new file mode 100644 index 0000000..32f27d7 --- /dev/null +++ b/app/pages/giftcardredeem/index.html @@ -0,0 +1,44 @@ +{% extends '__layout__.html' %} +{% block title %}Redeem{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Giftcard Redeem

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ +
+

Note: If you are redeeming a higher membership than your current one, your expiration date will not be brought over and will be resetted

+
+ +
+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/giftcardredeem/redeem.py b/app/pages/giftcardredeem/redeem.py new file mode 100644 index 0000000..32db76e --- /dev/null +++ b/app/pages/giftcardredeem/redeem.py @@ -0,0 +1,136 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.models.giftcard_key import GiftcardKey +from app.enums.GiftcardType import GiftcardType +from app.extensions import db, redis_controller, limiter +from app.util import auth, websiteFeatures, turnstile, redislock, membership +from datetime import datetime, timedelta +from app.models.user import User +from app.enums.MembershipType import MembershipType +from app.services import economy + +GiftcardRedeemRoute = Blueprint('giftcardredeem', __name__, template_folder='pages') + +@GiftcardRedeemRoute.errorhandler(429) +def ratelimit_handler(e): + flash("Please slow down", "error") + return redirect("/giftcard-redeem") + +@GiftcardRedeemRoute.route('/giftcard-redeem', methods=['GET']) +@auth.authenticated_required +def giftcard_redeem(): + return render_template('giftcardredeem/index.html') + +@GiftcardRedeemRoute.route('/giftcard-redeem', methods=['POST']) +@auth.authenticated_required +@limiter.limit("10/minute") +def giftcard_post(): + if not websiteFeatures.GetWebsiteFeature("GiftcardRedeem"): + flash("Redeeming giftcards is temporarily disabled", "error") + return redirect("/giftcard-redeem") + GiftcardInput = request.form.get( key="giftcard-key", default=None, type=str) + CFTurnstileResponse = request.form.get( key="cf-turnstile-response", default=None, type=str) + if GiftcardInput is None or CFTurnstileResponse is None: + flash("Please fill in all the fields", "error") + return redirect("/giftcard-redeem") + if not turnstile.VerifyToken(CFTurnstileResponse): + flash("Invalid captcha", "error") + return redirect("/giftcard-redeem") + + RedeemLock = redislock.acquire_lock( f"Giftcard_Redeem:{GiftcardInput}", acquire_timeout=20, lock_timeout=1) + + GiftcardKeyObject : GiftcardKey = GiftcardKey.query.filter_by(key=GiftcardInput).first() + if GiftcardKeyObject is None: + flash("Invalid giftcard key", "error") + return redirect("/giftcard-redeem") + if GiftcardKeyObject.redeemed_by is not None: + flash("This giftcard has already been redeemed", "error") + return redirect("/giftcard-redeem") + AuthenticatedUser : User = auth.GetCurrentUser() + + if GiftcardKeyObject.type == GiftcardType.Outrageous_BuildersClub: + UserCurrentMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.OutrageousBuildersClub: + membership.IncrementExpirationLength( + AuthenticatedUser, + timedelta(days=(31 * GiftcardKeyObject.value)) + ) + flash(f"Your OBC membership has been extended by {GiftcardKeyObject.value} months", "success") + else: + membership.GiveUserMembership( + TargetUser = AuthenticatedUser, + Membership = MembershipType.OutrageousBuildersClub, + expiration = timedelta(days=(31 * GiftcardKeyObject.value)) + ) + flash(f"You have been given OBC membership for {GiftcardKeyObject.value} months", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.Turbo_BuildersClub: + UserCurrentMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.OutrageousBuildersClub: + flash("You cannot downgrade your membership", "error") + return redirect("/giftcard-redeem") + elif UserCurrentMembership == MembershipType.TurboBuildersClub: + membership.IncrementExpirationLength( + AuthenticatedUser, + timedelta(days=(7 * GiftcardKeyObject.value)) + ) + flash(f"Your TBC membership has been extended by {GiftcardKeyObject.value} weeks", "success") + else: + membership.GiveUserMembership( + TargetUser = AuthenticatedUser, + Membership = MembershipType.TurboBuildersClub, + expiration = timedelta(days=(7 * GiftcardKeyObject.value)) + ) + flash(f"You have been given TBC membership for {GiftcardKeyObject.value} weeks", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.RobuxCurrency: + economy.IncrementTargetBalance(AuthenticatedUser, GiftcardKeyObject.value, 0) + flash(f"You have been given {GiftcardKeyObject.value} robux", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.TixCurrency: + economy.IncrementTargetBalance(AuthenticatedUser, GiftcardKeyObject.value, 1) + flash(f"You have been given {GiftcardKeyObject.value} tickets", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.Item: + from app.models.userassets import UserAsset + from app.models.asset import Asset + + AssetObject : Asset = Asset.query.filter_by(id=GiftcardKeyObject.value).first() + if AssetObject is None: + flash("An issue occured when redeeming this giftcard, please contact support", "error") + return redirect("/giftcard-redeem") + UserAssetObject : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=AssetObject.id).first() + if UserAssetObject is not None: + flash("You already own this item", "error") + return redirect("/giftcard-redeem") + UserAssetObject : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = AssetObject.id + ) + db.session.add(UserAssetObject) + db.session.commit() + flash(f"You have been given the item {AssetObject.name}", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + else: + flash("An issue occured when redeeming this giftcard, please contact support", "error") + return redirect("/giftcard-redeem") + \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/create_role.html b/app/pages/groups/admin_subpage/create_role.html new file mode 100644 index 0000000..6c9a00d --- /dev/null +++ b/app/pages/groups/admin_subpage/create_role.html @@ -0,0 +1,29 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +

Create Role

+
+
+
Role Name
+ +
+
+
Role Description
+ +
+
+
Rank ( 1 - 254 )
+ +
+ + +
+ +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/groupinfo.html b/app/pages/groups/admin_subpage/groupinfo.html new file mode 100644 index 0000000..464e4ef --- /dev/null +++ b/app/pages/groups/admin_subpage/groupinfo.html @@ -0,0 +1,42 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} +

+ Group Information +

+ +
+
+
+ +
+ +
+
+
+
+ + +
+
+
+ +
+ +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/join_requests.html b/app/pages/groups/admin_subpage/join_requests.html new file mode 100644 index 0000000..42d3035 --- /dev/null +++ b/app/pages/groups/admin_subpage/join_requests.html @@ -0,0 +1,52 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +
+

Join Requests

+
+
+ + +
+
+
+
+ {% for request in JoinRequests.items %} +
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ {% endfor %} +
+{% if len(JoinRequests.items) == 0 %} +

No Results Found

+{%endif%} +
+ Previous +

Page {{JoinRequests.page}} of {{JoinRequests.pages}}

+ Next +
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/members.html b/app/pages/groups/admin_subpage/members.html new file mode 100644 index 0000000..2a32f3b --- /dev/null +++ b/app/pages/groups/admin_subpage/members.html @@ -0,0 +1,116 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} +
+

+ Members +

+ {% if group.settings.approval_required and permissions.invite_members %} + View Join Requests {{JoinRequestCount}} + {% endif %} +
+
+
+
+ + +
+
+ + +
+ +
+
+
+ {% for groupMember in Members %} +
+
+ + {% if permissions.remove_members and groupMember.group_role.rank < role.rank %} + + {%endif%} +
+ {% if permissions.change_rank and groupMember.group_role.rank < role.rank: %} + + {%else%} +

{{groupMember.group_role.name}}

+ {%endif%} + {{groupMember.user.username}} +
+ {%endfor%} +
+{% if len(Members.items) == 0 %} +

No Results Found

+{%endif%} +
+ Previous +

Page {{pageNumber}} of {{Members.pages}}

+ Next +
+ +{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/payout.html b/app/pages/groups/admin_subpage/payout.html new file mode 100644 index 0000000..e864f70 --- /dev/null +++ b/app/pages/groups/admin_subpage/payout.html @@ -0,0 +1,42 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +
+

One-time Payout

+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+

Enter the username of the recipient you want to pay! This is CaSe SeNsItIvE and please double check before clicking payout, all payments are final and cannot be reversed

+
+ +
+ +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/roles.html b/app/pages/groups/admin_subpage/roles.html new file mode 100644 index 0000000..64e4d0e --- /dev/null +++ b/app/pages/groups/admin_subpage/roles.html @@ -0,0 +1,198 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +
+
+
+
Roles
+
+ {% for role in roles %} + {{role.name}} + {% endfor %} +
+ Create Role +
+
+
+
+
+
Name
+ +
+
+
Description
+ +
+
+
Rank ( 0-255 )
+ +
+ +
+
Posts
+
+
+

View group wall

+
+ +
+
+
+

Post on group wall

+
+ +
+
+
+

Delete group wall posts

+
+ +
+
+
+

View group shout

+
+ +
+
+
+

Post group shout

+
+ +
+
+
+
Members
+
+
+

Manage lower-ranked member ranks

+
+ +
+
+
+

Accept join requests

+
+ +
+
+
+

Kick lower-ranked members

+
+ +
+
+
+
Assets
+
+
+

Create Assets

+
+ +
+
+
+

Manage Assets

+
+ +
+
+
+

Manage Group Games

+
+ +
+
+
+
Miscellaneous
+
+
+

Manage allies and enemies

+
+ +
+
+
+

View audit log

+
+ +
+
+
+
+
+ +
+
+
+
+{% if selectedrole.rank == 255 or group.owner_id != currentuser.id %} + +{%endif%} +{% if group.owner_id != currentuser.id %} + +{%endif%} +{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/settings.html b/app/pages/groups/admin_subpage/settings.html new file mode 100644 index 0000000..b270215 --- /dev/null +++ b/app/pages/groups/admin_subpage/settings.html @@ -0,0 +1,60 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} +

+ Settings +

+
+
+
Requires Approval
+
+ + +
+
+ + +
+
+
+
Entry Qualifications
+
+ + +
+
+
+
Miscellaneous
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + {%if group.owner_id != user.id %} +

Only the owner of the group can modify the group settings

+ {%endif%} +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_template.html b/app/pages/groups/admin_template.html new file mode 100644 index 0000000..4280f85 --- /dev/null +++ b/app/pages/groups/admin_template.html @@ -0,0 +1,122 @@ +{% extends '__layout__.html' %} +{% block title %}Group Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{{group.name}}

+
+

Owned By {% if group.owner_id != None: %}{{group.owner.username}}{%else%}No One!{%endif%}

+ {% if permissions.spend_group_funds: %} +

Group Funds R${{group.economy.robux_balance}}T${{group.economy.tix_balance}}

+ {%endif%} + Return to group page +
+
+
+
+
+ + Group Info + + + Members + + + Settings + + {%if permissions.manage_relationships: %} + + Relationships + + {%endif%} + + Roles + + + Revenue + + {%if permissions.spend_group_funds: %} + + Payouts + + {%endif%} + {% if permissions.view_audit_logs: %} + + Audit Log + + {%endif%} +
+
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + {% block page_content%}{%endblock%} +
+
+
+
+ +{% endblock %} diff --git a/app/pages/groups/create.html b/app/pages/groups/create.html new file mode 100644 index 0000000..2dd5fc3 --- /dev/null +++ b/app/pages/groups/create.html @@ -0,0 +1,59 @@ +{% extends '__layout__.html' %} +{% block title %}Create Group{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Create Group

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
Group Name
+ +
+
+
Group Description
+ +
+
+
Group Icon
+ +

File must be less than 2MB, Has to be a PNG, Must have a 1:1 ratio and be between 128x128 to 1024x1024

+
+ +
+ +
+
+
+{% endblock %} diff --git a/app/pages/groups/groupspage.py b/app/pages/groups/groupspage.py new file mode 100644 index 0000000..aae39f7 --- /dev/null +++ b/app/pages/groups/groupspage.py @@ -0,0 +1,1278 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, abort, jsonify, make_response +from app.services import groups, economy +from app.models.user import User +from app.models.groups import Group, GroupMember, GroupJoinRequest, GroupRole, GroupRolePermission, GroupWallPost, GroupEconomy, GroupIcon, GroupSettings, GroupStatus +from app.util import auth, websiteFeatures, textfilter, s3helper, membership, transactions +from app.util.redirect import safe_redirect +from app.util.embeds import RenderAssetEmbed +from app.extensions import db, limiter, csrf +from slugify import slugify +from functools import wraps +from app.util.assetvalidation import ValidateClothingImage +from app.enums.MembershipType import MembershipType +from app.enums.TransactionType import TransactionType +import hashlib +import logging +from io import BytesIO +import string + +allowedCharacters = string.ascii_letters + string.digits + string.punctuation + " " + "™®" + +groups_page = Blueprint('groups_page', __name__, template_folder='templates') + +def CountAlnumericCharacters( string : str ): + count = 0 + for char in string: + if char.isalnum(): + count += 1 + return count + +def GetUserGroups( user : User ) -> list[GroupMember]: + return GroupMember.query.filter_by(user_id=user.id).all() + +def AdminPermissionRequired( GroupObj : Group | int, TargetUser : User | int ): + GroupObj : Group = groups.GetGroupFromId(GroupObj) + TargetUser : User = groups.GetUserFromId(TargetUser) + if GroupObj is None or TargetUser is None: + return abort(403) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(TargetUser, GroupObj) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + isGroupAdmin = UserPermissions.change_rank or \ + UserPermissions.manage_clan or \ + UserPermissions.manage_relationships or \ + UserPermissions.remove_members or \ + UserPermissions.spend_group_funds + + if not isGroupAdmin: + return abort(403) + +@groups_page.route('/groups/admin/', methods=['GET']) +@auth.authenticated_required +def groupadmin(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + + return redirect(f"/groups/admin/{groupid}/info") + +@groups_page.route("/groups/admin//kick/", methods=['DELETE']) +@auth.authenticated_required +@limiter.limit("25/minute") +def groupadmin_kickmember(groupid, userid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + if not UserPermissions.remove_members: + flash("You do not have permission to kick a user.", "error") + return jsonify({"success": False}),403 + + try: + TargetUser : User = groups.GetUserFromId(userid) + except groups.GroupExceptions.UserDoesNotExist: + flash("The user you are trying to kick does not exist.", "error") + return jsonify({"success": False}),404 + + if TargetUser == AuthenticatedUser: + flash("You cannot kick yourself.", "error") + return jsonify({"success": False}),403 + + TargetUserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(TargetUser, groupObject) + if TargetUserCurrentRole.rank == 0: + flash("This user is not a member of this group.", "error") + return jsonify({"success": False}),400 + + if TargetUserCurrentRole.rank >= UserCurrentRole.rank: + flash("You cannot kick a user with the same or higher rank than you.", "error") + return jsonify({"success": False}),403 + + groups.RemoveUserFromGroup(TargetUser, groupObject) + flash(f"You have kicked {TargetUser.username} from this group.", "success") + return jsonify({"success": True}),200 + +@groups_page.route("/groups/admin//members", methods=['GET']) +@auth.authenticated_required +def groupadmin_members(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + searchByUsername = request.args.get("search", None, str) + searchByRole = request.args.get("role", None, int) # Role Id + pageNumber = request.args.get("page", 1, int) + + if searchByUsername is not None: + if CountAlnumericCharacters(searchByUsername) < 3: + searchByUsername = None + if searchByRole is not None: + try: + searchByRole : GroupRole = groups.GetRolesetFromId(searchByRole) + if searchByRole.group_id != groupObject.id: + searchByRole = None + except groups.GroupExceptions.RolesetDoesNotExist: + searchByRole = None + if pageNumber < 1: + pageNumber = 1 + + if searchByUsername is None and searchByRole is None: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id) + elif searchByUsername is None and searchByRole is not None: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id, group_role_id=searchByRole.id) + elif searchByUsername is not None and searchByRole is None: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id).join(User).filter(User.username.ilike(f"%{searchByUsername}%")) + else: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id, group_role_id=searchByRole.id).join(User).filter(User.username.ilike(f"%{searchByUsername}%")) + + Members = Members.order_by(GroupMember.created_at.desc()).paginate(page = pageNumber, per_page = 12, error_out = False) + SortedRoles = groupObject.roles + SortedRoles.sort(key=lambda x: x.rank, reverse=False) + + JoinRequestCount = GroupJoinRequest.query.filter_by(group_id=groupObject.id).count() + + return render_template( + "groups/admin_subpage/members.html", + group=groupObject, + user=AuthenticatedUser, + role=UserCurrentRole, + permissions=UserPermissions, + page="members", + searchByUsername=searchByUsername, + searchByRole=searchByRole, + pageNumber=pageNumber, + Members=Members, + SortedRoles = SortedRoles, + JoinRequestCount=JoinRequestCount + ) + +@groups_page.route("/groups/admin//change_role//", methods=['POST']) +@auth.authenticated_required +@limiter.limit("15/minute") +def groupadmin_members_change_role(groupid, userid, roleid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not UserPermissions.change_rank: + flash("You do not have permission to change a user's role.", "error") + return jsonify({"success": False}),403 + if userid == AuthenticatedUser.id: + flash("You cannot change your own role.", "error") + return jsonify({"success": False}),400 + + try: + TargetRole : GroupRole = groups.GetRolesetFromId(roleid) + if TargetRole.group_id != groupObject.id: + TargetRole = None + except groups.GroupExceptions.RolesetDoesNotExist: + TargetRole = None + if TargetRole is None or TargetRole.rank == 0: + flash("The role you are trying to set is invalid.", "error") + return jsonify({"success": False}),400 + if TargetRole.rank > UserCurrentRole.rank: + flash("You cannot set a user's role to a role higher than your own.", "error") + return jsonify({"success": False}),400 + + try: + TargetUser : User = groups.GetUserFromId(userid) + except groups.GroupExceptions.UserDoesNotExist: + flash("The user you are trying to set a role for does not exist.", "error") + return jsonify({"success": False}),400 + + TargetUserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(TargetUser, groupObject) + if TargetUserCurrentRole.rank > UserCurrentRole.rank: + flash("You cannot set a higher ranking user's role.", "error") + return jsonify({"success": False}),400 + if TargetUserCurrentRole.rank == 0: # Not in group + flash("The user you are trying to set a role for is not in the group.", "error") + return jsonify({"success": False}),400 + if TargetUserCurrentRole == TargetRole: + flash("The user you are trying to set a role for already has that role.", "error") + return jsonify({"success": True}),200 + + groups.ChangeUserRole(TargetUser, TargetRole) + flash(f"Successfully changed {TargetUser.username}'s role to {TargetRole.name}.", "success") + return jsonify({"success": True}),200 + +@groups_page.route("/groups/admin//members", methods=['POST']) +@auth.authenticated_required +@csrf.exempt +def groupadmin_members_search(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + searchInput = request.form.get("search-input", "", str) + searchByRole = request.form.get("search-by", 0, int) + + if searchByRole == 0: + searchByRole = None + if searchInput == "": + searchInput = None + + if searchInput is None and searchByRole is None: + return redirect(f"/groups/admin/{groupid}/members") + elif searchInput is None and searchByRole is not None: + return redirect(f"/groups/admin/{groupid}/members?role={searchByRole}") + elif searchInput is not None and searchByRole is None: + return redirect(f"/groups/admin/{groupid}/members?search={searchInput}") + else: + return redirect(f"/groups/admin/{groupid}/members?search={searchInput}&role={searchByRole}") + +@groups_page.route("/groups/admin//members/requests", methods=['GET']) +@auth.authenticated_required +def groupadmin_members_requests(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + PageNumber = request.args.get( key = "page", default=1, type=int) + JoinRequests : list[GroupJoinRequest] = GroupJoinRequest.query.filter_by(group_id=groupObject.id).order_by(GroupJoinRequest.created_at.desc()).paginate( page=PageNumber, per_page=12, error_out=False) + return render_template("groups/admin_subpage/join_requests.html", group=groupObject, user=AuthenticatedUser, role=UserCurrentRole, permissions=UserPermissions, page="members", JoinRequests=JoinRequests) + +@groups_page.route("/groups/admin//members/requests/deny/", methods=['GET']) +@auth.authenticated_required +def groupadmin_members_requests_deny(groupid, userid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + + UserJoinRequest : GroupJoinRequest = GroupJoinRequest.query.filter_by(group_id=groupObject.id, user_id=userid).first() + if UserJoinRequest is None: + flash("Join request does not exist.", "error") + return redirect(f"/groups/admin/{groupid}/members/requests") + db.session.delete(UserJoinRequest) + db.session.commit() + return redirect(f"/groups/admin/{groupid}/members/requests") + +@groups_page.route("/groups/admin//members/requests/accept/", methods=['GET']) +@auth.authenticated_required +def groupadmin_members_requests_accept(groupid, userid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + + UserJoinRequest : GroupJoinRequest = GroupJoinRequest.query.filter_by(group_id=groupObject.id, user_id=userid).first() + if UserJoinRequest is None: + flash("Join request does not exist.", "error") + return redirect(f"/groups/admin/{groupid}/members/requests") + UserGroupCount = groups.GetUserGroupCount(userid) + UserMembership : MembershipType = membership.GetUserMembership(userid) + GroupLimit = { + MembershipType.NonBuildersClub: 5, + MembershipType.BuildersClub: 10, + MembershipType.TurboBuildersClub: 20, + MembershipType.OutrageousBuildersClub: 100 + } + if UserGroupCount >= GroupLimit[UserMembership]: + flash("This user has reached the maximum number of groups they can join.", "error") + return redirect(f"/groups/admin/{groupid}/members/requests") + db.session.delete(UserJoinRequest) + db.session.commit() + groups.AddUserToGroup(userid, groupObject, ForceJoin=True) + + return redirect(f"/groups/admin/{groupid}/members/requests") + +@groups_page.route("/groups/admin//members/requests/deny_all", methods=['POST']) +@auth.authenticated_required +def groupadmin_members_requests_deny_all(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + + AllJoinRequests : list[GroupJoinRequest] = GroupJoinRequest.query.filter_by(group_id=groupObject.id).all() + for joinRequest in AllJoinRequests: + db.session.delete(joinRequest) + db.session.commit() + return redirect(f"/groups/admin/{groupid}/members/requests") + +@groups_page.route("/groups/admin//info", methods=['GET']) +@auth.authenticated_required +def groupadmin_info(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + return render_template("groups/admin_subpage/groupinfo.html", group=groupObject, user=AuthenticatedUser, role=UserCurrentRole, permissions=UserPermissions, page="info") + +@groups_page.route("/groups/admin//info", methods=['POST']) +@auth.authenticated_required +@limiter.limit("10/minute") +def groupadmin_info_post(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + AdminPermissionRequired(groupObject, AuthenticatedUser) + + ImageFile = request.files.get("file") + NewDescription = request.form.get("description") + + if ImageFile is not None and ImageFile.filename != "": + if ImageFile.content_length > 1024 * 1024 * 2: # 2MB + flash("Icon is too large, must be less than 2MB", "error") + return redirect(f"/groups/admin/{groupid}/info") + if ImageFile.content_type not in ["image/png", "image/jpeg"]: + flash("Icon must be a PNG or JPEG image", "error") + return redirect(f"/groups/admin/{groupid}/info") + # Validate icon + NewIcon = ValidateClothingImage( ImageFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if NewIcon is False or NewIcon is None: + flash("Icon is invalid", "error") + return redirect(f"/groups/admin/{groupid}/info") + if NewIcon.width != NewIcon.height: + flash("Icon must be a square", "error") + return redirect(f"/groups/admin/{groupid}/info") + if NewIcon.width > 1024 or NewIcon.height > 1024: + flash("Icon must be less than 1024x1024", "error") + return redirect(f"/groups/admin/{groupid}/info") + if NewIcon.width < 128 or NewIcon.height < 128: + flash("Icon must be at least 128x128", "error") + return redirect(f"/groups/admin/{groupid}/info") + + ImageFile = BytesIO() + NewIcon.save(ImageFile, format="PNG") + + ImageFile.seek(0) + IconImageHash = hashlib.sha512(ImageFile.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + ImageFile.seek(0) + s3helper.UploadBytesToS3(ImageFile.read(), IconImageHash, contentType="image/png") + + groups.SetNewGroupIcon(groupObject, IconImageHash, AuthenticatedUser) + flash("Group icon updated", "success") + + if NewDescription != groupObject.description: + if len(NewDescription) > 1024: + flash("Description must be less than 1024 characters", "error") + return redirect(f"/groups/admin/{groupid}/info") + if CountAlnumericCharacters(NewDescription) < 10: + flash("Description must contain at least 10 alphanumeric characters", "error") + return redirect(f"/groups/admin/{groupid}/info") + NewLineCount = NewDescription.count("\n") + if NewLineCount > 15: + flash("Description must contain less than 15 newlines", "error") + return redirect(f"/groups/admin/{groupid}/info") + + NewDescription = textfilter.FilterText(NewDescription) + groupObject.description = NewDescription + db.session.commit() + flash("Group description updated", "success") + + return redirect(f"/groups/admin/{groupid}/info") + +@groups_page.route("/groups/admin//settings", methods=['GET']) +@auth.authenticated_required +def groupadmin_settings(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + return render_template("groups/admin_subpage/settings.html", group=groupObject, user=AuthenticatedUser, role=UserCurrentRole, permissions=UserPermissions, page="settings") + +@groups_page.route("/groups/admin//settings", methods=['POST']) +@auth.authenticated_required +@limiter.limit("15/minute") +def groupadmin_settings_post(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + if groupObject.owner_id != AuthenticatedUser.id: + return abort(403) + + approval_required = request.form.get("approval-required", "off", str) == "on" + membership_required = request.form.get("membership-required", "off", str) == "on" + enemy_declarations_allowed = request.form.get("declarations-allowed", "off", str) == "on" + funds_visible = request.form.get("funds-visible", "off", str) == "on" + games_visible = request.form.get("games-visible", "off", str) == "on" + + groupSettings : GroupSettings = groupObject.settings + groupSettings.approval_required = approval_required + groupSettings.membership_required = membership_required + groupSettings.enemies_allowed = enemy_declarations_allowed + groupSettings.funds_visible = funds_visible + groupSettings.games_visible = games_visible + if not approval_required: + AllJoinRequests : list[GroupJoinRequest] = GroupJoinRequest.query.filter_by(group_id=groupObject.id).all() + for joinRequest in AllJoinRequests: + db.session.delete(joinRequest) + db.session.commit() + + flash("Group settings updated", "success") + return redirect(f"/groups/admin/{groupid}/settings") + +@groups_page.route('/groups/admin//roles', methods=["GET"]) +@auth.authenticated_required +def groupadmin_roles(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + AdminPermissionRequired(groupObject, AuthenticatedUser) + + # Redirect to the top role + TopRole : GroupRole = GroupRole.query.filter_by(group_id=groupObject.id).order_by(GroupRole.rank.desc()).first() + return redirect(f"/groups/admin/{groupid}/roles/{TopRole.id}/view") + +@groups_page.route('/groups/admin//roles//view', methods=["GET"]) +@auth.authenticated_required +def groupadmin_role_view(groupid, roleid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + AdminPermissionRequired(groupObject, AuthenticatedUser) + + try: + roleObject : GroupRole = groups.GetRolesetFromId(roleid) + except groups.GroupExceptions.RolesetDoesNotExist: + return abort(404) + if roleObject.group_id != groupObject.id: + return abort(404) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + AllGroupRoles : list[GroupRole] = GroupRole.query.filter_by(group_id=groupObject.id).order_by(GroupRole.rank.desc()).all() + return render_template("groups/admin_subpage/roles.html", group=groupObject, user=AuthenticatedUser, roles=AllGroupRoles, page="roles", role=UserCurrentRole, permissions=UserPermissions, selectedrole = roleObject) + +@groups_page.route('/groups/admin//roles//update', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("10/minute") +def groupadmin_role_update(groupid, roleid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + try: + TargetRole : GroupRole = groups.GetRolesetFromId(roleid) + except groups.GroupExceptions.RolesetDoesNotExist: + return abort(404) + if TargetRole.group_id != groupObject.id: + return abort(404) + + RoleName = request.form.get("role-name", TargetRole.name, str) + RoleDescription = request.form.get("role-description", TargetRole.description, str) + RoleRank = request.form.get("role-rank", TargetRole.rank, int) + + ViewWallPermission = request.form.get("view_wall", "off", str) == "on" + PostWallPermission = request.form.get("post_to_wall", "off", str) == "on" + DeleteWallPermission = request.form.get("delete_from_wall", "off", str) == "on" + ViewGroupShoutPermission = request.form.get("view_status", "off", str) == "on" + PostGroupShoutPermission = request.form.get("post_to_status", "off", str) == "on" + + ManageMembersPermission = request.form.get("change_rank", "off", str) == "on" + AcceptJoinsPermission = request.form.get("invite_members", "off", str) == "on" + RemoveMembersPermission = request.form.get("remove_members", "off", str) == "on" + + CreateItemsPermission = request.form.get("create_items", "off", str) == "on" + ManageItemsPermission = request.form.get("manage_items", "off", str) == "on" + ManageGroupGamesPermission = request.form.get("manage_group_games", "off", str) == "on" + + ManageRelationshipsPermission = request.form.get("manage_relationships", "off", str) == "on" + ViewAuditLogsPermission = request.form.get("view_audit_logs", "off", str) == "on" + + if TargetRole.rank == 0: + if RoleName != TargetRole.name or RoleDescription != TargetRole.description or RoleRank != TargetRole.rank: + return abort(400) + if CreateItemsPermission or ManageItemsPermission or ManageGroupGamesPermission: + flash("You cannot give the guest role Asset permissions.", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + + FilteredRoleName = textfilter.FilterText(RoleName) + FilteredRoleDescription = textfilter.FilterText(RoleDescription) + if len(FilteredRoleName) > 32: + flash("Role name must be less than 32 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + if len(FilteredRoleDescription) > 256: + flash("Role description must be less than 256 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + if CountAlnumericCharacters(FilteredRoleName) < 3: + flash("Role name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + + if RoleRank < 1 or RoleRank > 254: + if TargetRole.rank not in [0, 255]: + flash("Role rank must be between 1 and 254. 0 and 255 are reserved for guests and the owner.", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + + if TargetRole.rank != 0: + TargetRole.name = FilteredRoleName + TargetRole.description = FilteredRoleDescription + + if TargetRole.rank not in [0,255]: + TargetRole.rank = RoleRank + + if TargetRole.rank != 255: + groups.ModifyRolesetPermission( + TargetRole, + ViewWall=ViewWallPermission, + PostToWall=PostWallPermission, + DeleteFromWall=DeleteWallPermission, + ViewStatus=ViewGroupShoutPermission, + PostToStatus=PostGroupShoutPermission, + + ChangeRank=ManageMembersPermission, + InviteMembers=AcceptJoinsPermission, + RemoveMembers=RemoveMembersPermission, + + CreateItems=CreateItemsPermission, + ManageItems=ManageItemsPermission, + ManageGroupGames=ManageGroupGamesPermission, + + ManageRelationships=ManageRelationshipsPermission, + ViewAuditLogs=ViewAuditLogsPermission + ) + + db.session.commit() + flash("Role updated", "success") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + +@groups_page.route('/groups/admin//roles/create', methods=["GET"]) +@auth.authenticated_required +def groupadmin_role_create(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + return render_template("groups/admin_subpage/create_role.html", group=groupObject, user=AuthenticatedUser, page="roles", role=UserCurrentRole, permissions=UserPermissions) + +@groups_page.route('/groups/admin//roles/create', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("10/minute") +def groupadmin_role_create_post(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + RoleName = request.form.get("name", None, str) + RoleDescription = request.form.get("description", None, str) + RoleRank = request.form.get("rank", None, int) + + if RoleName is None or RoleDescription is None or RoleRank is None: + return abort(400) + if RoleRank < 1 or RoleRank > 254: + flash("Role rank must be between 1 and 254. 0 and 255 are reserved for guests and the owner.", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + if len(RoleName) > 32: + flash("Role name must be less than 32 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + if len(RoleDescription) > 256: + flash("Role description must be less than 256 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + if CountAlnumericCharacters(RoleName) < 3: + flash("Role name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + + GroupRoleCount = GroupRole.query.filter_by(group_id=groupObject.id).count() + if GroupRoleCount >= 255: + flash("You cannot create more than 255 roles. ( Why do you even need that many!? )", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + + RobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if RobuxBalance < 25: + flash("You do not have enough robux to create a new role.", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + economy.DecrementTargetBalance(AuthenticatedUser, 25, 0) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = 25, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = "Created Group Role" + ) + + FilteredRoleName = textfilter.FilterText(RoleName) + FilteredRoleDescription = textfilter.FilterText(RoleDescription) + + NewRole : GroupRole = groups.CreateGroupRoleset(groupObject, FilteredRoleName, FilteredRoleDescription, RoleRank) + groups.ModifyRolesetPermission( + NewRole, + ViewWall=True, + PostToWall=True, + ViewStatus=True + ) + return redirect(f"/groups/admin/{groupid}/roles/{NewRole.id}/view") + +@groups_page.route('/groups/admin//payouts', methods=["GET"]) +@auth.authenticated_required +def groupadmin_payout_user(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + return render_template("groups/admin_subpage/payout.html", group=groupObject, user=AuthenticatedUser, page="payouts", role=UserCurrentRole, permissions=UserPermissions) + +@groups_page.route('/groups/admin//payouts/one-time', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("15/minute") +def groupadmin_payout_onetime_user_post( groupid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + payoutCurrency : str = request.form.get( key = "payout-currency", default = None, type = str ) + payoutAmount : int = request.form.get( key = "payout-amount", default = None, type = int ) + payoutRecipientUsername : str = request.form.get( key = "payout-recipient", default = None, type = str ) + + if payoutCurrency is None or payoutAmount is None or payoutRecipientUsername is None: + return abort(400) + + if payoutCurrency not in ["robux", "tickets"]: + return abort(400) + + if payoutAmount < 1: + flash("Payout amount must be greater than 0", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + if len(payoutRecipientUsername) > 128: + flash("User does not exist or username is not correct", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + payoutRecipient : User = User.query.filter_by(username=payoutRecipientUsername).first() + if payoutRecipient is None: + flash("User does not exist or username is not correct", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + if payoutRecipient.accountstatus != 1: + flash("User has a active ban", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + if groups.GetUserRankInGroup(payoutRecipient, groupObject) == 0: + flash("User is not in the group", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + robuxBalance, ticketsBalance = economy.GetGroupBalance( groupObject ) + if payoutCurrency == "robux": + if robuxBalance < payoutAmount: + flash("Group does not have enough robux to payout", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + elif payoutCurrency == "tickets": + if ticketsBalance < payoutAmount: + flash("Group does not have enough tickets to payout", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + try: + economy.TransferFunds( + Source = groupObject, + Target = payoutRecipient, + Amount = payoutAmount, + CurrencyType = 0 if payoutCurrency == "robux" else 1, + ApplyTax = False + ) + except economy.InsufficientFundsException: + flash("Group does not have enough funds to payout", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + except Exception as e: + logging.error(f"groupadmin_payout_onetime_user_post : An error occured while trying to payout: {e}") + flash("An error occured while trying to payout, please contact support", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + try: + transactions.CreateTransaction( + Reciever = payoutRecipient, + Sender = groupObject, + CurrencyAmount = payoutAmount, + CurrencyType = 0 if payoutCurrency == "robux" else 1, + TransactionType = TransactionType.GroupPayout, + AssetId = None, + CustomText = f"Group Payout from {AuthenticatedUser.username}" + ) + except Exception as e: + logging.error(f"groupadmin_payout_onetime_user_post : An error occured while trying to create a transaction: {e}") + + flash(f"Successfully paid {payoutRecipient.username} {payoutAmount} {payoutCurrency}", "success") + return redirect(f"/groups/admin/{groupid}/payouts") + +@groups_page.route('/groups//') +@groups_page.route('/groups//') +@auth.authenticated_or_bot_required +def groupview(groupid, slug=""): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + SlugName = slugify(groupObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + + if slug != SlugName: + PageNumber = request.args.get( key = "page", default=None, type=int) + if PageNumber is None: + return redirect(f"/groups/{groupid}/{SlugName}") + else: + return redirect(f"/groups/{groupid}/{SlugName}?page={PageNumber}") + if auth.IsCrawlerBot(): + return RenderAssetEmbed( + title=groupObject.name, + description=groupObject.description, + image_path=f"/Thumbs/GroupIcon.ashx?groupid={groupObject.id}&x=150&y=150", + canonical_path=f"/groups/{groupObject.id}/{SlugName}", + large_image=False + ) + + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + + GroupWall = [] + if UserCurrentRole.permissions.view_wall: + PageNumber : int = request.args.get( key = "page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + GroupWall = GroupWallPost.query.filter_by(group_id=groupObject.id).order_by(GroupWallPost.created_at.desc()).paginate( page=PageNumber, per_page=10, error_out=False) + + GroupRoles : list[GroupRole] = groupObject.roles + GroupRoles.sort(key=lambda x: x.rank, reverse=False) + + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + isGroupAdmin = UserPermissions.change_rank or \ + UserPermissions.manage_clan or \ + UserPermissions.manage_relationships or \ + UserPermissions.remove_members or \ + UserPermissions.spend_group_funds + CurrentJoinRequest : GroupJoinRequest | None = groups.GetJoinRequest(AuthenticatedUser, groupObject) + + return render_template( + 'groups/view.html', + groupObj=groupObject, + groupservice = groups, + UserCurrentRole=UserCurrentRole, + UserGroups=GetUserGroups(AuthenticatedUser), + GroupWall=GroupWall, + GroupRoles=GroupRoles, + GroupStatus=groups.GetLatestGroupStatus(groupObject), + PageNumber=PageNumber, + isThereNextPage=GroupWall.has_next, + isTherePreviousPage=GroupWall.has_prev, + slug=SlugName, + isGroupAdmin=isGroupAdmin, + CurrentJoinRequest=CurrentJoinRequest) + +@groups_page.errorhandler(429) +def RateLimitReached(e): + if request.headers.get("Accept", default="text/html") == "application/json": + return jsonify({ + "error": "You are being rate limited. Please try again later.", + "success": False + }), 429 + + flash("You are being rate limited. Please try again later.", "error") + return make_response(redirect(safe_redirect(fallback_url="/groups")), 429) + +@groups_page.route('/groups/join/', methods=["POST"]) +@limiter.limit("5/minute", on_breach=RateLimitReached) +@auth.authenticated_required +def groupjoin(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + if not websiteFeatures.GetWebsiteFeature("GroupJoining"): + flash("Group joining is temporarily disabled!", "error") + return redirect(f"/groups/{groupid}/") + + if groupObject.locked: + flash("This group is locked!", "error") + return redirect(f"/groups/{groupid}/") + + AuthenticatedUser : User = auth.GetCurrentUser() + if groups.GetUserRankInGroup(AuthenticatedUser, groupObject) != 0: + flash("You are already in this group!", "error") + return redirect(f"/groups/{groupid}/") + ExisitingJoinRequest : GroupJoinRequest = groups.GetJoinRequest(AuthenticatedUser, groupObject) + if ExisitingJoinRequest is not None: + flash("You have already requested to join this group!", "error") + return redirect(f"/groups/{groupid}/") + + UserMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + if groupObject.settings.membership_required: + if UserMembership == MembershipType.NonBuildersClub: + flash("You need to have a Builders Club membership to join this group!", "error") + return redirect(f"/groups/{groupid}/") + + UserGroupCount = groups.GetUserGroupCount(AuthenticatedUser) + GroupLimit = { + MembershipType.NonBuildersClub: 5, + MembershipType.BuildersClub: 10, + MembershipType.TurboBuildersClub: 20, + MembershipType.OutrageousBuildersClub: 100 + } + if UserGroupCount >= GroupLimit[UserMembership]: + flash("You have reached the maximum number of groups you can join!", "error") + return redirect(f"/groups/{groupid}/") + + JoinResponse : GroupMember | GroupJoinRequest | None = groups.AddUserToGroup( TargetUser=AuthenticatedUser, TargetGroup=groupObject, ForceJoin=False) + if JoinResponse is None: + flash("An error occured while trying to join this group!", "error") + return redirect(f"/groups/{groupid}/") + if isinstance(JoinResponse, GroupJoinRequest): + flash("Your join request has been sent!", "success") + return redirect(f"/groups/{groupid}/") + + flash("Joined group successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route('/groups/leave/', methods=["POST"]) +@auth.authenticated_required +def groupleave(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + if not websiteFeatures.GetWebsiteFeature("GroupLeaving"): + flash("Group leaving is temporarily disabled!", "error") + return redirect(f"/groups/{groupid}/") + + AuthenticatedUser : User = auth.GetCurrentUser() + if groups.GetUserRankInGroup(AuthenticatedUser, groupObject) == 0: + CurrentJoinRequest : GroupJoinRequest | None = groups.GetJoinRequest(AuthenticatedUser, groupObject) + if CurrentJoinRequest is not None: + db.session.delete(CurrentJoinRequest) + db.session.commit() + flash("Your join request has been cancelled!", "success") + return redirect(f"/groups/{groupid}/") + flash("You are not in this group!", "error") + return redirect(f"/groups/{groupid}/") + if groupObject.owner_id == AuthenticatedUser.id: + flash("Owners cannot leave their group for now", "error") + return redirect(f"/groups/{groupid}/") + + LeaveResponse : bool = groups.RemoveUserFromGroup( TargetUser=AuthenticatedUser, TargetGroup=groupObject) + if not LeaveResponse: + flash("An error occured while trying to leave this group!", "error") + return redirect(f"/groups/{groupid}/") + + flash("Left group successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route('/groups/members_json/', methods=["GET"]) +@groups_page.route('/groups//members_json', methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("5/second") +def groupmembers_json(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + RolesetId : int = request.args.get( key ="role", default=None, type=int) + PageNumber : int = request.args.get( key = "page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + try: + RolesetObject : GroupRole = groups.GetRolesetFromId(RolesetId) + except groups.GroupExceptions.RolesetDoesNotExist: + return abort(404) + + if RolesetObject.group_id != groupObject.id: + return abort(404) + + Members : list[GroupMember] = GroupMember.query.filter_by( + group_id=groupObject.id, + group_role_id=RolesetObject.id + ).order_by(GroupMember.created_at.desc()).paginate( page=PageNumber, per_page=10, error_out=False) + + MembersList = [] + for Member in Members.items: + MembersList.append({ + "userId": Member.user_id, + "username": Member.user.username, + }) + + return jsonify({ + "users": MembersList, + "nextpage": Members.has_next + }) + +@groups_page.route('/groups/wall_post/', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("5/minute", on_breach=RateLimitReached) +def PostToGroupWall( groupid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + groups.AssertUserHasPermission(AuthenticatedUser, groupObject, GroupRolePermission.post_to_wall) + except groups.GroupExceptions.InsufficientPermssions: + flash("You do not have permission to post to this group's wall!", "error") + return redirect(f"/groups/{groupid}/") + + if not websiteFeatures.GetWebsiteFeature("GroupWallPosting"): + flash("Group Wall Posting is temporarily disabled!", "error") + return redirect(f"/groups/{groupid}/") + + PostContent : str = request.form.get("post_content", default=None, type=str) + if PostContent is None or PostContent == "": + flash("Please fill in all fields", "error") + return redirect(f"/groups/{groupid}/") + + if len(PostContent) > 512: + flash("Your post cannot be longer than 512 characters!", "error") + return redirect(f"/groups/{groupid}/") + + if CountAlnumericCharacters(PostContent) < 3: + flash("Your post must contain at least 3 alphanumeric characters!", "error") + return redirect(f"/groups/{groupid}/") + + if len(PostContent.split("\n")) > 10: + flash("Your post cannot contain more than 10 lines!", "error") + return redirect(f"/groups/{groupid}/") + + PostResponse : GroupWallPost | None = groups.PostToGroupWall(AuthenticatedUser, groupObject, PostContent) + if PostResponse is None: + flash("An error occured while trying to post to this group's wall!", "error") + return redirect(f"/groups/{groupid}/") + + return redirect(f"/groups/{groupid}/") + +@groups_page.route('/groups//delete_post/', methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +@limiter.limit("10/minute", on_breach=RateLimitReached) +def DeleteGroupWallPost( groupid : int, postid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + PostObject : GroupWallPost = GroupWallPost.query.filter_by(id=postid, group_id=groupObject.id).first() + if PostObject is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + groups.AssertUserHasPermission(AuthenticatedUser, groupObject, GroupRolePermission.delete_from_wall) + except groups.GroupExceptions.InsufficientPermssions: + if PostObject.poster_id != AuthenticatedUser.id: + flash("You do not have permission to delete this post!", "error") + return redirect(f"/groups/{groupid}/") + + groups.DeleteGroupWallPost(PostObject, AuthenticatedUser, ForceDelete=True) + + flash("Deleted post successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route("/groups/update_status/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("5/minute", on_breach=RateLimitReached) +def UpdateGroupStatus( groupid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + try: + groups.AssertUserHasPermission(AuthenticatedUser, groupObject, GroupRolePermission.post_to_status) + except groups.GroupExceptions.InsufficientPermssions: + flash("You do not have permission to update this group's status!", "error") + return redirect(f"/groups/{groupid}/") + + OriginalStatus : str = request.form.get( + key="status", + default=None, + type=str + ) + if OriginalStatus is None: + flash("Please fill in all fields!", "error") + return redirect(f"/groups/{groupid}/") + + if len(OriginalStatus) > 255: + flash("Your status cannot be longer than 255 characters!", "error") + return redirect(f"/groups/{groupid}/") + + if CountAlnumericCharacters(OriginalStatus) < 3 and OriginalStatus != "": + flash("Your status must contain at least 3 alphanumeric characters!", "error") + return redirect(f"/groups/{groupid}/") + + FilteredStatus : str = textfilter.FilterText(OriginalStatus) + + groups.PostToGroupStatus( + AuthenticatedUser, + groupObject, + FilteredStatus + ) + + flash("Updated group status successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route("/groups/create", methods=["GET"]) +@auth.authenticated_required +def CreateGroupPage(): + if not websiteFeatures.GetWebsiteFeature("GroupCreation"): + flash("Group creation is temporarily disabled!", "error") + return render_template("groups/create.html") + return render_template("groups/create.html") + +@groups_page.route("/groups/create", methods=["POST"]) +@auth.authenticated_required +def CreateGroupPage_post(): + AuthenticatedUser : User = auth.GetCurrentUser() + if not websiteFeatures.GetWebsiteFeature("GroupCreation"): + flash("Group creation is temporarily disabled!", "error") + return redirect("/groups/create") + + GroupName : str = request.form.get("name", default=None, type=str) + GroupDescription : str = request.form.get("description", default=None, type=str) + IconImage = request.files.get("icon", default=None) + if GroupName is None or GroupDescription is None or IconImage is None: + flash("Please fill in all fields!", "error") + return redirect("/groups/create") + GroupName = GroupName.strip() + + if len(GroupName) > 30: + flash("Group name cannot be longer than 30 characters!", "error") + return redirect("/groups/create") + if len(GroupDescription) > 1024: + flash("Group description cannot be longer than 1024 characters!", "error") + return redirect("/groups/create") + if CountAlnumericCharacters(GroupName) < 3: + flash("Group name must contain at least 3 alphanumeric characters!", "error") + return redirect("/groups/create") + if CountAlnumericCharacters(GroupDescription) < 10: + flash("Group description must contain at least 10 alphanumeric characters!", "error") + return redirect("/groups/create") + if len(GroupDescription.split("\n")) > 15: + flash("Group description cannot contain more than 15 lines!", "error") + return redirect("/groups/create") + + if not GroupName[0].isalnum(): + flash("Group name must start with a alphanumeric character!", "error") + return redirect("/groups/create") + + for char in GroupName: + if char not in allowedCharacters: + flash("Group name contains invalid characters!", "error") + return redirect("/groups/create") + if char == " " and GroupName[GroupName.index(char) + 1] == " ": + flash("Group name cannot contain two or more consecutive spaces!", "error") + return redirect("/groups/create") + + if IconImage.filename == "": + flash("Please upload an icon!", "error") + return redirect("/groups/create") + + if IconImage.content_length > 1024 * 1024 * 2: + flash("Icon cannot be larger than 2MB!", "error") + return redirect("/groups/create") + if IconImage.content_type not in ["image/png", "image/jpeg"]: + flash("Icon must be a PNG or JPEG image", "error") + return redirect("/groups/create") + + NewIcon = ValidateClothingImage( IconImage, verifyResolution=False, validateFileSize=False, returnImage=True ) + if NewIcon is False or NewIcon is None: + flash("Icon is invalid", "error") + return redirect("/groups/create") + if NewIcon.width != NewIcon.height: + flash("Icon must be a square", "error") + return redirect("/groups/create") + if NewIcon.width > 1024 or NewIcon.height > 1024: + flash("Icon must be less than 1024x1024", "error") + return redirect("/groups/create") + if NewIcon.width < 128 or NewIcon.height < 128: + flash("Icon must be at least 128x128", "error") + return redirect("/groups/create") + + UserMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + UserGroupCount = groups.GetUserGroupCount(AuthenticatedUser) + GroupLimit = { + MembershipType.NonBuildersClub: 5, + MembershipType.BuildersClub: 10, + MembershipType.TurboBuildersClub: 20, + MembershipType.OutrageousBuildersClub: 100 + } + if UserGroupCount >= GroupLimit[UserMembership]: + flash("You have reached the maximum number of groups you can join!", "error") + return redirect("/groups/create") + try: + textfilter.FilterText(GroupName, ThrowException=True) + except textfilter.TextNotAllowedException: + flash("Group name is not safe for NEXIUM!", "error") + return redirect("/groups/create") + ExistingGroup : Group = groups.SearchGroupByName(GroupName) + if ExistingGroup is not None: + flash("Group name is already taken!", "error") + return redirect("/groups/create") + FilteredGroupDescription : str = textfilter.FilterText(GroupDescription) + + RobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if RobuxBalance < 100: + flash("You do not have enough robux to create a group.", "error") + return redirect("/groups/create") + economy.DecrementTargetBalance(AuthenticatedUser, 100, 0) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = 100, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = "Created Group" + ) + IconImage = BytesIO() + NewIcon.save(IconImage, format="PNG") + + IconImage.seek(0) + IconImageHash = hashlib.sha512(IconImage.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + IconImage.seek(0) + s3helper.UploadBytesToS3(IconImage.read(), IconImageHash, contentType="image/png") + + NewGroup : Group = groups.CreateGroup(GroupName, FilteredGroupDescription, AuthenticatedUser, IconImageHash) + return redirect(f"/groups/{NewGroup.id}/") +from sqlalchemy import func + +@groups_page.route("/groups/search", methods=["GET"]) +@auth.authenticated_required +def SearchGroupsPage(): + PageNumber : int = request.args.get( key = "page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + Query : str = request.args.get( key = "query", default="", type=str) + if len(Query) > 32: + Query = Query[:32] + if len(Query) < 3: + Query = "" + + GroupQuery = Group.query + if Query != "": + GroupQuery = GroupQuery.filter(Group.name.ilike(f"%{Query}%")) + GroupQuery = GroupQuery.outerjoin(GroupRole, GroupRole.group_id == Group.id ).group_by(Group.id).order_by(func.coalesce(func.sum(GroupRole.member_count), 0).desc()).order_by(Group.created_at.desc()) + GroupQuery = GroupQuery.paginate( page=PageNumber, per_page=12, error_out=False) + + return render_template("groups/search.html", query=Query, groups=GroupQuery, groupservice=groups) + +@groups_page.route("/groups/search", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def SearchGroupsPage_post(): + Query : str = request.form.get("query", default="", type=str) + if len(Query) > 32: + Query = Query[:32] + if len(Query) < 3: + Query = "" + + if Query == "": + return redirect("/groups/search") + return redirect(f"/groups/search?query={Query}") + +@groups_page.route("/groups", methods=["GET"]) +@auth.authenticated_required +def GroupsPage(): + AuthenticatedUser : User = auth.GetCurrentUser() + FirstGroup : GroupMember = GroupMember.query.filter_by(user_id=AuthenticatedUser.id).order_by(GroupMember.created_at.asc()).first() + if FirstGroup is None: + return redirect("/groups/search") + return redirect(f"/groups/{FirstGroup.group_id}/") \ No newline at end of file diff --git a/app/pages/groups/search.html b/app/pages/groups/search.html new file mode 100644 index 0000000..cb0b807 --- /dev/null +++ b/app/pages/groups/search.html @@ -0,0 +1,58 @@ +{% extends '__layout__.html' %} +{% block title %}Search Groups{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Search Groups

+
+
+
+ + +
+ +
+
+ + {% if len(groups.items) == 0 %} +

No Results Found

+ {%endif%} +
+ Previous +

Page {{groups.page}} of {{groups.pages}}

+ Next +
+
+{% endblock %} diff --git a/app/pages/groups/view.html b/app/pages/groups/view.html new file mode 100644 index 0000000..925307f --- /dev/null +++ b/app/pages/groups/view.html @@ -0,0 +1,204 @@ +{% extends '__layout__.html' %} +{% block title %}{{groupObj.name}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ Create Group + Search Groups +
+ {% for userMember in UserGroups: %} + + +

{{userMember.group.name}}

+
+ {% endfor %} +
+
+
+
+
+ +
+

{{groupObj.name}}

+

Owned By {% if groupObj.owner_id != None: %}{{groupObj.owner.username}}{%else%}No One!{%endif%}

+
+

{{groupservice.GetGroupMemberCount(groupObj)}} Members

+ {% if UserCurrentRole.rank != 0: %} +

{{UserCurrentRole.name}} Rank

+ {% endif %} +
+
+
+ + {% if UserCurrentRole.rank == 0 and CurrentJoinRequest == None: %} +
+ + +
+ {% endif %} + {% if CurrentJoinRequest != None %} +
+ + +
+ {%endif%} +
+
+
+
+

Description

+
+ {% for line in groupObj.description.split('\n'): %} + {% if line.strip() != '' %} +

{{line}}

+ {%else%} +
+ {%endif%} + {% endfor %} +
+
+ {% if UserCurrentRole.permissions.view_status: %} + {% if GroupStatus != None: %} +
+
+ +
+

{{GroupStatus.content}}

+

{{GroupStatus.poster.username}} Posted at {{GroupStatus.created_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+
+
+
+ {%endif%} + {% endif %} + {% if UserCurrentRole.permissions.post_to_status: %} +
+
+ +
+ + +
+
+
+ {%endif%} +
+
+

Members

+
+ +
+
+
+
+
+

Page 1

+
+
+ {% if UserCurrentRole.permissions.view_wall: %} +
+
Group Wall
+ {% if UserCurrentRole.permissions.post_to_wall: %} +
+
+ + +
+
+ + +
+
+ {% endif %} +
+ {% for WallPost in GroupWall.items %} +
+
+ +
+ {{WallPost.poster.username}} +
+ {% for ContentLine in WallPost.content.split('\n'): %} +

{{ContentLine}}

+ {% endfor %} +
+

Posted at {{WallPost.created_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+ {% if WallPost.poster.id == currentuser.id or UserCurrentRole.permissions.delete_from_wall: %} + + {% endif %} +
+
+
+ {% endfor %} +
+
+ Previous +

Page {{PageNumber}}

+ Next +
+
+ {% endif %} +
+
+
+
+ +{% endblock %} diff --git a/app/pages/home/home.html b/app/pages/home/home.html new file mode 100644 index 0000000..49ade5f --- /dev/null +++ b/app/pages/home/home.html @@ -0,0 +1,112 @@ +{% extends '__layout__.html' %} +{% block title %}Home{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ + {% if not isDiscordLinked: %} +
+ +
+ Link your Discord Account and you will get a lifetime builders club membership for free +
+ +
+ {%endif%} +
+ +
+

+ , {{currentuser.username}}! +

+ {% if membershipValue == 1: %} + + {%endif%} + {% if membershipValue == 2: %} + + {%endif%} + {% if membershipValue == 3: %} + + {%endif%} +
+
+

Friends ( {{friendcount}} )

+
+ {% for friend in friends %} + +
+
+ + {% if friend.isonline: %}
{% endif %} +
+

{{friend.username}}

+
+
+ {% endfor %} + {% if friendcount == 0: %} +

You have no friends

+ {% endif %} +
+

Recently Played

+
+ {% for place in recentlyplayed %} + +
+
+ +
+
{{place.placeyear.value}}
+
+
+
+
{{place.name}}
+
+

{{place.playercount}} Playing

+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endfor %} + {% if recentlyplayedcount == 0: %} +

Looks like you havent played any games yet, maybe you should go play one right now!

+ {% endif %} +
+
+
+ +{% endblock %} diff --git a/app/pages/home/home.html1 b/app/pages/home/home.html1 new file mode 100644 index 0000000..c0925bb --- /dev/null +++ b/app/pages/home/home.html1 @@ -0,0 +1,97 @@ +{% extends '__layout__.html' %} +{% block title %}Home{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% if not isEmailVerified: %} +
+ +
Verify your email to secure your account and get a free item!
+ +
+ {%endif%} + {% if not isDiscordLinked: %} +
+ +
Link your Discord Account and get a lifetime builders club membership for free!
+ +
+ {%endif%} +
+ +
+

Hello, {{currentuser.username}}!

+ {% if membershipValue == 1: %}{%endif%} + {% if membershipValue == 2: %}{%endif%} + {% if membershipValue == 3: %}{%endif%} +
+
+

Friends ( {{friendcount}} )

+
+ {% for friend in friends %} + +
+
+ {{friend.username}} + {% if friend.isonline: %}
{% endif %} +
+

+ {{friend.username}}

+
+
+ {% endfor %} + {% if friendcount == 0: %} +

You have no friends

+ {% endif %} +
+

Recently Played

+
+ {% for place in recentlyplayed %} + +
+
+ {{place.name}} +
+
+ {{place.placeyear.value}}
+
+
+
+
{{place.name}}
+
+

+ {{place.playercount}} Playing

+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endfor %} + {% if recentlyplayedcount == 0: %} +

Looks like you haven't played any games yet.. maybe go play one!

+ {% endif %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/home/home.py b/app/pages/home/home.py new file mode 100644 index 0000000..63bd2fa --- /dev/null +++ b/app/pages/home/home.py @@ -0,0 +1,95 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response +from app.extensions import db +from app.util import auth, friends, placeinfo, membership +from app.models.user import User +from app.models.asset import Asset +from app.models.place import Place +from app.models.previously_played import PreviouslyPlayed +from app.models.placeserver_players import PlaceServerPlayer +from app.models.linked_discord import LinkedDiscord +from app.models.user_email import UserEmail +from datetime import datetime +from app.routes.rate import GetAssetVotePercentage + +home = Blueprint("home", __name__, template_folder="pages") + +def InsertRecentlyPlayed( UserObj : User, PlaceId : int ): + """ + Updates the recently played table for the user + """ + # Check if the user has played this place before + PreviouslyPlayedObj : PreviouslyPlayed = PreviouslyPlayed.query.filter_by(userid=UserObj.id, placeid=PlaceId).first() + if PreviouslyPlayedObj is None: + # User has not played this place before + PreviouslyPlayedObj = PreviouslyPlayed(UserObj.id, PlaceId) + db.session.add(PreviouslyPlayedObj) + db.session.commit() + + # If the user has more than 25 recently played places, remove the oldest one + PreviouslyPlayedObjs : list[PreviouslyPlayed] = PreviouslyPlayed.query.filter_by(userid=UserObj.id).all() + if len(PreviouslyPlayedObjs) > 25: + PreviouslyPlayedObjs.sort(key=lambda x: x.lastplayed) + db.session.delete(PreviouslyPlayedObjs[0]) + db.session.commit() + + return + # User has played this place before, update the lastplayed timestamp + PreviouslyPlayedObj.lastplayed = datetime.utcnow() + db.session.commit() + +@home.route("/home", methods=["GET"]) +@auth.authenticated_required +def home_page(): + user_agent = request.headers.get("User-Agent", "") + if "RobloxStudio" in user_agent: + return redirect("/ide/welcome") + Authuser : User = auth.GetCurrentUser() + Friends = friends.GetFriends(Authuser.id) + FriendCount = len(Friends) + FriendsData = [] + for friend in Friends: + # Get the friend's thumbnail + friendObjData = { + "id": friend.id, + "username": friend.username, + "isonline": True if (datetime.utcnow() - friend.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=friend.id).first() is not None else False + } + FriendsData.append(friendObjData) + # Sort the friends by online status + FriendsData.sort(key=lambda x: x["isonline"], reverse=True) + # Sort the friends by ingame status + FriendsData.sort(key=lambda x: x["ingame"], reverse=True) + # Limit the friends to 12 + FriendsData = FriendsData[:12] + + RecentlyPlayedData = [] + RecentlyPlayedObjs : list[PreviouslyPlayed] = PreviouslyPlayed.query.filter_by(userid=Authuser.id).order_by(PreviouslyPlayed.lastplayed.desc()).limit(12).all() + for RecentlyPlayedObj in RecentlyPlayedObjs: + PlaceAssetObj : Asset = Asset.query.filter_by(id=RecentlyPlayedObj.placeid).first() + if PlaceAssetObj is None: + continue + PlaceObj : Place = Place.query.filter_by(placeid=PlaceAssetObj.id).first() + if PlaceObj is None: + continue + RecentlyPlayedData.append({ + "id": PlaceObj.placeid, + "name": PlaceAssetObj.name, + "playercount": placeinfo.GetPlayingCount(PlaceObj), + "likePercentage": GetAssetVotePercentage(PlaceObj.placeid), + "placeyear": PlaceObj.placeyear + }) + membershipValue : int = membership.GetUserMembership(Authuser).value + isDiscordLinked : bool = LinkedDiscord.query.filter_by(user_id=Authuser.id).first() is not None + isEmailVerified : bool = UserEmail.query.filter_by(user_id=Authuser.id).first() is not None + + return render_template( + "home/home.html", + friends=FriendsData, + friendcount=FriendCount, + recentlyplayed=RecentlyPlayedData, + recentlyplayedcount=len(RecentlyPlayedData), + membershipValue=membershipValue, + isDiscordLinked=isDiscordLinked, + isEmailVerified=isEmailVerified + ) \ No newline at end of file diff --git a/app/pages/invitekeys/handler.py b/app/pages/invitekeys/handler.py new file mode 100644 index 0000000..e3e8d7c --- /dev/null +++ b/app/pages/invitekeys/handler.py @@ -0,0 +1,68 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash +from app.models.user import User +from app.models.invite_key import InviteKey +from app.util import auth, transactions +from app.services import invitekeys, economy +from app.extensions import db, limiter, csrf +from datetime import datetime, timedelta + +inviteKeyRoute = Blueprint("invitekey", __name__, url_prefix="/") + +@inviteKeyRoute.route("/invite-keys", methods=["GET"]) +@auth.authenticated_required +def inviteKeysPage(): + AuthenticatedUser : User = auth.GetCurrentUser() + pageNumber = request.args.get("page", 1, int) + if pageNumber < 1: + pageNumber = 1 + createdKeys = InviteKey.query.filter_by(created_by=AuthenticatedUser.id).order_by(InviteKey.created_at.desc()).paginate( page = pageNumber, per_page = 10, error_out=False ) + + return render_template("invitekeys/index.html", createdKeys=createdKeys) + +@inviteKeyRoute.route("/invite-keys/create", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def createInviteKey(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + robuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if robuxBalance < 20: + flash("You do not have enough robux to create an invite key.", "error") + return redirect("/invite-keys") + + activeKeys = InviteKey.query.filter_by(created_by=AuthenticatedUser.id, used_by=None).count() + if activeKeys >= 3 and AuthenticatedUser.id != 1: + flash("You have reached the maximum amount of active invite keys, please wait until one of your invite keys are used.", "error") + return redirect("/invite-keys") + + keysCreatedPast24Hours = InviteKey.query.filter(InviteKey.created_at > datetime.utcnow() - timedelta(hours=24)).filter_by(created_by=AuthenticatedUser.id).count() + if keysCreatedPast24Hours >= 3 and AuthenticatedUser.id != 1: + flash("You have reached the maximum amount of invite keys you can create in 24 hours.", "error") + return redirect("/invite-keys") + + if AuthenticatedUser.created > datetime.utcnow() - timedelta(days=3): + flash("Your account must be more than 3 days old to create a invite key.", "error") + return redirect("/invite-keys") + + try: + economy.DecrementTargetBalance(AuthenticatedUser, 20, 0) + except economy.InsufficientFundsException: + flash("You do not have enough robux to create an invite key.", "error") + return redirect("/invite-keys") + except economy.EconomyLockAcquireException: + flash("There was an error creating your invite key, please try again later.", "error") + return redirect("/invite-keys") + + newInviteKey : InviteKey = invitekeys.CreateInviteKey(AuthenticatedUser) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = 20, + CurrencyType = 0, + CustomText = "Created Invite Key" + ) + + flash("Invite key created successfully.", "success") + return redirect("/invite-keys") diff --git a/app/pages/invitekeys/index.html b/app/pages/invitekeys/index.html new file mode 100644 index 0000000..dd657c4 --- /dev/null +++ b/app/pages/invitekeys/index.html @@ -0,0 +1,77 @@ +{% extends '__layout__.html' %} +{% block title %}Invite Keys{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Invite Keys

+
+ + +
+
+

Note: It is not recommended to give away your invite key to strangers as you may be responsible for their actions.

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + + + + + + + + + + {% for key in createdKeys.items %} + + + + + + + {%endfor%} + +
CreatedKeyUsed ByUsed On
{{key.created_at.strftime("%d/%m/%Y")}}{{key.key}} + {% if key.used_by %} + + {{key.user.username}} + {{key.user.username}} + + {% endif %} + {% if key.used_on %}{{key.used_on.strftime("%d/%m/%Y")}}{%else%}None{%endif%}
+ {% if len(createdKeys.items) == 0 %} +

No results found

+ {%endif%} +
+ Previous +

Page {{createdKeys.page}} of {{createdKeys.pages}}

+ Next +
+ +
+{%endblock%} \ No newline at end of file diff --git a/app/pages/link_discord.html b/app/pages/link_discord.html new file mode 100644 index 0000000..42354ee --- /dev/null +++ b/app/pages/link_discord.html @@ -0,0 +1,18 @@ +{% extends '__layout__.html' %} +{% block title %}Link Discord{% endblock %} +{% block content %} +
+
+
+

Link your Discord

+

You must link your Discord account to use NEXIUM.

+ + Link Discord Account + +

+ Click the button above to link your Discord account securely. +

+
+
+
+{% endblock %} diff --git a/app/pages/link_discord/link_discord.py b/app/pages/link_discord/link_discord.py new file mode 100644 index 0000000..4157f48 --- /dev/null +++ b/app/pages/link_discord/link_discord.py @@ -0,0 +1,106 @@ +from flask import Blueprint, render_template, redirect, request, flash +from app.util import auth, websiteFeatures +from app.util.discord import GenerateAuthorizationURL, ExchangeCodeForToken, GetUserInfoFromToken +from app.models.user import User +from app.models.linked_discord import LinkedDiscord +from app.extensions import db +from datetime import datetime +from config import Config +import hashlib + +config = Config() +link_discord = Blueprint('link_discord', __name__, template_folder='pages') + + +def GenerateStateHash(Cookie: str) -> str: + salted_cookie = Cookie + config.FLASK_SESSION_KEY + return hashlib.md5(salted_cookie.encode('utf-8')).hexdigest() + + +@link_discord.route('/link-discord', methods=['GET']) +@auth.authenticated_required +def link_discord_page(): + CurrentUser = auth.GetCurrentUser() + LinkedDiscordObj = LinkedDiscord.query.filter_by(user_id=CurrentUser.id).first() + if LinkedDiscordObj is not None: + return redirect('/home') + + return render_template('link_discord.html') + + +@link_discord.route('/link-discord/start', methods=['GET']) +@auth.authenticated_required +def start_discord_link(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Discord Linking is temporarily disabled", "danger") + return redirect("/link-discord") + + CurrentUser = auth.GetCurrentUser() + LinkedDiscordObj = LinkedDiscord.query.filter_by(user_id=CurrentUser.id).first() + if LinkedDiscordObj is not None: + return redirect('/home') + + state = GenerateStateHash(request.cookies[".ROBLOSECURITY"]) + AuthorizationURL = GenerateAuthorizationURL(state) + return redirect(AuthorizationURL) + + +@link_discord.route('/link-discord/callback', methods=['GET']) +@auth.authenticated_required +def discord_link_callback(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Discord Linking is temporarily disabled", "danger") + return redirect("/link-discord") + + CurrentUser = auth.GetCurrentUser() + LinkedDiscordObj = LinkedDiscord.query.filter_by(user_id=CurrentUser.id).first() + if LinkedDiscordObj is not None: + flash("You already have a linked discord account", "warning") + return redirect('/home') + + expectedState = GenerateStateHash(request.cookies[".ROBLOSECURITY"]) + givenState = request.args.get(key="state", default=None, type=str) + + if givenState is None: + flash("Invalid state", "danger") + return redirect("/link-discord") + + if givenState != expectedState: + flash("State mismatch - potential CSRF attack", "danger") + return redirect("/link-discord") + + code = request.args.get(key="code", default=None, type=str) + if code is None: + flash("No authorization code received", "danger") + return redirect("/link-discord") + + try: + AccessToken = ExchangeCodeForToken(code) + DiscordUserInfo = GetUserInfoFromToken(AccessToken) + except Exception as e: + flash(f"Failed to authenticate with Discord: {str(e)}", "danger") + return redirect("/link-discord") + + ExistingDiscordLink = LinkedDiscord.query.filter_by(discord_id=DiscordUserInfo.UserId).first() + if ExistingDiscordLink is not None: + flash("This Discord account is already linked to another account", "danger") + return redirect("/link-discord") + + NewLinkedDiscord = LinkedDiscord( + user_id=CurrentUser.id, + discord_id=DiscordUserInfo.UserId, + discord_username=DiscordUserInfo.Username, + discord_discriminator=DiscordUserInfo.Discriminator, + discord_avatar=DiscordUserInfo.AvatarHash, + discord_access_token=AccessToken, + discord_refresh_token=None, + discord_expiry=None, + last_updated=datetime.utcnow(), + linked_on=datetime.utcnow() + ) + + db.session.add(NewLinkedDiscord) + db.session.commit() + + flash("Discord account linked successfully!", "success") + return redirect('/home') diff --git a/app/pages/login/login.html b/app/pages/login/login.html new file mode 100644 index 0000000..493a3bc --- /dev/null +++ b/app/pages/login/login.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Login{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/login/login.py b/app/pages/login/login.py new file mode 100644 index 0000000..fb8f5fc --- /dev/null +++ b/app/pages/login/login.py @@ -0,0 +1,477 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort, Response +from app.models.user import User +from app.models.usereconomy import UserEconomy +from app.models.login_records import LoginRecord +from app.extensions import db, limiter, csrf, get_remote_address, redis_controller +import hashlib +from datetime import datetime, timedelta +from app.util import websiteFeatures, auth, turnstile +import time +import re +import random +import string +import uuid +from app.models.user_email import UserEmail +import requests +from requests.auth import HTTPBasicAuth +import json +from config import Config +import pyotp +from sqlalchemy import func + +config = Config() + +login = Blueprint("login", __name__, template_folder="pages") + +def CreateLoginRecord( UserId : int, TokenOverwrite : str = None): + """ + Logs the current user login to the database + Please only call this function in a flask context + """ + SessionToken = request.cookies.get(key="t", default=None, type=str) + if SessionToken is None and TokenOverwrite is None: + abort(400) + if TokenOverwrite is not None: + SessionToken = TokenOverwrite + + userIPHash = hashlib.sha512( + string = f"{get_remote_address()}:SYNTAX:{config.FLASK_SESSION_KEY}".encode("utf-8") + ).hexdigest() + + newLoginRecord : LoginRecord = LoginRecord( + userid = UserId, + ip = userIPHash, + useragent = request.headers.get("User-Agent", default="Unknown")[:200], + timestamp = datetime.utcnow(), + session_token = SessionToken + ) + db.session.add(newLoginRecord) + db.session.commit() + + +@login.route("/login", methods=["GET"]) +@limiter.exempt() +def login_page(): + if auth.isAuthenticated(): + return redirect("/home") + + loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") + if not loginEnabled: + flash("Logins are temporarily disabled", "error") + + login_page_response = make_response(render_template("login/login.html", loginEnabled=loginEnabled)) + if request.cookies.get( key = ".ROBLOSECURITY", default = None, type = str ) is not None: + login_page_response.set_cookie( + key = ".ROBLOSECURITY", + value = "", + expires = 0, + domain = f".{config.BaseDomain}" + ) + return login_page_response + +@login.errorhandler(429) +def ratelimit_handler(e): + flash("You are being ratelimited.", "error") + return redirect(request.referrer) + +@login.route("/login", methods=["POST"]) +@limiter.limit("10/minute") +def handle_login_post(): + if auth.isAuthenticated(): + return redirect("/home") + + requestUsername = request.form.get( + key = "username", + default = None, + type = str + ) + requestPassword = request.form.get( + key = "password", + default = None, + type = str + ) + isRequestStudio = request.args.get( key = "studio", default = 0, type = int ) == 1 + + def handle_redirect() -> Response: + if isRequestStudio: + return redirect("/ide/welcome") + else: + return redirect(url_for("login.login_page")) + + if requestUsername is None or requestPassword is None: + flash("Please fill in all fields", "error") + return handle_redirect() + + loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") + if not loginEnabled: + flash("Logins are temporarily disabled", "error") + return handle_redirect() + + userObject : User = User.query.filter(func.lower(User.username) == func.lower(requestUsername)).first() + if userObject is None: + flash("Incorrect username or password", "error") + return handle_redirect() + if userObject.accountstatus == 4: + flash("Invalid username or password", "error") + return handle_redirect() + + if not auth.VerifyPassword( UserObj = userObject, password = requestPassword ): + flash("Incorrect username or password", "error") + return handle_redirect() + + if userObject.TOTPEnabled and not isRequestStudio: + session["totpvalidatesession"] = { + "userid": userObject.id, + "startTime": time.time() + } + return redirect("/login/totpvalidate") + elif userObject.TOTPEnabled and isRequestStudio: + TOTPCode = request.form.get( key = "2fa", default = None, type = str ) + if TOTPCode is None: + flash("Please fill in all fields", "error") + return handle_redirect() + + if len(TOTPCode) != 6: + flash("Invalid 2FA Code", "error") + return handle_redirect() + + isValidCode = auth.Validate2FACode( userid = userObject.id, code = TOTPCode ) + if not isValidCode: + flash("Invalid 2FA Code", "error") + return handle_redirect() + + if userObject.accountstatus != 1: + session["not-approved-viewer"] = userObject.id + return redirect("/not-approved") + + newAuthToken : str = auth.CreateToken( userid = userObject.id, ip = get_remote_address() ) + authenticatedResponse : Response = make_response( redirect("/home") ) + authenticatedResponse.set_cookie( + key = ".ROBLOSECURITY", + value = newAuthToken, + expires = datetime.utcnow() + timedelta( days = 31 ), + domain = f".{config.BaseDomain}" + ) + + if request.cookies.get( key = "t", default = None, type = str ) is None: + newToken : str = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + authenticatedResponse.set_cookie( + key = "t", + value = newToken, + expires = datetime.utcnow() + timedelta( days = 365 ), + domain = f".{config.BaseDomain}" + ) + CreateLoginRecord( UserId = userObject.id, TokenOverwrite = newToken ) + else: + CreateLoginRecord( UserId = userObject.id ) + + return authenticatedResponse + +# @login.route("/login", methods=["POST"]) +# @limiter.limit("10/minute") +# def login_post(): +# if auth.isAuthenticated(): +# return redirect("/home") +# username = request.form.get("username") +# password = request.form.get("password") +# isstudio = request.args.get("studio", default=0, type=int) +# csrf.protect() + +# loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") +# if not loginEnabled: +# flash("Logins are temporarily disabled", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# if username is None or password is None: +# flash("Please fill in all fields", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# user : User = User.query.filter_by(username=username).first() +# if user is None: +# flash("Incorrect username or password", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# if user.accountstatus == 4: # GDPR Deletion +# flash("Invalid username or password", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) + +# if not auth.VerifyPassword( UserObj = user, password = password ): +# flash("Incorrect username or password", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# # check if user has 2fa enabled +# if user.TOTPEnabled: +# if isstudio == 0: +# session["totpvalidatesession"] = { +# "userid": user.id, +# "startTime": time.time() +# } +# return redirect("/login/totpvalidate") +# else: +# TOTPCode = request.form.get("2fa") +# if TOTPCode is None: +# flash("Please fill in all fields", "error") +# return redirect("/ide/welcome") +# if len(TOTPCode) != 6: +# flash("Invalid 2FA Code") +# return redirect("/ide/welcome", "error") +# isValidCode = auth.Validate2FACode(user.id, TOTPCode) +# if not isValidCode: +# flash("Invalid 2FA Code") +# return redirect("/ide/welcome", "error") + +# if user.accountstatus != 1: +# session["not-approved-viewer"] = user.id +# return redirect("/not-approved") + +# # Create new session token +# sessionToken = auth.CreateToken(userid=user.id, ip=get_remote_address()) +# if isstudio == 0: +# resp = make_response(redirect("/home")) +# else: +# resp = make_response(redirect("/ide/welcome")) +# resp.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365)) +# if request.cookies.get("t", default=None, type=str) is not None: +# NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) +# resp.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") +# CreateLoginRecord( user.id, NewToken ) +# else: +# CreateLoginRecord( user.id ) +# return resp + +@login.route("/login/totpvalidate", methods=["GET"]) +def totp_validate(): + if "totpvalidatesession" not in session: + return redirect("/login") + if time.time() - session["totpvalidatesession"]["startTime"] > 180: + del session["totpvalidatesession"] + flash("Session expired", "error") + return redirect("/login") + return render_template("login/totpvalidate.html") + +@login.route("/login/totpvalidate", methods=["POST"]) +def totp_validate_post(): + from app.pages.settings.settings import generate_secret_key_from_string + if "totpvalidatesession" not in session: + return redirect("/login") + if time.time() - session["totpvalidatesession"]["startTime"] > 180: + del session["totpvalidatesession"] + flash("Session expired", "error") + return redirect("/login") + csrf.protect() + totpCode = request.form.get("totpCode") + if totpCode is None: + flash("Please fill in all fields") + return redirect("/login/totpvalidate") + if len(totpCode) != 6: + flash("Invalid TOTP Code") + return redirect("/login/totpvalidate") + user : User = User.query.filter_by(id=session["totpvalidatesession"]["userid"]).first() + if user is None: + flash("User not found") + return redirect("/login/totpvalidate") + totp = pyotp.TOTP(generate_secret_key_from_string(str(user.id) + config.FLASK_SESSION_KEY)) + if not totp.verify(totpCode): + flash("Invalid TOTP Code") + return redirect("/login/totpvalidate") + if user.accountstatus != 1: + session["not-approved-viewer"] = user.id + return redirect("/not-approved") + + sessionToken = auth.CreateToken(userid=user.id, ip=get_remote_address()) + resp = make_response(redirect("/home")) + resp.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + del session["totpvalidatesession"] + if request.cookies.get("t", default=None, type=str) is not None: + NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + resp.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + CreateLoginRecord( user.id, NewToken ) + else: + CreateLoginRecord( user.id ) + return resp + + +@login.route("/logout", methods=["POST"]) +def logout(): + if not auth.isAuthenticated(): + return redirect("/login") + + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + resp = make_response(redirect("/login")) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + + if "not-approved-viewer" in session: + del session["not-approved-viewer"] + return resp + +@login.route("/reset-password", methods=["GET"]) +def reset_password(): + if auth.isAuthenticated(): + return redirect("/home") + return render_template("login/send_reset.html") + +EmailRegex = r"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" # RFC 5322 Compliant, because some fucker is gonna complain that he cant verify his email from his self-hosted shit + +@login.route("/reset-password", methods=["POST"]) +@limiter.limit("10/minute") +def reset_password_post(): + if auth.isAuthenticated(): + return redirect("/home") + if not websiteFeatures.GetWebsiteFeature("SendResetPassword"): + flash("Resetting Passwords is temporarily disabled, please try again later", "error") + return redirect("/reset-password") + user_email = request.form.get( key = "email", default = None, type = str ) + if user_email is None: + flash("Please fill in all fields", "error") + return redirect("/reset-password") + user_email = user_email.strip().lower() + + if not re.match( EmailRegex, user_email ): + flash("Invalid Email", "error") + return redirect("/reset-password") + + RequesterAddress = get_remote_address() + if redis_controller.exists(f"reset_password_cooldown_v1:{RequesterAddress}"): + flash("You sent a reset request too recently please wait and try again later", "error") + return redirect("/reset-password") + if redis_controller.exists(f"reset_password_email_cooldown_v1:{user_email}"): + flash("This email has recently been sent a reset request, please wait and try again later", "error") + return redirect("/reset-password") + CloudflareTurnstileKey = request.form.get( key = "cf-turnstile-response", default = None, type=str ) + if CloudflareTurnstileKey is None or CloudflareTurnstileKey == '': + flash("Please complete the captcha", "error") + return redirect("/reset-password") + if not turnstile.VerifyToken( CloudflareTurnstileKey ): + flash("Invalid captcha answer", "error") + return redirect("/reset-password") + + UserEmailObj : UserEmail = UserEmail.query.filter_by(email = user_email, verified=True).first() + if UserEmailObj: + ResetPasswordUUID = str(uuid.uuid4()) + redis_controller.set(f"reset_password_v1:{ResetPasswordUUID}", UserEmailObj.email, ex=60 * 60 * 2) + emailHash = hashlib.sha1(f"{user_email}:{config.FLASK_SESSION_KEY}".encode("utf-8")).hexdigest() + resetLink = f"{config.BaseURL}/reset-password/confirm?uuid={ResetPasswordUUID}&confirm={emailHash}" + + EmailData = { + "Messages": [ + { + "From": { + "Email": Config.MAILJET_NOREPLY_SENDER, + "Name": "syntax.eco" + }, + "To": [ + { + "Email": user_email, + "Name": "SYNTAX User" + } + ], + "TemplateID": Config.MAILJET_PASSWORDRESET_TEMPLATE_ID, + "TemplateLanguage": True, + "Subject": f"SYNTAX - Reset Password", + "Variables": { + "verificationlink": resetLink + } + } + ] + } + + try: + EmailResponse = requests.post( + url="https://api.mailjet.com/v3.1/send", + data=json.dumps(EmailData), + headers={ + "Content-Type": "application/json" + }, + auth = HTTPBasicAuth( + Config.MAILJET_APIKEY, + Config.MAILJET_SECRETKEY + ) + ) + if EmailResponse.status_code != 200: + flash("An error occured while sending the email, please try again later", "error") + redis_controller.delete(f"reset_password_v1:{ResetPasswordUUID}") + return redirect("/reset-password") + except Exception as e: + flash("An error occured while sending the email, please try again later", "error") + redis_controller.delete(f"reset_password_v1:{ResetPasswordUUID}") + return redirect("/reset-password") + + redis_controller.set(f"reset_password_cooldown_v1:{RequesterAddress}", 1, ex=60 * 60) + redis_controller.set(f"reset_password_email_cooldown_v1:{user_email}", 1, ex=60 * 60) + + flash("A reset password email has been sent if the email is linked to a SYNTAX account", "success") + return redirect("/reset-password") + +@login.route("/reset-password/confirm", methods=["GET"]) +def reset_password_confirm(): + uuid = request.args.get("uuid", default=None, type=str) + confirm = request.args.get("confirm", default=None, type=str) + if uuid is None or confirm is None: + flash("Invalid reset link", "error") + return redirect("/reset-password") + if not redis_controller.exists(f"reset_password_v1:{uuid}"): + flash("Invalid reset link", "error") + return redirect("/reset-password") + email = redis_controller.get(f"reset_password_v1:{uuid}") + emailHash = hashlib.sha1(f"{email}:{config.FLASK_SESSION_KEY}".encode("utf-8")).hexdigest() + if emailHash != confirm: + flash("Invalid reset link", "error") + return redirect("/reset-password") + + AllLinkedEmails : list[UserEmail] = UserEmail.query.filter_by(email = email).all() + if len(AllLinkedEmails) == 0: + flash("Invalid reset link", "error") + return redirect("/reset-password") + + return render_template("login/reset_password.html", AllLinkedEmails=AllLinkedEmails) + +@login.route("/reset-password/confirm", methods=["POST"]) +def reset_password_confirm_post(): + uuid = request.args.get("uuid", default=None, type=str) + confirm = request.args.get("confirm", default=None, type=str) + if uuid is None or confirm is None: + flash("Invalid reset link", "error") + return redirect("/reset-password") + if not redis_controller.exists(f"reset_password_v1:{uuid}"): + flash("Invalid reset link", "error") + return redirect("/reset-password") + email = redis_controller.get(f"reset_password_v1:{uuid}") + emailHash = hashlib.sha1(f"{email}:{config.FLASK_SESSION_KEY}".encode("utf-8")).hexdigest() + if emailHash != confirm: + flash("Invalid reset link", "error") + return redirect("/reset-password") + + reset_user_id = request.form.get("reset_user_id", default=None, type=int) + reset_password = request.form.get("reset_password", default=None, type=str) + if reset_user_id is None or reset_password is None: + flash("Please fill in all fields", "error") + return redirect(f"/reset-password/confirm?uuid={uuid}&confirm={confirm}") + + UserEmailObj : UserEmail = UserEmail.query.filter_by(email = email, user_id = reset_user_id, verified=True).first() + if UserEmailObj is None: + flash("Invalid User Choice", "error") + return redirect(f"/reset-password/confirm?uuid={uuid}&confirm={confirm}") + + UserObj : User = UserEmailObj.user + if len(reset_password) < 8: + flash("Password must be at least 8 characters long", "error") + return redirect(f"/reset-password/confirm?uuid={uuid}&confirm={confirm}") + + auth.SetPassword(UserObj, reset_password) + redis_controller.delete(f"reset_password_v1:{uuid}") + + flash("Password reset successfully", "success") + return redirect("/login") \ No newline at end of file diff --git a/app/pages/login/reset_password.html b/app/pages/login/reset_password.html new file mode 100644 index 0000000..5622b2d --- /dev/null +++ b/app/pages/login/reset_password.html @@ -0,0 +1,71 @@ +{% extends '__layout__.html' %} +{% block title %}Email Verified{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Reset account password

+

Please choose an account to reset from the list below and enter a new password

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} + {% if category == 'error': %} +
{{ message }}
+ {% endif %} + {% if category == 'success': %} +
{{ message }}
+ {% endif %} + {% endfor %} + {% endif %} + {% endwith %} +
+ + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/login/send_reset.html b/app/pages/login/send_reset.html new file mode 100644 index 0000000..31fb37b --- /dev/null +++ b/app/pages/login/send_reset.html @@ -0,0 +1,71 @@ +{% extends '__layout__.html' %} +{% block title %}Reset Password{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

NEXIUM

+

Please enter the email linked to your account

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} + {% if category == 'error': %} +
{{ message }}
+ {% endif %} + {% if category == 'success': %} +
{{ message }}
+ {% endif %} + {% endfor %} + {% endif %} + {% endwith %} +
+ +
+ + +
+ +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/login/totpvalidate.html b/app/pages/login/totpvalidate.html new file mode 100644 index 0000000..da40e60 --- /dev/null +++ b/app/pages/login/totpvalidate.html @@ -0,0 +1,38 @@ + +{% extends '__layout__.html' %} +{% block title %}OTP Verification{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

NEXIUM

+

relive childhood memories with freedom

+ {% with messages = get_flashed_messages() %} + {% if messages %} + {% for message in messages %} +
{{ message }}
+ {% endfor %} + {% endif %} + {% endwith %} +

Please enter the OTP code from your authenticator app

+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/maintenance/maintenance.html b/app/pages/maintenance/maintenance.html new file mode 100644 index 0000000..b2a001f --- /dev/null +++ b/app/pages/maintenance/maintenance.html @@ -0,0 +1,221 @@ + + + + + + + + + + + Maintenance - NEXIUM + + + +
+
+ +
+
+ +
+

Maintenance Mode

+

NEXIUM is currently updating (i know this is vibecoded slop. i dont care. not dealing with you guys.)

+ + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
+ + {{ message }} +
+ {% endfor %} + {% endif %} + {% endwith %} + +
+ +
+ +
+ +
+ + +
+ + diff --git a/app/pages/maintenance/maintenance.py b/app/pages/maintenance/maintenance.py new file mode 100644 index 0000000..fb4aa3e --- /dev/null +++ b/app/pages/maintenance/maintenance.py @@ -0,0 +1,32 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash +from app.extensions import limiter +from config import Config + +config = Config() + +maintenance = Blueprint("maintenance", __name__, template_folder="pages") + +@maintenance.route("/maintenance", methods=["GET"]) +@limiter.exempt +def maintenance_page(): + if not config.MAINTENANCE_MODE: + return redirect("/") + + if session.get("maintenance_authorized") == True: + return redirect("/") + + return render_template("maintenance/maintenance.html") + +@maintenance.route("/maintenance", methods=["POST"]) +@limiter.limit("5/minute") +def handle_maintenance_post(): + if not config.MAINTENANCE_MODE: + return redirect("/") + + password = request.form.get("password") + if password == config.MAINTENANCE_PASSWORD: + session["maintenance_authorized"] = True + return redirect("/") + else: + flash("Incorrect maintenance password", "error") + return redirect(url_for("maintenance.maintenance_page")) diff --git a/app/pages/membership/index.html b/app/pages/membership/index.html new file mode 100644 index 0000000..129debe --- /dev/null +++ b/app/pages/membership/index.html @@ -0,0 +1,77 @@ +{% extends '__layout__.html' %} +{% block title %}Membership{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Free

Classic

Turbo

OBC

Daily Robux

None

R$ 10

R$ 45

R$ 80

Active Places

2

6

12

32

Groups Limit

5

10

20

100

Sell Items

No

Yes

Yes

Yes

Trade Items

No

Yes

Yes

Yes

Link DiscordBoost DiscordDonate $5
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/membership/membership.py b/app/pages/membership/membership.py new file mode 100644 index 0000000..f2b568d --- /dev/null +++ b/app/pages/membership/membership.py @@ -0,0 +1,19 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response + +from app.extensions import db, redis_controller +from app.models.user import User +from app.util import auth + +MembershipPages = Blueprint("membership", __name__, template_folder="pages") + +@MembershipPages.route("/membership", methods=["GET"]) +@auth.authenticated_required +def membership_page(): + return render_template("membership/index.html") +# I know one day this source will get leaked. +# Jesus loves you brother. - kuromi <3 +# kuromi.cat +@MembershipPages.route("/membership/payment_methods", methods=["GET"]) +@auth.authenticated_required +def payment_methods_page(): + return render_template("membership/payment_methods.html") \ No newline at end of file diff --git a/app/pages/membership/payment_methods.html b/app/pages/membership/payment_methods.html new file mode 100644 index 0000000..de86161 --- /dev/null +++ b/app/pages/membership/payment_methods.html @@ -0,0 +1,153 @@ +{% extends '__layout__.html' %} +{% block title %}Cryptomus Dashboard{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+
+

Donation methods

+ + + Ko-fi donations + Ko-fi + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/messages/index.html b/app/pages/messages/index.html new file mode 100644 index 0000000..b6c57b7 --- /dev/null +++ b/app/pages/messages/index.html @@ -0,0 +1,51 @@ +{% extends '__layout__.html' %} +{% block title %}Messages{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{%if isOutgoing:%}Outgoing {%endif%}Messages

+ {% if not isOutgoing: %} + Click here to see your outgoing messages + {%else%} + Click here to see your incoming messages + {%endif%} +

Do not send any personal or sensitive information about yourself! A staff member will never ask for your password or email.

+
+ +
+
+ Previous +

Page {{UserMessages.page}} of {{UserMessages.pages}}

+ Next +
+
+
+{% endblock %} diff --git a/app/pages/messages/index.html1 b/app/pages/messages/index.html1 new file mode 100644 index 0000000..7766b6b --- /dev/null +++ b/app/pages/messages/index.html1 @@ -0,0 +1,42 @@ +{% extends '__layout__.html' %} +{% block title %}Messages{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

{%if isOutgoing:%}Outgoing {%endif%}Messages

+ {% if not isOutgoing: %} + View outgoing messages + {%else%} + View incoming messages + {%endif%} +

Do not share personal or sensitive information. A staff member will never ask for your password or email.

+
+ +
+
+ Previous +

Page {{UserMessages.page}} of {{UserMessages.pages}}

+ Next +
+
+
+{% endblock %} diff --git a/app/pages/messages/messages.py b/app/pages/messages/messages.py new file mode 100644 index 0000000..2ce8b69 --- /dev/null +++ b/app/pages/messages/messages.py @@ -0,0 +1,148 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.models.messages import Message +from app.util import auth, turnstile, websiteFeatures +from app.extensions import db, csrf, limiter, redis_controller +from app.models.user import User +from app.util.textfilter import FilterText +from sqlalchemy import or_ + +MessageRoute = Blueprint('message', __name__, template_folder="pages") + +def CreateSystemMessage( subject : str, message : str, userid : int ): + """ + Creates a system message from the system user to the specified user + """ + TargetUser = User.query.filter_by(id=userid).first() + if TargetUser is None: + return False + NewMessage : Message = Message( + subject=subject, + content=message, + sender_id=1, + recipient_id=userid + ) + db.session.add(NewMessage) + db.session.commit() + return True + +@MessageRoute.route("/my/messages", methods=["GET"]) +@auth.authenticated_required +def my_messages(): + return redirect("/messages") + +@MessageRoute.route("/new/", methods=["GET"]) +@auth.authenticated_required +def new_message(userid): + TargetUser = User.query.filter_by(id=userid).first() + if TargetUser is None: + return "User not found",404 + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + abort(404) + + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id == TargetUser.id: + return "You cannot message yourself",400 + + MessageReplyContext = request.args.get("reply", default=None, type=int) + if MessageReplyContext is not None: + ReplyMessage = Message.query.filter_by( id = MessageReplyContext ).filter( or_( Message.sender_id == AuthenticatedUser.id, Message.recipient_id == AuthenticatedUser.id ) ).first() + else: + ReplyMessage = None + + return render_template("messages/new.html", targetuser=TargetUser, replymessage=ReplyMessage) + +@MessageRoute.route("/new/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("10/minute") +def send_message(userid): + if 'cf-turnstile-response' not in request.form or request.form.get('cf-turnstile-response') == '': + flash("Please complete the captcha", "error") + return redirect(f"/messages/new/{userid}") + if 'message' not in request.form or request.form.get('message') == '': + flash("Please enter a message", "error") + return redirect(f"/messages/new/{userid}") + if 'subject' not in request.form or request.form.get('subject') == '': + flash("Please enter a subject", "error") + return redirect(f"/messages/new/{userid}") + if not websiteFeatures.GetWebsiteFeature("MessageSending"): + flash("Message sending is temporarily disabled", "error") + return redirect(f"/messages/new/{userid}") + TargetUser : User | None = User.query.filter_by(id=userid).first() + if TargetUser is None: + abort(404) + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + abort(404) + + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id == TargetUser.id: + abort(400) + + if len(request.form.get("message")) > 1024: + flash("Your message is too long", "error") + return redirect(f"/messages/new/{TargetUser.id}") + if len(request.form.get('subject')) > 64: + flash("Your subject is too long", "error") + return redirect(f"/messages/new/{TargetUser.id}") + + if not turnstile.VerifyToken(request.form.get('cf-turnstile-response')): + flash("Invalid captcha", "error") + return redirect(f"/messages/new/{TargetUser.id}") + if redis_controller.get(f"message:{TargetUser.id}:{AuthenticatedUser.id}") is not None: + flash("You are sending messages too quickly", "error") + return redirect(f"/messages/new/{TargetUser.id}") + NewLineCount = request.form.get('message').count("\n") + if NewLineCount > 10: + flash("Your message has too many newlines", "error") + return redirect(f"/messages/new/{TargetUser.id}") + redis_controller.set(f"message:{TargetUser.id}:{AuthenticatedUser.id}", "1", ex=60) + + FilteredSubject = FilterText(request.form.get('subject')) + FilteredMessage = FilterText(request.form.get('message')) + + NewMessage = Message( + sender_id=AuthenticatedUser.id, + recipient_id=TargetUser.id, + subject=FilteredSubject, + content=FilteredMessage + ) + db.session.add(NewMessage) + db.session.commit() + + return redirect(f"/messages/view/{NewMessage.id}") + +@MessageRoute.route("/view/", methods=["GET"]) +@auth.authenticated_required +def view_message(messageid): + MessageObj : Message = Message.query.filter_by(id=messageid).first() + if MessageObj is None: + abort(404) + AuthenicatatedUser = auth.GetCurrentUser() + if AuthenicatatedUser.id != MessageObj.sender_id and AuthenicatatedUser.id != MessageObj.recipient_id: + abort(404) + if AuthenicatatedUser.id == MessageObj.recipient_id: + MessageObj.read = True + db.session.commit() + SenderObj = User.query.filter_by(id=MessageObj.sender_id).first() + RecieverObj = User.query.filter_by(id=MessageObj.recipient_id).first() + MessageCreated = MessageObj.created.strftime("%b %d, %Y %I:%M %p") + + messagelines = MessageObj.content.split("\n") + return render_template("messages/view.html", message=MessageObj, created=MessageCreated,sender=SenderObj, reciever=RecieverObj, messagelines=messagelines) + +@MessageRoute.route("/", methods=['GET']) +@auth.authenticated_required +def messages(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = max( request.args.get('page', default=1, type=int), 1 ) + UserMessagesList = Message.query.filter_by(recipient_id = AuthenticatedUser.id).order_by(Message.created.desc()).paginate(page = PageNumber, per_page = 10, error_out = False) + + return render_template("messages/index.html", UserMessages=UserMessagesList, isOutgoing=False) + +@MessageRoute.route("/outgoing", methods=['GET']) +@auth.authenticated_required +def outgoing_messages(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = max( request.args.get('page', default=1, type=int), 1 ) + UserMessagesList = Message.query.filter_by(sender_id = AuthenticatedUser.id).order_by(Message.created.desc()).paginate(page = PageNumber, per_page = 10, error_out = False) + + return render_template("messages/index.html", UserMessages=UserMessagesList, isOutgoing=True) \ No newline at end of file diff --git a/app/pages/messages/new.html b/app/pages/messages/new.html new file mode 100644 index 0000000..3b7a68f --- /dev/null +++ b/app/pages/messages/new.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}New Message{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

New Message

+
+ Recipient + +
+
+
+ Subject + +
+ +

Do not send any personal or sensitive information about yourself! A staff member will never ask for your password or email.

+
+
+ +
+ +
+
+
+
+
+{% endblock %} diff --git a/app/pages/messages/view.html b/app/pages/messages/view.html new file mode 100644 index 0000000..d366be8 --- /dev/null +++ b/app/pages/messages/view.html @@ -0,0 +1,39 @@ +{% extends '__layout__.html' %} +{% block title %}{{message.subject}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{{message.subject}}

+

To: {{reciever.username}}

+
+ +
+ {{sender.username}} +
+ {{sender.username}} +

{{created}} UTC

+
+
+
+ {% for line in messagelines: %} + {% if line.strip() != '' %} +

{{line}}

+ {%else%} +
+ {%endif%} + {% endfor %} +
+
+ Back to messages + {% if sender.id != currentuser.id %} + Reply + {% endif %} +
+
+
+{% endblock %} diff --git a/app/pages/notapproved/banpage.html b/app/pages/notapproved/banpage.html new file mode 100644 index 0000000..f9c1258 --- /dev/null +++ b/app/pages/notapproved/banpage.html @@ -0,0 +1,33 @@ +{% extends '__layout__.html' %} +{% block title %}Banned{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

{{banText}}

+
+

Banned On: {{userban.created_at}} UTC

+

Expires On: {% if userban.expires_at != None%}{{userban.expires_at}} UTC{%else%}Never{%endif%}

+
+
+

Reason: {{userban.reason}}

+
+
+ {% if not hasBanExpired: %} +

If you wish to appeal this ban you can open a ticket on our Discord Server

+
+ {%else%} +

By clicking Re-activate you agree to our Terms Of Service

+
+ + +
+
+ {%endif%} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/notapproved/notapproved.py b/app/pages/notapproved/notapproved.py new file mode 100644 index 0000000..0c0d4f2 --- /dev/null +++ b/app/pages/notapproved/notapproved.py @@ -0,0 +1,92 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort +from app.models.user_ban import UserBan +from app.extensions import db, csrf, limiter, redis_controller +from app.models.user import User +from app.enums.BanType import BanType +from app.util import auth +from datetime import datetime, timedelta + +NotApprovedRoute = Blueprint('notapproved', __name__, template_folder="pages") + +BanTypeToText = { + BanType.Warning: "Warning", + BanType.Day1Ban: "Banned for 1 day", + BanType.Day3Ban: "Banned for 3 days", + BanType.Day7Ban: "Banned for 7 days", + BanType.Day14Ban: "Banned for 14 days", + BanType.Day30Ban: "Banned for 30 days", + BanType.Deleted: "Account Deleted", +} + +@NotApprovedRoute.route("/not-approved", methods=["GET"]) +def not_approved(): + CurrentUser : User = auth.GetCurrentUser() + if CurrentUser is not None: + return redirect("/") + + if "not-approved-viewer" not in session: + abort(404) + + UserObj : User = User.query.filter_by(id=session["not-approved-viewer"]).first() + if UserObj is None: + del session["not-approved-viewer"] + abort(404) + + if UserObj.accountstatus == 4: + del session["not-approved-viewer"] + return redirect("/") + + if UserObj.accountstatus == 1: + del session["not-approved-viewer"] + return redirect("/") + + LatestUserBanObj : UserBan = UserBan.query.filter_by(userid=UserObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LatestUserBanObj is None: + del session["not-approved-viewer"] + UserObj.accountstatus = 1 + db.session.commit() + return redirect("/") + hasBanExpired = False + if LatestUserBanObj.ban_type == BanType.Warning: + hasBanExpired = True + elif LatestUserBanObj.expires_at is not None: + if LatestUserBanObj.expires_at < datetime.utcnow(): + hasBanExpired = True + + return render_template("notapproved/banpage.html", user=UserObj, + userban=LatestUserBanObj, + banText=BanTypeToText[LatestUserBanObj.ban_type], + hasBanExpired=hasBanExpired) + +@NotApprovedRoute.route("/not-approved", methods=["POST"]) +def not_approved_post(): + CurrentUser : User = auth.GetCurrentUser() + if CurrentUser is not None: + return redirect("/") + if "not-approved-viewer" not in session: + abort(404) + + UserObj : User = User.query.filter_by(id=session["not-approved-viewer"]).first() + if UserObj is None: + del session["not-approved-viewer"] + abort(404) + + if UserObj.accountstatus == 1: + del session["not-approved-viewer"] + return redirect("/") + + LatestUserBanObj : UserBan = UserBan.query.filter_by(userid=UserObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LatestUserBanObj is None: + del session["not-approved-viewer"] + UserObj.accountstatus = 1 + db.session.commit() + return redirect("/") + if LatestUserBanObj.ban_type != BanType.Warning: + flash("u can log back in now thank u", "error") + return redirect("/not-approved") + LatestUserBanObj.acknowledged = True + UserObj.accountstatus = 1 + db.session.commit() + del session["not-approved-viewer"] + flash("Your account has been reactivated", "success") + return redirect("/login") diff --git a/app/pages/privacy.html b/app/pages/privacy.html new file mode 100644 index 0000000..4ef282b --- /dev/null +++ b/app/pages/privacy.html @@ -0,0 +1,95 @@ +{% extends '__layout__.html' %} +{% block title %}Privacy Policy{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Privacy Policy

+

Last amended: 22/07/2026

+
+

This Privacy Policy ("Policy") describes how NEXIUM ("we," "us," or "our") collects, uses, and protects the personal information you provide when accessing or using the NEXIUM website (the "Website"). It is written to comply with the EU General Data Protection Regulation (GDPR) and, where applicable, the UK GDPR.

+ +

1. Who We Are

+

1.1. NEXIUM is the data controller responsible for your personal data processed through the Website. For any privacy-related request, contact us at kaitlyn@chadthundercock.com or via our Discord server.

+ +

2. Data We Collect

+

2.1. Account data. Username, hashed password, email address (if provided, e.g. for password resets), account creation date, and account activity (such as login times and login history).

+

2.2. Technical & security data. IP address, device type, operating system, and browser version, collected to secure the Website, prevent abuse, and enforce these Terms.

+

2.3. Discord account data. If you choose to link a Discord account, we receive your Discord user ID, username, and avatar via Discord's OAuth "identify" scope, so we can offer Discord-linked features such as membership perks.

+

2.4. Payment data. If you make a purchase, our payment processors (Cryptomus, Ko-fi) handle your payment details directly. We only receive confirmation of payment, the amount, and a transaction reference — we do not receive or store your full card or wallet details.

+

2.5. User-generated content. Anything you create or upload on the Website, such as your avatar, profile description, chat messages, group content, trades, and forum-style posts.

+

2.6. Cookies & similar technologies. See Section 4 below.

+ +

3. How We Use Your Data & Legal Basis

+

3.1. We only process your personal data where we have a valid legal basis to do so under the GDPR:

+
    +
  • To provide the Website (account creation, login, gameplay, trading, purchases): necessary for the performance of a contract with you (our Terms of Service).
  • +
  • To secure the Website and prevent fraud, cheating, or abuse: our legitimate interest in keeping the Website safe and functional.
  • +
  • To run analytics on Website usage (Google Analytics): your consent, or our legitimate interest in understanding how the Website is used, where permitted in your jurisdiction. You can decline non-essential cookies as described in Section 4.
  • +
  • To respond to legal requests or enforce our Terms: compliance with a legal obligation, or our legitimate interest in protecting our rights.
  • +
+

3.2. We do not use your personal data for automated decision-making, including profiling, that produces legal or similarly significant effects on you without human review.

+ +

4. Cookies and Tracking Technologies

+

4.1. We use the following categories of cookies and similar technologies:

+
    +
  • Strictly necessary: a session/authentication cookie required to keep you logged in and secure your session. The Website cannot function without this cookie.
  • +
  • Security: Cloudflare Turnstile, used on login/signup forms to detect bots and abuse.
  • +
  • Analytics: Google Analytics, used to understand aggregate usage of the Website.
  • +
+

4.2. Strictly necessary and security cookies are essential and cannot be disabled without breaking core functionality. Analytics cookies are not essential; you can block them using your browser's cookie settings or an extension, and doing so will not affect your ability to use the Website.

+

4.3. Third-party services listed in this section set their own cookies and are governed by their own privacy policies, which we encourage you to review.

+ +

5. Information Sharing and Disclosure

+

5.1. We do not sell or rent your personal information to third parties.

+

5.2. We share personal data with the following categories of recipients, only to the extent necessary for them to provide their service to us:

+
    +
  • Payment processors (Cryptomus, Ko-fi) — to process purchases.
  • +
  • Discord — if you choose to link your Discord account.
  • +
  • Cloudflare — for security, bot protection, and content delivery.
  • +
  • Google (Google Analytics) — for aggregate usage analytics.
  • +
  • Hosting and infrastructure providers — to operate the Website.
  • +
+

5.3. We may disclose your personal information if required by law, or if we believe in good faith that disclosure is necessary to comply with a legal obligation, protect our rights and property, or ensure the safety of our users or the public.

+ +

6. International Data Transfers

+

6.1. Some of the recipients listed in Section 5 (such as Discord, Cloudflare, and Google) may process data outside the European Economic Area, including in the United States. Where this occurs, we rely on the safeguards those providers make available, such as the EU Standard Contractual Clauses, to ensure your data remains protected.

+ +

7. Data Retention

+

7.1. We retain your account data for as long as your account is active. If you delete your account, we will delete or anonymize your personal data within a reasonable period, except where we are required to retain certain data (such as transaction records or moderation logs) for longer to comply with legal, tax, security, or fraud-prevention obligations.

+

7.2. Technical logs such as IP addresses and login records are retained only as long as necessary for security purposes and are then deleted or anonymized.

+ +

8. Data Security

+

8.1. We implement reasonable technical and organizational security measures — such as password hashing and access controls — to protect your personal information against unauthorized access, alteration, disclosure, or destruction.

+

8.2. However, please note that no method of transmission over the Internet or electronic storage is 100% secure. While we strive to protect your personal information, we cannot guarantee its absolute security.

+ +

9. Your Rights Under the GDPR

+

9.1. If you are located in the EU/EEA or UK, you have the following rights regarding your personal data:

+
    +
  • Access: You have the right to request access to the personal data we hold about you.
  • +
  • Rectification: You may request that we correct inaccurate or incomplete personal data.
  • +
  • Erasure ("Right to be forgotten"): You may request that we delete your personal data under certain circumstances.
  • +
  • Restriction of processing: You may request that we limit the processing of your data.
  • +
  • Data portability: You have the right to receive your data in a structured, commonly used, machine-readable format.
  • +
  • Objection: You may object to our processing of your personal data where we rely on legitimate interests as the legal basis.
  • +
  • Withdrawal of consent: Where we process data based on your consent (e.g. analytics cookies), you can withdraw that consent at any time, without affecting the lawfulness of processing before withdrawal.
  • +
+

9.2. To exercise any of these rights, contact us at kaitlyn@chadthundercock.com or via our Discord server. We will respond within one month, as required by the GDPR.

+

9.3. You also have the right to lodge a complaint with a supervisory authority, in particular in the EU member state of your habitual residence, place of work, or place of the alleged infringement. In Poland, this is the Urząd Ochrony Danych Osobowych (UODO).

+ +

10. Children's Privacy

+

10.1. The Website is not intended for use by individuals under the age of 13. We do not knowingly collect personal information from children under 13. If we become aware that we have collected personal information from a child under 13 without appropriate consent, we will take steps to delete that information from our systems.

+ +

11. Links to Third-Party Websites

+

11.1. The Website may contain links to third-party websites or services. We are not responsible for the privacy practices or the content of those third-party websites. We encourage you to review the privacy policies of those websites before providing any personal information.

+ +

12. Changes to this Privacy Policy

+

12.1. We may update this Privacy Policy from time to time. Material changes will be highlighted on the Website and the "Last amended" date above will be updated. Your continued use of the Website after such changes take effect constitutes your acknowledgment of the updated Policy.

+ +

13. Contact Us

+

13.1. If you have any questions or concerns about this Privacy Policy or our data practices, contact us at kaitlyn@chadthundercock.com or via our Discord server.

+ +

By accessing or using the NEXIUM Website, you acknowledge that you have read and understood this Privacy Policy.

+
+{% endblock %} diff --git a/app/pages/profiles/followers.html b/app/pages/profiles/followers.html new file mode 100644 index 0000000..a437a58 --- /dev/null +++ b/app/pages/profiles/followers.html @@ -0,0 +1,61 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Followers

+
+ +
+

Followers ( {{FollowCount}} )

+
+ {% for following in FollowUsers: %} + + {%endfor%} +
+ {% if len(FollowUsers) <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{PageNumber}} of {{TotalPages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/following.html b/app/pages/profiles/following.html new file mode 100644 index 0000000..4d90981 --- /dev/null +++ b/app/pages/profiles/following.html @@ -0,0 +1,61 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Following

+
+ +
+

Following ( {{FollowCount}} )

+
+ {% for following in FollowUsers: %} + + {%endfor%} +
+ {% if len(FollowUsers) <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{PageNumber}} of {{TotalPages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/friends.html b/app/pages/profiles/friends.html new file mode 100644 index 0000000..6a85914 --- /dev/null +++ b/app/pages/profiles/friends.html @@ -0,0 +1,71 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Friends

+
+ +
+

Friends ( {{FriendCount}} )

+
+ {% for friend in FriendUsers: %} +
+
+ + {{friend.username}} + + {{friend.username}} + {% if currentuser.id == profile.id %} + + {%endif%} +
+
+ {%endfor%} +
+ {% if len(FriendUsers) <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{PageNumber}} of {{TotalPages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/inventory.html b/app/pages/profiles/inventory.html new file mode 100644 index 0000000..d62c4ae --- /dev/null +++ b/app/pages/profiles/inventory.html @@ -0,0 +1,180 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}} - Inventory{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Inventory

+
+
+ +
+

{{CategoryName}}

+ + {% if len(SearchQuery.items) == 0: %} +

No items found

+ {% endif %} +
+ Previous +

Page {{SearchQuery.page}} of {{SearchQuery.pages}}

+ Next +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/profile.html b/app/pages/profiles/profile.html new file mode 100644 index 0000000..c485f7a --- /dev/null +++ b/app/pages/profiles/profile.html @@ -0,0 +1,254 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+ {{profile.username}} + {% if profile.isonline: %}
{% endif %} +
+
+
+

{{profile.username}}

+ {% if profile.membershipValue == 1: %} + + {%endif%} + {% if profile.membershipValue == 2: %} + + {%endif%} + {% if profile.membershipValue == 3: %} + + {%endif%} +
+ {% if profile.id != currentuser.id : %} + {% if profile.doestargetuserfollowviewer: %} +

This user is currently following you

+ {%endif%} + {%endif%} +
+
+

Friends

+ {{profile.friendcount}} +
+
+

Followers

+ {{profile.FollowerCount}} +
+
+

Following

+ {{profile.FollowingCount}} +
+
+

User RAP

+

{{profile.UserRAP}}

+
+
+
+
+
+
+ + {% if profile.id != currentuser.id : %} +
+ + {% if profile.isfriends: %} +
+ + +
+ {% else: %} + {% if profile.friendrequestpending: %} + + {% else: %} + {% if profile.friendrequesttoauthenticateduser: %} +
+ + +
+ {% else: %} +
+ + +
+ {% endif %} + {% endif %} + {% endif %} +
+ {% endif %} +
+
+
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/profile.html1 b/app/pages/profiles/profile.html1 new file mode 100644 index 0000000..7c07d82 --- /dev/null +++ b/app/pages/profiles/profile.html1 @@ -0,0 +1,248 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
{{ message }}
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+ {{profile.username}} + {% if profile.isonline: %}
{% endif %} +
+
+
+

{{profile.username}}

+ {% if profile.membershipValue == 1: %}{%endif%} + {% if profile.membershipValue == 2: %}{%endif%} + {% if profile.membershipValue == 3: %}{%endif%} +
+ {% if profile.id != currentuser.id : %} + {% if profile.doestargetuserfollowviewer: %} +

This user is currently following you

+ {%endif%} + {%endif%} +
+
+

Friends

+ {{profile.friendcount}} +
+
+

Followers

+ {{profile.FollowerCount}} +
+
+

Following

+ {{profile.FollowingCount}} +
+
+

User RAP

+

{{profile.UserRAP}}

+
+
+
+
+
+
+
+ +
+ {% if profile.id != currentuser.id : %} +
+ + {% if profile.isfriends: %} +
+ + +
+ {% else: %} + {% if profile.friendrequestpending: %} + + {% else: %} + {% if profile.friendrequesttoauthenticateduser: %} +
+ + +
+ {% else: %} +
+ + +
+ {% endif %} + {% endif %} + {% endif %} +
+ {% endif %} +
+
+
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/profile.py b/app/pages/profiles/profile.py new file mode 100644 index 0000000..f6aec3d --- /dev/null +++ b/app/pages/profiles/profile.py @@ -0,0 +1,536 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash, abort +from app.util import auth, friends, membership, websiteFeatures, placeinfo +from app.extensions import db, limiter, csrf, user_limiter +from app.models.user import User +from app.models.friend_request import FriendRequest +from app.models.friend_relationship import FriendRelationship +from datetime import datetime +from app.models.asset import Asset +from app.models.place import Place +from app.models.placeserver_players import PlaceServerPlayer +from app.models.follow_relationship import FollowRelationship +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.userassets import UserAsset +from app.models.universe import Universe +from app.models.place_badge import PlaceBadge, UserBadge +from app.enums.AssetType import AssetType +from sqlalchemy import or_ +from app.enums.MembershipType import MembershipType +from slugify import slugify +from app.routes.rate import GetAssetLikesAndDislikes, GetUserVoteStatus, GetAssetVotePercentage, GetAssetFavoriteCount, GetUserFavoriteStatus +from app.services import economy + +from app.services.user_relationships import followings + +Profile = Blueprint("profile", __name__, template_folder="pages") + +@Profile.route("/users//profile", methods=["GET"]) +@auth.authenticated_required +def profile_page(userid): + user : User = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + + Friends = friends.GetFriends(user.id) + FriendCount = len(Friends) + DescriptionLines = user.description.split("\n") + FriendsData = [] + for friend in Friends: + friendObjData = {} + friendObjData = { + "id": friend.id, + "username": friend.username, + "isonline": True if (datetime.utcnow() - friend.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=friend.id).first() is not None else False + } + FriendsData.append(friendObjData) + FriendsData.sort(key=lambda x: x["isonline"], reverse=True) + FriendsData.sort(key=lambda x: x["ingame"], reverse=True) + FriendsData = FriendsData[:8] + + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id != user.id: + isFriends = friends.IsFriends(AuthenticatedUser.id, user.id) + FriendRequestPending = FriendRequest.query.filter_by(requester_id=AuthenticatedUser.id, requestee_id=user.id).first() is not None + FriendRequestToAuthenticatedUser = FriendRequest.query.filter_by(requester_id=user.id, requestee_id=AuthenticatedUser.id).first() is not None + isViewerFollowing = FollowRelationship.query.filter_by(followerUserId=AuthenticatedUser.id, followeeUserId=user.id).first() is not None + doesTargetUserFollowViewer = FollowRelationship.query.filter_by(followerUserId=user.id, followeeUserId=AuthenticatedUser.id).first() is not None + else: + isFriends = False + FriendRequestPending = False + FriendRequestToAuthenticatedUser = False + isViewerFollowing = False + doesTargetUserFollowViewer = False + joindate = user.created.strftime("%d/%m/%Y") + TotalVisits = 0 + UniverseList : list[Universe] = Universe.query.filter_by( creator_id = user.id, creator_type = 0 ).all() + for UniverseObj in UniverseList: + TotalVisits += UniverseObj.visit_count + + FollowerCount = followings.get_follower_count( user ) + FollowingCount = followings.get_following_count( user ) + WearingAssets = UserAvatarAsset.query.filter_by(user_id=user.id).all() + membershipValue : int = membership.GetUserMembership(user.id).value + + UserGames : list[Asset] = Asset.query.filter_by(creator_id = user.id, creator_type = 0, asset_type = AssetType.Place).all() + UserGamesInfo : list[dict] = [] + for UserGame in UserGames: + PlaceObj : Place = Place.query.filter_by(placeid=UserGame.id).first() + if PlaceObj is None: + continue + if PlaceObj.is_public == False: + continue + + PlaceObjData = { + "id": UserGame.id, + "name": UserGame.name, + "playingcount": placeinfo.GetPlayingCount( PlaceObj ), + "slug": slugify(UserGame.name, lowercase=False) if UserGame.name is not None else "", + "likePercentage": GetAssetVotePercentage(UserGame.id), + "placeyear": PlaceObj.placeyear + } + UserGamesInfo.append(PlaceObjData) + + ProfileData = { + "username": user.username, + "id": user.id, + "friendcount": FriendCount, + "isonline": True if (datetime.utcnow() - user.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=user.id).first() is not None else False, + "isfriends": isFriends, + "friendrequestpending": FriendRequestPending, + "friendrequesttoauthenticateduser": FriendRequestToAuthenticatedUser, + "friendsdata": FriendsData, + "joindate": joindate, + "TotalVisits": TotalVisits, + "FollowerCount": FollowerCount, + "FollowingCount": FollowingCount, + "wearing": WearingAssets, + "isviewerfollowing": isViewerFollowing, + "doestargetuserfollowviewer": doesTargetUserFollowViewer, + "membershipValue": membershipValue, + "UserGames": UserGamesInfo, + "UserRAP": economy.CalculateUserRAP( user ) + } + + return render_template("profiles/profile.html", profile=ProfileData, descriptionlines=DescriptionLines) + +@Profile.route("/users//addfriend", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +@user_limiter.limit("5/minute") +def add_friend(userid): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + if not websiteFeatures.GetWebsiteFeature("SendFriendRequest"): + flash("Adding friends is temporarily disabled.", "error") + return redirect(f"/users/{user.id}/profile") + AuthenticatedUser = auth.GetCurrentUser() + + if userid == AuthenticatedUser.id: + flash("You cannot add yourself as a friend.", "error") + return redirect(f"/users/{user.id}/profile") + + if FriendRequest.query.filter_by(requester_id=AuthenticatedUser.id, requestee_id=user.id).first() is not None: + flash("You have already sent a friend request to this user.", "error") + return redirect(f"/users/{user.id}/profile") + + if friends.IsFriends(AuthenticatedUser.id, user.id): + flash("You are already friends with this user.", "error") + return redirect(f"/users/{user.id}/profile") + + friendRequest = FriendRequest(requester_id=AuthenticatedUser.id, requestee_id=user.id) + db.session.add(friendRequest) + db.session.commit() + + return redirect(f"/users/{user.id}/profile") + +@Profile.route("/users//unfriend", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +@user_limiter.limit("5/minute") +def unfriend(userid): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + AuthenticatedUser = auth.GetCurrentUser() + + if not friends.IsFriends(AuthenticatedUser.id, user.id): + flash("You are not friends with this user.", "error") + return handle_redirect(user) + + Friendrelationship : FriendRelationship = friends.GetFriendRelationship(AuthenticatedUser.id, user.id) + db.session.delete(Friendrelationship) + db.session.commit() + + return handle_redirect(user) + +def handle_redirect(user): + wantRedirect = request.args.get("redirect", type=int, default=1) + if wantRedirect == 1: + return redirect(f"/users/{user.id}/profile") + else: + return redirect(request.referrer) + + +@Profile.route("/users//acceptfriend", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required +@user_limiter.limit("30/minute") +def accept_friend(userid): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + if not websiteFeatures.GetWebsiteFeature("SendFriendRequest"): + flash("Adding friends is temporarily disabled.", "error") + return handle_redirect(user) + AuthenticatedUser = auth.GetCurrentUser() + if userid == AuthenticatedUser.id: + flash("You cannot add yourself as a friend.", "error") + return handle_redirect(user) + + friendRequest = FriendRequest.query.filter_by(requester_id=user.id, requestee_id=AuthenticatedUser.id).first() + if friendRequest is None: + flash("Friend request not found.", "error") + return handle_redirect(user) + + FriendCount = len(friends.GetFriends(user.id)) + if FriendCount >= 200: + flash("This user has reached their friend limit.", "error") + return handle_redirect(user) + + AuthenticatedUserFriendCount = len(friends.GetFriends(AuthenticatedUser.id)) + if AuthenticatedUserFriendCount >= 200: + flash("You have reached your friend limit.", "error") + return handle_redirect(user) + + Friendrelationship = FriendRelationship(user_id=user.id, friend_id=AuthenticatedUser.id) + db.session.add(Friendrelationship) + db.session.delete(friendRequest) + db.session.commit() + + return handle_redirect(user) + +@Profile.route("/users//declinefriend", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required +@user_limiter.limit("30/minute") +def decline_friend(userid): + TargetUser = User.query.filter_by(id=userid).first() + if TargetUser is None: + abort(404) + + if not websiteFeatures.GetWebsiteFeature("SendFriendRequest"): + flash("Declining friend requests is temporarily disabled.", "error") + return handle_redirect(TargetUser) + AuthenticatedUser = auth.GetCurrentUser() + if userid == AuthenticatedUser.id: + abort(404) + friendRequest = FriendRequest.query.filter_by(requester_id=TargetUser.id, requestee_id=AuthenticatedUser.id).first() + if friendRequest is None: + return handle_redirect(TargetUser) + db.session.delete(friendRequest) + db.session.commit() + return handle_redirect(TargetUser) + + +@Profile.route("/users//unfollowuser", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +def unfollow_user(userid): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + try: + followings.unfollow_user( + current_follower = AuthenticatedUser, followed_user = UserObj + ) + except followings.FollowingExceptions.UserNotFollowing: + flash("You are not following this user.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.UserRateLimited: + flash("You are being rate limited from unfollowing users, please slow down.", "error") + return redirect(f"/users/{UserObj.id}/profile") + + return redirect(f"/users/{UserObj.id}/profile") + +@Profile.route("/users//followuser", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +def follow_user(userid): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None: + abort(404) + if UserObj.accountstatus == 4 or UserObj.accountstatus == 3: + abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + try: + followings.follow_user( + follower_user = AuthenticatedUser, followed_user = UserObj + ) + except followings.FollowingExceptions.AlreadyFollowing: + flash("You are already following this user.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.UserRateLimited: + flash("You are being rate limited from following users, please slow down.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.CannotFollowSelf: + flash("You cannot follow yourself.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.FollowingIsDisabled: + flash("Following users is disabled.", "error") + return redirect(f"/users/{UserObj.id}/profile") + + return redirect(f"/users/{UserObj.id}/profile") + +@Profile.route("/users//friends", methods=["GET"]) +@auth.authenticated_required +def FriendsPage( userid : int ): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + + from app.models.friend_relationship import FriendRelationship + FriendRelationships : list[FriendRelationship] = FriendRelationship.query.filter( + or_( + FriendRelationship.user_id == user.id, + FriendRelationship.friend_id == user.id + ) + ).join( + User, + or_( + FriendRelationship.user_id == User.id, + FriendRelationship.friend_id == User.id + ) + ).filter( + User.id != user.id + ).order_by( + User.username + ).paginate( + page=PageNumber, + per_page=18, + error_out=False + ) + FriendUsers : list[User] = [] + for FriendRelationshipObj in FriendRelationships: + if FriendRelationshipObj.user_id == user.id: + TargetUserId : int = FriendRelationshipObj.friend_id + else: + TargetUserId : int = FriendRelationshipObj.user_id + FriendUser : User = User.query.filter_by(id=TargetUserId).first() + if FriendUser is not None: + FriendUsers.append({ + "id": FriendUser.id, + "username": FriendUser.username, + "isonline": True if (datetime.utcnow() - FriendUser.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=FriendUser.id).first() is not None else False + }) + FriendCount = FriendRelationship.query.filter((FriendRelationship.user_id == user.id) | (FriendRelationship.friend_id == user.id)).count() + if FriendRelationships.pages < PageNumber: + redirect(f"/users/{user.id}/friends") + + return render_template("profiles/friends.html", + profile=user, + FriendUsers=FriendUsers, + PageNumber=PageNumber, + isThereNextPage=FriendRelationships.has_next, + isTherePreviousPage=FriendRelationships.has_prev, + FriendCount=FriendCount, + TotalPages=FriendRelationships.pages) + +@Profile.route("/users//following", methods=["GET"]) +@auth.authenticated_required +def FollowingPage( userid : int ): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + + from app.models.follow_relationship import FollowRelationship + FollowRelationships : list[FollowRelationship] = FollowRelationship.query.filter_by(followerUserId=user.id).join( + User, + FollowRelationship.followeeUserId == User.id + ).order_by( + User.username + ).paginate( + page=PageNumber, + per_page=18, + error_out=False + ) + FollowUsers : list[User] = [] + for FollowRelationship in FollowRelationships: + FollowUser : User = User.query.filter_by(id=FollowRelationship.followeeUserId).first() + if FollowUser is not None: + FollowUsers.append({ + "id": FollowUser.id, + "username": FollowUser.username, + "isonline": True if (datetime.utcnow() - FollowUser.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=FollowUser.id).first() is not None else False + }) + FollowCount = FollowRelationship.query.filter_by(followerUserId=user.id).count() + if FollowRelationships.pages < PageNumber: + redirect(f"/users/{user.id}/following") + + return render_template("profiles/following.html", + profile=user, + FollowUsers=FollowUsers, + PageNumber=PageNumber, + isThereNextPage=FollowRelationships.has_next, + isTherePreviousPage=FollowRelationships.has_prev, + FollowCount=FollowCount, + TotalPages=FollowRelationships.pages) + +@Profile.route("/users//followers", methods=["GET"]) +@auth.authenticated_required +def FollowersPage( userid : int ): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + + from app.models.follow_relationship import FollowRelationship + FollowRelationships : list[FollowRelationship] = FollowRelationship.query.filter_by(followeeUserId=user.id).join( + User, + FollowRelationship.followerUserId == User.id + ).order_by( + User.username + ).paginate( + page=PageNumber, + per_page=18, + error_out=False + ) + FollowUsers : list[User] = [] + for FollowRelationship in FollowRelationships: + FollowUser : User = User.query.filter_by(id=FollowRelationship.followerUserId).first() + if FollowUser is not None: + FollowUsers.append({ + "id": FollowUser.id, + "username": FollowUser.username, + "isonline": True if (datetime.utcnow() - FollowUser.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=FollowUser.id).first() is not None else False + }) + FollowCount = FollowRelationship.query.filter_by(followeeUserId=user.id).count() + if FollowRelationships.pages < PageNumber: + redirect(f"/users/{user.id}/followers") + + return render_template("profiles/followers.html", + profile=user, + FollowUsers=FollowUsers, + PageNumber=PageNumber, + isThereNextPage=FollowRelationships.has_next, + isTherePreviousPage=FollowRelationships.has_prev, + FollowCount=FollowCount, + TotalPages=FollowRelationships.pages) + +@Profile.route("/users//requests", methods=["GET"]) +@auth.authenticated_required +def FriendRequestsPage( userid : int ): + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id != userid: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + FriendRequests : list[FriendRequest] = FriendRequest.query.filter_by(requestee_id=userid).order_by(FriendRequest.created_at.desc()).paginate(page=PageNumber, per_page=18, error_out=False) + return render_template("profiles/requests.html", + profile=AuthenticatedUser, + FriendRequests=FriendRequests) + +@Profile.route("/users//requests/clear", methods=["POST"]) +@auth.authenticated_required +def ClearFriendRequests(userid : int): + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id != userid: + abort(404) + FriendRequests : list[FriendRequest] = FriendRequest.query.filter_by(requestee_id=userid).all() + for FriendRequestObj in FriendRequests: + db.session.delete(FriendRequestObj) + db.session.commit() + return redirect(f"/users/{userid}/requests") + +@Profile.route("/users//inventory", methods=["GET"]) +@auth.authenticated_required +def UserInventoryPage( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None: + return abort(404) + + InventoryTypesDict = { + 0: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))), + 1: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Audio ), + 2: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Package ), + 3: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Face ), + 4: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Head ), + 5: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Hat ), + 6: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.GamePass ), + 7: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.TShirt ), + 8: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Shirt ), + 9: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Pants ), + 10: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Gear ) + } + InventoryTypeToFriendlyName = { + 0: "Accessories", + 1: "Audio", + 2: "Packages", + 3: "Faces", + 4: "Heads", + 5: "Hats", + 6: "Passes", + 7: "T-Shirts", + 8: "Shirts", + 9: "Pants", + 10: "Gears", + 11: "Badges" + } + + CategoryType = request.args.get( key = "category", default = 0, type = int ) + if CategoryType not in InventoryTypeToFriendlyName: + return redirect(f"/users/{userid}/inventory") + PageNumber = request.args.get( key = "page", default = 1, type = int ) + if PageNumber < 1: + PageNumber = 1 + + if CategoryType not in [11]: + SearchQuery = UserAsset.query.filter_by( userid = userid ).outerjoin( Asset, Asset.id == UserAsset.assetid ) + SearchQuery = InventoryTypesDict[CategoryType](SearchQuery).order_by( UserAsset.updated.desc() ).paginate( page = PageNumber, per_page = 24, error_out = False ) + + for UserAssetObj in SearchQuery.items: + if UserAssetObj.asset.is_limited and not UserAssetObj.asset.is_for_sale: + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=UserAssetObj.assetid, is_for_sale=True).order_by(UserAsset.price.asc()).first() + if BestPriceResult is not None: + UserAssetObj.best_price = str(BestPriceResult.price) + else: + UserAssetObj.best_price = "--" + elif CategoryType == 11: + SearchQuery = UserBadge.query.filter_by( user_id = userid ).order_by( UserBadge.awarded_at.desc() ).paginate( page = PageNumber, per_page = 24, error_out = False ) + + return render_template( + "profiles/inventory.html", + profile = UserObj, + SearchQuery = SearchQuery, + CategoryName = InventoryTypeToFriendlyName[CategoryType], + CategoryIndex = CategoryType + ) \ No newline at end of file diff --git a/app/pages/profiles/requests.html b/app/pages/profiles/requests.html new file mode 100644 index 0000000..7cf6f05 --- /dev/null +++ b/app/pages/profiles/requests.html @@ -0,0 +1,79 @@ +{% extends '__layout__.html' %} +{% block title %}Friend Requests{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

Friend Requests

+
+ +
+
+

Requests ( {{FriendRequests.total}} )

+
+ + +
+
+
+ {% for request in FriendRequests: %} +
+
+ + {{request.requester.username}} + +
+ {{request.requester.username}} +
+
+ + +
+
+ + +
+
+
+
+
+ {%endfor%} +
+ {% if FriendRequests.total <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{FriendRequests.page}} of {{FriendRequests.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/changeemail.html b/app/pages/settings/changeemail.html new file mode 100644 index 0000000..036d248 --- /dev/null +++ b/app/pages/settings/changeemail.html @@ -0,0 +1,53 @@ +{% extends '__layout__.html' %} +{% block title %}Change Email{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Change Email

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ +
+
+
+

+ Please complete the captcha to change your email. +

+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/changepassword.html b/app/pages/settings/changepassword.html new file mode 100644 index 0000000..d8a5c68 --- /dev/null +++ b/app/pages/settings/changepassword.html @@ -0,0 +1,52 @@ +{% extends '__layout__.html' %} +{% block title %}Change Password{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Change Password

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+
+ + +
+
+ {% if is2FAEnabled: %} +
+
+ + +
+
+ {% endif %} +
+
+ + +
+

Make sure to choose a strong password and always use a unique password for every site.

+
+ + +
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/changeusername.html b/app/pages/settings/changeusername.html new file mode 100644 index 0000000..301418f --- /dev/null +++ b/app/pages/settings/changeusername.html @@ -0,0 +1,35 @@ +{% extends '__layout__.html' %} +{% block title %}Change Username{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Change Username

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/emailverify_success.html b/app/pages/settings/emailverify_success.html new file mode 100644 index 0000000..e445285 --- /dev/null +++ b/app/pages/settings/emailverify_success.html @@ -0,0 +1,18 @@ +{% extends '__layout__.html' %} +{% block title %}Email Verified{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ +
+

Email Verified!

+

Thank you for verifying your email!{%if RewardObj: %} As a reward you have been given a special item{%endif%}

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/enableTOTP.html b/app/pages/settings/enableTOTP.html new file mode 100644 index 0000000..b4d6d52 --- /dev/null +++ b/app/pages/settings/enableTOTP.html @@ -0,0 +1,34 @@ +{% extends '__layout__.html' %} +{% block title %}Enable TOTP{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Enable TOTP

+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

Scan the QR code below using a authenticator app (eg. Google Authenticator, Authy)

+
+ QR Code +
+

Note: Once this is enabled, you CANNOT disable it ever.

+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/settings.html b/app/pages/settings/settings.html new file mode 100644 index 0000000..eef6d16 --- /dev/null +++ b/app/pages/settings/settings.html @@ -0,0 +1,60 @@ +{% extends '__layout__.html' %} +{% block title %}Settings{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Account Settings

+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+

Username: {{currentuser.username}}

+ Edit Username +
+
+

Password: ************

+ Edit Password +
+ +
+

Authenticator App Authentication: {% if TOTPenabled: %}Enabled{% else %}Disabled{% endif %}

+ {% if not TOTPenabled: %}{% endif %} +
+
+

Theme

+
+ + +
+
+
+

Discord Account: {% if DiscordUserInfoObj != None: %}{{DiscordUserInfoObj.Username}}#{{DiscordUserInfoObj.Discriminator}} ({{DiscordUserInfoObj.UserId}}){%else%}Not Linked{%endif%}

+ {% if DiscordUserInfoObj == None: %}{%else%}
{% endif %} +
+
Description
+
+ + +
+ +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/settings.py b/app/pages/settings/settings.py new file mode 100644 index 0000000..0349969 --- /dev/null +++ b/app/pages/settings/settings.py @@ -0,0 +1,558 @@ +import base64 +import hashlib +import pyotp +import random +import re +import logging +import requests +import uuid +import json + +from app.util.discord import DiscordUserInfo, ExchangeCodeForToken, UnexpectedStatusCode, MissingScope, GetUserInfoFromToken, GenerateAuthorizationURL +from app.models.linked_discord import LinkedDiscord +from app.models.user_email import UserEmail +from app.pages.signup.signup import isUsernameAllowed +from app.models.past_usernames import PastUsername +from app.util.redislock import acquire_lock, release_lock +from app.models.usereconomy import UserEconomy +from datetime import datetime, timedelta +from app.pages.messages.messages import CreateSystemMessage +from app.util.membership import GetUserMembership, GiveUserMembership, UserHasHigherMembershipException, UserDoesNotExistException, RemoveUserMembership +from app.enums.MembershipType import MembershipType +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort +from app.util import auth, websiteFeatures, textfilter, turnstile, transactions +from app.extensions import db, limiter, redis_controller +from app.models.user import User +from requests.auth import HTTPBasicAuth +from config import Config +from app.models.asset import Asset +from app.models.userassets import UserAsset +from sqlalchemy import func +from app.services import economy +from app.enums.TransactionType import TransactionType + +config = Config() + +def generate_secret_key_from_string(secret_string): + secret_bytes = secret_string.encode('utf-8') + char_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" + random.seed(secret_bytes) + secret_key = ''.join([random.choice(char_list) for _ in range(32)]) + return secret_key + +settings = Blueprint("settings", __name__, template_folder="pages") + +@settings.route("/settings", methods=["GET"]) +@auth.authenticated_required +def settings_page(): + user : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=user.id).first() + if LinkedDiscordObj is not None: + DiscordUserInfoObj : DiscordUserInfo = DiscordUserInfo(LinkedDiscordObj.discord_id, LinkedDiscordObj.discord_username, LinkedDiscordObj.discord_avatar, GlobalName = None, Discriminator = LinkedDiscordObj.discord_discriminator) + else: + DiscordUserInfoObj = None +# LinkedEmailObj : UserEmail = UserEmail.query.filter_by(user_id=user.id).first() +# HiddenEmail = None +# if LinkedEmailObj: +# emailParts = LinkedEmailObj.email.split("@") +# FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) +# SecondPart = emailParts[1] +# HiddenEmail = FirstPart + "@" + SecondPart + return render_template("settings/settings.html", TOTPenabled = user.TOTPEnabled, description=user.description, DiscordUserInfoObj=DiscordUserInfoObj) + +@settings.route("/settings/description", methods=["POST"]) +@auth.authenticated_required +def settings_description(): + description = request.form.get("description") + if description is None: + return redirect("/settings") + if len(description) > 256: + flash("Description is too long") + return redirect("/settings") + + newlineCount = description.count("\n") + if newlineCount > 5: + flash("Description can only have 5 lines") + return redirect("/settings") + user : User = auth.GetCurrentUser() + user.description = textfilter.FilterText(description) + db.session.commit() + return redirect("/settings") + + +@settings.route("/settings/enableTOTP", methods=["GET"]) +@auth.authenticated_required +def settings_enableTOTP(): + return render_template("settings/enableTOTP.html") + +@settings.route("/settings/enableTOTP", methods=["POST"]) +@auth.authenticated_required +def settings_enableTOTP_post(): + if "code" not in request.form: + flash("Please fill in all fields") + return redirect("/settings/enableTOTP") + code = request.form.get("code") + user : User = auth.GetCurrentUser() + if user.TOTPEnabled: + return redirect("/settings") + + secret_key = generate_secret_key_from_string(str(user.id) + config.FLASK_SESSION_KEY) + totp = pyotp.TOTP(secret_key) + if not totp.verify(code): + flash("Invalid code") + return redirect("/settings/enableTOTP") + + user.TOTPEnabled = True + db.session.commit() + return redirect("/settings") + +@settings.route("/settings/TOTP/image", methods=["GET"]) +@auth.authenticated_required +def settings_TOTP_image(): + user : User = auth.GetCurrentUser() + if user.TOTPEnabled: + return redirect("/settings") + secret_key = generate_secret_key_from_string(str(user.id) + config.FLASK_SESSION_KEY) + import pyqrcode + totp = pyotp.TOTP(secret_key) + + url = pyqrcode.create(totp.provisioning_uri(user.username, issuer_name="NEXIUM")) + resp = make_response(base64.b64decode(url.png_as_base64_str(scale=5))) + resp.headers['Content-Type'] = 'image/png' + return resp + +import hashlib + +def GenerateStateHash( Cookie : str ) -> str: + """ + GenerateStateHash generates a state hash for discord oauth2. + """ + salted_cookie = Cookie + config.FLASK_SESSION_KEY + return hashlib.md5(salted_cookie.encode('utf-8')).hexdigest() + +@settings.route("/settings/unlink_discord", methods=["POST"]) +@auth.authenticated_required +def settings_unlink_discord(): + AuthenticatedUser : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=AuthenticatedUser.id).first() + if LinkedDiscordObj is None: + flash("You do not have a linked discord account") + return redirect("/settings") + + if LinkedDiscordObj.linked_on + timedelta(hours=24) > datetime.utcnow(): + flash("You cannot unlink your discord account until 24 hours after linking") + return redirect("/settings") + db.session.delete(LinkedDiscordObj) + db.session.commit() + + UserMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserMembership == MembershipType.BuildersClub: + RemoveUserMembership(AuthenticatedUser) + + flash("Discord account unlinked") + return redirect("/settings") + +@settings.route("/settings/discord_link", methods=["GET"]) +@auth.authenticated_required +def settings_discord_link(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Discord Linking is temporarily disabled") + return redirect("/settings") + + UserObj : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=UserObj.id).first() + if LinkedDiscordObj is not None: + return redirect("/settings") + state = GenerateStateHash(request.cookies[".ROBLOSECURITY"]) + AuthorizationURL = GenerateAuthorizationURL(state) + return redirect(AuthorizationURL) + +@settings.route("/settings/discord_handler", methods=["GET"]) +@auth.authenticated_required +def settings_discord_handler(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Discord Linking is temporarily disabled") + return redirect("/settings") + UserObj : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=UserObj.id).first() + if LinkedDiscordObj is not None: + flash("You already have a linked discord account") + return redirect("/settings") + expectedState = GenerateStateHash(request.cookies[".ROBLOSECURITY"]) + givenState = request.args.get(key="state", default=None, type=str) + if givenState is None: + flash("Invalid state") + return redirect("/settings") + if givenState != expectedState: + flash("Invalid state") + return redirect("/settings") + givenCode = request.args.get(key="code", default=None, type=str) + if givenCode is None: + flash("Invalid code") + return redirect("/settings") + try: + DiscordOAuth2TokenExchangeResponseJSON = ExchangeCodeForToken(givenCode) + except UnexpectedStatusCode as e: + flash(f"UnexpectedStatusCodeException: {str(e)}") + return redirect("/settings") + except MissingScope as e: + flash(f"MissingScopeException: {str(e)}") + return redirect("/settings") + try: + DiscordUserInfoObj : DiscordUserInfo = GetUserInfoFromToken(DiscordOAuth2TokenExchangeResponseJSON["access_token"]) + except UnexpectedStatusCode as e: + flash(f"UnexpectedStatusCodeException: {str(e)}") + return redirect("/settings") + + DiscordAccountCreationDatetime = datetime.utcfromtimestamp( ( (int(DiscordUserInfoObj.UserId) >> 22) + 1420070400000) / 1000 ) + # if DiscordAccountCreationDatetime + timedelta(days=7) > datetime.utcnow(): + # flash("Discord account must be at least 7 days old") + # return redirect("/settings") + + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=DiscordUserInfoObj.UserId).first() + if LinkedDiscordObj is not None: + if LinkedDiscordObj.linked_on + timedelta(hours=24) > datetime.utcnow(): + flash("This discord account has recently been linked to another account, please try again later") + return redirect("/settings") + try: + CreateSystemMessage( + subject = "Discord Account unlinked", + message = f"Your discord account was unlinked from your account because \"Account linked to another user\", if you currently have a Builders Club membership it will be automatically removed from your account until you link your discord account again.", + userid = LinkedDiscordObj.user_id + ) + OldUserMembership : MembershipType = GetUserMembership(LinkedDiscordObj.user_id) + if OldUserMembership == MembershipType.BuildersClub: + RemoveUserMembership(LinkedDiscordObj.user_id) + except: + pass + db.session.delete(LinkedDiscordObj) + db.session.commit() + NewLinkedDiscordObj = LinkedDiscord( + user_id=UserObj.id, + discord_id=DiscordUserInfoObj.UserId, + discord_username=DiscordUserInfoObj.Username, + discord_discriminator=DiscordUserInfoObj.Discriminator, + discord_avatar=DiscordUserInfoObj.AvatarHash, + discord_access_token=DiscordOAuth2TokenExchangeResponseJSON["access_token"], + discord_refresh_token=DiscordOAuth2TokenExchangeResponseJSON["refresh_token"], + discord_expiry=datetime.utcnow() + timedelta(seconds=DiscordOAuth2TokenExchangeResponseJSON["expires_in"]) + ) + db.session.add(NewLinkedDiscordObj) + db.session.commit() + + CurrentUserMembership : MembershipType = GetUserMembership(UserObj) + if CurrentUserMembership == MembershipType.NonBuildersClub: + try: + GiveUserMembership(UserObj, MembershipType.BuildersClub, expiration=timedelta(days=31)) + except Exception as e: + logging.error(f"Failed to give user builders club membership: {str(e)}") + return redirect("/settings") + + return redirect("/settings") + +@settings.route("/settings/update-password", methods=["GET"]) +@auth.authenticated_required +def settings_update_password(): + if not websiteFeatures.GetWebsiteFeature("PasswordChange"): + flash("Password changing is temporarily disabled") + return redirect("/settings") + + AuthenticatedUser : User = auth.GetCurrentUser() + return render_template("settings/changepassword.html", is2FAEnabled = AuthenticatedUser.TOTPEnabled) + +@settings.route("/settings/update-password", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("20/minute") +def settings_update_password_post(): + if not websiteFeatures.GetWebsiteFeature("PasswordChange"): + flash("Password changing is temporarily disabled") + return redirect("/settings") + + AuthenticatedUser : User = auth.GetCurrentUser() + + CurrentPassword = request.form.get( key = "current-password", default = "", type = str ) + NewPassword = request.form.get( key = "new-password", default = "", type = str ) + NewPasswordConfirm = request.form.get( key = "confirm-password", default = "", type = str ) + + OTPCode = request.form.get( key = "2fa-code", default = None, type = str ) + + if AuthenticatedUser.TOTPEnabled: + if OTPCode is None: + flash("Please fill in all fields") + return redirect("/settings/update-password") + isValidCode = auth.Validate2FACode(AuthenticatedUser.id, OTPCode) + if not isValidCode: + flash("Invalid 2FA code") + return redirect("/settings/update-password") + + if not auth.VerifyPassword(AuthenticatedUser, CurrentPassword): + flash("Invalid current password") + return redirect("/settings/update-password") + + if NewPassword != NewPasswordConfirm: + flash("Passwords do not match") + return redirect("/settings/update-password") + + if len(NewPassword) < 8: + flash("Password must be at least 8 characters") + return redirect("/settings/update-password") + + if len(NewPassword) > 256: + flash("Password cannot be longer than 256 characters") + return redirect("/settings/update-password") + + auth.SetPassword(AuthenticatedUser, NewPassword) + + flash("Password updated") + return redirect("/settings") + +@settings.route("/settings/update-username", methods=["GET"]) +@auth.authenticated_required +def settings_update_username(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Username changing is temporarily disabled") + return redirect("/settings") + return render_template("settings/changeusername.html") + +@settings.route("/settings/update-username", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("20/minute") +def settings_update_username_post(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Username changing is temporarily disabled") + return redirect("/settings") + AuthenticatedUser : User = auth.GetCurrentUser() + + NewUsername = request.form.get( key = "new-username", default = "", type = str ) + Password = request.form.get( key = "password", default = "", type = str ) + + if not auth.VerifyPassword(AuthenticatedUser, Password): + flash("Incorrect password") + return redirect("/settings/update-password") + + isValidUsername , Reason = isUsernameAllowed(NewUsername) + if not isValidUsername: + flash(Reason) + return redirect("/settings/update-username") + + try: + textfilter.FilterText(NewUsername, ThrowException=True, UseExtendedBadWords=True) + except Exception as e: + flash("Username contains inappropriate words") + return redirect("/settings/update-username") + + if NewUsername == AuthenticatedUser.username: + flash("Username cannot be the same as your current username") + return redirect("/settings/update-username") + + UsernameTaken = User.query.filter(func.lower(User.username) == func.lower(NewUsername)).first() + if UsernameTaken is not None: + flash("Username is taken") + return redirect("/settings/update-username") + + PastUsernameObj : PastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == func.lower(NewUsername)).first() + if PastUsernameObj is not None: + if PastUsernameObj.user_id != AuthenticatedUser.id: + flash("Username is taken") + return redirect("/settings/update-username") + + UserRobuxBalance, _ = economy.GetUserBalance( TargetUser = AuthenticatedUser ) + if UserRobuxBalance < 1000: + flash("You need at least 1000 robux to change your username") + return redirect("/settings/update-username") + + try: + economy.DecrementTargetBalance( + Target = AuthenticatedUser, + Amount = 1000, + CurrencyType = 0 + ) + except economy.InsufficientFundsException: + flash("You need at least 1000 robux to change your username") + return redirect("/settings/update-username") + except economy.EconomyLockAcquireException: + flash("Failed to change username, please try again later no robux was deducted") + return redirect("/settings/update-username") + except Exception as e: + flash("Failed to change username, please try again later") + return redirect("/settings/update-username") + + try: + NewPastUsernameObj = PastUsername( + user_id=AuthenticatedUser.id, + username=AuthenticatedUser.username + ) + db.session.add(NewPastUsernameObj) + + AuthenticatedUser.username = NewUsername + db.session.commit() + except Exception as e: + flash("Failed to change username, please try again later") + return redirect("/settings/update-username") + + try: + transactions.CreateTransaction( + CurrencyAmount = 1000, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = None, + Sender = AuthenticatedUser + ) + except: + pass + + flash("Username updated") + return redirect("/settings") + +''' +@settings.route("/settings/update-email", methods=["GET"]) +@auth.authenticated_required +def settings_update_email(): + if not websiteFeatures.GetWebsiteFeature("EmailChange"): + flash("Email changing is temporarily disabled") + return redirect("/settings") + return render_template("settings/changeemail.html") + +EmailRegex = r"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" # RFC 5322 Compliant, because some fucker is gonna complain that he cant verify his email from his self-hosted shit + +@settings.route("/settings/update-email", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("20/minute") +def settings_update_email_post(): + AuthenticatedUser : User = auth.GetCurrentUser() + + # We've been breached. Allow people to change their emails without cooldown + #if redis_controller.exists(f"update_email_v1_cooldown:{AuthenticatedUser.id}"): + #flash("Please wait 12 hours before updating your email again", "error") + #return redirect("/settings/update-email") + + NewEmail = request.form.get( key = "new-email", default = "", type = str ).strip().lower() + Password = request.form.get( key = "password", default = "", type = str ) + CloudflareTurnstileKey = request.form.get( key = "cf-turnstile-response", default = None, type=str ) + + if CloudflareTurnstileKey is None or CloudflareTurnstileKey == '': + flash("Please complete the captcha", "error") + return redirect("/settings/update-password") + if not turnstile.VerifyToken( CloudflareTurnstileKey ): + flash("Invalid captcha answer", "error") + return redirect("/settings/update-password") + + if not auth.VerifyPassword(AuthenticatedUser, Password): + flash("Incorrect password", "error") + return redirect("/settings/update-password") + + if not re.match( EmailRegex, NewEmail ): + flash("Invalid Email, Not RFC 5322 compliant", "error") + return redirect("/settings/update-password") + + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first() + if UserEmailObj: + if UserEmailObj.email == NewEmail and UserEmailObj.verified: + flash("Email is already verified to this account", "error") + return redirect("/settings/update-email") + UserEmailObj.email = NewEmail + UserEmailObj.verified = False + UserEmailObj.updated_at = datetime.utcnow() + else: + NewUserEmailObj = UserEmail( + user_id = AuthenticatedUser.id, + email = NewEmail, + verified = False + ) + db.session.add(NewUserEmailObj) + db.session.commit() + + VerificationUUID = str(uuid.uuid4()) + VerificationURL = f"{config.BaseURL}/settings/update-email/verify?id={VerificationUUID}&user={AuthenticatedUser.id}" + + redis_controller.set(f"update_email_v1:{VerificationUUID}", AuthenticatedUser.id, ex=60 * 60 * 2) + redis_controller.set(f"update_email_v1_cooldown:{AuthenticatedUser.id}", "1", ex=60 * 60 * 12) + + # Send verification email + EmailData = { + "Messages": [ + { + "From": { + "Email": Config.MAILJET_NOREPLY_SENDER, + "Name": "nexium.fit" + }, + "To": [ + { + "Email": NewEmail, + "Name": AuthenticatedUser.username + } + ], + "TemplateID": Config.MAILJET_EMAILVERIFY_TEMPLATE_ID, + "TemplateLanguage": True, + "Subject": f"Verify your email on NEXIUM! - {AuthenticatedUser.username}", + "Variables": { + "username": AuthenticatedUser.username, + "verificationlink": VerificationURL + } + } + ] + } + + try: + EmailResponse = requests.post( + url="https://api.mailjet.com/v3.1/send", + data=json.dumps(EmailData), + headers={ + "Content-Type": "application/json" + }, + auth = HTTPBasicAuth( + Config.MAILJET_APIKEY, + Config.MAILJET_SECRETKEY + ) + ) + if EmailResponse.status_code != 200: + flash("Failed to send verification email", "error") + redis_controller.delete(f"update_email_v1:{VerificationUUID}") + redis_controller.delete(f"update_email_v1_cooldown:{AuthenticatedUser.id}") + return redirect("/settings/update-email") + except Exception as e: + flash("Failed to send verification email", "error") + redis_controller.delete(f"update_email_v1:{VerificationUUID}") + redis_controller.delete(f"update_email_v1_cooldown:{AuthenticatedUser.id}") + return redirect("/settings/update-email") + + flash("Verification email sent", "success") + return redirect("/settings/update-email") + +@settings.route("/settings/update-email/verify", methods=["GET"]) +def VerifyEmailGet(): + EmailVerificationUUID : str = request.args.get( key = "id", default = "", type = str ) + ExpectedUserId : int = request.args.get( key = "user", default = None, type = int ) + + if EmailVerificationUUID == "" or ExpectedUserId is None: + return abort(404) + + UserId = redis_controller.get(f"update_email_v1:{EmailVerificationUUID}") + if UserId is None: + return abort(404) + if int(UserId) != ExpectedUserId: + return abort(404) + + UserObj : User = User.query.filter_by(id=UserId).first() + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id=UserObj.id).first() + + if UserEmailObj is None: + return abort(404) + UserEmailObj.verified = True + UserEmailObj.updated_at = datetime.utcnow() + db.session.commit() + + RewardObj = None + if config.VERIFIED_EMAIL_REWARD_ASSET > 0: + if not UserAsset.query.filter_by(userid=UserObj.id, assetid=config.VERIFIED_EMAIL_REWARD_ASSET).first(): + NewUserAssetObj : UserAsset = UserAsset( + userid=UserObj.id, + assetid=config.VERIFIED_EMAIL_REWARD_ASSET + ) + db.session.add(NewUserAssetObj) + db.session.commit() + RewardObj = Asset.query.filter_by(id=config.VERIFIED_EMAIL_REWARD_ASSET).first() + + return render_template("settings/emailverify_success.html", UserObj = UserObj, RewardObj = RewardObj) + ''' \ No newline at end of file diff --git a/app/pages/signup/signup.html b/app/pages/signup/signup.html new file mode 100644 index 0000000..4c174c7 --- /dev/null +++ b/app/pages/signup/signup.html @@ -0,0 +1,45 @@ +{% extends '__layout__.html' %} +{% block title %}Signup{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/signup/signup.py b/app/pages/signup/signup.py new file mode 100644 index 0000000..99d52b4 --- /dev/null +++ b/app/pages/signup/signup.py @@ -0,0 +1,263 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort +from app.models.user import User +from app.models.invite_key import InviteKey +from app.models.usereconomy import UserEconomy +from app.models.user_avatar import UserAvatar +from app.models.login_records import LoginRecord +from app.util.textfilter import FilterText, TextNotAllowedException +from app.models.past_usernames import PastUsername +from app.pages.login.login import CreateLoginRecord +from app.extensions import db, limiter, csrf, redis_controller, get_remote_address +from app.pages.avatar.avatar import AllowedBodyColors +from app.routes.thumbnailer import TakeUserThumbnail +import logging +import hashlib +from datetime import datetime +from app.util import websiteFeatures, auth, turnstile, redislock +from app.services import invitekeys, proxydetection +from sqlalchemy import func +import random +from datetime import datetime, timedelta +from config import Config +import string + +config = Config() +signup = Blueprint("signup", __name__, template_folder="pages") + +@signup.route("/signup", methods=["GET"]) +@limiter.exempt() +def signup_page(): + if auth.isAuthenticated(): + return redirect("/home") + SignupEnabled = True + if not websiteFeatures.GetWebsiteFeature("WebSignup"): + flash("Signups are temporarily disabled") + SignupEnabled = False + return render_template("signup/signup.html", SignupEnabled=SignupEnabled) + +def RateLimitReached(e): + flash("You are being rate limited. Please try again later.") + return redirect("/signup") + +def isUsernameAllowed( username : str ): + if len(username) < 3 or len(username) > 20: + return False, "Usernames must be between 3 and 20 characters long" + + if username[0] == "_" or username[-1] == "_": + return False, "Usernames must not start or end with an underscore" + + if username.count("_") > 1: + return False, "Usernames must not contain more than one underscore" + + if username.count(" ") > 0: + return False, "Usernames must not contain spaces" + + allowedCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" + hasLetter = False + for char in username: + if char not in allowedCharacters: + return False, "Usernames must only contain letters, numbers and underscores" + if char in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ": + hasLetter = True + + if not hasLetter: + return False, "Usernames must contain at least one letter" + + return True, "Allowed" + +@signup.route("/signup", methods=["POST"]) +@limiter.limit("10/minute", on_breach=RateLimitReached) +def signup_post(): + if auth.isAuthenticated(): + return redirect("/home") + username = request.form.get("username", default=None, type=str) + password = request.form.get("password", default=None, type=str) + agreedtoTerms = request.form.get("agreetoTermsandPrivacy", default="off", type=str) == "on" + invitekey = request.form.get("invite-key", default=None, type=str) + + if not websiteFeatures.GetWebsiteFeature("WebSignup"): + flash("Signups are temporarily disabled") + return redirect("/signup") + if 'cf-turnstile-response' not in request.form or request.form.get('cf-turnstile-response') == '': + flash("Please complete the captcha", "error") + return redirect("/signup") + + if username is None or password is None or invitekey is None: + flash("Please fill in all fields") + return redirect("/signup") + + if not agreedtoTerms: + flash("You must agree to the Terms of service and privacy policy") + return redirect("/signup") + + allowed, reason = isUsernameAllowed(username) + if not allowed: + flash(reason) + return redirect("/signup") + + if len(password) < 8: + flash("Password must be at least 8 characters long") + return redirect("/signup") + + try: + FilterText( Text = username, ThrowException = True, UseExtendedBadWords=True) + except TextNotAllowedException: + flash("Username is not friendly for Nexium") + return redirect("/signup") + + RequestAddressRisk : int = proxydetection.fetch_address_risk( get_remote_address() ) + if RequestAddressRisk == 1: + flash("Please disable your VPN or proxy and try again") + return redirect("/signup") + + if RequestAddressRisk == 3: + flash("Error 255, please report in our discord.") # We want to be as vague as possible + return redirect("/signup") + redisResultIP = redis_controller.get("signupcooldown:" + get_remote_address()) + redisResultToken = None + if request.cookies.get("t", default=None, type=str) is not None: + redisResultToken = redis_controller.get("signupcooldown:token:" + str(request.cookies.get(key="t", default=None, type=str))) + + if redisResultIP is not None or redisResultToken is not None: + if redisResultIP is None: + redis_controller.set("signupcooldown:" + get_remote_address(), "1", ex=60*60*24*7) + if redisResultToken is None and request.cookies.get("t", default=None, type=str) is not None: + redis_controller.set("signupcooldown:token:" + str(request.cookies.get(key="t", default=None, type=str)), "1", ex=60*60*24*7) + + flash("You have recently made an account in the past 7 days.") + return redirect("/signup") + + SessionToken = request.cookies.get(key="t", default=None, type=str) + if SessionToken is None: + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + if len(SessionToken) != 128: + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + for char in SessionToken: + if char not in (string.ascii_letters + string.digits): + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + + UserIPHash = hashlib.md5(get_remote_address().encode("utf-8")).hexdigest() + LoginRecords : list[LoginRecord] = LoginRecord.query.filter(LoginRecord.ip == UserIPHash).distinct(LoginRecord.userid).all() + for record in LoginRecords: + if record.User.accountstatus != 1: + if record.session_token != SessionToken: + NewLoginRecord = LoginRecord( + userid = record.userid, + ip = UserIPHash, + session_token = SessionToken, + useragent = request.headers.get("User-Agent"), + timestamp = datetime.utcnow() + ) + db.session.add(NewLoginRecord) + db.session.commit() + + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + LoginRecords : list[LoginRecord] = LoginRecord.query.filter(LoginRecord.session_token == SessionToken).distinct(LoginRecord.userid).all() + for record in LoginRecords: + if record.User.accountstatus != 1: + NewLoginRecord = LoginRecord( + userid = record.userid, + ip = UserIPHash, + session_token = SessionToken, + useragent = request.headers.get("User-Agent"), + timestamp = datetime.utcnow() + ) + db.session.add(NewLoginRecord) + db.session.commit() + + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + + UserSignupLock = redislock.acquire_lock("UserSignupLock", acquire_timeout = 20, lock_timeout=1) + if not UserSignupLock: + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + + user = User.query.filter(func.lower(User.username) == func.lower(username)).first() + if user is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken") + return redirect("/signup") + + pastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == func.lower(username)).first() + if pastUsername is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken") + return redirect("/signup") + + try: + inviteKey : InviteKey = invitekeys.GetInviteKey(invitekey) + except invitekeys.InviteExceptions.InvalidInviteKey: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Invalid invite key") + return redirect("/signup") + if inviteKey.used_by is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Invite key already used") + return redirect("/signup") + InviteKeyCreator : User = User.query.filter_by(id=inviteKey.created_by).first() + if InviteKeyCreator is not None: + if InviteKeyCreator.accountstatus != 1: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Invite key creator's account is banned") + return redirect("/signup") + + if not turnstile.VerifyToken(request.form.get('cf-turnstile-response')): + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Invalid captcha", "error") + + if request.cookies.get(key="t", default=None, type=str) is None: + abort(400) + + redis_controller.set("signupcooldown:" + get_remote_address(), "1", ex=60*60*24*7) + if request.cookies.get("t", default=None, type=str) is not None: + redis_controller.set("signupcooldown:token:" + str(request.cookies.get(key="t", default=None, type=str)), "1", ex=60*60*24*7) + + NewRegisteredUser : User = User( + username = username, + password = "", + created = datetime.utcnow(), + lastonline = datetime.utcnow(), + ) + + db.session.add(NewRegisteredUser) + db.session.commit() + + auth.SetPassword(NewRegisteredUser, password) + + userEconomy = UserEconomy( + userid = NewRegisteredUser.id, + robux = 0, + tix = 0 + ) + db.session.add(userEconomy) + + userAvatar : UserAvatar = UserAvatar( + user_id=NewRegisteredUser.id + ) + userAvatar.torso_color_id = random.choice(AllowedBodyColors) + db.session.add(userAvatar) + + invitekeys.UseInviteKey(invitekey, NewRegisteredUser) + + db.session.commit() + redislock.release_lock("UserSignupLock", UserSignupLock) + logging.info(f"New user registered: {NewRegisteredUser.username} ({NewRegisteredUser.id})") + + TakeUserThumbnail(NewRegisteredUser.id) + sessionToken = auth.CreateToken(userid=NewRegisteredUser.id, ip=get_remote_address()) + resp = make_response(redirect("/home")) + resp.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + + if request.cookies.get("t", default=None, type=str) is not None: + NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + resp.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + CreateLoginRecord( NewRegisteredUser.id, NewToken ) + else: + CreateLoginRecord( NewRegisteredUser.id ) + + return resp \ No newline at end of file diff --git a/app/pages/static.py b/app/pages/static.py new file mode 100644 index 0000000..348dbe0 --- /dev/null +++ b/app/pages/static.py @@ -0,0 +1,39 @@ +# Pages which has no function but to display static content +from flask import Blueprint, render_template, redirect +from app.util import auth +import random + +static = Blueprint("static", __name__, template_folder="pages") + +FLUTTERSHY_IMAGES = [ + "https://media1.tenor.com/m/FLUQuIi2vTUAAAAd/mlp-my-little-pony.gif", + "https://media1.tenor.com/m/G-xhgUfTmMkAAAAd/my-little-pony-friendship-is-magic-fluttershy.gif", + "https://media1.tenor.com/m/CDaXzhvweIsAAAAd/my-little-pony-mlp.gif", +] + +@static.route("/fluttershy") +def fluttershy(): + return render_template("fluttershy.html", fluttershy_image=random.choice(FLUTTERSHY_IMAGES)) + +@static.route("/terms") +def terms(): + return render_template("terms.html") + +@static.route("/privacy") +def privacy(): + return render_template("privacy.html") + +@static.route("/download") +@auth.authenticated_required +def download(): + return render_template("downloads.html") + +@static.route("/Games.aspx") +@auth.authenticated_required +def gamesaspx(): + return redirect("/games") + +@static.route("/drivers") +@auth.authenticated_required +def drivers(): + return render_template("drivers.html") diff --git a/app/pages/studio/comingsoon.html b/app/pages/studio/comingsoon.html new file mode 100644 index 0000000..1829831 --- /dev/null +++ b/app/pages/studio/comingsoon.html @@ -0,0 +1 @@ +

coming soon

\ No newline at end of file diff --git a/app/pages/studio/myPlaces.html b/app/pages/studio/myPlaces.html new file mode 100644 index 0000000..642b816 --- /dev/null +++ b/app/pages/studio/myPlaces.html @@ -0,0 +1,94 @@ + + + + + NEXIUM + + + + + + {% if not currentuser: %} +
+
+ +
+
+ {%else%} +

Welcome to NEXIUM Studio :D, not much to do here yet.
Go to File > New to start.

+ {%endif%} + + \ No newline at end of file diff --git a/app/pages/studio/studiopages.py b/app/pages/studio/studiopages.py new file mode 100644 index 0000000..5f0c2d3 --- /dev/null +++ b/app/pages/studio/studiopages.py @@ -0,0 +1,21 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort + +StudioPagesRoute = Blueprint('studiopages', __name__, url_prefix='/') + +@StudioPagesRoute.before_request +def before_request(): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is None: + return abort(404) + if "RobloxStudio" not in BrowserUserAgent: + return abort(404) + +@StudioPagesRoute.route("/ide/welcome", methods=['GET']) +def myPlaces(): + return render_template("studio/myPlaces.html") +@StudioPagesRoute.route("/IDE/ClientToolbox.aspx", methods=['GET']) +def sussy(): + return render_template("studio/comingsoon.html") +@StudioPagesRoute.route("/UploadMedia/UploadVideo.aspx", methods=['GET']) +def yeezus(): + return render_template("studio/comingsoon.html") \ No newline at end of file diff --git a/app/pages/swaggerdocs.html b/app/pages/swaggerdocs.html new file mode 100644 index 0000000..2695da9 --- /dev/null +++ b/app/pages/swaggerdocs.html @@ -0,0 +1,19 @@ + + + + + + Swagger UI + + + + + + + +
+ + + + + diff --git a/app/pages/terms.html b/app/pages/terms.html new file mode 100644 index 0000000..4c5bbb7 --- /dev/null +++ b/app/pages/terms.html @@ -0,0 +1,94 @@ +{% extends '__layout__.html' %} +{% block title %}Terms of Service{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Terms of Service

+

Last amended: 22/07/2026

+
+

Please read these Terms of Service ("Terms") carefully before using the NEXIUM website (the "Website") operated by NEXIUM ("we," "us," or "our").

+

By accessing or using the Website, you agree to be legally bound by these Terms and our Privacy Policy. If you do not agree with any part of the Terms, please do not use the Website.

+ +

1. Acceptance of Terms

+

1.1. By accessing or using the Website, you confirm that you have read, understood, and accepted these Terms.

+

1.2. These Terms constitute a binding legal agreement between you and NEXIUM.

+

1.3. If you are under the age of 18, you may only use the Website with the permission and supervision of a parent or legal guardian, who agrees to these Terms on your behalf.

+ +

2. Eligibility & Your Account

+

2.1. The Website is not intended for, and you may not use it if you are, under the age of 13.

+

2.2. You must provide accurate registration information and keep your account credentials confidential. You are responsible for all activity that occurs under your account, whether or not authorized by you.

+

2.3. You must notify us as soon as possible if you become aware of any unauthorized use of your account.

+

2.4. Accounts are personal to you and may not be sold, transferred, or shared.

+ +

3. Use of the Website

+

3.1. You agree to use the Website in compliance with all applicable laws, including European Union regulations and national laws in your country of residence.

+

3.2. You must not use the Website to distribute unlawful, harmful, harassing, defamatory, hateful, or discriminatory content, including but not limited to NSFW content, hate speech, or content promoting violence or illegal activity.

+

3.3. Any activity that disrupts or harms the Website or other users (e.g., exploiting bugs, attempting unauthorized access, impersonating others, spamming, cheating, or denial-of-service attacks) is strictly prohibited.

+

3.4. We may use automated and manual moderation to detect violations of these Terms. Decisions to remove content, suspend, or terminate accounts are made or reviewed by us and are not solely automated.

+ +

4. Free Expression

+

4.1. NEXIUM is operated and hosted in the United States by American citizens. We value the principles of free expression reflected in the First Amendment to the United States Constitution, and within the bounds of Section 3 we aim to give users latitude to express unpopular, controversial, or dissenting opinions on the Website.

+

4.2. This does not extend to hate speech, harassment, or discriminatory content directed at any individual or group, including in particular LGBTQIA+ individuals, which remains strictly prohibited under Section 3.2 and will result in content removal and/or account action.

+

4.3. This section describes our general philosophy toward permissible speech on the Website. It does not override, and is subject to, the content restrictions set out in Section 3, and does not grant any right to post unlawful or otherwise prohibited content.

+ +

5. Virtual Currency & Items

+

5.1. "Robux," "Tix," and any in-Website items, badges, or currency ("Virtual Items") are a limited license to access a feature of the Website. They are not real currency, have no monetary value, and are not redeemable for real money except where we expressly offer a paid exchange feature.

+

5.2. Virtual Items are not property, cannot be transferred outside the Website, and remain our property at all times. We may modify, suspend, or remove Virtual Items, or reset balances, at our discretion, including to correct exploits or errors.

+

5.3. We do not offer refunds for Virtual Items, whether obtained for free or purchased, except where required by applicable law.

+ +

6. Payments & Purchases

+

6.1. Where the Website allows you to purchase Virtual Items, memberships, or other paid features, payments are processed by third-party payment processors (currently Cryptomus and Ko-fi). We do not store your full payment card or wallet details; please review the processor's own terms and privacy policy before paying.

+

6.2. All purchases are final and non-refundable except as required by applicable consumer protection law.

+

6.3. If you are an EU or UK consumer, you acknowledge that by requesting immediate access to digital content or Virtual Items after payment, you expressly consent to performance beginning immediately and, to the extent permitted by law, waive your statutory right of withdrawal once that performance has begun.

+ +

7. User Content

+

7.1. You remain the owner of any content you upload or share on the Website, but you grant us a non-exclusive, royalty-free, worldwide license to use, host, display, and distribute it for the purpose of providing and improving the Website.

+

7.2. You are solely responsible for the content you post, and you agree not to infringe upon the rights of others, including intellectual property and privacy rights.

+

7.3. If you believe content on the Website infringes your intellectual property rights, contact us at kaitlyn@chadthundercock.com with a description of the content, its location on the Website, and evidence of your ownership. We will review and, where appropriate, remove the content.

+ +

8. Intellectual Property

+

8.1. The Website, including its design, code, and all original content, is the property of NEXIUM and protected by copyright, trademark, and other laws.

+

8.2. You may not copy, reproduce, modify, distribute, or create derivative works based on the Website without prior written permission from us.

+

8.3. NEXIUM is an independent, fan-operated project and is not affiliated with, endorsed by, or sponsored by Roblox Corporation or any of its subsidiaries.

+ +

9. Data Protection

+

9.1. Your personal data is processed in accordance with the General Data Protection Regulation (GDPR) and, where applicable, the UK GDPR. Please review our Privacy Policy for details on what we collect, why, and for how long.

+

9.2. You have rights under the GDPR including access, rectification, erasure, restriction, portability, and objection regarding your personal data. See the Privacy Policy for how to exercise them.

+ +

10. Third-Party Services

+

10.1. The Website integrates with third-party services, including Discord (optional account linking), Cloudflare (security and bot protection), Google Analytics (usage analytics), and the payment processors listed in Section 6.

+

10.2. We are not responsible for the availability, content, or practices of these third-party services. Your use of them is governed by their own terms and privacy policies.

+ +

11. Limitation of Liability

+

11.1. The Website is provided "as is" and "as available". We do not guarantee that the Website will be error-free, secure, or uninterrupted.

+

11.2. To the extent permitted by law, NEXIUM shall not be liable for any direct, indirect, incidental, or consequential damages arising out of your use of or inability to use the Website, including loss of Virtual Items or account data.

+

11.3. Nothing in these Terms excludes or limits liability that cannot be excluded or limited under applicable law, such as liability for fraud or death or personal injury caused by negligence.

+ +

12. Indemnification

+

12.1. You agree to indemnify and hold harmless NEXIUM and its operators from any claims, losses, or liabilities resulting from your breach of these Terms or misuse of the Website.

+ +

13. Account Suspension & Termination

+

13.1. We reserve the right to suspend or terminate your access to the Website at any time, with or without notice, if we believe you have violated these Terms.

+

13.2. We will notify you in advance of termination whenever possible, except in urgent cases such as security threats or illegal activity.

+

13.3. You may terminate your use of the Website, and request deletion of your account, at any time by contacting us as described in our Privacy Policy. Upon termination, your right to use the Website will cease immediately.

+ +

14. Modifications to these Terms

+

14.1. We may update these Terms from time to time. When we do, we will revise the "Last amended" date and, for material changes, notify users via the Website.

+

14.2. Continued use of the Website after changes take effect means you accept the updated Terms.

+ +

15. Governing Law & Dispute Resolution

+

15.1. These Terms are governed by the laws of Poland and, where applicable, the European Union, without regard to conflict of law principles. This does not deprive you of the protection of any mandatory consumer protection provisions of the country in which you reside.

+

15.2. Any disputes arising under or in connection with these Terms shall be subject to the non-exclusive jurisdiction of the competent courts of Poland, without prejudice to your right to bring proceedings in your country of residence where required by law.

+

15.3. If you are an EU consumer, you may also refer a dispute to the European Commission's Online Dispute Resolution platform at ec.europa.eu/consumers/odr.

+ +

16. Severability

+

16.1. If any provision of these Terms is found to be unlawful, void, or unenforceable, that provision shall be deemed severable and shall not affect the validity of the remaining provisions.

+ +

17. Contact

+

17.1. If you have questions or concerns about these Terms, contact us at kaitlyn@chadthundercock.com or via our Discord server.

+ +

By using the NEXIUM Website, you acknowledge that you have read, understood, and agreed to these Terms of Service.

+
+{% endblock %} diff --git a/app/pages/trades/create.html b/app/pages/trades/create.html new file mode 100644 index 0000000..8d0b597 --- /dev/null +++ b/app/pages/trades/create.html @@ -0,0 +1,134 @@ +{% extends '__layout__.html' %} +{% block title %}New Trade{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} + +
+
+ +
+
+
+
+
+

Your Offer

+
+

Value: R$ 0

+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+

*Plus R$

+ +
+
+
+
+
+

Your Request

+
+

Value: R$ 0

+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+

*Plus R$

+ +
+
+
+ + + +
+

* NEXIUM will take a 30% fee from the amount

+
+
+
+
My Inventory
+
+
+
+

Page 1

+
+
+
+
+
{{TargetUser.username}}'s Inventory
+
+
+
+

Page 1

+
+
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/trades/index.html b/app/pages/trades/index.html new file mode 100644 index 0000000..6fe2486 --- /dev/null +++ b/app/pages/trades/index.html @@ -0,0 +1,62 @@ +{% extends '__layout__.html' %} +{% block title %}Trades{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Trades

+
+ +
+
+ + + + + + + + + + + + + + {% for TradeObj in TradeInfo: %} + + + + + + + + + {% endfor %} + +
IDDateExpiresTrade PartnerStatusAction
{{TradeObj.TradeID}}{{TradeObj.Created}}{{TradeObj.Expiration}} + + {{TradeObj.OppositeUser.username}} + {{TradeObj.OppositeUser.username}} + + {{TradeObj.TradeStatus.name}}View
+ {% if len(TradeInfo) == 0: %} +
+

No trades found

+
+ {%endif%} +
+ Previous +

Page {{TradeListObj.page}} of {{TradeListObj.pages}}

+ Next +
+
+ +{%endblock%} \ No newline at end of file diff --git a/app/pages/trades/trades.py b/app/pages/trades/trades.py new file mode 100644 index 0000000..cd1c4ee --- /dev/null +++ b/app/pages/trades/trades.py @@ -0,0 +1,550 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.util import auth, redislock, websiteFeatures +from app.extensions import limiter, db, csrf, user_limiter +from app.models.user_trade_items import UserTradeItem +from app.models.user_trades import UserTrade +from app.models.user import User +from app.models.asset import Asset +from app.models.userassets import UserAsset +from app.models.usereconomy import UserEconomy +from app.models.asset_rap import AssetRap +from app.models.limited_item_transfers import LimitedItemTransfer +from app.util.membership import GetUserMembership +from app.enums.MembershipType import MembershipType +from app.enums.TradeStatus import TradeStatus +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from datetime import datetime, timedelta +import math + +TradesPageRoute = Blueprint('trades', __name__, template_folder="pages") + +@TradesPageRoute.route("/trade", methods=['GET']) +@auth.authenticated_required +def trades(): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeInfo = [] + + PageCategory = request.args.get("category", default="inbound", type=str) + PageCategory = PageCategory.lower() + PageNumber = request.args.get("page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + if PageCategory == "inbound": + TradeListObj : list[UserTrade] = UserTrade.query.filter_by(recipient_userid=AuthenticatedUser.id, status=TradeStatus.Pending).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + elif PageCategory == "outbound": + TradeListObj : list[UserTrade] = UserTrade.query.filter_by(sender_userid=AuthenticatedUser.id, status=TradeStatus.Pending).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + OppositeUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + elif PageCategory == "completed": + TradeListObj : list[UserTrade] = UserTrade.query.filter((UserTrade.recipient_userid == AuthenticatedUser.id) | (UserTrade.sender_userid == AuthenticatedUser.id)).filter_by(status=TradeStatus.Accepted).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + if TradeObj.recipient_userid == AuthenticatedUser.id: + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + else: + OppositeUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + elif PageCategory == "inactive": # inactive trades + TradeListObj : list[UserTrade] = UserTrade.query.filter((UserTrade.recipient_userid == AuthenticatedUser.id) | (UserTrade.sender_userid == AuthenticatedUser.id)).filter( (UserTrade.status == TradeStatus.Declined) | (UserTrade.status == TradeStatus.Expired) | (UserTrade.status == TradeStatus.Cancelled)).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + if TradeObj.recipient_userid == AuthenticatedUser.id: + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + else: + OppositeUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + else: + return abort(404) + + return render_template("trades/index.html", TradeInfo=TradeInfo, PageCategory=PageCategory, TradeListObj=TradeListObj) + +@TradesPageRoute.route("/trade//create", methods=['GET']) +@auth.authenticated_required +def createTrade(userid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == userid: + return abort(400) + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub: + return redirect("/membership") + TargetUser : User = User.query.filter_by(id=userid).first() + if TargetUser is None: + return abort(404) + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + return abort(404) + return render_template("trades/create.html", TargetUser=TargetUser, AuthenticatedUser=AuthenticatedUser) + +@TradesPageRoute.route("/trade//create", methods=['POST']) +@auth.authenticated_required +@limiter.limit("5/second") +@user_limiter.limit("5/second") +def createTradePost(userid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == userid: + return jsonify({"success": False, "message": "You cannot trade with yourself."}),400 + + if not websiteFeatures.GetWebsiteFeature("ItemTrading"): + return jsonify({"success": False, "message": "Item trading is temporarily disabled."}),403 + + TargetUser : User = User.query.filter_by(id=userid).first() + if TargetUser is None: + return jsonify({"success": False, "message": "User not found."}),404 + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + return jsonify({"success": False, "message": "User not found."}),404 + TradeRequestData : dict = request.json + if TradeRequestData is None: + return jsonify({"success": False, "message": "Invalid request data."}),400 + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub: + return jsonify({"success": False, "message": "You must be a Builders Club member to send trades."}),403 + OppositeUserCurrentMembership : MembershipType = GetUserMembership(TargetUser) + if OppositeUserCurrentMembership == MembershipType.NonBuildersClub: + return jsonify({"success": False, "message": "The opposite user must be a Builders Club member to accept trades."}),403 + """ + Expected JSON: + "RequesterOfferRobux": RequesterOfferRobux, # int must be >= 0 <= 100000 + "TargetOfferRobux": TargetOfferRobux, # int must be >= 0 and <= 100000 + "RequesterOfferUAIDs": RequesterOfferUAIDs, # list of int + "TargetOfferUAIDs": TargetOfferUAIDs, # list of int + "TOTPCode": isTOTPEnabled ? TOTPInputElement.value : null # int or null + """ + + # RequesterOfferRobux : int = TradeRequestData.get("RequesterOfferRobux", 0) + # TargetOfferRobux : int = TradeRequestData.get("TargetOfferRobux", 0) + # RequesterOfferUAIDs : list = TradeRequestData.get("RequesterOfferUAIDs", []) + # TargetOfferUAIDs : list = TradeRequestData.get("TargetOfferUAIDs", []) + # TOTPCode : int | None = TradeRequestData.get("TOTPCode", None, type=int) + + # if not all(key in TradeRequestData for key in ("RequesterOfferRobux", "TargetOfferRobux", "RequesterOfferUAIDs", "TargetOfferUAIDs", "TOTPCode")): + # return jsonify({"success": False, "message": "Invalid request data."}),400 + # if not isinstance(TradeRequestData["RequesterOfferRobux"], int) or not isinstance(TradeRequestData["TargetOfferRobux"], int): + # return jsonify({"success": False, "message": "Invalid request data, Robux Offer must be an integer."}),400 + # if not isinstance(TradeRequestData["RequesterOfferUAIDs"], list) or not isinstance(TradeRequestData["TargetOfferUAIDs"], list): + # return jsonify({"success": False, "message": "Invalid request data, Offered UAIDs must be a list."}),400 + # if not isinstance(TradeRequestData["TOTPCode"], int) and TradeRequestData["TOTPCode"] is not None: + # return jsonify({"success": False, "message": "Invalid request data, TOTP code must be an integer."}),400 + + try: + assert "RequesterOfferRobux" in TradeRequestData, "Missing parameter RequesterOfferRobux" + assert "TargetOfferRobux" in TradeRequestData, "Missing parameter TargetOfferRobux" + assert "RequesterOfferUAIDs" in TradeRequestData, "Missing parameter RequesterOfferUAIDs" + assert "TargetOfferUAIDs" in TradeRequestData, "Missing parameter TargetOfferUAIDs" + assert "TOTPCode" in TradeRequestData, "Missing parameter TOTPCode" + assert isinstance(TradeRequestData["RequesterOfferRobux"], int), "Invalid request data, Robux Offer must be an integer." + assert isinstance(TradeRequestData["TargetOfferRobux"], int), "Invalid request data, Target Robux Offer must be an integer." + assert isinstance(TradeRequestData["RequesterOfferUAIDs"], list), "Invalid request data, Offered UAIDs must be a list." + assert isinstance(TradeRequestData["TargetOfferUAIDs"], list), "Invalid request data, Offered UAIDs must be a list." + assert isinstance(TradeRequestData["TOTPCode"], int) or TradeRequestData["TOTPCode"] is None, "Invalid request data, TOTP code must be an integer or null." + except Exception as e: + return jsonify({"success": False, "message": f"Payload Validation failed, {str(e)}"}), 400 + + TotalTradesActive : int = UserTrade.query.filter_by(sender_userid=AuthenticatedUser.id, status=TradeStatus.Pending).count() + if TotalTradesActive >= 25: + return jsonify({"success": False, "message": "You cannot have more than 25 active trades at once."}),400 + ActiveTradesWithTarget : int = UserTrade.query.filter_by(sender_userid=AuthenticatedUser.id, recipient_userid=TargetUser.id, status=TradeStatus.Pending).count() + if ActiveTradesWithTarget >= 2: + return jsonify({"success": False, "message": "You cannot have more than 2 active trades with the same user at once."}),400 + + RequesterOfferRobux : int = TradeRequestData["RequesterOfferRobux"] + TargetOfferRobux : int = TradeRequestData["TargetOfferRobux"] + RequesterOfferUAIDs : list = TradeRequestData["RequesterOfferUAIDs"] + TargetOfferUAIDs : list = TradeRequestData["TargetOfferUAIDs"] + TOTPCode : int | None = TradeRequestData["TOTPCode"] + + if (RequesterOfferRobux < 0 or TargetOfferRobux < 0) or (RequesterOfferRobux > 100000 or TargetOfferRobux > 100000): + return jsonify({"success": False, "message": "Invalid request data, Robux Offer must be between 0 - 100000"}),400 + + if len(RequesterOfferUAIDs) > 4 or len(TargetOfferUAIDs) > 4: + return jsonify({"success": False, "message": "Invalid request data, cannot trade more than 4 items at once."}),400 + + if len(RequesterOfferUAIDs) <= 0 or len(TargetOfferUAIDs) <= 0: + return jsonify({"success": False, "message": "Invalid request data, both request and offer must contain at least one item"}),400 + + if AuthenticatedUser.TOTPEnabled: + if TOTPCode is None: + return jsonify({"success": False, "message": "Invalid request data, TOTP code is required."}),400 + if not auth.Validate2FACode(AuthenticatedUser.id, int(TOTPCode)): + return jsonify({"success": False, "message": "Invalid request data, TOTP code is invalid."}),400 + + for UAID in RequesterOfferUAIDs: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=UAID).first() + if UserAssetObj is None: + return jsonify({"success": False, "message": "Invalid request data, one of the items is invalid."}),400 + if UserAssetObj.userid != AuthenticatedUser.id: + return jsonify({"success": False, "message": f"Invalid request data, you do not own UAID {str(UAID)}"}),400 + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if not AssetObj.is_limited or AssetObj.is_for_sale: + return jsonify({"success": False, "message": f"Invalid request data, you cannot trade UAID {str(UAID)}"}),400 + + for UAID in TargetOfferUAIDs: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=UAID).first() + if UserAssetObj is None: + return jsonify({"success": False, "message": "Invalid request data, one of the items is invalid."}),400 + if UserAssetObj.userid != TargetUser.id: + return jsonify({"success": False, "message": f"Invalid request data, user does not own UAID {str(UAID)}"}),400 + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if not AssetObj.is_limited or AssetObj.is_for_sale: + return jsonify({"success": False, "message": f"Invalid request data, you cannot trade UAID {str(UAID)}"}),400 + + NewUserTrade : UserTrade = UserTrade( + sender_userid = AuthenticatedUser.id, + recipient_userid = TargetUser.id, + sender_userid_robux = RequesterOfferRobux, + recipient_userid_robux = TargetOfferRobux, + status = TradeStatus.Pending, + expires_at = datetime.utcnow() + timedelta(days=7) + ) + try: + db.session.add(NewUserTrade) + db.session.commit() + + for UAID in RequesterOfferUAIDs: + NewTradeAsset : UserTradeItem = UserTradeItem( + tradeid = NewUserTrade.id, + userid = AuthenticatedUser.id, + user_asset_id = UAID + ) + db.session.add(NewTradeAsset) + + for UAID in TargetOfferUAIDs: + NewTradeAsset : UserTradeItem = UserTradeItem( + tradeid = NewUserTrade.id, + userid = TargetUser.id, + user_asset_id = UAID + ) + db.session.add(NewTradeAsset) + + db.session.commit() + except: + db.session.delete(NewUserTrade) + return jsonify({"success": False, "message": "Internal server error"}),500 + return jsonify({"success": True, "message": "Trade request sent.", "tradeId": NewUserTrade.id}),200 + +@TradesPageRoute.route("/trade/view/", methods=['GET']) +@auth.authenticated_required_api +def viewTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.sender_userid != AuthenticatedUser.id and TradeObj.recipient_userid != AuthenticatedUser.id: + return abort(403) + + if TradeObj.expires_at < datetime.utcnow() and TradeObj.status == TradeStatus.Pending: + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + SenderUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + RecipientUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + + SenderItems = [] + RecipientItems = [] + + AssetRAPCache = {} + def GetAssetRAP( AssetID : int ): + if AssetID in AssetRAPCache: + return AssetRAPCache[AssetID] + AssetRAPObj : AssetRap | None = AssetRap.query.filter_by(assetid=AssetID).first() + if AssetRAPObj is None: + return 0 + AssetRAPCache[AssetID] = AssetRAPObj.rap + return AssetRAPCache[AssetID] + SenderOfferValue = 0 + RecipientOfferValue = 0 + + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if TradeItem.userid == SenderUser.id: + SenderItems.append({ + "UAID": UserAssetObj.id, + "Name": AssetObj.name, + "AssetId": AssetObj.id, + "RAP": GetAssetRAP(AssetObj.id), + "serial": UserAssetObj.serial + }) + SenderOfferValue += GetAssetRAP(AssetObj.id) + else: + RecipientItems.append({ + "UAID": UserAssetObj.id, + "Name": AssetObj.name, + "AssetId": AssetObj.id, + "RAP": GetAssetRAP(AssetObj.id), + "serial": UserAssetObj.serial + }) + RecipientOfferValue += GetAssetRAP(AssetObj.id) + + SenderOfferValue += TradeObj.sender_userid_robux + RecipientOfferValue += TradeObj.recipient_userid_robux + OppositeUser = SenderUser if AuthenticatedUser.id == RecipientUser.id else RecipientUser + + return render_template("trades/view.html", + TradeObj = TradeObj, + SenderUser = SenderUser, + RecipientUser = RecipientUser, + AuthenticatedUser = AuthenticatedUser, + SenderItems = SenderItems, + RecipientItems = RecipientItems, + SenderOfferValue = SenderOfferValue, + RecipientOfferValue = RecipientOfferValue, + OppositeUser = OppositeUser) + +@TradesPageRoute.route("/trade//accept", methods=['POST']) +@auth.authenticated_required +def acceptTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return abort(403) + if TradeObj.status != TradeStatus.Pending: + return abort(403) + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser.id) + if UserCurrentMembership == MembershipType.NonBuildersClub: + flash("You must be a Builders Club member to accept trades.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + if OppositeUser is None: + flash("An error occured while trying to complete this trade. Please try again later.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + OppositeUserCurrentMembership : MembershipType = GetUserMembership(OppositeUser) + if OppositeUserCurrentMembership == MembershipType.NonBuildersClub: + flash("The opposite user must be a Builders Club member to accept trades.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if AuthenticatedUser.TOTPEnabled: + TOTPCode : str = request.form.get("totpcode", default=None, type=str) + if TOTPCode is None: + flash("Invalid TOTP code", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if not auth.Validate2FACode(AuthenticatedUser.id, TOTPCode): + flash("Invalid TOTP code", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + if TradeObj.expires_at < datetime.utcnow(): + flash("This trade has expired.", "error") + TradeObj.status = TradeStatus.Expired + db.session.commit() + return redirect(f"/trade/view/{str(tradeid)}") + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj is None: + flash("One of the items no longer exists and this trade cannot be completed.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if UserAssetObj.userid != TradeItem.userid: + flash("One of the items no longer belongs to its original owner and this trade cannot be completed.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + SenderEconomyLock = redislock.acquire_lock(f"economy:{str(TradeObj.sender_userid)}", acquire_timeout=5, lock_timeout=3) + RecipientEconomyLock = redislock.acquire_lock(f"economy:{str(TradeObj.recipient_userid)}", acquire_timeout=5, lock_timeout=3) + if not SenderEconomyLock or not RecipientEconomyLock: + if SenderEconomyLock: + redislock.release_lock(f"economy:{str(TradeObj.sender_userid)}", SenderEconomyLock) + flash("An error occured while trying to complete this trade. Please try again later.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + SenderEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=TradeObj.sender_userid).first() + RecipientEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=TradeObj.recipient_userid).first() + + if SenderEconomyObj.robux < TradeObj.sender_userid_robux: + flash("The sender does not have enough robux to complete this trade.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if RecipientEconomyObj.robux < TradeObj.recipient_userid_robux: + flash("The recipient does not have enough robux to complete this trade.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + ItemLocks = [] + for TradeItem in TradeItems: + TradeItemLock = redislock.acquire_lock(f"item:{str(TradeItem.user_asset_id)}", acquire_timeout=20, lock_timeout=5) + if not TradeItemLock: + redislock.release_lock(f"economy:{str(TradeObj.sender_userid)}", SenderEconomyLock) + redislock.release_lock(f"economy:{str(TradeObj.recipient_userid)}", RecipientEconomyLock) + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + + flash("An error occured while trying to complete this trade. Please try again later.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + ItemLocks.append([TradeItemLock, TradeItem.user_asset_id]) + + def ReleaseAllLocks(): + redislock.release_lock(f"economy:{str(TradeObj.sender_userid)}", SenderEconomyLock) + redislock.release_lock(f"economy:{str(TradeObj.recipient_userid)}", RecipientEconomyLock) + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + + SenderEconomyObj.robux -= TradeObj.sender_userid_robux + RecipientEconomyObj.robux -= TradeObj.recipient_userid_robux + + if TradeObj.sender_userid_robux > 0: + FinalAdded = math.floor(TradeObj.sender_userid_robux * 0.7) + RecipientEconomyObj.robux += FinalAdded + if TradeObj.recipient_userid_robux > 0: + FinalAdded = math.floor(TradeObj.recipient_userid_robux * 0.7) + SenderEconomyObj.robux += FinalAdded + + def CreateItemTransferLog( original_owner_id : int, new_owner_id : int, asset_id : int, user_asset_id : int ): + NewTransferLog = LimitedItemTransfer( + original_owner_id = original_owner_id, + new_owner_id = new_owner_id, + asset_id = asset_id, + user_asset_id = user_asset_id, + transfer_method = LimitedItemTransferMethod.Trade, + associated_trade_id = TradeObj.id + ) + db.session.add(NewTransferLog) + + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj is None: + ReleaseAllLocks() + flash("One of the items no longer exists and this trade cannot be completed.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if UserAssetObj.userid == TradeObj.sender_userid: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.recipient_userid + else: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.sender_userid + UserAssetObj.is_for_sale = False + UserAssetObj.price = 0 + UserAssetObj.updated = datetime.utcnow() + db.session.commit() + ReleaseAllLocks() + + TradeObj.status = TradeStatus.Accepted + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return redirect(f"/trade/view/{str(tradeid)}") + +@TradesPageRoute.route("/trade//cancel", methods=['POST']) +@auth.authenticated_required +def cancelTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.sender_userid != AuthenticatedUser.id: + return abort(403) + if TradeObj.status != TradeStatus.Pending: + return abort(403) + + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + flash("This trade has expired.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + TradeObj.status = TradeStatus.Cancelled + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return redirect(f"/trade/view/{str(tradeid)}") + +@TradesPageRoute.route("/trade//decline", methods=['POST']) +@auth.authenticated_required +@csrf.exempt +def declineTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return abort(403) + if TradeObj.status != TradeStatus.Pending: + return abort(403) + + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + flash("This trade has expired.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + TradeObj.status = TradeStatus.Declined + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return redirect(f"/trade/view/{str(tradeid)}") + +@TradesPageRoute.route("/trade//inventory", methods=['GET']) +@auth.authenticated_required_api +def getInventory(userid : int): + pageNumber = request.args.get("page", default=1, type=int) + + TargetUser : User = User.query.filter_by(id=userid).first() + if TargetUser is None: + return abort(404) + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + return abort(404) + + UserAssets : list[UserAsset] = UserAsset.query.join(Asset, UserAsset.assetid == Asset.id).filter(UserAsset.userid == TargetUser.id, Asset.is_limited == True, Asset.is_for_sale == False).paginate(page=pageNumber, error_out=False, max_per_page=12).items + ReturnInfoData = [] + + AssetRAPCache = {} + def GetAssetRAP( AssetID : int ): + if AssetID in AssetRAPCache: + return AssetRAPCache[AssetID] + AssetRAPObj : AssetRap | None = AssetRap.query.filter_by(assetid=AssetID).first() + if AssetRAPObj is None: + return 0 + AssetRAPCache[AssetID] = AssetRAPObj.rap + return AssetRAPCache[AssetID] + + for UserAssetObj in UserAssets: + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if AssetObj is None: + continue + ReturnInfoData.append({ + "id": AssetObj.id, + "name": AssetObj.name, + "serialNumber": UserAssetObj.serial, + "uaid": UserAssetObj.id, + "rap": GetAssetRAP(AssetObj.id), + }) + isThereNextPage = len(UserAssets) == 12 + return jsonify({ + "data": ReturnInfoData, + "nextPage": isThereNextPage + }) + diff --git a/app/pages/trades/view.html b/app/pages/trades/view.html new file mode 100644 index 0000000..f25a8fb --- /dev/null +++ b/app/pages/trades/view.html @@ -0,0 +1,130 @@ +{% extends '__layout__.html' %} +{% block title %}View Trade{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ < Return to trades + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ {{OppositeUser.username}} +

Your trade with {{OppositeUser.username}} is {{TradeObj.status.name}}

+
+ {% if TradeObj.status.value == 0: %} + {% if SenderUser.id == currentuser.id: %} +
+ + +
+ {%endif%} + {% if RecipientUser.id == currentuser.id: %} +
+ {% if AuthenticatedUser.TOTPEnabled: %} + + {%endif%} + + +
+
+ +
+ {%endif%} + {%endif%} +
+
+
+
+ {% if SenderUser.id != currentuser.id: %} +
Items you will receive
+ {%else%} +
Items you will send
+ {% endif %} +

Value: R$ {{SenderOfferValue}}

+
+
+ {% for i in range(4): %} + {% if (len(SenderItems) - 1 - i) >= 0: %} +
+
+ {{SenderItems[i].Name}} + {% if SenderItems[i].serial != None: %} +

#{{SenderItems[i].serial}}

+ {%endif%} +
+ {{SenderItems[i].Name}} +
+ {%else%} +
+
+
+
+ {%endif%} + {%endfor%} +
+
+ {%if TradeObj.sender_userid_robux > 0 %}
{{TradeObj.sender_userid_robux}} ROBUX
{%endif%} +
+
+
+
+
+ {% if SenderUser.id == currentuser.id: %} +
Items you will receive
+ {%else%} +
Items you will send
+ {% endif %} +

Value: R$ {{RecipientOfferValue}}

+
+
+ {% for i in range(4): %} + {% if (len(RecipientItems) - 1 - i) >= 0: %} +
+
+ {{RecipientItems[i].Name}} + {% if RecipientItems[i].serial != None: %} +

#{{RecipientItems[i].serial}}

+ {%endif%} +
+ {{RecipientItems[i].Name}} +
+ {%else%} +
+
+
+
+ {%endif%} + {%endfor%} +
+
+ {%if TradeObj.recipient_userid_robux > 0 %}
{{TradeObj.recipient_userid_robux}} ROBUX
{%endif%} +
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/transactions/transactions.html b/app/pages/transactions/transactions.html new file mode 100644 index 0000000..e883c91 --- /dev/null +++ b/app/pages/transactions/transactions.html @@ -0,0 +1,99 @@ +{% extends '__layout__.html' %} +{% block title %}Transactions{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+
+

Transactions

+ Currency Exchange +
+
+
+ + +
+
+
+ + + + + + + + + + + + {% for Transaction in TransactionInfo: %} + + + + + + + {% endfor %} + +
DateSourceDescriptionAmount
{{Transaction.created_at}} + {% if Transaction["source"]["type"] == 0: %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% else %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% endif %} + + {% if Transaction['custom_text'] != None %} + {{Transaction['custom_text']}} + {% else %} + {% if Transaction['asset'] != None: %} + + {{Transaction['asset']['name']}} + {{Transaction['asset']['name']}} + + {% else %} + Unknown + {%endif%} + {% endif %} + + {% if Transaction['currency_type'] == 0 %} + R$ {{Transaction['currency_amount']}} + {% else %} + T$ {{Transaction['currency_amount']}} + {% endif %} +
+ {% if len(TransactionInfo) == 0: %} +
+

No transactions found

+
+ {%endif%} + +
+ Previous +

Page {{Pagination.page}} of {{Pagination.pages}}

+ Next +
+
+ +{%endblock%} \ No newline at end of file diff --git a/app/pages/transactions/transactions.py b/app/pages/transactions/transactions.py new file mode 100644 index 0000000..a29f1a5 --- /dev/null +++ b/app/pages/transactions/transactions.py @@ -0,0 +1,86 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort +from datetime import datetime, timedelta + +from app.models.user_transactions import UserTransaction +from app.util import auth +from app.extensions import db +from app.models.user import User +from app.models.groups import Group +from app.models.asset import Asset +from app.enums.TransactionType import TransactionType + +TransactionsRoute = Blueprint('transactions', __name__, url_prefix='/transactions') + +CategoryToEnum = { + "purchase": TransactionType.Purchase, + "sale": TransactionType.Sale, + "group-payout": TransactionType.GroupPayout, + "stipends": TransactionType.BuildersClubStipend, +} + +@TransactionsRoute.route("/", methods=["GET"]) +@auth.authenticated_required +def TransactionsPage(): + AuthenticatedUser : User = auth.GetCurrentUser() + + CategoryArg = request.args.get('category', default="purchase", type=str) + if CategoryArg not in CategoryToEnum: + Category : TransactionType = TransactionType.Purchase + else: + Category : TransactionType = CategoryToEnum[CategoryArg] + + PageNumber = request.args.get('page', default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + TransactionQuery = UserTransaction.query.filter_by( transaction_type = Category) + CategoryQueryDict = { + TransactionType.Purchase: lambda queryObj: queryObj.filter_by( + sender_id = AuthenticatedUser.id, + sender_type = 0 + ), + TransactionType.Sale: lambda queryObj: queryObj.filter_by( + reciever_id = AuthenticatedUser.id, + reciever_type = 0 + ), + TransactionType.GroupPayout: lambda queryObj: queryObj.filter_by( + reciever_id = AuthenticatedUser.id, + reciever_type = 0 + ), + TransactionType.BuildersClubStipend: lambda queryObj: queryObj.filter_by( + reciever_id = AuthenticatedUser.id, + reciever_type = 0 + ), + } + TransactionQuery = CategoryQueryDict[Category](TransactionQuery) + TransactionQuery = TransactionQuery.order_by(UserTransaction.created_at.desc()) + TransactionQuery = TransactionQuery.paginate( page=PageNumber, per_page=15, error_out=False ) + + FormattedTransactions = [] + for Transaction in TransactionQuery.items: + Transaction : UserTransaction = Transaction + TransactionInfo = {} + TransactionInfo["source"] = { + "id": Transaction.sender_id if Transaction.sender_id != AuthenticatedUser.id or Transaction.sender_type != 0 else Transaction.reciever_id, + "type": Transaction.sender_type if Transaction.sender_id != AuthenticatedUser.id or Transaction.sender_type != 0 else Transaction.reciever_type, # VV I know this is bad but im too lazy to think of another way to do it + "name": ( User.query.filter_by(id = Transaction.sender_id).first().username if Transaction.sender_type != 1 else Group.query.filter_by( id = Transaction.sender_id ).first().name ) if Transaction.sender_id != AuthenticatedUser.id or Transaction.sender_type != 0 else ( User.query.filter_by(id = Transaction.reciever_id).first().username if Transaction.reciever_type != 1 else Group.query.filter_by( id = Transaction.reciever_id ).first().name ), + } + TransactionInfo["currency_amount"] = Transaction.currency_amount + TransactionInfo["currency_type"] = Transaction.currency_type + TransactionInfo["created_at"] = Transaction.created_at.strftime("%d/%m/%Y %H:%M:%S UTC") + TransactionInfo["custom_text"] = Transaction.custom_text + if Transaction.assetId: + TransactionInfo["asset"] = { + "id": Transaction.assetId, + "name": Asset.query.filter_by(id = Transaction.assetId).first().name, + } + else: + TransactionInfo["asset"] = None + FormattedTransactions.append(TransactionInfo) + + return render_template( + "transactions/transactions.html", + PageCategory = CategoryArg, + TransactionInfo = FormattedTransactions, + Pagination = TransactionQuery + ) \ No newline at end of file diff --git a/app/pages/users/index.html b/app/pages/users/index.html new file mode 100644 index 0000000..fd02b8b --- /dev/null +++ b/app/pages/users/index.html @@ -0,0 +1,67 @@ +{% extends '__layout__.html' %} +{% block title %}Search Users{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Users

+
+
+
+ + + +
+ +
+
+ + {% if len(UserLookupResults.items) == 0 %} +

No Results Found

+ {%endif%} +
+ Previous +

Page {{UserLookupResults.page}} of {{UserLookupResults.pages}}

+ Next +
+
+{% endblock %} diff --git a/app/pages/users/users_page.py b/app/pages/users/users_page.py new file mode 100644 index 0000000..7d19685 --- /dev/null +++ b/app/pages/users/users_page.py @@ -0,0 +1,37 @@ +import timeago +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.util import auth +from app.models.user import User +from datetime import datetime, timedelta +from app.models.placeserver_players import PlaceServerPlayer + +users_page = Blueprint('users_page', __name__, template_folder='templates') + +@users_page.route('/users', methods=['GET']) +@auth.authenticated_required +def index_page(): + PageNumber = max( request.args.get('page', default = 1, type = int ), 1 ) + SearchQuery = request.args.get('q', default = None, type = str) + UserLookupResults = None + if SearchQuery is not None and SearchQuery != '': + SearchQuery = SearchQuery.strip().replace( '%', '' ) + if len(SearchQuery) > 0 and len(SearchQuery) <= 32: + UserLookupResults = User.query.filter( User.username.ilike( '%' + SearchQuery + '%' ) ).filter_by( accountstatus = 1 ).order_by( User.lastonline.desc() ).paginate( page = PageNumber, per_page = 15, error_out = False ) + else: + flash('Invalid search query.', 'danger') + + if UserLookupResults is None: + UserLookupResults = User.query.filter_by( accountstatus = 1 ).order_by( User.lastonline.desc() ).paginate( page = PageNumber, per_page = 15, error_out = False ) + SearchQuery = None + + def _get_timeago_time( userObj : User ) -> str: + return timeago.format( userObj.lastonline, datetime.utcnow() ) + def _is_in_game( userObj : User ) -> bool: + return PlaceServerPlayer.query.filter_by( userid = userObj.id ).first() is not None + + return render_template('users/index.html', UserLookupResults = UserLookupResults, SearchQuery = SearchQuery, MinOnlineTime = datetime.utcnow() - timedelta( minutes = 1 ), GetTimeAgoTime = _get_timeago_time, IsInGame = _is_in_game) + +@users_page.route('/users', methods=['POST']) +@auth.authenticated_required +def index_page_post(): + return redirect( url_for( 'users_page.index_page', q = request.form.get('q', default = None, type = str) ) ) \ No newline at end of file diff --git a/app/routes/accountsettingsapi.py b/app/routes/accountsettingsapi.py new file mode 100644 index 0000000..6868c3c --- /dev/null +++ b/app/routes/accountsettingsapi.py @@ -0,0 +1,70 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth +from app.extensions import db, csrf, limiter +from flask_wtf.csrf import CSRFError, generate_csrf + +from app.models.user_email import UserEmail +from app.models.user import User + +AccountSettingsAPIRoute = Blueprint('accountsettingsapi', __name__, url_prefix='/') + +csrf.exempt(AccountSettingsAPIRoute) +@AccountSettingsAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@AccountSettingsAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@AccountSettingsAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@AccountSettingsAPIRoute.route("/v1/email", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_email_status(): + AuthenticatedUser : User = auth.GetCurrentUser() + UserEmailObject : UserEmail = UserEmail.query.filter_by(user_id=AuthenticatedUser.id).first() + + HiddenEmail = None + if UserEmailObject: + emailParts = UserEmailObject.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + + return jsonify({ + "emailAddress": HiddenEmail, + "verified": UserEmailObject.verified if UserEmailObject else False, + "canBypassPasswordForEmailUpdate": True + }) + +@AccountSettingsAPIRoute.route("/v1/themes//", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_consumer_theme( consumerType : str, consumerId : int ): + return jsonify({ + "themeType": "Dark" + }) + diff --git a/app/routes/asset.py b/app/routes/asset.py new file mode 100644 index 0000000..a985595 --- /dev/null +++ b/app/routes/asset.py @@ -0,0 +1,1360 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from config import Config +import requests +import hashlib +import os +import re +import random +import logging +import json +import time +from datetime import datetime +from app.util import auth, websiteFeatures, assetversion, redislock, s3helper, RBXMesh +from app.enums.AssetType import AssetType +from app.extensions import db, redis_controller, get_remote_address, csrf + +from app.models.asset import Asset +from app.models.asset_version import AssetVersion + +from app.models.user import User +from app.models.user_avatar import UserAvatar +from app.models.place import Place +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.models.user_avatar_asset import UserAvatarAsset +from app.routes.thumbnailer import TakeThumbnail +from app.models.gameservers import GameServer +from app.models.package_asset import PackageAsset + +config = Config() +AssetRoute = Blueprint('asset', __name__, url_prefix='/') + +# DO NOT USE IF SO. +def clear_all_auth_tokens(): + auth_token_keys = redis_controller.keys("authtoken_*") + + if not auth_token_keys: + print("No auth tokens found") + return 0 + + deleted_count = redis_controller.delete(*auth_token_keys) + + print(f"Successfully cleared {deleted_count} auth tokens") + return deleted_count + +if config.USE_LOCAL_STORAGE: + if not os.path.exists(config.R2_DOWNLOAD_CACHE_DIR): + os.makedirs(config.R2_DOWNLOAD_CACHE_DIR) + + @AssetRoute.route("/cdn_local/", methods=["GET"]) + def LocalCDN(filehash): + if not os.path.exists(config.R2_DOWNLOAD_CACHE_DIR + "/" + filehash): + return abort(404) + + if not bool(re.compile(r"^[a-fA-F0-9]{128}$").match(filehash)): + return abort(404) + + with open(config.R2_DOWNLOAD_CACHE_DIR + "/" + filehash, "rb") as f: + FileContents = f.read() + + resp = make_response(FileContents,200) + resp.headers['Content-Type'] = 'application/octet-stream' + return resp +@AssetRoute.route("/cdn_local/", methods=["GET"]) +def LocalCDN(filehash): + if not bool(re.compile(r"^[a-fA-F0-9]{128}$").match(filehash)): + return abort(404) + + s3_url = f"https://NEXIUM.economy-simulator.org/{filehash}" + + try: + import requests + response = requests.get(s3_url, timeout=10) + + if response.status_code != 200: + return abort(404) + + file_contents = response.content + resp = make_response(file_contents, 200) + resp.headers['Content-Type'] = 'application/octet-stream' + return resp + + except Exception as e: + print(f"Error fetching from S3: {str(e)}") + return abort(500) + +# Special Route used for rendering clothing +@AssetRoute.route('/Asset/SpecialCharacterFetch', methods=['GET']) +def specialCharacterFetch(): + assetId = request.args.get('assetId') + if assetId is None: + return 'Invalid request',400 + assetObj : Asset = Asset.query.filter_by(id=assetId).first() + if assetObj is None: + return 'Invalid request',400 + if assetObj.asset_type == AssetType.Package: + # Get the package assets + packageAssets : list[PackageAsset] = PackageAsset.query.filter_by(package_asset_id=assetObj.id).all() + FinalAvatarData = f"{config.BaseURL}/Asset/BodyColors.ashx?userId=0;" + for packageAsset in packageAssets: + FinalAvatarData += f"{config.BaseURL}/Asset/?id={str(packageAsset.asset_id)};" + return FinalAvatarData,200 + + return f"{config.BaseURL}/Asset/BodyColors.ashx?userId=0;{config.BaseURL}/Asset/?id={str(assetId)}",200 + +@AssetRoute.route('/Asset/CharacterFetch.ashx', methods=['GET']) +def characterFetch(): + userId = request.args.get('userId', default=5973, type=int) + if userId is None: + userId = 5973 + isLegacy = request.args.get('legacy', default=None, type=int) == 1 + + user = User.query.filter_by(id=userId).first() + if user is None: + return 'https://www.nexium.fit/Asset/BodyColors.ashx?userId=5973;https://www.nexium.fit/Asset/?id=23882;https://www.nexium.fit/Asset/?id=28253;',200 + serverPlaceId = request.args.get('serverplaceid', default=None, type=int) + + avatar = UserAvatar.query.filter_by(user_id=userId).first() + if avatar is None: + avatar = UserAvatar(user_id=userId) + db.session.add(avatar) + db.session.commit() + + avatarAssets = UserAvatarAsset.query.filter_by(user_id=userId).all() + + FinalAvatarData = f"{config.BaseURL}/Asset/BodyColors.ashx?userId={str(userId)};" + for avatarAsset in avatarAssets: + asset : Asset = Asset.query.filter_by(id=avatarAsset.asset_id).first() + if asset is None: + continue + if asset.moderation_status != 0: + continue + if asset.asset_type == AssetType.Gear and (serverPlaceId is not None or isLegacy): + continue # Gears are not allowed in games for now + + if not isLegacy or asset.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Head, AssetType.Hat, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory, AssetType.Gear, AssetType.Face]: + FinalAvatarData += f"{config.BaseURL}/Asset/?id={str(asset.id)};" + else: + FinalAvatarData += f"{config.BaseURL}/Asset/legacy/?id={str(asset.id)};" + + return FinalAvatarData,200 + +@AssetRoute.route('/Asset/BodyColors.ashx', methods=['GET']) +def bodyColors(): + userId = request.args.get('userId') + if userId is None: + return 'Invalid request',400 + + user = User.query.filter_by(id=userId).first() + if user is None: + if userId == '0': + resp = make_response(f""" + null + nil + + + 1001 + 1001 + 1001 + Body Colors + 1001 + 1001 + 1001 + true + + + + """,200) + resp.headers['Content-Type'] = 'text/xml' + return resp + return 'Invalid request',400 + + avatar : UserAvatar = UserAvatar.query.filter_by(user_id=userId).first() + if avatar is None: + return 'Invalid request',400 + + resp = make_response(f""" + null + nil + + + {str(avatar.head_color_id)} + {str(avatar.left_arm_color_id)} + {str(avatar.left_leg_color_id)} + Body Colors + {str(avatar.right_arm_color_id)} + {str(avatar.right_leg_color_id)} + {str(avatar.torso_color_id)} + true + + + +""",200) + resp.headers['Content-Type'] = 'text/xml' + return resp + +@AssetRoute.route('/v1.1/avatar-fetch/custom', methods=['GET']) +def AvatarFetchCustom(): + assetId = request.args.get('assetId') + if assetId is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + assetObj : Asset = Asset.query.filter_by(id=assetId).first() + if assetObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + AvatarAssetsList = [] + if assetObj.asset_type == AssetType.Package: + # Get the package assets + packageAssets : list[PackageAsset] = PackageAsset.query.filter_by(package_asset_id=assetObj.id).all() + for packageAsset in packageAssets: + AvatarAssetsList.append(packageAsset.asset_id) + else: + AvatarAssetsList.append(assetObj.id) + return jsonify({ + "resolvedAvatarType": "R6", + "accessoryVersionIds": AvatarAssetsList, + "equippedGearVersionIds": [], + "backpackGearVersionIds": [], + "bodyColors": { + "HeadColor": 1001, + "LeftArmColor": 1001, + "LeftLegColor": 1001, + "RightArmColor": 1001, + "RightLegColor": 1001, + "TorsoColor": 1001 + }, + "animationAssetIds": {}, + "animations": {}, + "scales": { + "height": 1, + "width": 1, + "head": 1, + "depth": 1, + "proportion": 0, + "bodyType": 0 + } + }) +@AssetRoute.route('/v1/avatar-fetch/', methods=["GET"]) +def AvatarFetchV1(): + UserId = request.args.get('userId', None, int) + PlaceId = request.args.get('placeId', None, int) + if UserId is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + if PlaceId is not None and PlaceId <= 0: + PlaceId = None + + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + PlayerAvatar : UserAvatar = UserAvatar.query.filter_by(user_id=UserId).first() + AvatarAssets : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id=UserId).all() + assetAndAssetTypeIds : list = [] + equippedGearVersionIds : list = [] + AvatarAssetsList : list = [] + animationAssetIds : dict = {} + + for AvatarAsset in AvatarAssets: + if AvatarAsset.asset.asset_type == AssetType.Gear and PlaceId is not None: + continue + if AvatarAsset.asset.moderation_status != 0: + continue + if AvatarAsset.asset.asset_type == AssetType.Gear: + equippedGearVersionIds.append(AvatarAsset.asset_id) + continue + if AvatarAsset.asset.asset_type == AssetType.ClimbAnimation: + animationAssetIds["climb"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.DeathAnimation: + animationAssetIds["death"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.FallAnimation: + animationAssetIds["fall"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.IdleAnimation: + animationAssetIds["idle"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.JumpAnimation: + animationAssetIds["jump"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.RunAnimation: + animationAssetIds["run"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.SwimAnimation: + animationAssetIds["swim"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.WalkAnimation: + animationAssetIds["walk"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.PoseAnimation: + animationAssetIds["pose"] = AvatarAsset.asset_id + + AvatarAssetsList.append(AvatarAsset.asset_id) + assetAndAssetTypeIds.append({ + "assetId": AvatarAsset.asset_id, + "assetTypeId": AvatarAsset.asset.asset_type.value + }) + resolvedAvatarType = "R6" if not PlayerAvatar.r15 else "R15" + if PlaceId is not None: + PlaceObj : Place = Place.query.filter_by(placeid = PlaceId).first() + if PlaceObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + if PlaceObj.rig_choice == PlaceRigChoice.ForceR6: + resolvedAvatarType = "R6" + elif PlaceObj.rig_choice == PlaceRigChoice.ForceR15: + resolvedAvatarType = "R15" + + return jsonify({ + "resolvedAvatarType": resolvedAvatarType, + "equippedGearVersionIds": equippedGearVersionIds, + "backpackGearVersionIds": equippedGearVersionIds, + "accessoryVersionIds": AvatarAssetsList, + "assetAndAssetTypeIds": assetAndAssetTypeIds, + "bodyColors": { + "headColorId": PlayerAvatar.head_color_id, + "leftArmColorId": PlayerAvatar.left_arm_color_id, + "leftLegColorId": PlayerAvatar.left_leg_color_id, + "rightArmColorId": PlayerAvatar.right_arm_color_id, + "rightLegColorId": PlayerAvatar.right_leg_color_id, + "torsoColorId": PlayerAvatar.torso_color_id, + + "HeadColor": PlayerAvatar.head_color_id, + "LeftArmColor": PlayerAvatar.left_arm_color_id, + "LeftLegColor": PlayerAvatar.left_leg_color_id, + "RightArmColor": PlayerAvatar.right_arm_color_id, + "RightLegColor": PlayerAvatar.right_leg_color_id, + "TorsoColor": PlayerAvatar.torso_color_id + }, + "animationAssetIds": animationAssetIds, + "animations": animationAssetIds, + "scales": { + "height": PlayerAvatar.height_scale, + "width": PlayerAvatar.width_scale, + "head": PlayerAvatar.head_scale, + "depth": 1, + "proportion": PlayerAvatar.proportion_scale, + "bodyType": PlayerAvatar.body_type_scale, + + "Height": PlayerAvatar.height_scale, + "Width": PlayerAvatar.width_scale, + "Head": PlayerAvatar.head_scale, + "Depth": 1, + "Proportion": PlayerAvatar.proportion_scale, + "BodyType": PlayerAvatar.body_type_scale + }, + "emotes": [] + }) + + +@AssetRoute.route('/v1.1/avatar-fetch/', methods=["GET"]) +def AvatarFetch(): + UserId = request.args.get('userId', None, int) + PlaceId = request.args.get('placeId', None, int) + if UserId is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + if PlaceId is not None and PlaceId <= 0: + PlaceId = None + + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + PlayerAvatar : UserAvatar = UserAvatar.query.filter_by(user_id=UserId).first() + AvatarAssets : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id=UserId).all() + AvatarAssetsList : list = [] + AvatarGearsList : list = [] + assetAndAssetTypeIds : list = [] + animationAssetIds : dict = {} + for AvatarAsset in AvatarAssets: + if AvatarAsset.asset.asset_type == AssetType.Gear and PlaceId is not None: + continue + if AvatarAsset.asset.moderation_status != 0: + continue + if AvatarAsset.asset.asset_type == AssetType.Gear: + AvatarGearsList.append(AvatarAsset.asset_id) + continue + if AvatarAsset.asset.asset_type == AssetType.ClimbAnimation: + animationAssetIds["climb"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.DeathAnimation: + animationAssetIds["death"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.FallAnimation: + animationAssetIds["fall"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.IdleAnimation: + animationAssetIds["idle"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.JumpAnimation: + animationAssetIds["jump"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.RunAnimation: + animationAssetIds["run"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.SwimAnimation: + animationAssetIds["swim"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.WalkAnimation: + animationAssetIds["walk"] = AvatarAsset.asset_id + elif AvatarAsset.asset.asset_type == AssetType.PoseAnimation: + animationAssetIds["pose"] = AvatarAsset.asset_id + + AvatarAssetsList.append(AvatarAsset.asset_id) + assetAndAssetTypeIds.append({ + "assetId": AvatarAsset.asset_id, + "assetTypeId": AvatarAsset.asset.asset_type.value + }) + + avatarTypeOverwrite = None + if PlaceId is not None: + PlaceObj : Place = Place.query.filter_by(placeid = PlaceId).first() + if PlaceObj is not None: + if PlaceObj.rig_choice == PlaceRigChoice.ForceR6: + avatarTypeOverwrite = "R6" + elif PlaceObj.rig_choice == PlaceRigChoice.ForceR15: + avatarTypeOverwrite = "R15" + + if UserObj.id == 9988778: + return jsonify({ + "resolvedAvatarType": avatarTypeOverwrite if avatarTypeOverwrite is not None else ( "R6" if not PlayerAvatar.r15 else "R15" ), + "accessoryVersionIds": AvatarAssetsList, + "equippedGearVersionIds": ["1082"], + "backpackGearVersionIds": ["1082"], + "assetAndAssetTypeIds": assetAndAssetTypeIds, + "bodyColors": { + "HeadColor": PlayerAvatar.head_color_id, + "LeftArmColor": PlayerAvatar.left_arm_color_id, + "LeftLegColor": PlayerAvatar.left_leg_color_id, + "RightArmColor": PlayerAvatar.right_arm_color_id, + "RightLegColor": PlayerAvatar.right_leg_color_id, + "TorsoColor": PlayerAvatar.torso_color_id, + + "headColorId": PlayerAvatar.head_color_id, + "leftArmColorId": PlayerAvatar.left_arm_color_id, + "leftLegColorId": PlayerAvatar.left_leg_color_id, + "rightArmColorId": PlayerAvatar.right_arm_color_id, + "rightLegColorId": PlayerAvatar.right_leg_color_id, + "torsoColorId": PlayerAvatar.torso_color_id + }, + "animationAssetIds": animationAssetIds, + "animations": animationAssetIds, + "scales": { + "height": PlayerAvatar.height_scale, + "width": PlayerAvatar.width_scale, + "head": PlayerAvatar.head_scale, + "depth": 1, + "proportion": PlayerAvatar.proportion_scale, + "bodyType": PlayerAvatar.body_type_scale, + "Height": PlayerAvatar.height_scale, + "Width": PlayerAvatar.width_scale, + "Head": PlayerAvatar.head_scale, + "Depth": 1, + "Proportion": PlayerAvatar.proportion_scale, + "BodyType": PlayerAvatar.body_type_scale + }, + "bodyColorsUrl": f"{config.BaseURL}/Asset/BodyColors.ashx?userId={str(UserId)}", + "emotes": [] + }) + + return jsonify({ + "resolvedAvatarType": avatarTypeOverwrite if avatarTypeOverwrite is not None else ( "R6" if not PlayerAvatar.r15 else "R15" ), + "accessoryVersionIds": AvatarAssetsList, + "equippedGearVersionIds": AvatarGearsList, + "backpackGearVersionIds": AvatarGearsList, + "assetAndAssetTypeIds": assetAndAssetTypeIds, + "bodyColors": { + "HeadColor": PlayerAvatar.head_color_id, + "LeftArmColor": PlayerAvatar.left_arm_color_id, + "LeftLegColor": PlayerAvatar.left_leg_color_id, + "RightArmColor": PlayerAvatar.right_arm_color_id, + "RightLegColor": PlayerAvatar.right_leg_color_id, + "TorsoColor": PlayerAvatar.torso_color_id, + + "headColorId": PlayerAvatar.head_color_id, + "leftArmColorId": PlayerAvatar.left_arm_color_id, + "leftLegColorId": PlayerAvatar.left_leg_color_id, + "rightArmColorId": PlayerAvatar.right_arm_color_id, + "rightLegColorId": PlayerAvatar.right_leg_color_id, + "torsoColorId": PlayerAvatar.torso_color_id + }, + "animationAssetIds": animationAssetIds, + "animations": animationAssetIds, + "scales": { + "height": PlayerAvatar.height_scale, + "width": PlayerAvatar.width_scale, + "head": PlayerAvatar.head_scale, + "depth": 1, + "proportion": PlayerAvatar.proportion_scale, + "bodyType": PlayerAvatar.body_type_scale, + "Height": PlayerAvatar.height_scale, + "Width": PlayerAvatar.width_scale, + "Head": PlayerAvatar.head_scale, + "Depth": 1, + "Proportion": PlayerAvatar.proportion_scale, + "BodyType": PlayerAvatar.body_type_scale + }, + "bodyColorsUrl": f"{config.BaseURL}/Asset/BodyColors.ashx?userId={str(UserId)}", + "emotes": [] + }) + +class InvalidAssetHashException(Exception): + """Raised when the asset hash is invalid""" + pass + +def CreateFakeAsset( AssetName = "Temporary Asset", Expiration = 600, AssetFileHash = "" ) -> int: + """ + Creates a fake asset in redis and returns a temporary asset id + """ + if AssetFileHash == "": + raise InvalidAssetHashException("AssetFileHash cannot be empty") + TemporaryAssetId : int = random.randint(1000000000,9999999999) + redis_controller.set(f"temp_asset:{str(TemporaryAssetId)}", json.dumps({ + "name": AssetName, + "hash": AssetFileHash + }), ex=Expiration) + return TemporaryAssetId + +class RatelimittedReachedException(Exception): + """Raised when the ratelimit has been reached from the roblox api""" + pass +class AssetNotFoundException(Exception): + """Raised when the asset has not been found""" + pass +class AssetNotAllowedException(Exception): + """Raised when the asset is not allowed to be migrated""" + pass + +def GetRandomProxy(): + """ + Gets a random proxy from the proxy set in redis + """ + ProxyList = list(redis_controller.smembers("assetmigrator_proxies")) + if len(ProxyList) == 0: + return None + return f"http://{random.choice(ProxyList)}" + +def GetOriginalAssetInfo(assetId, throwException = False, attempt = 0): + """ + Gets the original asset info from the roblox api + """ + try: + if redis_controller.get(f"FetchAssetInfo_v2:EconomyAPI:{str(assetId)}:Blocked") is not None: + if throwException: + logging.warning("The asset is blocked from being fetched id: " + str(assetId)) + raise AssetNotAllowedException("The asset is not allowed to be migrated") + return None + if redis_controller.get(f"FetchAssetInfo:EconomyAPI:{str(assetId)}") is not None: + return json.loads(redis_controller.get(f"FetchAssetInfo:EconomyAPI:{str(assetId)}")) + if config.ASSETMIGRATOR_USE_PROXIES: + assignedProxy = GetRandomProxy() + if assignedProxy is not None: + """ + zer0 sağolsun roproxy diye bisi var oldugunu soyledi + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details", + proxies = { + "http": assignedProxy, + "https": assignedProxy + } + ) + """ + logging.warning("Using proxy: " + assignedProxy) + try: + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details", + proxies = { + "http": assignedProxy, + "https": assignedProxy + } + ) + except Exception as e: + logging.error("Failed to fetch asset info with proxy: " + assignedProxy + " error: " + str(e)) + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + ) + if "Too many requests" in assetInfoReq.text: + # try with roblox api + logging.warning("The ratelimit has been reached (roblox), trying with ROPROXY api") + assetInfoReq = requests.get( + f"https://economy.roproxy.com/v2/assets/{str(assetId)}/details", + proxies = { + "http": assignedProxy, + "https": assignedProxy + } + ) + else: + logging.warning("No proxies available, using default ip") + """ + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + )""" + + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + ) + if "Too many requests" in assetInfoReq.text: + # try with roblox api + logging.warning("The ratelimit has been reached (Roblox), trying with Roproxy api") + assetInfoReq = requests.get( + f"https://economy.roproxy.com/v2/assets/{str(assetId)}/details" + ) + else: + """ + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + )""" + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + ) + if "Too many requests" in assetInfoReq.text: + # try with roblox api + logging.warning("The ratelimit has been reached (roblox), trying with Roproxy api") + assetInfoReq = requests.get( + f"https://economy.roproxy.com/v2/assets/{str(assetId)}/details" + ) + if assetInfoReq.status_code != 200: + if assetInfoReq.status_code == 429: + if attempt < 2: + time.sleep(1) + return GetOriginalAssetInfo(assetId, attempt=attempt+1, throwException=throwException) + else: + if throwException: + logging.warning("The ratelimit has been reached status code: " + str(assetInfoReq.status_code) + " id: " + str(assetId) + " text: " + assetInfoReq.text + " url: "+ assetInfoReq.url) + raise RatelimittedReachedException("The ratelimit has been reached") + else: + return None + elif assetInfoReq.status_code == 400: + redis_controller.set(f"FetchAssetInfo_v2:EconomyAPI:{str(assetId)}:Blocked", "true", ex=60 * 60 * 24 * 7) + if throwException: + logging.warning("The asset is blocked from being fetched id: " + str(assetId)) + raise AssetNotFoundException("The asset has not been found") + return None + except: + return None + assetInfo = assetInfoReq.json() + redis_controller.set(f"FetchAssetInfo:EconomyAPI:{str(assetId)}", json.dumps(assetInfo), ex=60 * 60 * 24 * 7) # Cache this information for 7 days since it's most likely not going to change + return assetInfo + +class NoPermissionException(Exception): + """Raised when Roblox does not allow us to download the asset""" + pass +class AssetDeliveryAPIFailedException(Exception): + """Raised when the asset delivery api fails""" + pass +class AssetOnCooldownException(Exception): + """Raised when the asset was recently attempted to be migrated but failed""" + pass +class EconomyAPIFailedException(Exception): + """Raised when the economy api fails""" + pass +class CatalogAPIFailedException(Exception): + """Raised when the catalog api fails""" + pass + +def GetBundleInformation( bundleId : int ) -> dict: + """ + Gets the bundle information from the catalog api + """ + if redis_controller.get(f"FetchBundleInfo_v2:CatalogAPI:{str(bundleId)}") is not None: + return json.loads(redis_controller.get(f"FetchBundleInfo_v2:CatalogAPI:{str(bundleId)}")) + bundleInfoReq = requests.get(f"https://catalog.roblox.com/v1/bundles/{str(bundleId)}/details") + if bundleInfoReq.status_code != 200: + if bundleInfoReq.status_code == 429: + raise RatelimittedReachedException("The ratelimit has been reached") + elif bundleInfoReq.status_code == 400: + raise AssetNotFoundException("The asset has not been found") + raise CatalogAPIFailedException(f"The catalog api failed with status code {str(bundleInfoReq.status_code)}") + bundleInfo = bundleInfoReq.json() + redis_controller.set(f"FetchBundleInfo_v2:CatalogAPI:{str(bundleId)}", json.dumps(bundleInfo), ex=60 * 60 * 24 * 7) # Cache this information for 7 days since it's most likely not going to change + return bundleInfo + +class MigrateBundleException(Exception): + """Raised when the bundle migration fails""" + pass +class PackageLinkAlreadyExistsException(Exception): + """Raised when the package link already exists""" + pass + +def MigrateBundle( bundleId : int ) -> Asset: + """ + Migrates a bundle from Roblox + """ + bundleInfo : dict = GetBundleInformation(bundleId) + + AllAssets : list[int] = [] + for item in bundleInfo["items"]: + if item["type"] != "Asset": + continue + AllAssets.append(item["id"]) + + MigratedAssets : list[Asset] = [] + # Migrate all the assets first before we create the package asset + for assetId in AllAssets: + try: + assetObj : Asset = migrateAsset( + assetid = assetId, + forceMigration = True, + keepRobloxId = False, + throwException = True, + assetVersionId=1, + creatorId=1 + ) + MigratedAssets.append(assetObj) + # Check if the package link already exists + if PackageAsset.query.filter_by(asset_id=assetObj.id).first() is not None: + raise PackageLinkAlreadyExistsException("The package link already exists") + + except RatelimittedReachedException: + # We should try again + time.sleep(1) + return MigrateBundle(bundleId) + except AssetNotFoundException: + # This shouldnt happen + pass + except AssetNotAllowedException: + # This shouldnt happen + pass + except NoPermissionException: + # This shouldnt happen + pass + except AssetDeliveryAPIFailedException: + # We should try again + time.sleep(1) + return MigrateBundle(bundleId) + except Exception as e: + logging.error(f"Failed to migrate asset {str(assetId)}, error: {str(e)}") + raise MigrateBundleException(f"Failed to migrate asset {str(assetId)}, error: {str(e)}") + + # Create the package asset + NewPackageAsset : Asset = Asset( + name = bundleInfo["name"], + description = bundleInfo["description"], + asset_type = AssetType.Package, + moderation_status = 0, + creator_id = 1, + ) + db.session.add(NewPackageAsset) + db.session.commit() + + # Get the sha512 of the package assets ids and create a new asset version + Content = "" + for asset in MigratedAssets: + Content += str(asset.id) + Content += str(NewPackageAsset.id) + + NewPackageAssetHash = hashlib.sha512(Content.encode("utf-8")).hexdigest() + assetversion.CreateNewAssetVersion(NewPackageAsset, NewPackageAssetHash) + + # Create the package link + for asset in MigratedAssets: + PackageLink = PackageAsset( + asset_id = asset.id, + package_asset_id = NewPackageAsset.id + ) + db.session.add(PackageLink) + db.session.commit() + TakeThumbnail(NewPackageAsset.id) + + return NewPackageAsset + + +def AddAssetToMigrationQueue( assetId : int, bypassQueueLimit : bool = False ) -> bool: + """ + Adds an asset to the migration queue so it can be migrated later + """ + if redis_controller.get(f"asset_migrate_v2:{str(assetId)}:blocked") is not None: + return False + if not bypassQueueLimit: + if redis_controller.llen("migrate_assets_queue") >= 900: + return False + # Make sure the asset is not already in the queue + if redis_controller.lrange("migrate_assets_queue", 0, -1).count(str(assetId)) > 0: + return False + + redis_controller.rpush("migrate_assets_queue", str(assetId)) + return True + +def AddAudioAssetToAudioMigrationQueue( assetId : int, bypassQueueLimit : bool = False, placeId : int = -1 ) -> bool: + """ + Adds an audio asset to the migration queue so it can be migrated later + """ + if placeId < 0: + raise Exception("Invalid place id") + + if not bypassQueueLimit: + if redis_controller.llen("migrate_audio_assets_queue") >= 900: + return False + # Make sure the asset is not already in the queue + if redis_controller.lrange("migrate_audio_assets_queue", 0, -1).count(str(assetId)) > 0: + return False + + redis_controller.rpush("migrate_audio_assets_queue", str(assetId)) + redis_controller.set(f"audio_asset:{str(assetId)}:placeid", str(placeId), ex=60 * 60 * 24 * 7) + + return True + + +def getAudioData_V2( assetId : int, placeId : int = None ) -> bytes: + if placeId is None: + placeId = 1818 + + RequestSession : requests.Session = requests.Session() + RequestSession.headers.update({ + "User-Agent": "Roblox/WinInet", + "Accept": "*/*", + "Roblox-Browser-Asset-Request": "false", + "Roblox-Place-Id": str(placeId) + }) + RequestSession.cookies.update({ + ".ROBLOSECURITY": config.ASSETMIGRATOR_ROBLOSECURITY + }) + + try: + AssetFetchReq : requests.Response = RequestSession.get( + url = f"https://assetdelivery.ttblox.mom/v1/asset/?id={str(assetId)}" + ) + except Exception as e: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, error: {str(e)}") + + if AssetFetchReq.status_code != 200: + if AssetFetchReq.status_code == 429: + raise RatelimittedReachedException("The ratelimit has been reached") + if AssetFetchReq.status_code == 403: + raise NoPermissionException(f"Forbidden from downloading asset {str(assetId)}, status code: {str(AssetFetchReq.status_code)}") + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, status code: {str(AssetFetchReq.status_code)}") + + return AssetFetchReq.content + +def getAudioData( assetId : int, placeid : int = None ) -> bytes: + """ + [ DEPRECATED ] ( Please use getAudioData_V2 ) + Downloads the sound data from roblox assetdelivery api + """ + + if placeid is None: + placeid = findPlaceId(assetId) + + RequestSession : requests.Session = requests.Session() + RequestSession.headers.update({ + "User-Agent": "Roblox/WinInet", + "Accept": "*/*", + "Roblox-Browser-Asset-Request": "false", + "Roblox-Place-Id": str(placeid) + }) + RequestSession.cookies.update({ + ".ROBLOSECURITY": config.ASSETMIGRATOR_ROBLOSECURITY + }) + + JSONPayload = [{ + "assetId": assetId, + "assetType": "Audio", + "requestId": "0" + }] + + try: + AssetFetchReq : requests.Response = RequestSession.post( + f"https://assetdelivery.roproxy.com/v2/assets/batch", + json = JSONPayload # We can't use proxies on this since Roblox deletes cookies when using a different continent + ) + except Exception as e: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, error: {str(e)}") + if AssetFetchReq.status_code != 200: + if AssetFetchReq.status_code == 429: + raise RatelimittedReachedException("The ratelimit has been reached") + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, status code: {str(AssetFetchReq.status_code)}") + AssetLocations = AssetFetchReq.json() + if not AssetLocations or len(AssetLocations) == 0: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, no locations found") + RequestObj : dict = AssetLocations[0] + if RequestObj.get("locations") and RequestObj["locations"][0].get("location"): + AudioURL = RequestObj["locations"][0]["location"] + else: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, no locations found") + + try: + AssetCDNFetchReq : requests.Response = RequestSession.get(AudioURL) + except Exception as e: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, error: {str(e)}") + if AssetCDNFetchReq.status_code != 200: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, status code: {str(AssetCDNFetchReq.status_code)}") + + return AssetCDNFetchReq.content + +def findPlaceId( assetId : int ) -> int: + """ + Finds a place which belongs to the asset creator so we can download the asset + """ + assetInfo = GetOriginalAssetInfo(assetId, throwException=True) + CreatorId = assetInfo["Creator"]["Id"] + CreatorType = assetInfo["Creator"]["CreatorType"] + if CreatorType == "User": + # Find a place which belongs to the user + PlaceInfo = requests.get(f"https://games.roblox.com/v2/users/{str(CreatorId)}/games") + if PlaceInfo.status_code != 200: + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator, status code: {str(PlaceInfo.status_code)}") + PlaceInfo = PlaceInfo.json() + for Place in PlaceInfo["data"]: + return Place["rootPlace"]["id"] + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator") + elif CreatorType == "Group": + # Find a place which belongs to the group + PlaceInfo = requests.get(f"https://games.roblox.com/v2/groups/{str(CreatorId)}/gamesV2") + if PlaceInfo.status_code != 200: + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator, status code: {str(PlaceInfo.status_code)}") + PlaceInfo = PlaceInfo.json() + for Place in PlaceInfo["data"]: + return Place["rootPlace"]["id"] + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator") + else: + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator") + +def migrateAsset( assetid : int, forceMigration : bool = False, allowedTypes = [1,3,4,5,10,13,24,39,40,50,51,52,53,54,55,56], creatorId : int = 49, keepRobloxId : bool = True, migrateInfo : bool = True, attempt : int = 0, throwException : bool = False, allowBackgroundMigration : bool = False, assetVersionId : int = None, bypassCooldown : bool = False, attemptSoundWithPlaceId : int = -1 ) -> Asset: + asset = Asset.query.filter_by(id=assetid).first() + if asset is not None: + return asset + if redis_controller.get(f"asset_migrate_v2:{str(assetid)}:blocked") is not None and not bypassCooldown: + if throwException: + raise AssetOnCooldownException("Asset is on cooldown") + return None + + try: + assetInfo = GetOriginalAssetInfo(assetid, throwException=True) + except RatelimittedReachedException: + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + if throwException: + logging.error(f"Failed to download asset {assetid} after 2 attempts for rate limiting") + raise RatelimittedReachedException("The ratelimit has been reached") + return None + except AssetNotFoundException: + if throwException: + logging.error(f"failed to migrate {assetid} is not found") + raise AssetNotFoundException("The asset has not been found") + return None + except AssetNotAllowedException: + if throwException: + logging.error(f"failed to migrate {assetid} is not allowed") + raise AssetNotAllowedException("The asset is not allowed to be migrated") + return None + if assetInfo is None: + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + if throwException: + logging.error(f"Failed to download asset {assetid}") + raise EconomyAPIFailedException("Failed to get asset information") + return None + + if assetInfo['AssetTypeId'] not in allowedTypes and not forceMigration: + if throwException: + logging.error(f"Asset {assetid} is not allowed to be migrated") + raise AssetNotAllowedException("Asset is not allowed to be migrated") + return None + + if assetInfo['AssetTypeId'] == 3: + if attemptSoundWithPlaceId == -1: + try: + robloxAsset = requests.get(f"https://api.hyra.io/audio/{str(assetid)}") + except: + if throwException: + logging.error(f"Failed to download asset {assetid}") + raise AssetDeliveryAPIFailedException("Failed to get asset from hyra") + return None + if robloxAsset.status_code != 200: + if robloxAsset.status_code != 429: + redis_controller.setex(f"asset_migrate_v2:{str(assetid)}:blocked", 60 * 60 * 24, "true") + if throwException: + logging.error(f"Failed to download asset {assetid}") + raise NoPermissionException("Roblox does not allow us to download this asset") + logging.error(f"Failed to download asset {assetid} because of rate limit") + return None + #logging.error(f"Failed to download asset {assetid}") + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + if throwException: + logging.error(f"Failed to download asset {assetid} after 2 attempts for rate limiting") + raise RatelimittedReachedException("Rate limit reached") + logging.error(f"Failed to download asset {assetid} {robloxAsset.text}") + return None + else: + # We got the asset from hyra, it should return a mp3 file in bytes + robloxAssetContent = robloxAsset.content + asset = Asset(roblox_asset_id=assetid, force_asset_id=assetid, creator_id=creatorId,asset_type=AssetType.Audio, name=f"Asset {assetid}", description="Migrated from Roblox", asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow()) + db.session.add(asset) + try: + db.session.commit() + except: + # Race condition, lets try again + return migrateAsset(assetid, forceMigration, allowedTypes, creatorId, keepRobloxId, migrateInfo, attempt+1, throwException, allowBackgroundMigration, assetVersionId) + + ContentHash = hashlib.sha512(robloxAssetContent).hexdigest() + s3helper.UploadBytesToS3(robloxAssetContent, ContentHash) + assetVersion = assetversion.CreateNewAssetVersion(asset, ContentHash) + TakeThumbnail(asset.id) + return asset + else: + try: + robloxAssetContent = getAudioData_V2(assetid, attemptSoundWithPlaceId) + except RatelimittedReachedException: + if throwException: + logging.error(f"Failed to download asset {assetid}") + raise RatelimittedReachedException("The ratelimit has been reached") + logging.error(f"Failed to download asset {assetid} because of rate limit") + return None + except Exception as e: + if throwException: + raise e + logging.error(f"Failed to download asset {assetid} beacuse of error: {str(e)}") + return None + + asset = Asset(roblox_asset_id=assetid, force_asset_id=assetid, creator_id=creatorId,asset_type=AssetType.Audio, name=f"Asset {assetid}", description="Migrated from Roblox", asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow()) + db.session.add(asset) + try: + db.session.commit() + except: + return migrateAsset(assetid, forceMigration, allowedTypes, creatorId, keepRobloxId, migrateInfo, attempt+1, throwException, allowBackgroundMigration, assetVersionId, bypassCooldown, attemptSoundWithPlaceId) + + ContentHash = hashlib.sha512(robloxAssetContent).hexdigest() + s3helper.UploadBytesToS3(robloxAssetContent, ContentHash) + assetVersion = assetversion.CreateNewAssetVersion(asset, ContentHash) + TakeThumbnail(asset.id) + + return asset + + try: + if assetVersionId != None: + robloxAssetContent = requests.get(f"https://assetdelivery.ttblox.mom/v1/asset/?id={str(assetid)}&version={str(assetVersionId)}", timeout=5) + else: + robloxAssetContent = requests.get(f"https://assetdelivery.ttblox.mom/v1/asset/?id={str(assetid)}", timeout=5) + if robloxAssetContent.status_code != 200: + if robloxAssetContent.status_code == 409: + redis_controller.set(f"asset_migrate_v2:{str(assetid)}:blocked", "true", ex=3600 * 7) + if throwException: + raise NoPermissionException("Roblox does not allow us to download this asset") + return None + elif robloxAssetContent.status_code == 429: + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + logging.error(f"Failed to download asset {assetid} after 2 attempts for rate limiting") + if throwException: + logging.error(f"Failed to download asset {assetid} after 2 attempts for rate limiting") + raise RatelimittedReachedException("Rate limit reached") + logging.error(f"Failed to download asset {assetid} because of rate limit") + return None + #logging.error(f"Failed to download asset {assetid}") + return None + except: + # rbxcdn is prob down + #logging.error(f"Failed to download asset {assetid}") + + if throwException: + raise AssetDeliveryAPIFailedException("Asset delivery api failed") + return None + + try: + robloxAssetContent = robloxAssetContent.content + robloxAssetContent = robloxAssetContent.replace("roblox.com".encode("utf-8"), config.BaseDomain.encode("utf-8")) + except: + # Means that the file is not an rbxmx or rbxm file + robloxAssetContent = robloxAssetContent.content + + if assetInfo['AssetTypeId'] == 4: + originalAssetContent = robloxAssetContent + try: + if RBXMesh.get_mesh_version(robloxAssetContent) not in [2.0]: + meshData : RBXMesh.FileMeshData = RBXMesh.read_mesh_data(robloxAssetContent) + robloxAssetContent = RBXMesh.export_mesh_v2(meshData) + except Exception as e: + logging.warning(f"Failed to downgrade mesh {str(assetid)}, error: {str(e)}") + robloxAssetContent = originalAssetContent + + AssetName = "Asset " + str(assetid) + AssetDescription = "Migrated from Roblox" + if migrateInfo: + if assetInfo is not None: + AssetName = assetInfo['Name'] + AssetDescription = assetInfo['Description'] + else: + logging.warning(f"Failed to get asset info for {assetid}") + if keepRobloxId: + asset = Asset(roblox_asset_id=assetid, force_asset_id=assetid, asset_type=AssetType(assetInfo['AssetTypeId']), name=AssetName, description=AssetDescription, asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow(), creator_id=creatorId) + else: + asset = Asset(roblox_asset_id=assetid, asset_type=AssetType(assetInfo['AssetTypeId']), name=AssetName, description=AssetDescription, asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow(), creator_id=creatorId) + db.session.add(asset) + try: + db.session.commit() + except: + # Race condition, lets try again + return migrateAsset(assetid, forceMigration) + + + ContentHash = hashlib.sha512(robloxAssetContent).hexdigest() + s3helper.UploadBytesToS3(robloxAssetContent, ContentHash) + + assetVersion = AssetVersion(asset_id=asset.id, content_hash=ContentHash, created_at=datetime.utcnow(), version=1) + db.session.add(assetVersion) + db.session.commit() + return asset +import uuid + +def GenerateTempAuthToken( AssetId : int, Expiration : int = 600, CreatorIP : str = None ) -> str: + """ + Generates a temporary auth token for downloading places from RCC + + :param AssetId: The asset id + :param Expiration: The expiration in seconds + :param CreatorIP: The ip of the creator + + :return: The auth token + """ + AuthToken = str(uuid.uuid4()) + redis_controller.setex(f"AssetTempAuthToken:{AuthToken}:{str(AssetId)}", time = Expiration, value = json.dumps({ + "CreatorIP" : CreatorIP + })) + return AuthToken + +def VerifyTempAuthToken( AuthToken : str, AssetId : int, RequesterIP : str = None ) -> bool: + """ + Verifies a temporary auth token for downloading places from RCC + + :param AuthToken: The auth token + :param AssetId: The asset id + :param RequesterIP: The ip of the requester + + :return: True if the auth token is valid, False if not + """ + + AuthTokenData = redis_controller.get(f"AssetTempAuthToken:{AuthToken}:{str(AssetId)}") + if AuthTokenData is None: + return False + AuthTokenData = json.loads(AuthTokenData) + if AuthTokenData['CreatorIP'] is not None: + if AuthTokenData['CreatorIP'] != RequesterIP: + return False + + redis_controller.delete(f"AssetTempAuthToken:{AuthToken}:{str(AssetId)}") + return True + +@AssetRoute.route("/v1/asset/", methods=["GET"]) +@AssetRoute.route("/v1/asset", methods=["GET"]) +@AssetRoute.route('/Asset', methods=['GET']) +@AssetRoute.route('/Asset/', methods=['GET']) +@AssetRoute.route('/asset/', methods=['GET']) +@AssetRoute.route('/asset', methods=['GET']) +def AssetHandler(): + id = request.args.get('id', type=int) or request.args.get("assetversionid", type=int, default=None) + if id is None: + return jsonify({'error':'Invalid request'}),400 + serverplaceid = request.args.get('serverplaceid', type=int, default=0) + isScriptInsert = request.args.get('scriptinsert', type=int, default=0) == 1 + isClientInsert = request.args.get('clientinsert', type=int, default=0) == 1 + + asset : Asset = Asset.query.filter_by(id=id).first() + if asset is None: + if id >= 1000000000 and id <= 9999999999: + # Could be a temporary asset + AssetInfo : str = redis_controller.get(f"temp_asset:{str(id)}") + if AssetInfo is not None: + AssetInfo = json.loads(AssetInfo) + return redirect(f"{config.CDN_URL}/{AssetInfo['hash']}") + + if redis_controller.get(f"asset_migrate_v2:{str(id)}:blocked") is not None: + return jsonify({'error':'Invalid request'}),400 + + MigrateAssetLockName = f"asset_migrate_v2:{str(id)}:lock" + MigrateLock = redislock.acquire_lock( lock_name = MigrateAssetLockName, acquire_timeout = 50, lock_timeout = 2 ) # Prevents multiple migrations at once which can happen when server and client loads assets at the same time + if MigrateLock is None: + return redirect(f"/asset/?id={str(id)}", code=301) + + if redis_controller.lrange("migrate_assets_queue", 0, -1).count(str(id)) > 0: + return jsonify({'error': 'Server is handling too many asset migrations at this time, try again later.'}),500 + + asset : Asset = Asset.query.filter_by(id=id).first() + if asset is None: + try: + asset = migrateAsset( + assetid = id, + forceMigration = False, + throwException = True, + allowBackgroundMigration = True + ) + except AssetDeliveryAPIFailedException: + return jsonify({'error': 'Failed to migrate asset from roblox'}),500 + except RatelimittedReachedException: + return jsonify({'error': 'Server is handling too many asset migrations at this time, try again later.'}),500 + except AssetNotAllowedException: + return jsonify({'error': 'This asset is not allowed to be migrated at this time'}),403 + except NoPermissionException: + return jsonify({'error': 'This asset is either a private or archived asset on Roblox and cannot be migrated'}),400 + except EconomyAPIFailedException: + return jsonify({'error': 'Failed to get information about this asset from Roblox'}),500 + except AssetOnCooldownException: + return jsonify({'error': 'This asset is either a private or archived asset on Roblox and cannot be migrated'}),400 + except AssetNotFoundException: + return jsonify({'error': 'This asset does not exist on Roblox'}),400 + except: + return jsonify({'error': 'Failed to migrate asset from roblox'}),500 + redislock.release_lock(MigrateAssetLockName, MigrateLock) + if asset is None: + return jsonify({'error':'Something went wrong!'}),500 + redislock.release_lock(MigrateAssetLockName, MigrateLock) + CacheNotAllowed = False + if asset.asset_type == AssetType.Place: + CacheNotAllowed = True + if isScriptInsert or isClientInsert: + return jsonify({'error':'You do not have permission to access this asset'}),403 + IPADD = request.headers.get("Cf-Connecting-Ip", type=str, default="") + assetVersion : AssetVersion = AssetVersion.query.filter_by(asset_id=asset.id).order_by(AssetVersion.version.desc()).first() + authToken = request.args.get('access', type=str, default=None) or request.cookies.get('Temp-Place-Access-Key', default="", type=str) + isValidToken = VerifyTempAuthToken(authToken, asset.id, get_remote_address()) or GameServer.query.filter_by(serverIP=get_remote_address(), accessKey=authToken).first() is not None + if not isValidToken: + AccessKey = request.headers.get("AccessKey", type=str, default="") + if AccessKey == "": + AccessKey = request.headers.get('Accesskey', default="", type=str) + if IPADD == "176.9.4.254": + Response = make_response(redirect(f"{config.CDN_URL}/{assetVersion.content_hash}")) + if CacheNotAllowed: + Response.headers['Cache-Control'] = 'no-store' + else: + Response.headers['Cache-Control'] = 'public, max-age=3600' + Response.status_code = 301 + return Response + + if AccessKey == "": + return jsonify({'error':'You do not have permission to access this asset'}),403 + if request.headers.get("User-Agent") != "Roblox/WinInet": + return jsonify({'error':'You do not have permission to access this asset'}),403 + ServerAddress = get_remote_address() + """ if ServerAddress != "2a0e:97c0:3ea:ce::1": # gameserver ipv6 + GameServerObj : GameServer = GameServer.query.filter_by(serverIP=ServerAddress).first() + if GameServerObj is None: + return jsonify({'error':'You do not have permission to access this asset'}),403 + if GameServerObj.accessKey != AccessKey: + return jsonify({'error':'You do not have permission to access this asset'}),403""" + + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + + + # Return the place + + if asset.moderation_status != 0: + CacheNotAllowed = True + # Request must be coming from a RCCService Server and not from client + # This allows for renders to still work but not for unmoderated content to be downloaded from the client + if request.headers.get("Requester") != "Server": + return jsonify({'error':'Invalid request'}),400 + + assetVersion : AssetVersion = AssetVersion.query.filter_by(asset_id=asset.id).order_by(AssetVersion.version.desc()).first() + if assetVersion is None: + return jsonify({'error':'Invalid request'}),400 + + Response = make_response(redirect(f"{config.CDN_URL}/{assetVersion.content_hash}")) + if CacheNotAllowed: + Response.headers['Cache-Control'] = 'no-store' + else: + Response.headers['Cache-Control'] = 'public, max-age=3600' + Response.status_code = 301 + return Response + +@AssetRoute.route("/v1/assets/batch/", methods=["POST"]) +@AssetRoute.route("/asset/batch/", methods=["POST"]) +@csrf.exempt +def AssetBatchRequest(): + RequestData = request.json + + if type(RequestData) is not list: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + if len(RequestData) > 100: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + AssetReturnInfo : list[dict] = [] + for RequestObj in RequestData: + if "assetId" not in RequestObj or "assetType" not in RequestObj or "requestId" not in RequestObj: + continue + AssetId = RequestObj["assetId"] + ExpectedAssetType = str(RequestObj["assetType"]) + + AssetObj : Asset = Asset.query.filter_by( id = AssetId ).first() + if AssetObj is None: + continue + if AssetObj.asset_type.name.lower() != ExpectedAssetType.lower(): + continue + if AssetObj.asset_type == AssetType.Place or AssetObj.moderation_status != 0: + continue + LatestAssetVersion : AssetVersion = assetversion.GetLatestAssetVersion( AssetObj ) + if LatestAssetVersion is None: + continue + AssetReturnInfo.append({ + "Location": f"{config.CDN_URL}/{LatestAssetVersion.content_hash}", + "RequestId": RequestObj["requestId"] + }) + + return jsonify(AssetReturnInfo), 200 + +@AssetRoute.route("/Asset/legacy/", methods=["GET"]) +def LegacyAssetSupport(): + AssetId = request.args.get('id', type=int, default=None) + if AssetId is None: + return jsonify({'error':'Invalid request'}),400 + AssetObj : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObj is None: + return jsonify({'error':'Invalid request'}),400 + + if AssetObj.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Head, AssetType.Hat, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory, AssetType.Gear, AssetType.Face]: + return redirect(f"/asset/?id={str(AssetId)}", code=301) + + if AssetObj.moderation_status != 0: + return jsonify({'error':'Invalid request'}),400 + + LatestAssetVersion : AssetVersion = assetversion.GetLatestAssetVersion( AssetObj ) + if LatestAssetVersion is None: + return jsonify({'error':'Invalid request'}),400 + + if redis_controller.exists(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}"): + ConvertedContentHash = redis_controller.get(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}") + return redirect(f"{config.CDN_URL}/{ConvertedContentHash}") + + AssetVersonContent : bytes = s3helper.GetFileFromS3( + LatestAssetVersion.content_hash, + skipDownloadCache = False + ) + + try: + AssetVersonContent.decode("utf-8") + except: + # Asset is not supported and could possibly crash 2014 + redis_controller.set(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}", LatestAssetVersion.content_hash, ex=60 * 60 * 24 * 3) + return redirect(f"{config.CDN_URL}/{LatestAssetVersion.content_hash}") + + try: + AssetVersonContent = AssetVersonContent.replace("roblox.com".encode("utf-8"), config.BaseDomain.encode("utf-8")) + except: + pass + + if AssetObj.asset_type in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants]: # Fix a mistake I made awhile ago with Shirts, TShirts and Pants where the asset content URL was https://nexium.fit/asset/?id= instead of http://www.nexium.fit/asset/?id= + AssetVersonContent = AssetVersonContent.replace("https://nexium.fit/asset/?id=".encode("utf-8"), "http://www.nexium.fit/asset/?id=".encode("utf-8")) + + if AssetObj.asset_type in [AssetType.Hat, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory]: + AssetVersonContent = AssetVersonContent.replace("Accessory".encode("utf-8"), "Hat".encode("utf-8")) # Shitty hack but I can't think of a better way to do it + + NewAssetHash = hashlib.sha512(AssetVersonContent).hexdigest() + s3helper.UploadBytesToS3(AssetVersonContent, NewAssetHash) + + redis_controller.set(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}", NewAssetHash, ex=60 * 60 * 24 * 14) + return redirect(f"{config.CDN_URL}/{NewAssetHash}") diff --git a/app/routes/authentication.py b/app/routes/authentication.py new file mode 100644 index 0000000..4e2a688 --- /dev/null +++ b/app/routes/authentication.py @@ -0,0 +1,216 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from config import Config +from app.models.user import User +from app.extensions import redis_controller, get_remote_address, csrf, limiter +from app.util import auth, websiteFeatures +import string +from datetime import datetime, timedelta +import secrets +import logging +from sqlalchemy import func +from app.pages.login.login import CreateLoginRecord + +config = Config() +AuthenticationRoute = Blueprint('authentication', __name__, url_prefix='/') + +@AuthenticationRoute.route('/Login/Negotiate.ashx', methods=['GET']) +def loginNegotiate(): + AuthenticationTicket = request.args.get( + key = 'suggest', + default = None, + type = str + ) + if AuthenticationTicket is None: + return 'Invalid request',400 + + authticketInfo = redis_controller.get(f"authticket:{AuthenticationTicket}") + if authticketInfo is None: + return 'Invalid request',400 + redis_controller.delete(f"authticket:{AuthenticationTicket}") + + userId = int(authticketInfo) + newAuthToken = auth.CreateToken(userId, get_remote_address()) + resp = make_response(newAuthToken, 200) + resp.headers["Content-Type"] = "text/plain" + resp.set_cookie(".ROBLOSECURITY", newAuthToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + + return resp + +@AuthenticationRoute.route('/v2/twostepverification/verify', methods=['POST']) +@limiter.limit("12/minute") +@csrf.exempt +def verifyTwoStep(): + if not request.is_json: + return jsonify( { "errors": [ { "code": 1, "message": "Invalid request." } ] } ), 400 + + try: + assert "username" in request.json, "Missing parameter: username" + assert "code" in request.json, "Missing parameter: code" + assert "ticket" in request.json, "Missing parameter: ticket" + assert isinstance(request.json["username"], str), "Invalid parameter type: username, expected string" + assert isinstance(request.json["code"], int), "Invalid parameter type: code, expected integer" + assert isinstance(request.json["ticket"], str), "Invalid parameter type: ticket, expected string" + except Exception as e: + return jsonify( { "errors": [ { "code": 1, "message": f"Validation failed, {str(e)}" } ] } ), 400 + + GivenUsername : str = request.json["username"] + GivenTwoStepCode : int = request.json["code"] + GivenTicket : str = request.json["ticket"] + + if redis_controller.exists(f"twofactorticket:{GivenTicket}") == 0: + return jsonify( { "errors": [ { "code": 5, "message": "Invalid two step verification ticket." } ] } ), 400 + TwoFactorSessionTicketInfo = redis_controller.get(f"twofactorticket:{GivenTicket}") + if TwoFactorSessionTicketInfo is None: + return jsonify( { "errors": [ { "code": 5, "message": "Invalid two step verification ticket." } ] } ), 400 + redis_controller.delete(f"twofactorticket:{GivenTicket}") + + UserId = int(TwoFactorSessionTicketInfo) + + Validated2FA = auth.Validate2FACode(UserId, GivenTwoStepCode) + if not Validated2FA: + return jsonify( { "errors": [ { "code": 6, "message": "The code is invalid." } ] } ), 400 + + if Validated2FA: + Response = make_response(jsonify({})) + sessionToken = auth.CreateToken(userid=UserId, ip=get_remote_address()) + Response.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + return Response + + +@AuthenticationRoute.route('/Login/NewAuthTicket', methods=['POST']) +@csrf.exempt +@auth.authenticated_required_api +def loginNewAuthTicket(): + userId = auth.GetCurrentUser().id + + authticket = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(256)) + redis_controller.set(f"authticket:{authticket}", userId, 60*10) + return authticket,200 + +@AuthenticationRoute.route('/game/GetCurrentUser.ashx', methods=['GET']) +def gameGetCurrentUser(): + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser is None: + return "Bad Request", 200 + return str(AuthenticatedUser.id), 200 + +@AuthenticationRoute.route('/login/RequestAuth.ashx', methods=['GET']) +@limiter.limit("6/minute") +def loginRequestAuth(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return "User is not authorized.", 401 + NewAuthTicket = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(256)) + redis_controller.set(f"authticket:{NewAuthTicket}", AuthenticatedUser.id, 60*10) + + resp = make_response( + f"{config.BaseURL}/Login/Negotiate.ashx?suggest={NewAuthTicket}", + 200 + ) + resp.headers["Content-Type"] = "text/plain" + return resp + +@AuthenticationRoute.route('/game/logout.aspx') +@auth.authenticated_required +def gameLogout(): + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + resp = make_response(redirect("/login")) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + return resp + +@AuthenticationRoute.route('/v2/login', methods=['POST']) +@limiter.limit("12/minute") +@csrf.exempt +def LoginRoute(): + loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") + if not loginEnabled: + return jsonify( { "errors": [ { "code": 11, "message": "Service unavailable. Please try again." } ] } ), 503 + + if not request.is_json: + return abort(400) + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser and request.user_agent.string != "RobloxStudio/WinInet RobloxApp/0.450.0.411923 (GlobalDist; RobloxDirectDownload)": + return redirect("/home") + + if AuthenticatedUser and request.user_agent.string == "RobloxStudio/WinInet RobloxApp/0.450.0.411923 (GlobalDist; RobloxDirectDownload)": + Response = make_response(jsonify({ + "username": AuthenticatedUser.username, + "isUnder13": False, + "userId": AuthenticatedUser.id, + "countryCode": "US", + "membershipType": 4, + "displayName": AuthenticatedUser.username + })) + return Response + + if ( "username" not in request.json and "cvalue" not in request.json ) or "password" not in request.json: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + if "username" in request.json: + Username = str(request.json["username"]) + else: + Username = str(request.json["cvalue"]) + Password = str(request.json["password"]) + + UserObject : User = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if not UserObject: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + if UserObject.accountstatus != 1: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + ActualPassword = Password + if UserObject.TOTPEnabled: + if request.user_agent.string == "RobloxStudio/WinInet RobloxApp/0.450.0.411923 (GlobalDist; RobloxDirectDownload)": + if not auth.VerifyPassword(UserObject, ActualPassword): + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + twofactorticket = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(60)) + redis_controller.set(f"twofactorticket:{twofactorticket}", UserObject.id, 60*10) + return jsonify({"user": { + "id": UserObject.id, + "name": UserObject.username, + "displayName": UserObject.username + }, "twoStepVerificationData": { + "mediaType": "Email", + "ticket": twofactorticket + }, "identityVerificationLoginTicket": twofactorticket }) + if ";" not in Password: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + ActualPassword = Password.split(";")[0] + TOTPCode = Password.split(";")[1] + + if not auth.Validate2FACode(UserObject.id, TOTPCode): + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + if not auth.VerifyPassword(UserObject, ActualPassword): + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + sessionToken = auth.CreateToken(userid=UserObject.id, ip=get_remote_address()) + Response = make_response(jsonify({ + "username": UserObject.username, + "isUnder13": False, + "userId": UserObject.id, + "countryCode": "US", + "membershipType": 4, + "displayName": UserObject.username + })) + Response.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + CreateLoginRecord( UserObject.id ) + #logging.info(f"/v2/login - {UserObject.username} ({UserObject.id}) [{request.user_agent}] logged in successfully") + + return Response + +@AuthenticationRoute.route("/v1/logout", methods=["POST"]) +@AuthenticationRoute.route("/v2/logout", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def LogoutRoute(): + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + resp = make_response(jsonify({})) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + return resp + +@AuthenticationRoute.route("/v2/passwords/current-status", methods=["GET"]) +@auth.authenticated_required_api +def PasswordsCurrentStatusRoute(): + return jsonify({"valid": True}) diff --git a/app/routes/avatarapi.py b/app/routes/avatarapi.py new file mode 100644 index 0000000..a9d5121 --- /dev/null +++ b/app/routes/avatarapi.py @@ -0,0 +1,317 @@ +# avatar.roblox.com +import logging +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth +from app.extensions import db, csrf, limiter, user_limiter +from flask_wtf.csrf import CSRFError, generate_csrf + +from app.routes.thumbnailer import TakeUserThumbnail + +from app.models.user_avatar import UserAvatar +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user import User +from app.models.asset import Asset +from app.models.userassets import UserAsset + +from app.enums.AssetType import AssetType + +AvatarAPIRoute = Blueprint('avatarapi', __name__, url_prefix='/') + +csrf.exempt(AvatarAPIRoute) +@AvatarAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@AvatarAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@AvatarAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@AvatarAPIRoute.route("/v1/avatar", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_authenticated_user_avatar(): + AuthenticatedUser : User = auth.GetCurrentUser() + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarAssetObject : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id = AuthenticatedUser.id).all() + WearingAssets : list[dict] = [] + + for AvatarAsset in UserAvatarAssetObject: + AssetObject : Asset = AvatarAsset.asset + WearingAssets.append({ + "id": AvatarAsset.asset_id, + "name": AssetObject.name, + "assetType": { + "id": AssetObject.asset_type.value, + "name": AssetObject.asset_type.name + }, + "currentVersionId": AssetObject.id + }) + + return jsonify({ + "scales": { + "height": UserAvatarObject.height_scale, + "width": UserAvatarObject.width_scale, + "head": UserAvatarObject.head_scale, + "depth": 1, + "proportion": UserAvatarObject.proportion_scale, + "bodyType": UserAvatarObject.body_type_scale + }, + "playerAvatarType": "R6" if not UserAvatarObject.r15 else "R15", + "bodyColors": { + "headColorId": UserAvatarObject.head_color_id, + "torsoColorId": UserAvatarObject.torso_color_id, + "rightArmColorId": UserAvatarObject.right_arm_color_id, + "leftArmColorId": UserAvatarObject.left_arm_color_id, + "rightLegColorId": UserAvatarObject.right_leg_color_id, + "leftLegColorId": UserAvatarObject.left_leg_color_id + }, + "assets": WearingAssets, + "defaultShirtApplied": False, + "defaultPantsApplied": False, + "emotes": [] + }) + +@AvatarAPIRoute.route("/v1/avatar/metadata", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_avatar_editor_metadata(): + return jsonify({ + "enableDefaultClothingMessage": False, + "isAvatarScaleEmbeddedInTab": True, + "isBodyTypeScaleOutOfTab": True, + "scaleHeightIncrement": 0.05, + "scaleWidthIncrement": 0.05, + "scaleHeadIncrement": 0.05, + "scaleProportionIncrement": 0.05, + "scaleBodyTypeIncrement": 0.05, + "supportProportionAndBodyType": True, + "showDefaultClothingMessageOnPageLoad": False, + "areThreeDeeThumbsEnabled": False, + "isAvatarWearingApiCallsLockingOnFrontendEnabled": True, + "isOutfitHandlingOnFrontendEnabled": True, + "isJustinUiChangesEnabled": True, + "isCategoryReorgEnabled": True, + "LCEnabledInEditorAndCatalog": True, + "isLCCompletelyEnabled": True + }) + +@AvatarAPIRoute.route("/v1/avatar-rules", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_avatar_editor_rules(): + return jsonify({"playerAvatarTypes":["R6","R15"],"scales":{"height":{"min":0.9,"max":1.05,"increment":0.01},"width":{"min":0.7,"max":1,"increment":0.01},"head":{"min":0.95,"max":1,"increment":0.01},"proportion":{"min":0,"max":1,"increment":0.01},"bodyType":{"min":0,"max":1,"increment":0.01}},"wearableAssetTypes":[{"maxNumber":1,"id":18,"name":"Face"},{"maxNumber":1,"id":19,"name":"Gear"},{"maxNumber":1,"id":17,"name":"Head"},{"maxNumber":1,"id":29,"name":"Left Arm"},{"maxNumber":1,"id":30,"name":"Left Leg"},{"maxNumber":1,"id":12,"name":"Pants"},{"maxNumber":1,"id":28,"name":"Right Arm"},{"maxNumber":1,"id":31,"name":"Right Leg"},{"maxNumber":1,"id":11,"name":"Shirt"},{"maxNumber":1,"id":2,"name":"T-Shirt"},{"maxNumber":1,"id":27,"name":"Torso"},{"maxNumber":1,"id":48,"name":"Climb Animation"},{"maxNumber":1,"id":49,"name":"Death Animation"},{"maxNumber":1,"id":50,"name":"Fall Animation"},{"maxNumber":1,"id":51,"name":"Idle Animation"},{"maxNumber":1,"id":52,"name":"Jump Animation"},{"maxNumber":1,"id":53,"name":"Run Animation"},{"maxNumber":1,"id":54,"name":"Swim Animation"},{"maxNumber":1,"id":55,"name":"Walk Animation"},{"maxNumber":1,"id":56,"name":"Pose Animation"},{"maxNumber":0,"id":61,"name":"Emote Animation"},{"maxNumber":3,"id":8,"name":"Hat"},{"maxNumber":5,"id":41,"name":"Hair Accessory"},{"maxNumber":5,"id":42,"name":"Face Accessory"},{"maxNumber":1,"id":43,"name":"Neck Accessory"},{"maxNumber":1,"id":44,"name":"Shoulder Accessory"},{"maxNumber":1,"id":45,"name":"Front Accessory"},{"maxNumber":1,"id":46,"name":"Back Accessory"},{"maxNumber":1,"id":47,"name":"Waist Accessory"},{"maxNumber":1,"id":72,"name":"Dress Skirt Accessory"},{"maxNumber":1,"id":67,"name":"Jacket Accessory"},{"maxNumber":1,"id":70,"name":"Left Shoe Accessory"},{"maxNumber":1,"id":71,"name":"Right Shoe Accessory"},{"maxNumber":1,"id":66,"name":"Pants Accessory"},{"maxNumber":1,"id":65,"name":"Shirt Accessory"},{"maxNumber":1,"id":69,"name":"Shorts Accessory"},{"maxNumber":1,"id":68,"name":"Sweater Accessory"},{"maxNumber":1,"id":64,"name":"T-Shirt Accessory"},{"maxNumber":1,"id":76,"name":"Eyebrow Accessory"},{"maxNumber":1,"id":77,"name":"Eyelash Accessory"},{"maxNumber":1,"id":78,"name":"Mood Animation"},{"maxNumber":1,"id":79,"name":"Dynamic Head"}],"bodyColorsPalette":[{"brickColorId":361,"hexColor":"#564236","name":"Dirt brown"},{"brickColorId":192,"hexColor":"#694028","name":"Reddish brown"},{"brickColorId":217,"hexColor":"#7C5C46","name":"Brown"},{"brickColorId":153,"hexColor":"#957977","name":"Sand red"},{"brickColorId":359,"hexColor":"#AF9483","name":"Linen"},{"brickColorId":352,"hexColor":"#C7AC78","name":"Burlap"},{"brickColorId":5,"hexColor":"#D7C59A","name":"Brick yellow"},{"brickColorId":101,"hexColor":"#DA867A","name":"Medium red"},{"brickColorId":1007,"hexColor":"#A34B4B","name":"Dusty Rose"},{"brickColorId":1014,"hexColor":"#AA5500","name":"CGA brown"},{"brickColorId":38,"hexColor":"#A05F35","name":"Dark orange"},{"brickColorId":18,"hexColor":"#CC8E69","name":"Nougat"},{"brickColorId":125,"hexColor":"#EAB892","name":"Light orange"},{"brickColorId":1030,"hexColor":"#FFCC99","name":"Pastel brown"},{"brickColorId":133,"hexColor":"#D5733D","name":"Neon orange"},{"brickColorId":106,"hexColor":"#DA8541","name":"Bright orange"},{"brickColorId":105,"hexColor":"#E29B40","name":"Br. yellowish orange"},{"brickColorId":1017,"hexColor":"#FFAF00","name":"Deep orange"},{"brickColorId":24,"hexColor":"#F5CD30","name":"Bright yellow"},{"brickColorId":334,"hexColor":"#F8D96D","name":"Daisy orange"},{"brickColorId":226,"hexColor":"#FDEA8D","name":"Cool yellow"},{"brickColorId":141,"hexColor":"#27462D","name":"Earth green"},{"brickColorId":1021,"hexColor":"#3A7D15","name":"Camo"},{"brickColorId":28,"hexColor":"#287F47","name":"Dark green"},{"brickColorId":37,"hexColor":"#4B974B","name":"Bright green"},{"brickColorId":310,"hexColor":"#5B9A4C","name":"Shamrock"},{"brickColorId":317,"hexColor":"#7C9C6B","name":"Moss"},{"brickColorId":119,"hexColor":"#A4BD47","name":"Br. yellowish green"},{"brickColorId":1011,"hexColor":"#002060","name":"Navy blue"},{"brickColorId":1012,"hexColor":"#2154B9","name":"Deep blue"},{"brickColorId":1010,"hexColor":"#0000FF","name":"Really blue"},{"brickColorId":23,"hexColor":"#0D69AC","name":"Bright blue"},{"brickColorId":305,"hexColor":"#527CAE","name":"Steel blue"},{"brickColorId":102,"hexColor":"#6E99CA","name":"Medium blue"},{"brickColorId":45,"hexColor":"#B4D2E4","name":"Light blue"},{"brickColorId":107,"hexColor":"#008F9C","name":"Bright bluish green"},{"brickColorId":1018,"hexColor":"#12EED4","name":"Teal"},{"brickColorId":1027,"hexColor":"#9FF3E9","name":"Pastel blue-green"},{"brickColorId":1019,"hexColor":"#00FFFF","name":"Toothpaste"},{"brickColorId":1013,"hexColor":"#04AFEC","name":"Cyan"},{"brickColorId":11,"hexColor":"#80BBDC","name":"Pastel Blue"},{"brickColorId":1024,"hexColor":"#AFDDFF","name":"Pastel light blue"},{"brickColorId":104,"hexColor":"#6B327C","name":"Bright violet"},{"brickColorId":1023,"hexColor":"#8C5B9F","name":"Lavender"},{"brickColorId":321,"hexColor":"#A75E9B","name":"Lilac"},{"brickColorId":1015,"hexColor":"#AA00AA","name":"Magenta"},{"brickColorId":1031,"hexColor":"#6225D1","name":"Royal purple"},{"brickColorId":1006,"hexColor":"#B480FF","name":"Alder"},{"brickColorId":1026,"hexColor":"#B1A7FF","name":"Pastel violet"},{"brickColorId":21,"hexColor":"#C4281C","name":"Bright red"},{"brickColorId":1004,"hexColor":"#FF0000","name":"Really red"},{"brickColorId":1032,"hexColor":"#FF00BF","name":"Hot pink"},{"brickColorId":1016,"hexColor":"#FF66CC","name":"Pink"},{"brickColorId":330,"hexColor":"#FF98DC","name":"Carnation pink"},{"brickColorId":9,"hexColor":"#E8BAC8","name":"Light reddish violet"},{"brickColorId":1025,"hexColor":"#FFC9C9","name":"Pastel orange"},{"brickColorId":364,"hexColor":"#5A4C42","name":"Dark taupe"},{"brickColorId":351,"hexColor":"#BC9B5D","name":"Cork"},{"brickColorId":1008,"hexColor":"#C1BE42","name":"Olive"},{"brickColorId":29,"hexColor":"#A1C48C","name":"Medium green"},{"brickColorId":1022,"hexColor":"#7F8E64","name":"Grime"},{"brickColorId":151,"hexColor":"#789082","name":"Sand green"},{"brickColorId":135,"hexColor":"#74869D","name":"Sand blue"},{"brickColorId":1020,"hexColor":"#00FF00","name":"Lime green"},{"brickColorId":1028,"hexColor":"#CCFFCC","name":"Pastel green"},{"brickColorId":1009,"hexColor":"#FFFF00","name":"New Yeller"},{"brickColorId":1029,"hexColor":"#FFFFCC","name":"Pastel yellow"},{"brickColorId":1003,"hexColor":"#111111","name":"Really black"},{"brickColorId":26,"hexColor":"#1B2A35","name":"Black"},{"brickColorId":199,"hexColor":"#635F62","name":"Dark stone grey"},{"brickColorId":194,"hexColor":"#A3A2A5","name":"Medium stone grey"},{"brickColorId":1002,"hexColor":"#CDCDCD","name":"Mid gray"},{"brickColorId":208,"hexColor":"#E5E4DF","name":"Light stone grey"},{"brickColorId":1,"hexColor":"#F2F3F3","name":"White"},{"brickColorId":1001,"hexColor":"#F8F8F8","name":"Institutional white"}],"basicBodyColorsPalette":[{"brickColorId":364,"hexColor":"#5A4C42","name":"Dark taupe"},{"brickColorId":217,"hexColor":"#7C5C46","name":"Brown"},{"brickColorId":359,"hexColor":"#AF9483","name":"Linen"},{"brickColorId":18,"hexColor":"#CC8E69","name":"Nougat"},{"brickColorId":125,"hexColor":"#EAB892","name":"Light orange"},{"brickColorId":361,"hexColor":"#564236","name":"Dirt brown"},{"brickColorId":192,"hexColor":"#694028","name":"Reddish brown"},{"brickColorId":351,"hexColor":"#BC9B5D","name":"Cork"},{"brickColorId":352,"hexColor":"#C7AC78","name":"Burlap"},{"brickColorId":5,"hexColor":"#D7C59A","name":"Brick yellow"},{"brickColorId":153,"hexColor":"#957977","name":"Sand red"},{"brickColorId":1007,"hexColor":"#A34B4B","name":"Dusty Rose"},{"brickColorId":101,"hexColor":"#DA867A","name":"Medium red"},{"brickColorId":1025,"hexColor":"#FFC9C9","name":"Pastel orange"},{"brickColorId":330,"hexColor":"#FF98DC","name":"Carnation pink"},{"brickColorId":135,"hexColor":"#74869D","name":"Sand blue"},{"brickColorId":305,"hexColor":"#527CAE","name":"Steel blue"},{"brickColorId":11,"hexColor":"#80BBDC","name":"Pastel Blue"},{"brickColorId":1026,"hexColor":"#B1A7FF","name":"Pastel violet"},{"brickColorId":321,"hexColor":"#A75E9B","name":"Lilac"},{"brickColorId":107,"hexColor":"#008F9C","name":"Bright bluish green"},{"brickColorId":310,"hexColor":"#5B9A4C","name":"Shamrock"},{"brickColorId":317,"hexColor":"#7C9C6B","name":"Moss"},{"brickColorId":29,"hexColor":"#A1C48C","name":"Medium green"},{"brickColorId":105,"hexColor":"#E29B40","name":"Br. yellowish orange"},{"brickColorId":24,"hexColor":"#F5CD30","name":"Bright yellow"},{"brickColorId":334,"hexColor":"#F8D96D","name":"Daisy orange"},{"brickColorId":199,"hexColor":"#635F62","name":"Dark stone grey"},{"brickColorId":1002,"hexColor":"#CDCDCD","name":"Mid gray"},{"brickColorId":1001,"hexColor":"#F8F8F8","name":"Institutional white"}],"minimumDeltaEBodyColorDifference":11.4,"proportionsAndBodyTypeEnabledForUser":True,"defaultClothingAssetLists":{"defaultShirtAssetIds":[855776103,855760101,855766176,855777286,855768342,855779323,855773575,855778084],"defaultPantAssetIds":[855783877,855780360,855781078,855782781,855781508,855785499,855782253,855784936]},"bundlesEnabledForUser":False,"emotesEnabledForUser":False}) + +@AvatarAPIRoute.route("/v1/avatar/set-player-avatar-type", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_type(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "playerAvatarType" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if request.json["playerAvatarType"] not in ["R6", "R15"]: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarObject.r15 = True if request.json["playerAvatarType"] == "R15" else False + db.session.commit() + + TakeUserThumbnail(AuthenticatedUser.id) + + return jsonify({ + "success": True + }) + +@AvatarAPIRoute.route("/v1/avatar/set-scales", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_scale(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "height" not in request.json or "width" not in request.json or "head" not in request.json or "proportion" not in request.json or "bodyType" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + AvatarScales = {} + + try: + AvatarScales["height"] = float(request.json["height"]) + AvatarScales["width"] = float(request.json["width"]) + AvatarScales["head"] = float(request.json["head"]) + AvatarScales["proportion"] = float(request.json["proportion"]) + AvatarScales["bodyType"] = float(request.json["bodyType"]) + except ValueError: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if AvatarScales["height"] < 0.9 or AvatarScales["height"] > 1.05 or AvatarScales["width"] < 0.7 or AvatarScales["width"] > 1 or AvatarScales["head"] < 0.95 or AvatarScales["head"] > 1 or AvatarScales["proportion"] < 0 or AvatarScales["proportion"] > 1 or AvatarScales["bodyType"] < 0 or AvatarScales["bodyType"] > 1: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarObject.height_scale = AvatarScales["height"] + UserAvatarObject.width_scale = AvatarScales["width"] + UserAvatarObject.head_scale = AvatarScales["head"] + UserAvatarObject.proportion_scale = AvatarScales["proportion"] + UserAvatarObject.body_type_scale = AvatarScales["bodyType"] + db.session.commit() + + TakeUserThumbnail(AuthenticatedUser.id) + return jsonify({ + "success": True + }) + +AllowedBodyColors = [361, 192, 217, 153, 359, 352, 5, 101, 1007, 1014, 38, 18, 125, 1030, 133, 106, 105, 1017, 24, 334, 226, 141, 1021, 28, 37, 310, 317, 119, 1011, 1012, 1010, 23, 305, 102, 45, 107, 1018, 1027, 1019, 1013, 11, 1024, 104, 1023, 321, 1015, 1031, 1006, 1026, 21, 1004, 1032, 1016, 330, 9, 1025, 364, 351, 1008, 29, 1022, 151, 135, 1020, 1028, 1009, 1029, 1003, 26, 199, 194, 1002, 208, 1, 1001] + +@AvatarAPIRoute.route("/v1/avatar/set-body-colors", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_body_colors(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "headColorId" not in request.json or "torsoColorId" not in request.json or "rightArmColorId" not in request.json or "leftArmColorId" not in request.json or "rightLegColorId" not in request.json or "leftLegColorId" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if not isinstance(request.json["headColorId"], int) or not isinstance(request.json["torsoColorId"], int) or not isinstance(request.json["rightArmColorId"], int) or not isinstance(request.json["leftArmColorId"], int) or not isinstance(request.json["rightLegColorId"], int) or not isinstance(request.json["leftLegColorId"], int): + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if request.json["headColorId"] not in AllowedBodyColors or request.json["torsoColorId"] not in AllowedBodyColors or request.json["rightArmColorId"] not in AllowedBodyColors or request.json["leftArmColorId"] not in AllowedBodyColors or request.json["rightLegColorId"] not in AllowedBodyColors or request.json["leftLegColorId"] not in AllowedBodyColors: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarObject.head_color_id = request.json["headColorId"] + UserAvatarObject.torso_color_id = request.json["torsoColorId"] + UserAvatarObject.right_arm_color_id = request.json["rightArmColorId"] + UserAvatarObject.left_arm_color_id = request.json["leftArmColorId"] + UserAvatarObject.right_leg_color_id = request.json["rightLegColorId"] + UserAvatarObject.left_leg_color_id = request.json["leftLegColorId"] + + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id) + + return jsonify({ + "success": True + }) + +@AvatarAPIRoute.route("/v1/avatar/set-wearing-assets", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_wearing_assets(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "assetIds" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if not isinstance(request.json["assetIds"], list): + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + InvalidAssetIds : list[int] = [] + AssetTypeCounter : dict[int, int] = {} + AllowedAssetIds : list[int] = [] + + for AssetId in request.json["assetIds"]: + try: + AssetId = int(AssetId) + except ValueError: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if AssetId in InvalidAssetIds or AssetId in AllowedAssetIds: + continue + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid = AuthenticatedUser.id, assetid = AssetId).first() + + if UserAssetObj is None: + InvalidAssetIds.append(AssetId) + continue + + AssetObj : Asset = UserAssetObj.asset + + if AssetObj.moderation_status != 0: + InvalidAssetIds.append(AssetId) + continue + if AssetObj.asset_type.value not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + return jsonify({"errors": [{"code": 3, "message": "Invalid AssetId"}]}), 400 + + if AssetObj.asset_type.value not in AssetTypeCounter: + AssetTypeCounter[AssetObj.asset_type.value] = 0 + + if AssetTypeCounter[AssetObj.asset_type.value] >= 1 and AssetObj.asset_type != AssetType.Hat: + return jsonify({"errors": [{"code": 3, "message": "Invalid AssetId"}]}), 400 + if AssetTypeCounter[AssetObj.asset_type.value] >= 3 and AssetObj.asset_type == AssetType.Hat: + return jsonify({"errors": [{"code": 3, "message": "Invalid AssetId"}]}), 400 + + AssetTypeCounter[AssetObj.asset_type.value] += 1 + AllowedAssetIds.append(AssetId) + + UserAvatarAsset.query.filter_by(user_id = AuthenticatedUser.id).delete() + db.session.commit() + + for AssetId in AllowedAssetIds: + NewAvatarAssetObj : UserAvatarAsset = UserAvatarAsset( user_id = AuthenticatedUser.id, asset_id = AssetId ) + db.session.add(NewAvatarAssetObj) + + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id) + + return jsonify({ + "invalidAssetIds": InvalidAssetIds, + "success": True + }) + diff --git a/app/routes/badgesapi.py b/app/routes/badgesapi.py new file mode 100644 index 0000000..3a93bba --- /dev/null +++ b/app/routes/badgesapi.py @@ -0,0 +1,343 @@ +#badges.roblox.com +import logging +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response, after_this_request, Response +from app.util import auth +from app.extensions import db, csrf, limiter, redis_controller +from flask_wtf.csrf import CSRFError, generate_csrf + +from app.models.user import User +from app.models.groups import Group +from app.models.place import Place +from app.models.userassets import UserAsset +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.asset import Asset +from app.models.game_session_log import GameSessionLog +from app.models.placeserver_players import PlaceServerPlayer +from app.models.placeservers import PlaceServer +from app.models.universe import Universe + +from datetime import datetime, timedelta +from sqlalchemy import and_ + +BadgesAPIRoute = Blueprint( 'BadgesAPIRoute', __name__, url_prefix='/') + +def CalculateBadgeRarity( badge_id : int, bypass_cache : bool = False ) -> float: + """ + Badges have a rarity value that is influenced by the ratio of the number of users in the past 24 hours + to achieve the badge to the total number of players that have joined the experience within the same timespan; + for example, if 99,900 of 100,000 daily visitors receive a badge, its difficulty will likely be Freebie (99.9%), + while if only 100 players get a badge in the same experience, its difficulty will appear as Impossible (0.1%). + + https://roblox.fandom.com/wiki/Player_badge + """ + + def _calculate_rarity() -> float: + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + return 0.0 + PlaceObj : Place = Place.query.filter_by( placeid = BadgeObj.associated_place_id ).first() + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + AwardedRecentlyCount : int = UserBadge.query.filter_by( badge_id = badge_id ).filter( UserBadge.awarded_at > datetime.utcnow() - timedelta( hours = 24 ) ).count() + TotalPlayedRecentlyCount : int = GameSessionLog.query.filter_by( place_id = UniverseObj.root_place_id ).filter( GameSessionLog.joined_at > datetime.utcnow() - timedelta( hours = 24 ) ).distinct( GameSessionLog.user_id ).count() + + if TotalPlayedRecentlyCount == 0 or AwardedRecentlyCount == 0: + return 0.0 + + return round( AwardedRecentlyCount / TotalPlayedRecentlyCount, 3 ) + + CacheRedisKey = f"badge_rarity_{badge_id}" + + if not bypass_cache: + CachedValue = redis_controller.get( CacheRedisKey ) + if CachedValue is not None: + return float( CachedValue ) + + RarityValue = _calculate_rarity() + redis_controller.set( CacheRedisKey, str(RarityValue), ex = 60 ) + + return RarityValue + +def GetBadgeAwardedPastDay( badge_id ) -> int: + timenow = datetime.utcnow() + start_of_yesterday = datetime(timenow.year, timenow.month, timenow.day) - timedelta(days=1) + end_of_yesterday = datetime(timenow.year, timenow.month, timenow.day) - timedelta(seconds=1) + return UserBadge.query.filter_by( badge_id = badge_id ).filter( and_( UserBadge.awarded_at > start_of_yesterday, UserBadge.awarded_at < end_of_yesterday ) ).count() + +class UserAlreadyHasBadgeException( Exception ): + pass + +def AwardBadgeToUser( badge_id : int, user_obj : User ) -> UserBadge: + """ Award a badge to a user. """ + BadgeObj : PlaceBadge | None = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + raise ValueError("Badge does not exist.") + + if UserBadge.query.filter_by( badge_id = badge_id, user_id = user_obj.id ).first() is not None: + raise UserAlreadyHasBadgeException("User already has badge.") + + BadgeAwarded = UserBadge( badge_id = badge_id, user_id = user_obj.id ) + db.session.add( BadgeAwarded ) + + try: + if BadgeObj.asset_reward is not None: + UserAssetObj : UserAsset | None = UserAsset.query.filter_by( userid = user_obj.id, assetid = BadgeObj.asset_reward ).first() + if UserAssetObj is None: + AssetObj : Asset | None = Asset.query.filter_by( id = BadgeObj.asset_reward ).first() + if AssetObj is None: + raise ValueError(f"Asset [{BadgeObj.asset_reward}] does not exist for badge {BadgeObj.id}") + + UserAssetObj = UserAsset( userid = user_obj.id, assetid = BadgeObj.asset_reward ) + db.session.add( UserAssetObj ) + except Exception as e: + logging.error(f"Error attempting to give user [{user_obj.id}] badge award [{badge_id}]: {e}") + + db.session.commit() + + return BadgeAwarded + +def GetAssetCreator( asset_obj : Asset ) -> User | Group | None: + if asset_obj.creator_type == 0: + return User.query.filter_by( id = asset_obj.creator_id ).first() + elif asset_obj.creator_type == 1: + return Group.query.filter_by( id = asset_obj.creator_id ).first() + + return None + +csrf.exempt(BadgesAPIRoute) +@BadgesAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@BadgesAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({"errors": [{"code": 9,"message": "The flood limit has been exceeded."}]}), 429 +@BadgesAPIRoute.errorhandler(405) +def handle_method_not_allowed(e): + return jsonify({"errors": [{"code": 0,"message": "MethodNotAllowed"}]}), 405 + +@BadgesAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@BadgesAPIRoute.route('/v1/badges/', methods=['GET']) +@limiter.limit("60/minute") +def get_badge_info( badge_id : int ): + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UniverseObj : Universe = Universe.query.filter_by( id = BadgeObj.universe_id ).first() + + BadgeAwardedCount : int = UserBadge.query.filter_by( badge_id = badge_id ).count() + PastAwardedCount : int = UserBadge.query.filter_by( badge_id = badge_id ).filter( UserBadge.awarded_at > datetime.utcnow() - timedelta( hours = 24 ) ).count() + AssociatedPlaceAsset : Asset = Asset.query.filter_by( id = UniverseObj.root_place_id ).first() + BadgeWinRatePercentage : float = CalculateBadgeRarity( badge_id = badge_id ) + + return jsonify({ + "id": BadgeObj.id, + "name": BadgeObj.name, + "description": BadgeObj.description, + "displayName": BadgeObj.name, + "displayDescription": BadgeObj.description, + "enabled": BadgeObj.enabled, + "iconImageId": BadgeObj.icon_image_id, + "displayIconImageId": BadgeObj.icon_image_id, + "created": BadgeObj.created_at.isoformat(), + "updated": BadgeObj.updated_at.isoformat(), + "statistics": { + "pastAwardCount": PastAwardedCount, + "awardCount": BadgeAwardedCount, + "winRatePercentage": BadgeWinRatePercentage + }, + "awardingUniverse": { + "id": UniverseObj.id, + "name": AssociatedPlaceAsset.name, + "rootPlaceId": UniverseObj.root_place_id + } + }) + +# This endpoint should only be used by 2020 games, which should always have "AccessKey" in the request headers unlike 2014 +@BadgesAPIRoute.route('/v1/users//badges//award-badge', methods=["POST"]) +@auth.gameserver_accesskey_required +def server_award_badge_route( user_id : int, badge_id : int ): + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UserObj : User | None = User.query.filter_by( id = user_id ).first() + if UserObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is invalid or does not exist."}]}), 404 + + PlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = user_id ).first() + if PlaceServerPlayerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceServerPlayerObj.serveruuid ).first() + # This should never happen, but just in case + if PlaceServerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + ServerPlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObj.serverPlaceId ).first() + if ServerPlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + RequestPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if RequestPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + PlaceObj : Place = Place.query.filter_by( placeid = RequestPlaceId ).first() + if PlaceObj is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if PlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + + try: + AwardBadgeToUser( badge_id = badge_id, user_obj = UserObj ) + except UserAlreadyHasBadgeException: + return jsonify({"errors": [{"code": 1,"message": "User already has badge."}]}), 400 + except ValueError: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + except Exception as e: + logging.error(f"Error awarding badge to user: {e}") + return jsonify({"errors": [{"code": 1,"message": "Internal Server error."}]}), 500 + + return jsonify({ "success": True }) + +# 2018 RCC +@BadgesAPIRoute.route('/assets/award-badge', methods=["POST"]) +@auth.gameserver_accesskey_required +def server_award_badge_route_legacy(): + reqUserId = request.args.get("userId", type=int, default=None) + reqBadgeId = request.args.get("badgeId", type=int, default=None) + reqPlaceId = request.args.get("placeId", type=int, default=None) + + if reqUserId is None or reqBadgeId is None or reqPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Invalid request."}]}), 400 + + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = reqBadgeId ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UserObj : User | None = User.query.filter_by( id = reqUserId ).first() + if UserObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is invalid or does not exist."}]}), 404 + + PlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = reqUserId ).first() + if PlaceServerPlayerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceServerPlayerObj.serveruuid ).first() + # This should never happen, but just in case + if PlaceServerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + ServerPlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObj.serverPlaceId ).first() + if ServerPlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + RequestPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if RequestPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if RequestPlaceId != reqPlaceId: + return jsonify({"errors": [{"code": 1,"message": f"Roblox-Place-Id [{RequestPlaceId}] Header does not match placeId argument [{reqPlaceId}]"}]}), 400 + PlaceObj : Place = Place.query.filter_by( placeid = RequestPlaceId ).first() + if PlaceObj is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if PlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + + try: + AwardBadgeToUser( badge_id = reqBadgeId, user_obj = UserObj ) + except UserAlreadyHasBadgeException: + return jsonify({"errors": [{"code": 1,"message": "User already has badge."}]}), 400 + except ValueError: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + except Exception as e: + logging.error(f"Error awarding badge to user: {e}") + return jsonify({"errors": [{"code": 1,"message": "Internal Server error."}]}), 500 + PlaceAssetObj : Asset = Asset.query.filter_by( id = PlaceObj.placeid ).first() + PlaceCreator : User | Group = GetAssetCreator( PlaceAssetObj ) + + return f"{UserObj.username} won {PlaceCreator.username if PlaceAssetObj.creator_type == 0 else PlaceCreator.name}'s \"{BadgeObj.name}\" award!" # This message is sent to client to be shown as a badge awarded notification + +@BadgesAPIRoute.route("/Game/Badge/HasBadge.ashx", methods=["GET"]) +@auth.gameserver_authenticated_required # Only IP address is checked +def query_user_has_badge(): + reqUserId = request.args.get("UserID", type=int, default=None) + reqBadgeId = request.args.get("BadgeID", type=int, default=None) + + if reqUserId is None or reqBadgeId is None: + return "0" + + BadgeObj : PlaceBadge | None = PlaceBadge.query.filter_by( id = reqBadgeId ).first() + if BadgeObj is None: + return "0" + + UserObj : User | None = User.query.filter_by( id = reqUserId ).first() + if UserObj is None: + return "0" + + if UserBadge.query.filter_by( badge_id = reqBadgeId, user_id = reqUserId ).first() is None: + return "0" + + return "1" + +@BadgesAPIRoute.route("/Game/Badge/AwardBadge.ashx", methods=["POST"]) +@auth.gameserver_authenticated_required +def award_badge_to_user(): + reqUserId = request.args.get("UserID", type=int, default=None) + reqBadgeId = request.args.get("BadgeID", type=int, default=None) + reqPlaceId = request.args.get("PlaceID", type=int, default=None) + + if reqUserId is None or reqBadgeId is None or reqPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Invalid request."}]}), 400 + + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = reqBadgeId ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UserObj : User | None = User.query.filter_by( id = reqUserId ).first() + if UserObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is invalid or does not exist."}]}), 404 + + PlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = reqUserId ).first() + if PlaceServerPlayerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceServerPlayerObj.serveruuid ).first() + # This should never happen, but just in case + if PlaceServerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + ServerPlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObj.serverPlaceId ).first() + if ServerPlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceObj : Place = Place.query.filter_by( placeid = reqPlaceId ).first() + if PlaceObj is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if PlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + + try: + AwardBadgeToUser( badge_id = reqBadgeId, user_obj = UserObj ) + except UserAlreadyHasBadgeException: + return jsonify({"errors": [{"code": 1,"message": "User already has badge."}]}), 400 + except ValueError: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + except Exception as e: + logging.error(f"Error awarding badge to user: {e}") + return jsonify({"errors": [{"code": 1,"message": "Internal Server error."}]}), 500 + PlaceAssetObj : Asset = Asset.query.filter_by( id = PlaceObj.placeid ).first() + PlaceCreator : User | Group = GetAssetCreator( PlaceAssetObj ) + + return f"{UserObj.username} won {PlaceCreator.username if PlaceAssetObj.creator_type == 0 else PlaceCreator.name}'s \"{BadgeObj.name}\" award!" # This message is sent to client to be shown as a badge awarded notification + diff --git a/app/routes/bootstrapper.py b/app/routes/bootstrapper.py new file mode 100644 index 0000000..b844cf3 --- /dev/null +++ b/app/routes/bootstrapper.py @@ -0,0 +1,7 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash + +BootstrapperRoute = Blueprint('BootstrapperRoute', __name__, template_folder='pages') + +@BootstrapperRoute.route("/install/GetInstallerCdns.ashx", methods=["GET"]) +def getinstallercdns(): + return "https://setup.nexium.fit/" diff --git a/app/routes/clientinfo.py b/app/routes/clientinfo.py new file mode 100644 index 0000000..1698831 --- /dev/null +++ b/app/routes/clientinfo.py @@ -0,0 +1,771 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, Response +from app.extensions import csrf, redis_controller, get_remote_address +from app.models.user import User +from app.models.place import Place +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.models.gameservers import GameServer +from app.models.universe import Universe +from app.models.groups import Group, GroupRole, GroupRolePermission +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.enums.PlaceYear import PlaceYear +from app.util.assetversion import GetLatestAssetVersion +from app.util.textfilter import FilterText +from app.util import auth +from app.services import economy, groups +from app.routes.asset import GenerateTempAuthToken +from config import Config +from app.util.filterconfig import ReplaceWith +import logging +import datetime +import requests + +config = Config() + +ClientInfo = Blueprint('clientinfo', __name__, url_prefix='/') + +@ClientInfo.route('/GetAllowedSecurityVersions/', methods=['GET']) +def GetAllowedSecurityVersions(): + return jsonify({ + "data": ["0.271.1pcplayer", "0.205.0pcplayer", "0.360.0pcplayer", "0.450.0pcplayer", "0.463.0pcplayer"] + }) + +@ClientInfo.route('/apisite/clientsettings/Setting/QuietGet/EmscriptenAppSettings/', methods=['GET', 'OPTIONS']) +def EmscriptenAppSettings(): + return jsonify({"DFFlagUseStarterPlayerCharacterScripts":"True","DFFlagUseStarterPlayerHumanoid":"True","DFFlagUseStarterPlayerCharacter":"True","FFlagEnableSetCoreTopbarEnabled":"True","FFlagPlayerDropDownEnabled":"True","DFFlagFilteringEnabledDialogFix":"True","DFFlagGoodbyeChoiceActiveProperty":"True","FFlagUseCanManageApiToDetermineConsoleAccess":"False","FFlagConsoleCodeExecutionEnabled":"True","FFlagLuaBasedBubbleChat":"True","FFlagUseInGameTopBar":"True","FFlagSetCoreMoveChat":"True","FFlagSetCoreDisableChatBar":"True","FFlagEnableLuaFollowers":"False","DFFlagUserServerFollowers":"True","FFlagUseUserListMenu":"True"}) + +@ClientInfo.route("/GetAllowedMD5Hashes/", methods=['GET']) +def GetAllowedMD5Hashes(): + apiKey = request.args.get("apiKey", default=None, type=str) + if apiKey == "dac86da7-a4bc-4bff-8ca4-8b54e1ac925b": # 2021 + return jsonify({ + "data": [ + "aa",# 2020 + "a", + "89ae5307ca8bcd4059fa8b61399b6dba" # 2021 + ] + }), 200 + + return jsonify({ + "data": [ + # 2016 + "7c4caa74baf2100a2e2b2ba34eb9d69b", + "aaa", + # 2018, + "cb625aa02e932bdeb11ac84001ed5475" + ] + }) + +@ClientInfo.route('/game/players//', methods=['GET']) +def GetPlayerInfo(userid): + return jsonify({ + "ChatFilter": "whitelist" + }) + +@ClientInfo.route("/Game/ChatFilter.ashx", methods=["POST"]) +@csrf.exempt +def ChatFilterAshx(): + try: + RequestedFilterText = request.data.decode("utf-8") + except: + RequestedFilterText = str(request.data) + + try: + FilterText( + Text = RequestedFilterText, + ThrowException = True + ) + return "True" + except: + return "False" + +@ClientInfo.route("/moderation/filtertext/", methods=['POST']) +@csrf.exempt +def FilterTextAPI(): + userId = request.form.get('userId', '') + RequestedFilterText = request.form.get("text", default="", type=str) + FilteredText = FilterText(Text=RequestedFilterText, ThrowException=False, userId=userId) + return jsonify({ + "data": { + "white": FilteredText, + "black": "" + } + }) + +@ClientInfo.route("/v2/moderation/textfilter", methods=['GET', 'POST']) +@ClientInfo.route("/moderation/v2/filtertext", methods=['GET', 'POST']) +@ClientInfo.route("/moderation/v2/filtertext/", methods=['GET', 'POST']) +@csrf.exempt +def FilterTextV2API(): + if request.method == 'GET': + RequestedFilterText = request.args.get("text", default="", type=str) + userId = request.args.get("userId", default="", type=str) + else: + RequestedFilterText = request.form.get("text", default="", type=str) + userId = request.form.get("userId", default="", type=str) + FilteredText = FilterText(Text=RequestedFilterText, ThrowException=False, userId=userId) + return jsonify({"success": True, "message": "", "data": {"AgeUnder13": FilteredText, "Age13OrOver": FilteredText}}) + +@ClientInfo.route("/users//canmanage/", methods=['GET']) +def CanManage(userid, placeid): + userid = int(userid) + + if userid in config.CAN_MANAGE: + return jsonify({ + "CanManage": True, + "Success": True + }) + AssetObj : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObj is None: + return jsonify({ + "CanManage": False, + "Success": True + }) + if AssetObj.creator_type == 0 and AssetObj.creator_id == int(userid): + return jsonify({ + "CanManage": True, + "Success": True + }) + elif AssetObj.creator_type == 1: + GroupObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + UserGroupRole : GroupRole = groups.GetUserRolesetInGroup(userid, GroupObj) + if UserGroupRole is not None: + UserRolePermissions : GroupRolePermission = groups.GetRolesetPermission( UserGroupRole ) + if UserRolePermissions.manage_group_games: + return jsonify({ + "CanManage": True, + "Success": True + }) + return jsonify({ + "CanManage": False, + "Success": True + }) + +@ClientInfo.route("/v1/user//is-admin-developer-console-enabled", methods=['GET']) +def IsAdminDeveloperConsoleEnabled(userid): + is_admin = userid in {"1", "4", "94"} + return jsonify({ + "isAdminDeveloperConsoleEnabled": is_admin + }) + +@ClientInfo.route('/game/report-stats', methods=['POST']) +@csrf.exempt +def reportgamestats(): + # TODO: Implement this + return jsonify({"status": "success"}),200 + +@ClientInfo.route("/userblock/getblockedusers", methods=['GET']) +def GetBlockedUsers(): + # TODO: Implement this + return jsonify({ + "success": True, + "userList": [], + "total": 0 + }) + +@ClientInfo.route("/user/multi-following-exists", methods=['POST']) +@csrf.exempt +def MultiFollowingExists(): + # TODO: Implement this + return jsonify({ + "followings": [], + }) + +from app.util.signscript import signUTF8 +@ClientInfo.route("/game/visit.ashx", methods=['GET']) +def Visit(): + IsPlaySolo = request.args.get('IsPlaySolo', default=1, type=int) + UserID = request.args.get('UserID', default=5973, type=int) # default == guest + PlaceID = request.args.get('PlaceID', default=0, type=int) + UniverseId = request.args.get('UniverseId', default=0, type=int) + + with open("./app/files/Visit.lua", "r") as f: + VisitLua = f.read() + VisitLua = VisitLua.format( + PlaceId = str(PlaceID), + UniverseId = str(UniverseId), + UserId = str(UserID) + ) + VisitLua = signUTF8(VisitLua) + Resposne = make_response(VisitLua) + Resposne.headers['Content-Type'] = 'text/plain' + return Resposne + +@ClientInfo.route("/Error/Dmp.ashx", methods=['POST']) +@csrf.exempt +def DmpAshx(): + return "" +@ClientInfo.route("/Error/Grid.ashx", methods=['POST']) +@csrf.exempt +def ErrorGrid(): + return "OK" + +@ClientInfo.route("/game/load-place-info", methods=['GET', 'POST']) +@csrf.exempt +def load_place_info(): + placeId = request.headers.get("Roblox-Place-Id", default=1, type=int) + AssetObj : Asset = Asset.query.filter_by(id=placeId).first() + if AssetObj is None: + return jsonify({ + "success": False, + "message": "Place not found", + }), 404 + if AssetObj.asset_type.value != 9: + return jsonify({ + "success": False, + "message": "Place not found", + }), 404 + LatestAssetVersion : AssetVersion = GetLatestAssetVersion(AssetObj) + return jsonify({ + "CreatorId": AssetObj.creator_id, + "CreatorType": "User" if AssetObj.creator_type == 0 else "Group", + "PlaceVersion": LatestAssetVersion.version, + "GameId": placeId, + "IsRobloxPlace": True if AssetObj.creator_id == 1 and AssetObj.creator_type == 0 else False + }) + +@ClientInfo.route("/v1/player-policies-client", methods=["POST", "GET"]) +def playerpolicies(): + return jsonify({ + "isSubjectToChinaPolicies":False, + "arePaidRandomItemsRestricted":False, + "isPaidItemTradingAllowed":True, + "allowedExternalLinkReferences":[ + "Discord", + "YouTube", + "Twitch", + "Facebook" + ] + }) + +EnumTogameAvatarType = { + PlaceRigChoice.UserChoice: "PlayerChoice", + PlaceRigChoice.ForceR6: "MorphToR6", + PlaceRigChoice.ForceR15: "MorphToR15" +} + +@ClientInfo.route("/v1.1/game-start-info/") +def game_start_info(): + universeId = request.args.get("universeId", default=None, type=int) + if universeId is None: + return jsonify({ + "message": "Invalid request", + "success": False + }), 400 + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if UniverseObj is None: + return jsonify({ + "message": "Place not found", + "success": False + }), 404 + + return jsonify({ + "gameAvatarType": "PlayerChoice", #EnumTogameAvatarType[UniverseObj.place_rig_choice], We let avatar-fetch handle this since we allow for place specific avatar types + "allowCustomAnimations":"True", + "universeAvatarCollisionType":"OuterBox", + "universeAvatarBodyType":"Standard", + "jointPositioningType":"ArtistIntent", + "message":"", + "universeAvatarMinScales":{ + "height":0.9, + "width":0.7, + "head":0.95, + "depth":0.0, + "proportion":0.0, + "bodyType":0.0 + }, + "universeAvatarMaxScales":{ + "height":1.05, + "width":1.0, + "head":1.0, + "depth":0.0, + "proportion":1.0, + "bodyType":1.0 + }, + "universeAvatarAssetOverrides":[], + "moderationStatus":None + }) + +@ClientInfo.route("/v1/name-description/games/", methods=["GET"]) +def name_description(placeid): + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + if PlaceObj is None: + return jsonify({ + "message": "Place not found", + "success": False + }), 404 + AssetObj : Asset = PlaceObj.assetObj + return jsonify({ + "data":[ + { + "name":AssetObj.name, + "description":AssetObj.description, + "languageCode":"en" + } + ] + }) + +@ClientInfo.route("/v1/locales", methods=["GET"]) +def client_locales(): + return jsonify({"data":[{"locale":{"id":1,"locale":"en_us","name":"English(US)","nativeName":"English","language":{"id":41,"name":"English","nativeName":"English","languageCode":"en"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":2,"locale":"es_es","name":"Spanish(Spain)","nativeName":"Español","language":{"id":148,"name":"Spanish","nativeName":"Español","languageCode":"es"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":3,"locale":"fr_fr","name":"French","nativeName":"Français","language":{"id":48,"name":"French","nativeName":"Français","languageCode":"fr"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":4,"locale":"id_id","name":"Indonesian","nativeName":"Bahasa Indonesia","language":{"id":64,"name":"Indonesian","nativeName":"Bahasa Indonesia","languageCode":"id"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":5,"locale":"it_it","name":"Italian","nativeName":"Italiano","language":{"id":71,"name":"Italian","nativeName":"Italiano","languageCode":"it"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":6,"locale":"ja_jp","name":"Japanese","nativeName":"日本語","language":{"id":73,"name":"Japanese","nativeName":"日本語 (にほんご),","languageCode":"ja"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":7,"locale":"ko_kr","name":"Korean","nativeName":"한국어","language":{"id":86,"name":"Korean","nativeName":"한국어","languageCode":"ko"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":8,"locale":"ru_ru","name":"Russian","nativeName":"Русский","language":{"id":133,"name":"Russian","nativeName":"Русский","languageCode":"ru"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":9,"locale":"th_th","name":"Thai","nativeName":"ภาษาไทย","language":{"id":156,"name":"Thai","nativeName":"ไทย","languageCode":"th"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":10,"locale":"tr_tr","name":"Turkish","nativeName":"Türkçe","language":{"id":163,"name":"Turkish","nativeName":"Türkçe","languageCode":"tr"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":11,"locale":"vi_vn","name":"Vietnamese","nativeName":"Tiếng Việt","language":{"id":173,"name":"Vietnamese","nativeName":"Tiếng Việt","languageCode":"vi"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":12,"locale":"pt_br","name":"Portuguese (Brazil)","nativeName":"Português (Brasil)","language":{"id":128,"name":"Portuguese","nativeName":"Português","languageCode":"pt"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":13,"locale":"de_de","name":"German","nativeName":"Deutsch","language":{"id":52,"name":"German","nativeName":"Deutsch","languageCode":"de"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":14,"locale":"zh_cn","name":"Chinese (Simplified)","nativeName":"中文(简体)","language":{"id":30,"name":"Chinese (Simplified)","nativeName":"简体中文","languageCode":"zh-hans"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":15,"locale":"zh_tw","name":"Chinese (Traditional)","nativeName":"中文(繁體)","language":{"id":189,"name":"Chinese (Traditional)","nativeName":"繁體中文","languageCode":"zh-hant"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":16,"locale":"bg_bg","name":"Bulgarian","nativeName":"Български","language":{"id":24,"name":"Bulgarian","nativeName":"български език","languageCode":"bg"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":17,"locale":"bn_bd","name":"Bengali","nativeName":"বাংলা","language":{"id":19,"name":"Bengali","nativeName":"বাংলা","languageCode":"bn"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":18,"locale":"cs_cz","name":"Czech","nativeName":"Čeština","language":{"id":36,"name":"Czech","nativeName":"čeština","languageCode":"cs"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":19,"locale":"da_dk","name":"Danish","nativeName":"Dansk","language":{"id":37,"name":"Danish","nativeName":"dansk","languageCode":"da"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":20,"locale":"el_gr","name":"Greek","nativeName":"Ελληνικά","language":{"id":53,"name":"Greek","nativeName":"ελληνικά","languageCode":"el"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":21,"locale":"et_ee","name":"Estonian","nativeName":"Eesti","language":{"id":43,"name":"Estonian","nativeName":"eesti, eesti keel","languageCode":"et"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":22,"locale":"fi_fi","name":"Finnish","nativeName":"Suomi","language":{"id":47,"name":"Finnish","nativeName":"suomi","languageCode":"fi"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":23,"locale":"hi_in","name":"Hindi","nativeName":"हिन्दी","language":{"id":60,"name":"Hindi","nativeName":"हिन्दी, हिंदी","languageCode":"hi"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":24,"locale":"hr_hr","name":"Croatian","nativeName":"Hrvatski","language":{"id":35,"name":"Croatian","nativeName":"hrvatski jezik","languageCode":"hr"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":25,"locale":"hu_hu","name":"Hungarian","nativeName":"Magyar","language":{"id":62,"name":"Hungarian","nativeName":"magyar","languageCode":"hu"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":26,"locale":"ka_ge","name":"Georgian","nativeName":"ქართული","language":{"id":51,"name":"Georgian","nativeName":"ქართული","languageCode":"ka"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":27,"locale":"kk_kz","name":"Kazakh","nativeName":"Қазақ Тілі","language":{"id":79,"name":"Kazakh","nativeName":"қазақ тілі","languageCode":"kk"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":28,"locale":"km_kh","name":"Khmer","nativeName":"ភាសាខ្មែរ","language":{"id":188,"name":"Khmer","nativeName":"ភាសាខ្មែរ","languageCode":"km"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":29,"locale":"lt_lt","name":"Lithuanian","nativeName":"Lietuvių","language":{"id":95,"name":"Lithuanian","nativeName":"lietuvių kalba","languageCode":"lt"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":30,"locale":"lv_lv","name":"Latvian","nativeName":"Latviešu","language":{"id":97,"name":"Latvian","nativeName":"Latviešu Valoda","languageCode":"lv"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":31,"locale":"ms_my","name":"Malay","nativeName":"Bahasa Melayu","language":{"id":101,"name":"Malay","nativeName":"بهاس ملايو‎","languageCode":"ms"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":32,"locale":"my_mm","name":"Burmese","nativeName":"ဗမာစာ","language":{"id":25,"name":"Burmese","nativeName":"ဗမာစာ","languageCode":"my"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":33,"locale":"nb_no","name":"Bokmal","nativeName":"Bokmål","language":{"id":113,"name":"Bokmal","nativeName":"Norsk Bokmål","languageCode":"nb"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":34,"locale":"nl_nl","name":"Dutch","nativeName":"Nederlands","language":{"id":39,"name":"Dutch","nativeName":"Nederlands","languageCode":"nl"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":35,"locale":"fil_ph","name":"Filipino","nativeName":"Filipino","language":{"id":190,"name":"Filipino","nativeName":"Filipino","languageCode":"fil"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":36,"locale":"pl_pl","name":"Polish","nativeName":"Polski","language":{"id":126,"name":"Polish","nativeName":"Język Polski","languageCode":"pl"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":37,"locale":"ro_ro","name":"Romanian","nativeName":"Română","language":{"id":132,"name":"Romanian","nativeName":"Română","languageCode":"ro"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":38,"locale":"uk_ua","name":"Ukrainian","nativeName":"Yкраїньска","language":{"id":169,"name":"Ukrainian","nativeName":"Українська","languageCode":"uk"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":39,"locale":"si_lk","name":"Sinhala","nativeName":"සිංහල","language":{"id":143,"name":"Sinhala","nativeName":"සිංහල","languageCode":"si"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":40,"locale":"sk_sk","name":"Slovak","nativeName":"Slovenčina","language":{"id":144,"name":"Slovak","nativeName":"Slovenčina","languageCode":"sk"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":41,"locale":"sl_sl","name":"Slovenian","nativeName":"Slovenski","language":{"id":145,"name":"Slovenian","nativeName":"Slovenščina","languageCode":"sl"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":42,"locale":"sq_al","name":"Albanian","nativeName":"Shqipe","language":{"id":5,"name":"Albanian","nativeName":"Shqip","languageCode":"sq"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":43,"locale":"bs_ba","name":"Bosnian","nativeName":"Босански","language":{"id":22,"name":"Bosnian","nativeName":"bosanski jezik","languageCode":"bs"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":44,"locale":"sr_rs","name":"Serbian","nativeName":"Cрпски","language":{"id":140,"name":"Serbian","nativeName":"српски језик","languageCode":"sr"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":45,"locale":"sv_se","name":"Swedish","nativeName":"Svenska","language":{"id":152,"name":"Swedish","nativeName":"Svenska","languageCode":"sv"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True}]}) + +@ClientInfo.route("/v2/universes//configuration", methods=["GET"]) +def GetUniverseConfig( universeid : int ): + return jsonify({ + "allowPrivateServers": False, + "privateServerPrice": 0, + "id": universeid, + "name": "MrGrey", + "universeAvatarType": "PlayerChoice", + "universeScaleType": "AllScales", + "universeAnimationType": "PlayerChoice", + "universeCollisionType": "OuterBox", + "universeBodyType": "Standard", + "universeJointPositioningType": "ArtistIntent", + "isArchived": False, + "isFriendsOnly": False, + "genre": "All", + "playableDevices": [ + "Computer", + "Phone", + "Tablet" + ], + "permissions": { + "IsThirdPartyTeleportAllowed": True, + "IsThirdPartyAssetAllowed": True, + "IsThirdPartyPurchaseAllowed": True + }, + "isForSale": False, + "price": 0, + "isStudioAccessToApisAllowed": True, + "privacyType": "Private" + }) + +@ClientInfo.route("/universal-app-configuration/v1/behaviors/app-patch/content", methods=["GET"]) +def GetAppConfigContent(): + return jsonify({ + "SchemaVersion": "1", + "CanaryUserIds": [], + "CanaryPercentage": 0 + }) +''' +@ClientInfo.route("/debu-client/im-person-ate", methods=["POST"]) +@csrf.exempt +def im_person_ate(): + try: + if not config.DEBUG_MODE: + return abort(404) + except: + pass + + if not request.is_json: + return abort(404) + data = request.json + + try: + assert "userId" in data, "userId not found" + assert isinstance(data["userId"], int), "userId is not an integer" + except AssertionError as e: + return f"Validation failed: {str(e)}", 400 + + req_response = make_response("OK", 200) + req_response.headers["ImpData"] = auth.CreateToken( userid = data["userId"], expireIn = 60 * 60 * 24 * 365 ) + return req_response''' + + +@ClientInfo.route("/universal-app-configuration/v1/behaviors/app-policy/content", methods=["GET"]) +def GetAppPolicyContent(): + return jsonify({ + "ChatConversationHeaderGroupDetails": True, + "ChatHeaderSearch": True, + "ChatHeaderCreateChatGroup": True, + "ChatHeaderHomeButton": False, + "ChatHeaderNotifications": True, + "ChatPlayTogether": True, + "ChatShareGameToChatFromChat": True, + "ChatTapConversationThumbnail": True, + "ChatViewProfileOption": True, + "GamesDropDownList": True, + "UseNewDropDown": False, + "GameDetailsMorePage": True, + "GameDetailsShowGlobalCounters": True, + "GameDetailsPlayWithFriends": True, + "GameDetailsSubtitle": True, + "GameInfoList": True, + "GameInfoListDeveloper": True, + "GamePlaysAndRatings": True, + "GameInfoShowBadges": True, + "GameInfoShowCreated": True, + "GameInfoShowGamepasses": True, + "GameInfoShowGenre": True, + "GameInfoShowMaxPlayers": True, + "GameInfoShowServers": True, + "GameInfoShowUpdated": True, + "GameReportingDisabled": False, + "GamePlayerCounts": True, + "GiftCardsEnabled": False, + "Notifications": True, + "OfficialStoreEnabled": False, + "RecommendedGames": True, + "SearchBar": True, + "MorePageType": "More", + "AboutPageType": "About", + "FriendFinder": True, + "SocialLinks": True, + "SocialGroupLinks": True, + "EnableShareCaptureCTA": True, + "SiteMessageBanner": True, + "UseWidthBasedFormFactorRule": False, + "UseHomePageWithAvatarAndPanel": False, + "UseBottomBar": True, + "AvatarHeaderIcon": "LuaApp/icons/ic-back", + "AvatarEditorShowBuyRobuxOnTopBar": True, + "HomeIcon": "LuaApp/icons/ic-roblox-close", + "ShowYouTubeAgeAlert": False, + "GameDetailsShareButton": True, + "CatalogShareButton": True, + "AccountProviderName": "", + "InviteFromAccountProvider": False, + "ShareToAccountProvider": False, + "ShareToAccountProviderTimeout": 8, + "ShowDisplayName": True, + "GamesPageCreationCenterTitle": False, + "ShowShareTargetGameCreator": True, + "SearchAutoComplete": True, + "CatalogShow3dView": True, + "CatalogReportingDisabled": False, + "CatalogCommunityCreations": True, + "CatalogPremiumCategory": True, + "CatalogPremiumContent": True, + "ItemDetailsFullView": True, + "UseAvatarExperienceLandingPage": True, + "HomePageFriendSection": True, + "HomePageProfileLink": True, + "PurchasePromptIncludingWarning": False, + "ShowVideoThumbnails": True, + "VideoSharingTestContent": [], + "SystemBarPlacement": "Bottom", + "EnableInGameHomeIcon": False, + "UseExternalBrowserForDisclaimerLinks": False, + "ShowExitFullscreenToast": True, + "ExitFullscreenToastEnabled": False, + "UseLuobuAuthentication": False, + "CheckUserAgreementsUpdatedOnLogin": True, + "AddUserAgreementIdsToSignupRequest": True, + "UseOmniRecommendation": True, + "ShowAgeVerificationOverlayEnabled": False, + "ShouldShowGroupsTile": True, + "ShowVoiceUpsell": False, + "ProfileShareEnabled": True, + "ContactImporterEnabled": True, + "FriendCodeQrCodeScannerEnabled": False, + "RealNamesInDisplayNamesEnabled": False, + "CsatSurveyRestrictTextInput": False, + "RobloxCreatedItemsCreatedByLuobu": False, + "GameInfoShowChatFeatures": True, + "PlatformGroup": "Unknown", + "UsePhoneSearchDiscoverEntry": False, + "HomeLocalFeedItems": { + "UserInfo": 1, + "FriendCarousel": 2 + }, + "Routes": { + "auth": { + "connect": "v2/login", + "login": "v2/login", + "signup": "v2/signup" + } + }, + "PromotionalEmailsCheckboxEnabled": True, + "PromotionalEmailsOptInByDefault": False, + "EnablePremiumUserFeatures": True, + "CanShowUnifiedChatUpsell": True, + "RequireExplicitVoiceConsent": True, + "RequireExplicitAvatarVideoConsent": True, + "EnableVoiceReportAbuseMenu": True + }) + +@ClientInfo.route("/game/studio.ashx", methods=['GET']) +def studio(): + StudioLua = open("./app/files/Studio.lua", "r").read() + SignedStudioLua = signUTF8(StudioLua) + Response = make_response(SignedStudioLua) + Response.headers['Content-Type'] = 'text/plain' + return Response + +@ClientInfo.route("/game/gameserver2014.lua", methods=['GET']) +def gameserver_2014(): + RemoteAddress = get_remote_address() + GameserverObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameserverObj is None: + return jsonify({ + "success": False, + "message": "Unauthorized" + }), 401 + + PlaceId = request.args.get( key = "placeId", default = None, type = int ) + NetworkPort = request.args.get( key = "networkPort", default = None, type = int ) + CreatorId = request.args.get( key = "creatorId", default = None, type = int ) + CreatorType = request.args.get( key = "creatorType", default = None, type = int ) + JobId = request.args.get( key = "jobId", default = None, type = str ) + + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + if PlaceId is None or NetworkPort is None or CreatorId is None or CreatorType is None or JobId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + PlaceObj : Place = Place.query.filter_by(placeid=PlaceId).first() + if PlaceObj is None: + return jsonify({ + "success": False, + "message": "Place not found" + }), 404 + + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({ + "success": False, + "message": "Universe not found" + }), 404 + + if UniverseObj.place_year != PlaceYear.Fourteen: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + #if not redis_controller.exists(f"gameserver2014lua:{PlaceId}:{JobId}"): + # return jsonify({ + # "success": False, + # "message": "Invalid request" + # }), 400 + #redis_controller.delete(f"gameserver2014lua:{PlaceId}:{JobId}") + + TempPlaceAccessKey = GenerateTempAuthToken( + AssetId = PlaceId, + Expiration = 180, + CreatorIP = get_remote_address() + ) + GameserverLua = open("./app/files/2014Gameserver.lua", "r").read() + GameserverLua = GameserverLua.format( + PlaceId = PlaceId, + NetworkPort = NetworkPort, + CreatorId = CreatorId, + CreatorType = CreatorType, + JobId = JobId, + AuthToken = GameserverObj.accessKey, + TempPlaceAccessKey = TempPlaceAccessKey + ) + + SignedGameserverLua = signUTF8(GameserverLua) + Response = make_response(SignedGameserverLua) + Response.headers['Content-Type'] = 'text/plain' + Response.set_cookie( + key = "Roblox-Place-Id", + value = str(PlaceId), + expires = 60 * 60 * 24, + domain = f".{config.BaseDomain}" + ) + Response.set_cookie( + key = "Temp-Place-Access-Key", + value = TempPlaceAccessKey, + expires = 180, + domain = f".{config.BaseDomain}" + ) + + logging.info("2014Gameserver.lua request from %s for place %d", RemoteAddress, PlaceId) + + return Response + +@ClientInfo.route("/game/gameserver2012.lua", methods=['GET']) +def gameserver_2012(): + RemoteAddress = get_remote_address() + GameserverObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameserverObj is None: + return jsonify({ + "success": False, + "message": "Unauthorized" + }), 401 + + PlaceId = request.args.get( key = "placeId", default = None, type = int ) + NetworkPort = request.args.get( key = "networkPort", default = None, type = int ) + CreatorId = request.args.get( key = "creatorId", default = None, type = int ) + CreatorType = request.args.get( key = "creatorType", default = None, type = int ) + JobId = request.args.get( key = "jobId", default = None, type = str ) + + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + if PlaceId is None or NetworkPort is None or CreatorId is None or CreatorType is None or JobId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + PlaceObj : Place = Place.query.filter_by(placeid=PlaceId).first() + if PlaceObj is None: + return jsonify({ + "success": False, + "message": "Place not found" + }), 404 + + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({ + "success": False, + "message": "Universe not found" + }), 404 + + if UniverseObj.place_year != PlaceYear.Fourteen: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + #if not redis_controller.exists(f"gameserver2014lua:{PlaceId}:{JobId}"): + # return jsonify({ + # "success": False, + # "message": "Invalid request" + # }), 400 + #redis_controller.delete(f"gameserver2014lua:{PlaceId}:{JobId}") + + TempPlaceAccessKey = GenerateTempAuthToken( + AssetId = PlaceId, + Expiration = 180, + CreatorIP = get_remote_address() + ) + GameserverLua = open("./app/files/2012Gameserver.lua", "r").read() + GameserverLua = GameserverLua.format( + PlaceId = PlaceId, + NetworkPort = NetworkPort, + CreatorId = CreatorId, + CreatorType = CreatorType, + JobId = JobId, + AuthToken = GameserverObj.accessKey, + TempPlaceAccessKey = TempPlaceAccessKey + ) + + SignedGameserverLua = signUTF8(GameserverLua) + Response = make_response(SignedGameserverLua) + Response.headers['Content-Type'] = 'text/plain' + Response.set_cookie( + key = "Roblox-Place-Id", + value = str(PlaceId), + expires = 60 * 60 * 24, + domain = f".{config.BaseDomain}" + ) + Response.set_cookie( + key = "Temp-Place-Access-Key", + value = TempPlaceAccessKey, + expires = 180, + domain = f".{config.BaseDomain}" + ) + + logging.info("2012Gameserver.lua request from %s for place %d", RemoteAddress, PlaceId) + + return Response + +@ClientInfo.route("/game/gameserver2016.lua", methods=['GET']) +def gameserver_2016(): + RemoteAddress = get_remote_address() + GameserverObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameserverObj is None: + return jsonify({ + "success": False, + "message": "Unauthorized" + }), 401 + + GameserverLua = open("./app/files/2016Gameserver.lua", "r").read() + GameserverLua = f"-- NEXIUM 2016 Gameserver.lua | Signed on {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n" + GameserverLua + + SignedGameserverLua = signUTF8(GameserverLua) + Response = make_response(SignedGameserverLua) + Response.headers['Content-Type'] = 'text/plain' + + logging.info("2016Gameserver.lua request from %s", RemoteAddress) + + return Response + +@ClientInfo.route("/game/2014Join.lua", methods=['GET']) +def join_2014(): + placeId = request.args.get("placeId", default=None, type=int) + if placeId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + JoinLua = open("./app/files/2014Join.lua", "r").read() + JoinLua = JoinLua.format( + PlaceId = str(placeId) + ) + SignedJoinLua = signUTF8(JoinLua) + Response = make_response(SignedJoinLua) + Response.headers['Content-Type'] = 'text/plain' + return Response + +@ClientInfo.route("/game/2012Join.lua", methods=['GET']) +def join_2012(): + placeId = request.args.get("placeId", default=None, type=int) + if placeId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + JoinLua = open("./app/files/2012Join.lua", "r").read() + JoinLua = JoinLua.format( + PlaceId = str(placeId) + ) + SignedJoinLua = signUTF8(JoinLua) + Response = make_response(SignedJoinLua) + Response.headers['Content-Type'] = 'text/plain' + return Response + +@ClientInfo.route("/v1/users//currency", methods=["GET"]) +@auth.authenticated_required_api +def get_user_currency( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != userId: + return jsonify({"success": False, "message": "Unauthorized"}),401 + UserRobuxBalance, UserTixBalance = economy.GetUserBalance(AuthenticatedUser) + return jsonify({ + "robux": UserRobuxBalance, + "tickets": UserTixBalance + }),200 + +#followings.roblox.com/v1/users//universes//status +@ClientInfo.route("/v1/users//universes//status", methods=["GET"]) +@auth.authenticated_required_api +def get_user_following_universe_status( userid : int, universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != userid: + return jsonify({"success": False, "message": "Unauthorized"}),401 + return jsonify({ + "UniverseId": universeid, + "UserId": userid, + "CanFollow": False, + "IsFollowing": False, + "FollowingCountByType": 0, + "FollowingLimitByType": 200 + }),200 + +#badges.roblox.com/v1/universes//badges +@ClientInfo.route("/v1/universes//badges", methods=["GET"]) +@auth.authenticated_required_api +def get_universe_badges( universeid : int ): + return jsonify({ + "data": [], + "previousPageCursor": None, + "nextPageCursor": None + }),200 diff --git a/app/routes/cryptomus_handler.py b/app/routes/cryptomus_handler.py new file mode 100644 index 0000000..ea36d70 --- /dev/null +++ b/app/routes/cryptomus_handler.py @@ -0,0 +1,383 @@ +import base64 +import hashlib +import requests +import json +import string +import secrets +import logging +import redis_lock + +from flask import request, Blueprint, jsonify, make_response, abort, redirect, render_template +from functools import wraps +from datetime import datetime, timedelta +from flask_wtf.csrf import CSRFError +from config import Config + +from app.models.cryptomus_invoice import CryptomusInvoice +from app.models.user import User +from app.models.giftcard_key import GiftcardKey +from app.enums.GiftcardType import GiftcardType +from app.enums.CryptomusPaymentStatus import CryptomusPaymentStatus + +from app.util import auth +from app.extensions import get_remote_address, db, csrf, user_limiter, redis_controller, limiter + +config = Config() + +CryptomusHandler = Blueprint('CryptomusHandler', __name__, url_prefix='/cryptomus_service') + +StatusStringToEnum = { + "paid": CryptomusPaymentStatus.Paid, + "paid_over": CryptomusPaymentStatus.PaidOver, + "wrong_amount": CryptomusPaymentStatus.WrongAmount, + "process": CryptomusPaymentStatus.Process, + "confirm_check": CryptomusPaymentStatus.ConfirmCheck, + "wrong_amount_waiting": CryptomusPaymentStatus.WrongAmountWaiting, + "check": CryptomusPaymentStatus.Check, + "fail": CryptomusPaymentStatus.Fail, + "cancel": CryptomusPaymentStatus.Cancel, + "system_fail": CryptomusPaymentStatus.SystemFail, + "refund_process": CryptomusPaymentStatus.RefundProcess, + "refund_fail": CryptomusPaymentStatus.RefundFail, + "refund_paid": CryptomusPaymentStatus.RefundPaid, + "locked": CryptomusPaymentStatus.Locked +} + +def GenerateSignature( PayloadData : str = "" ) -> str: + """ + Generates a signature for the given payload data + + :param PayloadData: The payload data to sign + + :returns: str + """ + assert isinstance( PayloadData, str ), "PayloadData must be a string" + + return hashlib.md5( + ( + base64.b64encode( PayloadData.encode( "utf-8" ) ).decode( "utf-8" ) + config.CRYPTOMUS_API_KEY + ).encode( "utf-8" ) + ).hexdigest() + +def VerifySignature( PayloadData : str, Signature : str ) -> bool: + """ + Verifies the signature of the given payload data + + :param PayloadData: The payload data to verify + :param Signature: The signature to verify + + :returns: bool + """ + assert isinstance( PayloadData, str ), "PayloadData must be a string" + assert isinstance( Signature, str ), "Signature must be a string" + + return GenerateSignature( PayloadData ) == Signature + +def PerformRequest( Endpoint : str = "/", RequestMethod : str = "GET", PayloadData : dict | list | None = None, RequestTimeout : int = 20 ) -> requests.Response: + """ + Performs a request to the Cryptomus API + + :param Endpoint: The endpoint to send the request to + :param RequestMethod: The request method to use + :param PayloadData: The payload data to send with the request on POST requests + :param RequestTimeout: The amount of time before the request times out + + :returns: requests.Response + """ + + assert isinstance( Endpoint, str ), "Endpoint must be a string" + assert isinstance( RequestMethod, str ), "RequestMethod must be a string" + assert RequestMethod in ["GET", "POST"], "RequestMethod must be either GET or POST" + assert isinstance( PayloadData, (dict, list, type(None)) ), "PayloadData must be a dictionary, list or None" + assert isinstance( RequestTimeout, int ), "RequestTimeout must be an integer" + + headers = { + "Content-Type": "application/json", + "merchant": config.CRYPTOMUS_MERCHANT_ID, + } + + if RequestMethod == "GET": + headers.update({ + "sign": GenerateSignature() + }) + return requests.get( + url = f"{config.CRYPTOMUS_API_BASEURL}{Endpoint}", + headers = headers, + timeout = RequestTimeout + ) + else: + headers.update({ + "sign": GenerateSignature( json.dumps( PayloadData ) ) + }) + return requests.post( + url = f"{config.CRYPTOMUS_API_BASEURL}{Endpoint}", + headers = headers, + data = json.dumps( PayloadData ), + timeout = RequestTimeout + ) + +def CryptomusSignatureRequired(f): + """ + Decorator to require a valid Cryptomus signature for a request + """ + @wraps(f) + def decorated_function(*args, **kwargs): + if get_remote_address() != "91.227.144.54": + logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > Invalid remote address: {get_remote_address()}") + abort(404) + + if not request.is_json: + logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > Request is not JSON") + abort(400) + PayloadData = request.get_json() + if "sign" not in PayloadData: + logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > sign not found in payload") + abort(400) + # PayloadSignature = PayloadData["sign"] + # del PayloadData["sign"] + # if not VerifySignature( json.dumps( PayloadData ), PayloadSignature ): + # logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > Invalid signature") + # abort(400) + + return f(*args, **kwargs) + return decorated_function + +def GenerateInvoiceID(): + """ + Generates a new invoice ID + + :returns: str + """ + + NewInvoiceID = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(64)) + + if CryptomusInvoice.query.filter_by( id = NewInvoiceID ).first() is not None: + # This will never happen, but we are handling money here so we need to be sure + return GenerateInvoiceID() + + return NewInvoiceID + +def ConvertStringStatusToEnum( Status : str ) -> CryptomusPaymentStatus: + """ + Converts a string status to a CryptomusPaymentStatus enum + + :param Status: The status to convert + + :returns: CryptomusPaymentStatus + """ + + assert Status in StatusStringToEnum, "Invalid status" + return StatusStringToEnum[Status] + +@CryptomusHandler.errorhandler( 429 ) +def RateLimitExceeded( e ): + """ + Rate limit exceeded error handler + """ + return jsonify({ "status": "error", "message": "Rate limit exceeded" }), 429 + +@CryptomusHandler.errorhandler( CSRFError ) +def CSRFError( e ): + """ + CSRF error handler + """ + return jsonify({ "status": "error", "message": "Invalid CSRF Token" }), 400 + +@CryptomusHandler.route("/invoice_status_callback/", methods=["POST"]) +@CryptomusSignatureRequired +@csrf.exempt +def InvoiceStatusCallback( invoice_id : str ): + """ + Callback for invoice status updates + + :param invoice_id: The invoice ID to update the status for + """ + + CryptomusInvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if CryptomusInvoiceObj is None: + logging.warning(f"cryptomus_handler > InvoiceStatusCallback > Invoice not found: {invoice_id}") + return jsonify({ "status": "error", "message": "Invoice not found" }), 404 + PayloadData = request.get_json() + + try: + assert isinstance( PayloadData, dict ), "PayloadData must be a dictionary" + assert "status" in PayloadData, "Status not found in payload" + assert "payment_amount_usd" in PayloadData, "payment_amount_usd not found in payload" + assert "is_final" in PayloadData, "is_final not found in payload" + assert isinstance( PayloadData["payment_amount_usd"], str ), "payment_amount_usd must be a string" + assert isinstance( PayloadData["is_final"], bool ), "is_final must be a boolean" + assert PayloadData["status"] in StatusStringToEnum, "Invalid status" + except Exception as e: + logging.error(f"cryptomus_handler > InvoiceStatusCallback > Validation failed: {e}") + return jsonify({ "status": "error", "message": f"Validation failed: {e}" }), 500 + + CryptomusInvoiceObj.status = StatusStringToEnum[PayloadData["status"]] + CryptomusInvoiceObj.paid_amount_usd = float(PayloadData["payment_amount_usd"]) + CryptomusInvoiceObj.is_final = PayloadData["is_final"] + CryptomusInvoiceObj.updated_at = datetime.utcnow() + db.session.commit() + + def GenerateCode(): + Code = "" + for i in range(0, 5): + Chunk = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(5)) + Code += Chunk + if i != 4: + Code += "-" + return Code + + if CryptomusInvoiceObj.status in [ CryptomusPaymentStatus.Paid, CryptomusPaymentStatus.PaidOver ] and CryptomusInvoiceObj.assigned_key is None and CryptomusInvoiceObj.extra_data == "membership": + NewGiftcardCode : str = GenerateCode() + NewGiftcardObj : GiftcardKey = GiftcardKey( + key = NewGiftcardCode, + type = GiftcardType.Outrageous_BuildersClub, + value = 1 + ) + db.session.add(NewGiftcardObj) + db.session.commit() + + CryptomusInvoiceObj.assigned_key = NewGiftcardObj.key + db.session.commit() + + return jsonify({ "status": "success" }), 200 + +@CryptomusHandler.route("/payment_cancelled/", methods=["GET"]) +@auth.authenticated_required +def PaymentCancelled( invoice_id : str ): + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return redirect(f"/cryptomus_service/view_payment/{invoice_id}") + +@CryptomusHandler.route("/payment_success/", methods=["GET"]) +@auth.authenticated_required +def PaymentSuccess( invoice_id : str ): + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return redirect(f"/cryptomus_service/view_payment/{invoice_id}") + +@CryptomusHandler.route("/create_payment/membership", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +@user_limiter.limit("5/minute") +def user_create_payment(): + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + with redis_lock.Lock( + redis_client = redis_controller, + name = f"cryptomus_handler:user_create_payment:{AuthenticatedUser.id}", + expire = 30, + auto_renewal = True + ) as lock: + ActiveUserInvoices : int = CryptomusInvoice.query.filter_by( initiator_id = AuthenticatedUser.id ).filter( + CryptomusInvoice.created_at > datetime.now() - timedelta( minutes = 30 ) + ).count( + ) + if ActiveUserInvoices >= 10: + return jsonify({ "status": "error", "message": "You have created too many payments recently" }), 403 + + InvoiceOrderID = GenerateInvoiceID() + + try: + InvoiceCreateRequest = PerformRequest( + Endpoint = "/v1/payment", + RequestMethod = "POST", + PayloadData = { + "amount": "5", + "currency": "USD", + "order_id": InvoiceOrderID, + "url_return": f"{config.BaseURL}/cryptomus_service/payment_cancelled/{InvoiceOrderID}", + "url_callback": f"{config.BaseURL}/cryptomus_service/invoice_status_callback/{InvoiceOrderID}", + "url_success": f"{config.BaseURL}/cryptomus_service/payment_success/{InvoiceOrderID}", + "is_payment_multiple": True, + "lifetime": 60 * 60 * 12, # 12 hours + "additional_data": "membership" + } + ) + except requests.exceptions.RequestException as e: + logging.error(f"cryptomus_handler > user_create_payment > Request failed: {e}") + return jsonify({ "status": "error", "message": "Request failed" }), 500 + except Exception as e: + logging.error(f"cryptomus_handler > user_create_payment > Unknown error: {e}") + return jsonify({ "status": "error", "message": "Unknown error" }), 500 + + if InvoiceCreateRequest.status_code != 200: + logging.error(f"cryptomus_handler > user_create_payment > Request failed: {InvoiceCreateRequest.status_code}, {InvoiceCreateRequest.text}") + return jsonify({ "status": "error", "message": "Request failed" }), 500 + + InvoiceCreateResponse = InvoiceCreateRequest.json() + try: + assert "state" in InvoiceCreateResponse, "state not found in response" + assert isinstance( InvoiceCreateResponse["state"], int ), "state must be a integer" + assert "result" in InvoiceCreateResponse, "result not found in response" + assert isinstance( InvoiceCreateResponse["result"], dict ), "result must be a dictionary" + except AssertionError as e: + logging.error(f"cryptomus_handler > user_create_payment > Validation failed: {e}") + return jsonify({ "status": "error", "message": f"Request failed" }), 500 + + if InvoiceCreateResponse["state"] != 0: + logging.error(f"cryptomus_handler > user_create_payment > Request failed: {InvoiceCreateResponse['result']}") + return jsonify({ "status": "error", "message": "Request failed" }), 500 + + InvoiceResult : dict = InvoiceCreateResponse["result"] + NewCryptomusInvoice = CryptomusInvoice( + id = InvoiceOrderID, + cryptomus_invoice_id = InvoiceResult["uuid"], + initiator_id = AuthenticatedUser.id, + required_amount = 5, + currency = "USD", + status = ConvertStringStatusToEnum( InvoiceResult["status"] ), + expires_at = datetime.utcnow() + timedelta( hours = 12 ), + extra_data = "membership" + ) + db.session.add(NewCryptomusInvoice) + db.session.commit() + + return jsonify({ "status": "success", "invoice_id": InvoiceOrderID, "cryptomus_invoice_id": InvoiceResult["uuid"], "payment_url": InvoiceResult["url"] }), 200 + except AssertionError: + abort( 429 ) + +@CryptomusHandler.route("/pay_invoice/", methods=["GET"]) +@auth.authenticated_required +def pay_invoice( invoice_id : str ): + AuthenticatedUser : User = auth.GetCurrentUser() + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return redirect( f"https://pay.cryptomus.com/pay/{InvoiceObj.cryptomus_invoice_id}" ) + +@CryptomusHandler.route("/view_payment/", methods=["GET"]) +@auth.authenticated_required +def view_payment( invoice_id : str ): + AuthenticatedUser : User = auth.GetCurrentUser() + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return render_template("cryptomus/view_payment.html", InvoiceObj = InvoiceObj) + +@CryptomusHandler.route("/dashboard", methods=["GET"]) +@auth.authenticated_required +def dashboard(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = max(request.args.get('page', default=1, type=int) , 1) + UserInvoices = CryptomusInvoice.query.filter_by( initiator_id = AuthenticatedUser.id ).order_by( CryptomusInvoice.created_at.desc() ).paginate( + page=PageNumber, per_page=15, error_out=False + ) + return render_template("cryptomus/dashboard.html", UserInvoices = UserInvoices) + diff --git a/app/routes/datastoreservice.py b/app/routes/datastoreservice.py new file mode 100644 index 0000000..b49d06b --- /dev/null +++ b/app/routes/datastoreservice.py @@ -0,0 +1,277 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from app.models.gameservers import GameServer +from app.models.place_ordered_datastore import PlaceOrderedDatastore +from app.models.place_datastore import PlaceDatastore +from app.models.asset import Asset +from app.models.universe import Universe +from app.models.place import Place +from app.enums.AssetType import AssetType +from app.extensions import get_remote_address, db, redis_controller, csrf +from functools import wraps + +DataStoreRoute = Blueprint('datastore', __name__) + +def GameServerRequired(f): + @wraps(f) + def decorated_function(*args, **kwargs): + RequestIP = get_remote_address() + if RequestIP is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + server : GameServer = GameServer.query.filter_by(serverIP=RequestIP).first() + if server is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + ServerAccessKey = request.headers.get("AccessKey", default = None, type = str) + if ServerAccessKey is None or ServerAccessKey != server.accessKey: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + return f(*args, **kwargs) + return decorated_function + +@DataStoreRoute.route("/persistence/getSortedValues", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def getSortedValues(): + placeId : int = request.args.get("placeId", default=None, type=int) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + pageSize : int = request.args.get("pageSize", default=50, type=int) + exclusiveStartKey : str = request.args.get("exclusiveStartKey", default=None, type=int) # I have no idea how Roblox uses this, but I am going to use it as a page number with pagination + key : str = request.args.get("key", default=None, type=str) + ascending : bool = request.args.get("ascending", default="False", type=str) == "True" + inclusiveMinValue : int = request.args.get("inclusiveMinValue", default=None, type=int) + exclusiveMaxValue : int = request.args.get("inclusiveMaxValue", default=None, type=int) + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + if pageSize == 0 or pageSize > 100: + return jsonify({"data":[], "message": "Page size is too large"}), 200 + if dataType != "sorted": + return jsonify({"data":[], "message": "Invalid data type"}), 200 + + if exclusiveStartKey is None: + exclusiveStartKey = 1 + else: + if exclusiveStartKey < 1: + return jsonify({"data":[], "message": "Invalid exclusive start key"}), 200 + + DataStoreObj = PlaceOrderedDatastore.query.filter_by( + universe_id = UniverseObj.id, + scope = scope, + key = key + ) + if inclusiveMinValue is not None: + DataStoreObj = DataStoreObj.filter(PlaceOrderedDatastore.value >= inclusiveMinValue) + if exclusiveMaxValue is not None: + DataStoreObj = DataStoreObj.filter(PlaceOrderedDatastore.value < exclusiveMaxValue) + DataStoreObj : list[PlaceOrderedDatastore] = DataStoreObj.order_by(PlaceOrderedDatastore.value.asc() if ascending else PlaceOrderedDatastore.value.desc()).paginate( page=exclusiveStartKey, per_page=pageSize, error_out=False ) + if DataStoreObj is None: + return jsonify({"Entries": [], "ExclusiveStartKey": None}), 200 + + AllEntries = [] + for entry in DataStoreObj.items: + AllEntries.append({ + "Target": entry.name, + "Value": entry.value + }) + + return jsonify({"data":{ + "Entries": AllEntries, + "ExclusiveStartKey": str(DataStoreObj.next_num) if DataStoreObj.has_next else None + }}) # TODO: Implement + +@DataStoreRoute.route("/persistence/set", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def setKey(): + placeId : int = request.args.get("placeId", default=None, type=int) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + key : str = request.args.get("key", default=None, type=str) + target : str = request.args.get("target", default=None, type=str) + valueLength : int = request.args.get("valueLength", default=None, type=int) + + value : str = request.form.get("value", default=None, type=str) + + if valueLength is not None and not valueLength < 1024 * 1024 * 1: # 1MB + return jsonify({"success": False, "message": "Value too large"}),400 + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + if dataType == "standard": + DataStoreObj : PlaceDatastore = PlaceDatastore.query.filter_by( + universe_id = UniverseObj.id, + scope = scope, + key = key, + name = target + ).order_by(PlaceDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceDatastore = PlaceDatastore( + placeid = placeId, + universe_id = UniverseObj.id, + scope=scope, + key=key, + name=target, + value=value + ) + db.session.add(DataStoreObj) + else: + DataStoreObj.value = value + db.session.commit() + elif dataType == "sorted": + try: + value : int = int(value) + except: + return jsonify({"success": False, "message": "Value is not an integer"}), 400 + + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore.query.filter_by( + universe_id = UniverseObj.id, + scope=scope, + key=key, + name=target + ).order_by(PlaceOrderedDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore( + placeid = placeId, + universe_id = UniverseObj.id, + scope=scope, + key=key, + name=target, + value=value + ) + db.session.add(DataStoreObj) + else: + DataStoreObj.value = value + db.session.commit() + + return jsonify({"data":value}) # TODO: Implement + +@DataStoreRoute.route("/persistence/getV2", methods=["POST"]) +@DataStoreRoute.route("/persistence/getv2", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def getv2(): + placeId : int = request.args.get("placeId", default=None, type=int) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + dataBeingRequested = [] + + StartingCount = 0 + while True: + ReqScope : str = request.form.get(f"qkeys[{str(StartingCount)}].scope", default=None, type=str) + if ReqScope is None: + break + Target : str = request.form.get(f"qkeys[{str(StartingCount)}].target", default=None, type=str) + DataStoreName : str = request.form.get(f"qkeys[{str(StartingCount)}].key", default=None, type=str) + if DataStoreName is None or Target is None or ReqScope is None: + break + dataBeingRequested.append({"Scope": ReqScope, "Target": Target, "Key": DataStoreName}) + StartingCount += 1 + if len(dataBeingRequested) == 0: + return jsonify({"data":[], "message": "No data being requested"}), 200 + + ReturnData = [] + if dataType == 'standard': + for targetReq in dataBeingRequested: + DataStoreObj : PlaceDatastore = PlaceDatastore.query.filter_by(universe_id = UniverseObj.id, scope=targetReq["Scope"], key=targetReq["Key"], name=targetReq["Target"]).order_by(PlaceDatastore.updated_at.desc()).first() + if DataStoreObj is not None: + ReturnData.append({ + "Value": DataStoreObj.value, + "Scope": DataStoreObj.scope, + "Key": DataStoreObj.key, + "Target": DataStoreObj.name + }) + elif dataType == 'sorted': + for targetReq in dataBeingRequested: + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore.query.filter_by(universe_id = UniverseObj.id, scope=targetReq["Scope"], key=targetReq["Key"], name=targetReq["Target"]).order_by(PlaceOrderedDatastore.updated_at.desc()).first() + if DataStoreObj is not None: + ReturnData.append({ + "Value": str(DataStoreObj.value), + "Scope": DataStoreObj.scope, + "Key": DataStoreObj.key, + "Target": DataStoreObj.name + }) + + return jsonify({"data":ReturnData}) + +@DataStoreRoute.route("/persistence/increment", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def increment(): + placeId : int = request.args.get("placeId", default=None, type=int) + key : str = request.args.get("key", default=None, type=str) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + target : str = request.args.get("target", default=None, type=str) + value : int = request.args.get("value", default=None, type=int) + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + if dataType == "standard": + DataStoreObj : PlaceDatastore = PlaceDatastore.query.filter_by( + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target + ).order_by(PlaceDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceDatastore = PlaceDatastore( + placeid = placeId, + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target, + value=str(value) + ) + db.session.add(DataStoreObj) + else: + try: + DataStoreObj.value = str(int(DataStoreObj.value) + value) + except: + return jsonify({"data":[], "message": "Value is not an integer"}), 200 + db.session.commit() + elif dataType == "sorted": + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore.query.filter_by( + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target + ).order_by(PlaceOrderedDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore( + placeid = placeId, + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target, + value=value + ) + db.session.add(DataStoreObj) + else: + DataStoreObj.value += value # PlaceOrderedDatastore values should always be integers + + return jsonify({"data":value}) \ No newline at end of file diff --git a/app/routes/discord_internal.py b/app/routes/discord_internal.py new file mode 100644 index 0000000..f3397e0 --- /dev/null +++ b/app/routes/discord_internal.py @@ -0,0 +1,305 @@ +""" + All routes inside here is used to communicate internally with our Discord Bot. +""" + +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.extensions import csrf, redis_controller, get_remote_address +from sqlalchemy import func +from config import Config +from app.models.user import User +from app.models.asset import Asset +from app.models.linked_discord import LinkedDiscord +from app.models.asset_rap import AssetRap +from app.models.placeserver_players import PlaceServerPlayer +from app.enums.MembershipType import MembershipType +from app.services.economy import GetAssetRap +from app.util.membership import GetUserMembership, GiveUserMembership +from app.models.admin_permissions import AdminPermissions +from app.pages.admin.permissionsdefinition import PermissionsDefinition +import datetime +import time +import logging + +DiscordInternal = Blueprint('discord_internal', __name__, url_prefix='/internal/discord_bot') + +@DiscordInternal.before_request +def before_request(): + AuthorizationToken = request.headers.get("InternalAuthorizationKey", default=None, type=str) + if AuthorizationToken != Config.DISCORD_BOT_AUTHTOKEN: + logging.warning(f"Discord Bot Internal API: Unauthorized request from {get_remote_address()}, invalid auth token") + return abort(404) + UserAgent = request.headers.get("User-Agent", default=None, type=str) + if UserAgent != "SyntaxBot/1.0": + logging.warning(f"Discord Bot Internal API: Unauthorized request from {get_remote_address()}, invalid user agent") + return abort(404) + RequesterAddress = get_remote_address() + if RequesterAddress not in Config.DISCORD_BOT_AUTHORISED_IPS: + logging.warning(f"Discord Bot Internal API: Unauthorized request from {RequesterAddress}, not in authorised IP list") + return abort(404) + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise Exception("User does not exist.") + return TargetUser + +def ReturnUserObject( UserObj : User ) -> dict: + user_permissions = AdminPermissions.query.filter_by(userid=UserObj.id).all() + user_permission_names = {p.permission for p in user_permissions} + + is_staff = len(user_permission_names) > 0 + is_owner = "ManageAdminPermissions" in user_permission_names or len(user_permission_names) >= (len(PermissionsDefinition) - 1) + + + return { + "id": UserObj.id, + "username": UserObj.username, + "last_online": time.mktime(UserObj.lastonline.timetuple()), + "created_at": time.mktime(UserObj.created.timetuple()), + "description": UserObj.description, + "membership": GetUserMembership(UserObj, changeToString=True), + "IsStaff": is_staff, + "IsOwner": is_owner + } + +def ReturnItemObject( AssetObj : Asset ) -> dict: + return { + "id": AssetObj.id, + "name": AssetObj.name, + "description": AssetObj.description, + "asset_type": AssetObj.asset_type.name, + "creator": ReturnUserObject(GetUserFromId(AssetObj.creator_id)) if AssetObj.creator_type == 0 else None, + "creator_type": AssetObj.creator_type, + "created_at": time.mktime(AssetObj.created_at.timetuple()), + "updated_at": time.mktime(AssetObj.updated_at.timetuple()), + "is_limited": AssetObj.is_limited, + "is_limited_unique": AssetObj.is_limited_unique, + "is_for_sale": AssetObj.is_for_sale, + "asset_rap": GetAssetRap(AssetObj.id) if AssetObj.is_limited and not AssetObj.is_for_sale else None, + "price_robux": AssetObj.price_robux, + "price_tickets": AssetObj.price_tix, + "sales": AssetObj.sale_count + } + +@DiscordInternal.route("/UsernameLookup", methods=['GET']) +def UsernameLookup(): + Username = request.args.get("username", default=None, type=str) + if Username is None: + return jsonify({ + "success": False, + "message": "Invalid username" + }) + UserObject : User = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User not found" + }) + + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObject) + }) + +@DiscordInternal.route("/UseridLookup", methods=['GET']) +def UseridLookup(): + Userid = request.args.get("userid", default=None, type=int) + if Userid is None: + return jsonify({ + "success": False, + "message": "Invalid userid" + }) + UserObject : User = User.query.filter_by(id=Userid).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User not found" + }) + + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObject) + }) + +@DiscordInternal.route("/ItemLookup", methods=['GET']) +def ItemLookup(): + AssetId = request.args.get("itemid", default=None, type=int) + if AssetId is None: + return jsonify({ + "success": False, + "message": "Invalid itemid" + }) + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObject is None: + return jsonify({ + "success": False, + "message": "Item not found" + }) + if AssetObject.asset_type.value not in [2, 8, 11, 12, 17, 18, 19, 27, 28, 29, 30, 31, 32, 41, 42, 43, 44, 45, 46, 47]: + return jsonify({ + "success": False, + "message": "Item not found" + }) + return jsonify({ + "success": True, + "message": "", + "data": ReturnItemObject(AssetObject) + }) + +@DiscordInternal.route("/UserLookupByDiscordId", methods=['GET']) +def UserLookupByDiscordId(): + DiscordId = request.args.get("discordid", default=None, type=int) + if DiscordId is None: + return jsonify({ + "success": False, + "message": "Invalid discordid" + }) + LinkedDiscordObject : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=DiscordId).first() + if LinkedDiscordObject is None: + return jsonify({ + "success": False, + "message": "User does not have an account linked to their discord account" + }) + UserObject : User = User.query.filter_by(id=LinkedDiscordObject.user_id).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User not found" + }) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObject) + }) + +@DiscordInternal.route("/AwardUserTurbo", methods=['POST']) +@csrf.exempt +def AwardUserTurbo(): + DiscordId = request.args.get("discordid", default=None, type=int) + if DiscordId is None: + return jsonify({ + "success": False, + "message": "Invalid discordid" + }) + LinkedDiscordObject : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=DiscordId).first() + if LinkedDiscordObject is None: + return jsonify({ + "success": False, + "message": "User does not have an account linked to their discord account" + }) + UserObject : User = User.query.filter_by(id=LinkedDiscordObject.user_id).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User is currently moderated" + }) + UserMembershipStatus : MembershipType = GetUserMembership(UserObject) + if UserMembershipStatus == MembershipType.TurboBuildersClub: + return jsonify({ + "success": False, + "message": "User already has Turbo Builders Club" + }) + if UserMembershipStatus == MembershipType.OutrageousBuildersClub: + return jsonify({ + "success": False, + "message": "User has Outrageous Builders Club" + }) + + if redis_controller.get(f"discord_bot_award_turbo_{UserObject.id}") is not None: + return jsonify({ + "success": False, + "message": "Discord user has recenetly been awarded Turbo Builders Club" + }) + GiveUserMembership(UserObject, MembershipType.TurboBuildersClub, expiration=datetime.timedelta(days=14)) + redis_controller.set(f"discord_bot_award_turbo_{UserObject.id}", "1", ex=60*60*24*14) + return jsonify({ + "success": True, + "message": "" + }) + +@DiscordInternal.route("/Ping", methods=['GET']) +def Ping(): + return jsonify({ + "success": True, + "message": "Pong!" + }) + +@DiscordInternal.route("/VerifyOBCUsers", methods=["POST"]) +@csrf.exempt +def VerifyOBCUsers(): + JSONPayload = request.get_json() + if JSONPayload is None: + return jsonify({ + "success": False, + "message": "Invalid JSON payload" + }) + if "users" not in JSONPayload: + return jsonify({ + "success": False, + "message": "Invalid JSON payload" + }) + + BadUsersIds : list[int] = [] + for UserId in JSONPayload["users"]: + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=UserId).first() + if LinkedDiscordObj is None: + BadUsersIds.append(UserId) + continue + + UserObj : User = User.query.filter_by(id=LinkedDiscordObj.user_id).first() + if UserObj is None: + BadUsersIds.append(UserId) + continue + + UserMembershipType : MembershipType = GetUserMembership(UserObj) + if UserMembershipType != MembershipType.OutrageousBuildersClub: + BadUsersIds.append(UserId) + continue + + return jsonify({ + "success": True, + "message": "", + "bad_users": BadUsersIds + }) + +@DiscordInternal.route("/GetSiteStats", methods=["GET"]) +def SiteStats(): + UsersOnline = User.query.filter(User.lastonline > (datetime.datetime.utcnow() - datetime.timedelta(minutes=1))).count() + UsersIngame = PlaceServerPlayer.query.count() + + return jsonify({ + "success": True, + "message": "", + "data": { + "users_online": UsersOnline, + "users_ingame": UsersIngame + } + }) diff --git a/app/routes/discourse_sso.py b/app/routes/discourse_sso.py new file mode 100644 index 0000000..f61670b --- /dev/null +++ b/app/routes/discourse_sso.py @@ -0,0 +1,96 @@ +from flask import Blueprint, render_template, redirect, url_for, request, flash, jsonify, session, abort +from config import Config +from app.extensions import db +from app.util import auth +from app.models.user import User +from app.models.user_email import UserEmail + +import hashlib +import hmac +import base64 +import urllib.parse +import time +import logging + +config = Config() +discourse_sso = Blueprint("discourse_sso", __name__, url_prefix="/discourse") + +@discourse_sso.before_request +def VerifyUserAgent(): + if not config.DISCOURSE_SSO_ENABLED: + return abort(404) + +def VerifyPayloadSignature( Payload : str, Signature : str ) -> bool: + """ + Verifies the payload signature + """ + return hmac.compare_digest( + Signature, + hmac.new( + key = config.DISCOURSE_SECRET_KEY.encode("utf-8"), + msg = Payload.encode("utf-8"), + digestmod = hashlib.sha256 + ).hexdigest() + ) + +def SignPayload( Payload : str ) -> str: + """ + Signs the payload and returns the signature + """ + return hmac.new( + key = config.DISCOURSE_SECRET_KEY.encode("utf-8"), + msg = Payload.encode("utf-8"), + digestmod = hashlib.sha256 + ).hexdigest() + +@discourse_sso.route("/", methods=["GET"]) +@auth.authenticated_required +def DiscourseSSOIndex(): + return render_template("discourse/leaving-syntax.html", baseurl=config.DISCOURSE_FORUM_BASEURL) + +@discourse_sso.route("/sso", methods=["GET", "POST"]) +@auth.authenticated_required +def DiscourseSSO(): + SSOPayload : str = request.args.get("sso", default=None, type=str) + PayloadSignature : str = request.args.get("sig", default=None, type=str) + + if SSOPayload is None or PayloadSignature is None: + return abort(404) + isValidSignature = VerifyPayloadSignature(SSOPayload, PayloadSignature) + if not isValidSignature: + return abort(404) + Payload = urllib.parse.parse_qs(base64.b64decode(SSOPayload).decode("utf-8")) + if "nonce" not in Payload: + return abort(404) + nonce = Payload["nonce"][0] + if nonce is None: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id=AuthenticatedUser.id, verified=True).first() + if UserEmailObj is None: + flash("You must have a verified email address to access the forums", "error") + return redirect(url_for("settings.settings_update_email")) + + if request.method == "GET": + return render_template("discourse/sso-confirm.html", baseurl=config.DISCOURSE_FORUM_BASEURL) + elif request.method == "POST": + payload = { + "nonce": nonce, + "email": f"SyntaxUser{AuthenticatedUser.id}@forum.nexium.fit", + "external_id": AuthenticatedUser.id, + "username": AuthenticatedUser.username, + "name": AuthenticatedUser.username, + "avatar_url": f"{config.BaseURL}/Thumbs/Head.ashx?x=420&y=420&userId={AuthenticatedUser.id}&rnd={time.time()}", + "avatar_force_update": "true", + "require_activation": "false", + "suppress_welcome_message": "true" + } + + payload = urllib.parse.urlencode(payload) + payload = base64.b64encode(payload.encode("utf-8")).decode("utf-8") + payloadSignature = SignPayload(payload) + + return redirect(f"{config.DISCOURSE_FORUM_BASEURL}/session/sso_login?sso={payload}&sig={payloadSignature}") + else: + return abort(404) \ No newline at end of file diff --git a/app/routes/fflagssettings.py b/app/routes/fflagssettings.py new file mode 100644 index 0000000..26071c9 --- /dev/null +++ b/app/routes/fflagssettings.py @@ -0,0 +1,147 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response +from app.models.fflag_group import FflagGroup +from app.models.fflag_value import FflagValue +from app.models.gameservers import GameServer +from app.extensions import redis_controller, get_remote_address +import json +import base64 +import os +import requests + +FFlagRoute = Blueprint("fflag", __name__, url_prefix="/") + +def ClearCache( GroupId : int ): + redis_controller.delete("fflags_" + str(GroupId)) + GenerateFFlags(GroupId, True) + +def GenerateFFlags( GroupId : int, BypassCache : bool = False ) -> dict: + if not BypassCache: + CachedFFlags = redis_controller.get("fflags_" + str(GroupId)) + if CachedFFlags is not None: + return json.loads(CachedFFlags) + + FFlagValues = FflagValue.query.filter_by(group_id=GroupId).all() + if FFlagValues is None: + return jsonify({}),200 + + FinalData = {} + for FFlagValue in FFlagValues: + FinalData[FFlagValue.name] = str(base64.b64decode(FFlagValue.flag_value).decode('utf-8')) + + redis_controller.set("fflags_" + str(GroupId), json.dumps(FinalData), ex = 60 * 60) + return FinalData + +@FFlagRoute.route("/Setting/QuietGet/", methods=["GET"]) +@FFlagRoute.route("/Setting/QuietGet//", methods=["GET"]) +@FFlagRoute.route("/Setting/Get//", methods=["GET"]) +def get_fflag(group): + api_key = request.headers.get('apiKey') or request.args.get('apiKey') + + json_file_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'files') + + if api_key == "D6925E56-BFB9-4908-AAA2-A5B1EC4B2D78": + json_file_path = os.path.join(json_file_path, 'Client18Setting.json') + return get_json_response(json_file_path) + + if group in ["RCCServicet0OzoN08twUekqhPt2N5", "ClientAppSettings", "RCCServiceS2kvmA2lVpz4g9qlbDw1"]: + json_file_path = os.path.join(json_file_path, f'{group}.json') + return get_json_response(json_file_path) + elif group in ["Client2014Setting", "Client2014SharedConf"]: + json_file_path = os.path.join(json_file_path, 'Client2014SharedConf.json') + return get_json_response(json_file_path) + else: + return 'Invalid request', 400 + +def get_json_response(file_path): + try: + with open(file_path, 'r') as file: + json_data = json.load(file) + return jsonify(json_data), 200 + except FileNotFoundError: + return 'File not found', 404 + except json.JSONDecodeError: + return 'Invalid JSON file', 500 + +@FFlagRoute.route("/v1/settings/application", methods=["GET"]) +def fflag_application(): + application_name = request.args.get("applicationName") + if not application_name: + return jsonify({"error": "Missing 'applicationName' query parameter"}), 400 + + base_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'files') + + file_mapping = { + "PCDesktopClient": os.path.join(base_path, 'PCDesktopClient.json'), + "GD5Z5gO1n0gYX1P": os.path.join(base_path, 'PCDesktopClient.json'), + "6sxp8X2Y02t0OzoN08twUekqhPt2N5": os.path.join(base_path, '2020RCCService.json'), + "6sxp8X2Y02SecureR": os.path.join(base_path, '2020RCCService.json'), + "S2kvmA2lVpz4g9qlbDw1": os.path.join(base_path, '2020RCCService.json'), + "RCCServicet0OzoN08twUekqhPt2N5": os.path.join(base_path, '2020RCCService.json') + } + # 2020 rcc fix + request_host = request.headers.get('Host', '') + if request_host.startswith("clientsettingzcdn."): + json_file_path = os.path.join(base_path, 'classicrcc.json') + else: + json_file_path = file_mapping.get(application_name) + + #json_file_path = file_mapping.get(application_name) + if not json_file_path: + #os.path.join(base_path, '2020RCCService.json'), + return jsonify({"error": f"No configuration found forr '{application_name}'"}), 404 + + if not os.path.exists(json_file_path): + return jsonify({"error": "Configuration file not found"}), 404 + + try: + with open(json_file_path, 'r') as json_file: + json_data = json.load(json_file) + return jsonify(json_data) + except (json.JSONDecodeError, IOError) as e: + return jsonify({"error": "Failed to read or parse JSON file", "details": str(e)}), 500 + +@FFlagRoute.route("/v2/settings/application/", methods=["GET"]) +def fflag_application_v2(application_name): + base_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'files') + + if application_name == "PCDesktopClient": + json_file = "2022DesktopClient.json" + elif application_name == "PCStudioApp": + json_file = "2022StudioApp.json" + else: + return jsonify({"error": "Unsupported application"}), 400 + + json_file_path = os.path.join(base_path, json_file) + + if not os.path.exists(json_file_path): + return jsonify({"error": "Configuration file not found"}), 404 + + try: + with open(json_file_path, 'r') as f: + fflags_data = json.load(f) + + return jsonify(fflags_data) + + except (json.JSONDecodeError, IOError) as e: + return jsonify({ + "error": "Failed to read configuration", + "details": str(e) + }), 500 + +"""@FFlagRoute.route("/v1/settings/application", methods=["GET"]) +def fflag_application(): + + application_name = request.args.get("applicationName") + if not application_name: + return jsonify({"error": "Missing 'applicationName' query parameter"}), 400 + + external_url = f"https://www.solario.ws/v1/settings/application?applicationName={application_name}" + + try: + external_response = requests.get(external_url, timeout=5) + if external_response.status_code == 200: + return jsonify(external_response.json()), 200 + else: + return jsonify({"error": f"External service error: {external_response.status_code}"}), external_response.status_code + except requests.RequestException as e: + return jsonify({"error": f"Failed to fetch data from external service: {str(e)}"}), 500 """ \ No newline at end of file diff --git a/app/routes/friendapi.py b/app/routes/friendapi.py new file mode 100644 index 0000000..16a2baf --- /dev/null +++ b/app/routes/friendapi.py @@ -0,0 +1,311 @@ +# friends.roblox.com + +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from app.util import auth, websiteFeatures, friends +from app.models.user import User +from app.models.friend_relationship import FriendRelationship +from app.models.friend_request import FriendRequest +from app.models.follow_relationship import FollowRelationship +from app.extensions import limiter, db, redis_controller, get_remote_address, csrf, user_limiter +from flask_wtf.csrf import CSRFError, generate_csrf +from sqlalchemy import or_ +from datetime import datetime, timedelta + +from app.services.user_relationships import followings + +FriendsAPIRoute = Blueprint('friendsapi', __name__, url_prefix="/") +csrf.exempt(FriendsAPIRoute) +@FriendsAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@FriendsAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@FriendsAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@FriendsAPIRoute.route('/v1/my/friends/count', methods=['GET']) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def GetFriendCount(): + AuthenticatedUser : User = auth.GetCurrentUser() + return jsonify( { "count": friends.GetFriendCount( AuthenticatedUser.id ) } ), 200 + +@FriendsAPIRoute.route('/v1/users//friends/count', methods=['GET']) +@limiter.limit("60/minute") +def GetFriendCountByUserId( userId : int ): + UserObj : User = User.query.filter_by( id = userId ).first() + if UserObj is None: + return jsonify( { "errors": [ { "code": 1, "message": "User not found" } ] } ), 404 + return jsonify( { "count": friends.GetFriendCount( userId ) } ), 200 + +@FriendsAPIRoute.route("/v1/user/friend-requests/count", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def GetMyFriendRequestsCount(): + AuthenticatedUser : User = auth.GetCurrentUser() + FriendRequestCount : int = max(FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id ).count(), 500) + return jsonify( { "count": FriendRequestCount } ), 200 + +@FriendsAPIRoute.route("/v1/users//friends", methods=["GET"]) +@limiter.limit("60/minute") +def get_user_friends( userid : int ): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipList : list[FriendRelationship] = FriendRelationship.query.filter(or_(FriendRelationship.user_id == userid, FriendRelationship.friend_id == userid)).all() + FriendList = [] + for FriendRelationshipObj in FriendRelationshipList: + FriendObj : User = User.query.filter_by(id=FriendRelationshipObj.user_id if FriendRelationshipObj.user_id != userid else FriendRelationshipObj.friend_id).first() + if FriendObj is None: + continue + FriendList.append({ + "isOnline": FriendObj.lastonline > datetime.utcnow() - timedelta(minutes=1), + "isDeleted": False, + "friendFrequentScore": 0, + "friendFrequentRank": 1, + "hasVerifiedBadge": False, + "description": FriendObj.description, + "created": FriendObj.created.isoformat(), + "isBanned": False, + "externalAppDisplayName": None, + "id": FriendObj.id, + "name": FriendObj.username, + "displayName": FriendObj.username + }) + + return jsonify({ + "data": FriendList + }) + +@FriendsAPIRoute.route("/v1/user/friend-requests/decline-all", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def decline_all_friend_requests(): + AuthenticatedUser : User = auth.GetCurrentUser() + FriendRequestList : list[FriendRequest] = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id ).all() + for FriendRequestObj in FriendRequestList: + db.session.delete( FriendRequestObj ) + db.session.commit() + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//unfriend", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +@user_limiter.limit("60/minute") +def unfriend_user( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship( AuthenticatedUser.id, UserObj.id ) + if FriendRelationshipObj is not None: + db.session.delete( FriendRelationshipObj ) + db.session.commit() + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//request-friendship", methods=["POST"]) +@limiter.limit("15/minute") +@auth.authenticated_required_api +@user_limiter.limit("15/minute") +def request_friendship( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + if userId == AuthenticatedUser.id: + return jsonify({ "errors": [{ "code": 7, "message": "The user cannot be friends with itself."}] }), 400 + if friends.GetFriendCount( AuthenticatedUser.id ) >= 200: + return jsonify({ "errors": [{ "code": 31, "message": "User with max friends sent friend request."}] }), 400 + if friends.IsFriends( AuthenticatedUser.id, UserObj.id ): + return jsonify({ "errors": [{ "code": 5, "message": "The target user is already a friend."}] }), 400 + + OtherFriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id, requester_id = UserObj.id ).first() + if OtherFriendRequestObj is not None: + if friends.GetFriendCount( UserObj.id ) >= 200: + return jsonify({ "errors": [{ "code": 12, "message": "The target users friends limit has been exceeded."}] }), 400 + + db.session.delete( OtherFriendRequestObj ) + NewFriendRelationshipObj : FriendRelationship = FriendRelationship( user_id = AuthenticatedUser.id, friend_id = UserObj.id ) + db.session.add( NewFriendRelationshipObj ) + db.session.commit() + + return jsonify({ "success": True }), 200 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = UserObj.id, requester_id = AuthenticatedUser.id ).first() + if FriendRequestObj is None: + FriendRequestObj = FriendRequest( requestee_id = UserObj.id, requester_id = AuthenticatedUser.id ) + db.session.add( FriendRequestObj ) + db.session.commit() + + return jsonify({ "success": True }), 200 + +@FriendsAPIRoute.route("/v1/users//accept-friend-request", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required_api +@user_limiter.limit("30/minute") +def accept_friend_request( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id, requester_id = UserObj.id ).first() + if FriendRequestObj is None: + return jsonify({ "errors": [{ "code": 10, "message": "The friend request does not exist."}] }), 400 + + if friends.GetFriendCount( AuthenticatedUser.id ) >= 200: + return jsonify({ "errors": [{ "code": 11, "message": "The current users friends limit has been exceeded."}] }), 400 + if friends.GetFriendCount( UserObj.id ) >= 200: + return jsonify({ "errors": [{ "code": 12, "message": "The target users friends limit has been exceeded."}] }), 400 + + db.session.delete( FriendRequestObj ) + NewFriendRelationshipObj : FriendRelationship = FriendRelationship( user_id = AuthenticatedUser.id, friend_id = UserObj.id ) + db.session.add( NewFriendRelationshipObj ) + db.session.commit() + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//decline-friend-request", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required_api +@user_limiter.limit("30/minute") +def decline_friend_request( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id, requester_id = UserObj.id ).first() + if FriendRequestObj is None: + return jsonify({ "errors": [{ "code": 10, "message": "The friend request does not exist."}] }), 400 + + db.session.delete( FriendRequestObj ) + db.session.commit() + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//followers/count", methods=["GET"]) +@limiter.limit("60/minute") +def get_user_followers_count( userId : int ): + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + return jsonify( { "count": followings.get_follower_count( requested_user = UserObj ) } ), 200 + +@FriendsAPIRoute.route("/v1/users//followings/count", methods=["GET"]) +@limiter.limit("60/minute") +def get_user_followings_count( userId : int ): + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + return jsonify( { "count": followings.get_following_count( requested_user = UserObj ) } ), 200 + +@FriendsAPIRoute.route("/v1/user/following-exists", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def following_exists(): + AuthenticatedUser : User = auth.GetCurrentUser() + if not request.is_json: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + if "targetUserIds" not in request.json: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + + TargetUserIds : list[int] = request.json["targetUserIds"] + ResponseList = [] + + if len(TargetUserIds) > 100: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + + for TargetUserId in TargetUserIds: + if TargetUserId < 1: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + TargetUser : User = User.query.filter_by( id = TargetUserId ).first() + if TargetUser is None: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + + ResponseList.append({ + "isFollowing": followings.is_following( follower_user = AuthenticatedUser, followed_user = TargetUser ), + "isFollowed": followings.is_following( follower_user = TargetUser, followed_user = AuthenticatedUser ), + "userId": TargetUserId + }) + + return jsonify({ + "followings": ResponseList + }), 200 + +@FriendsAPIRoute.route("/v1/users//unfollow", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +@user_limiter.limit("60/minute") +def unfollow_user( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + + try: + followings.unfollow_user( + current_follower = AuthenticatedUser, + followed_user = UserObj + ) + except followings.FollowingExceptions.UserNotFollowing: + return jsonify({}), 200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({ "errors": [{ "code": 9, "message": "The flood limit has been exceeded."}] }), 429 + except followings.FollowingExceptions.FollowingIsDisabled: + return jsonify({ "errors": [{ "code": 0, "message": "Following is disabled."}] }), 500 + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//follow", methods=["POST"]) +@limiter.limit("10/minute") +@auth.authenticated_required_api +@user_limiter.limit("10/minute") +def follow_user( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + if userId == AuthenticatedUser.id: + return jsonify({ "errors": [{ "code": 8, "message": "The user cannot follow itself."}] }), 400 + + try: + followings.follow_user( + follow_user = AuthenticatedUser, + followed_user = UserObj + ) + except followings.FollowingExceptions.AlreadyFollowing: + return jsonify({ "success": True }), 200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({ "errors": [{ "code": 9, "message": "The flood limit has been exceeded."}] }), 429 + except followings.FollowingExceptions.FollowingIsDisabled: + return jsonify({ "errors": [{ "code": 0, "message": "Following is disabled."}] }), 500 + + return jsonify({ "success": True }), 200 diff --git a/app/routes/gamejoin.py b/app/routes/gamejoin.py new file mode 100644 index 0000000..6d7e719 --- /dev/null +++ b/app/routes/gamejoin.py @@ -0,0 +1,767 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, after_this_request, Response +from app.util import auth, websiteFeatures +from app.extensions import db, redis_controller, csrf, get_remote_address +import uuid +import requests +import time +from config import Config +import json +from datetime import datetime, timedelta +import secrets +import random +import string +import logging +import base64 +import hashlib + +from app.models.user import User +from app.models.gameservers import GameServer +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.place import Place +from app.models.asset import Asset +from app.models.login_records import LoginRecord +from app.models.user_hwid_log import UserHWIDLog +from app.models.user_ban import UserBan +from app.models.admin_permissions import AdminPermissions +from app.models.universe import Universe +from app.models.asset_version import AssetVersion +from app.enums.AssetType import AssetType +from app.enums.BanType import BanType +from app.enums.MembershipType import MembershipType +from app.enums.PlaceYear import PlaceYear +from app.services.gameserver_comm import perform_post +from app.util.membership import GetUserMembership +from app.util.signscript import signUTF8 +from app.util.assetversion import GetLatestAssetVersion +from app.routes.jobreporthandler import EvictPlayer +from app.routes.asset import GenerateTempAuthToken + +config = Config() + +class PlaceServerCooldownStart( Exception ): + pass +class NoAvailableGameServers( Exception ): + pass +class MissingData( Exception ): + pass +class UnsupportedPlaceYear( Exception ): + pass +class UnexpectedStatusCode( Exception ): + pass +class BadResponseData( Exception ): + pass +def CreateNewPlaceServer( placeId : int, reserved_server_access_code : str = None ) -> PlaceServer: + """ + Starts a new PlaceServer for the given placeId, raises appropriate exceptions if it fails + + :param placeId: The placeId to start a new PlaceServer for + :reserved_server_access_code: The reserved server access code to use, if None it will be a public server + + :return: PlaceServer object if successful + """ + CooldownKeyName : str = f"create_new_place_server:{placeId}:{reserved_server_access_code}" + if redis_controller.get(CooldownKeyName) is not None: + logging.debug(f"CreateNewPlaceServer -> Place {placeId} recently requested to create a new place server, skipping") + raise PlaceServerCooldownStart("") + redis_controller.setex(CooldownKeyName, 40, "1") + + SelectedGameServerObj : GameServer = GameServer.query.filter_by( + allowGameServerHost = True + ).filter( + GameServer.lastHeartbeat > datetime.utcnow() - timedelta(seconds=30) + ).order_by( + GameServer.RCCmemoryUsage.asc() + ).first() + + if SelectedGameServerObj is None: + logging.error(f"CreateNewPlaceServer -> Failed to find a available Gameserver to host Place {placeId}") + raise NoAvailableGameServers("") + + PlaceObj : Place = Place.query.filter_by( placeid = placeId ).first() + AssetObj : Asset = Asset.query.filter_by( id = placeId ).first() + + if PlaceObj is None or AssetObj is None: + logging.error(f"CreateNewPlaceServer -> Failed to find Place / Asset {placeId} in database") + raise MissingData("") + + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + logging.error(f"CreateNewPlaceServer -> Failed to find Universe {PlaceObj.parent_universe_id} in database for Place {placeId}") + raise MissingData("") + + logging.info(f"CreateNewPlaceServer -> Attempting to start new place server for Place {PlaceObj.placeid}, Universe {UniverseObj.id} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), reserved_server_access_code: {reserved_server_access_code}") + + RequestSession = requests.Session() + RequestSession.headers.update({ + "Authorization": SelectedGameServerObj.accessKey + }) + + JSONOpenPayload = {} + GameOpenRoute = "Game" + JobId : str = str( uuid.uuid4() ) + CommApiKey : str = str( uuid.uuid4() ) + + LatestPlaceVersion : AssetVersion = GetLatestAssetVersion( AssetObj ) + + if UniverseObj.place_year == PlaceYear.Sixteen: + TempPlaceAuthorizationToken : str = GenerateTempAuthToken( placeId, Expiration = 200, CreatorIP = None ) + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": AssetObj.creator_type, + "SpecialAccessToken": TempPlaceAuthorizationToken, + "useNewLoadFile": False, + "loadfile_location": f"{config.BaseURL}/game/gameserver2016.lua", + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.Eighteen: + GameOpenRoute = "Game2018" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": "User" if AssetObj.creator_type == 0 else "Group", + "jobid": JobId, + "apikey": CommApiKey, + "maxplayers": PlaceObj.maxplayers, + "address": SelectedGameServerObj.serverIP, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.Twenty: + GameOpenRoute = "Game2020" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": "User" if AssetObj.creator_type == 0 else "Group", + "jobid": JobId, + "apikey": CommApiKey, + "maxplayers": PlaceObj.maxplayers, + "address": SelectedGameServerObj.serverIP, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.Fourteen: + GameOpenRoute = "Game2014" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": AssetObj.creator_type, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.TwentyOne: + GameOpenRoute = "Game2021" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": "User" if AssetObj.creator_type == 0 else "Group", + "jobid": JobId, + "apikey": CommApiKey, + "maxplayers": PlaceObj.maxplayers, + "address": SelectedGameServerObj.serverIP, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + else: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId}, unsupported place year got {UniverseObj.place_year.name}") + raise UnsupportedPlaceYear(f"Year {UniverseObj.place_year.name} is not supported") + + if UniverseObj.place_year in [ PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne ]: + redis_controller.set(f"GameServerAccessKey:{CommApiKey}:{JobId}", "1", ex=60*60*24*2) + if UniverseObj.place_year in [ PlaceYear.Fourteen ]: + redis_controller.set(f"gameserver2014lua:{PlaceObj.placeid}:{JobId}", "1", ex=120) + + try: + OpenJobReq = perform_post( + TargetGameserver = SelectedGameServerObj, + Endpoint = GameOpenRoute, + JSONData = JSONOpenPayload, + RequestTimeout = 35 + ) + except requests.exceptions.Timeout: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), open request timed out") + raise NoAvailableGameServers(f"Request timed out") + + if OpenJobReq.status_code != 200: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), response: {OpenJobReq.content}") + raise UnexpectedStatusCode(f"Got status code {OpenJobReq.status_code} from Gameserver") + + OpenJobReqJSON = OpenJobReq.json() + if "jobid" not in OpenJobReqJSON or "port" not in OpenJobReqJSON: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), missing 'port' or 'jobid' in JSON,response: {OpenJobReqJSON}") + raise BadResponseData(f"Missing 'port' or 'jobid' in JSON response") + redis_controller.set(f"place:{OpenJobReqJSON['jobid']}:origin", str(SelectedGameServerObj.serverId), ex=60*60*24*2) + PlaceServerObject = PlaceServer( + serveruuid = OpenJobReqJSON["jobid"], + originServerId = SelectedGameServerObj.serverId, + serverIP = SelectedGameServerObj.serverIP, + serverPort = OpenJobReqJSON["port"], + serverPlaceId = placeId, + maxPlayerCount = PlaceObj.maxplayers, + reservedServerAccessCode = reserved_server_access_code + ) + + db.session.add(PlaceServerObject) + db.session.commit() + logging.info(f"CreateNewPlaceServer -> Started new place server for Place {placeId}, Universe {UniverseObj.id} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), is_reserved: {reserved_server_access_code is not None}") + + return PlaceServerObject + +def GetSuitablePlaceServer( placeId : int ) -> PlaceServer | bool: + """ + Returns a suitable PlaceServer for the given placeId + + :param placeId: The placeId to find a suitable PlaceServer for + + :return: PlaceServer object if successful, returns False if no PlaceServer is found + """ + PlaceObj : Place = Place.query.filter_by( placeid = placeId ).first() + if PlaceObj is None: + logging.error(f"GetSuitablePlaceServer -> Failed to find Place {placeId} in database") + raise MissingData("") + + HasFoundSuitablePlaceServer : bool = False + + PlaceServers = PlaceServer.query.filter_by( serverPlaceId = placeId, reservedServerAccessCode = None ).all() + if PlaceServers is None or ( type(PlaceServers) == list and len(PlaceServers) == 0 ): + HasFoundSuitablePlaceServer = False + + if not HasFoundSuitablePlaceServer: + for PlaceServerObject in PlaceServers: + PlaceServerObject : PlaceServer + if PlaceServerObject.maxPlayerCount <= PlaceServerObject.playerCount: + continue + if PlaceServerObject.serverRunningTime == 0: + continue + return PlaceServerObject + + if HasFoundSuitablePlaceServer is False: + logging.info(f"GetSuitablePlaceServer -> Place {placeId} has no PlaceServers, attempting to start one") + try: + NewPlaceServerObj = CreateNewPlaceServer( placeId = placeId, reserved_server_access_code = None ) + except: + return False + + return False + +GameJoinRoute = Blueprint('gamejoin', __name__, url_prefix='/') + +@GameJoinRoute.route('/universes/validate-place-join', methods=['GET']) +def validateplacejoin(): + return "true" + +@GameJoinRoute.route('/Game/Join2012.ashx', methods=['GET']) +def Join2012(): + SignedFirstTicketRaw : str = signUTF8("print('hello')", formatAutomatically=True, addNewLine=True, twelveclient=True) + Resposne = make_response(SignedFirstTicketRaw) + + return Resposne + +@GameJoinRoute.route('/game/validate-machine', methods=['POST']) +@csrf.exempt +def validate_machine(): + try: + if request.cookies.get("t") is None: + raise Exception("Request has no 't' cookie") + + macAddressesList = request.form.getlist('macAddresses') + if len(macAddressesList) > 0: + combinedAddress = "" + for macAddress in macAddressesList: + combinedAddress += macAddress + UserHWIDHash = hashlib.sha256(combinedAddress.encode("utf-8")).hexdigest() + tracking_cookie = request.cookies.get("t") + redis_controller.setex(f"hwid:{str(tracking_cookie)}", 60, UserHWIDHash) + except Exception as e: + logging.error(f"Failed during /game/validate-machine: {e}") + return jsonify({ + "success": True, + "message": "" + }) + +@GameJoinRoute.route('/Game/MachineConfiguration.ashx', methods=['POST', 'GET']) +@csrf.exempt +def machine_configuration(): + return "" + +@GameJoinRoute.route('/v1/heartbeat', methods=['POST', 'GET']) +@csrf.exempt +def heartbeat(): + response = make_response( + jsonify({ + "success": "true", + }) + ) + return response + +def ReturnPlaceLauncher( message : str, status : int, authenticated_userid : int = None) -> Response: + response = make_response( + jsonify({ + "jobId": None, + "status": status, + "joinScriptUrl": None, + "authenticationUrl": config.BaseURL + "/Login/Negotiate.ashx", + "authenticationTicket": None, + "message": message, + "rand": random.randint(0, 100000000000) + }) + ) + + if authenticated_userid is not None and request.cookies.get(".ROBLOSECURITY") is None: + response.set_cookie( + key = ".ROBLOSECURITY", + value = auth.CreateToken( userid = authenticated_userid, expireIn = 60 * 60 * 24 * 3, ip = get_remote_address() ), + expires = datetime.utcnow() + timedelta(days=3), + domain = f".{config.BaseDomain}" + ) + response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" + return response + + +def BanUsersForSharedHwid(hwid: str, triggering_user_id: int | None = None) -> bool: + MatchingHWIDLogs : list[UserHWIDLog] = UserHWIDLog.query.filter_by(hwid=hwid).distinct(UserHWIDLog.user_id).all() + if len(MatchingHWIDLogs) < 2: + return False + + MatchingUserIds = {log.user_id for log in MatchingHWIDLogs if log.user_id is not None} + if len(MatchingUserIds) < 2: + return False + + for user_id in MatchingUserIds: + UserObj : User | None = User.query.filter_by(id=user_id).first() + if UserObj is None: + continue + if AdminPermissions.query.filter_by(userid=UserObj.id).first() is not None: + return False + + for user_id in MatchingUserIds: + UserObj : User | None = User.query.filter_by(id=user_id).first() + if UserObj is None: + continue + if UserObj.accountstatus != 1: + continue + ExistingActiveBan : UserBan | None = UserBan.query.filter_by(userid=UserObj.id, acknowledged=False).order_by(UserBan.id.desc()).first() + if ExistingActiveBan is not None: + continue + + BanObj = UserBan( + userid=UserObj.id, + author_userid=1, + reason="Alting is not permitted on NEXIUM, contact us if you believe this is unfair", + ban_type=BanType.Deleted, + moderator_note=f"Automatic HWID alt ban for shared HWID {hwid}", + expires_at=None + ) + db.session.add(BanObj) + UserObj.accountstatus = 3 + + if MatchingUserIds: + db.session.commit() + return True + +@GameJoinRoute.route('/game/PlaceLauncher.ashx', methods=['GET', 'POST']) +@GameJoinRoute.route('/Game/PlaceLauncher.ashx', methods=['GET', 'POST']) +@GameJoinRoute.route('/game/placelauncher.ashx', methods=['GET', 'POST']) +@GameJoinRoute.route('/Game/placelauncher.ashx', methods=['GET', 'POST']) +@csrf.exempt +def placelauncher(): + if not websiteFeatures.GetWebsiteFeature("GameJoinAPI"): + logging.warning("opsec") + + AuthenticatdUser = None + placeid = request.args.get( key = 'placeId', default = None, type = int) or request.args.get( key = 'placeid', default = None, type = int) + ticket = request.args.get( key = 't', default = None, type = str) + if ticket is None: + AuthenticatdUser : User | None = auth.GetCurrentUser() + if AuthenticatdUser is None: + return ReturnPlaceLauncher("Invalid request", 12) + if placeid is None: + return ReturnPlaceLauncher("Invalid request", 12) + + requestedJobId = request.args.get( key = 'jobId', default = None, type = str) or request.args.get( key = 'jobid', default = None, type = str) + isTeleport = request.args.get( key = 'isTeleport', default = None, type = str ) == "true" + requestType = request.args.get( key = 'request', default = "RequestGame", type = str ) + + if request.user_agent != "Roblox/WinInet": + isTeleport = False + + authticketInfo = redis_controller.get(f"authticket:{ticket}") + if authticketInfo is None and AuthenticatdUser is None: + return ReturnPlaceLauncher("Invalid authentication ticket", 12) + + userId = int(authticketInfo) if authticketInfo is not None else AuthenticatdUser.id + if PlaceServerPlayer.query.filter_by(userid=userId).first() is not None and not isTeleport: + CurrentPlaceServerPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(userid=userId).first() + CurrentPlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=CurrentPlaceServerPlayerObj.serveruuid).first() + try: + EvictPlayer(CurrentPlaceServerObj, userId) + except: + return ReturnPlaceLauncher("Invalid request", 12) + + AssetObj : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + if AssetObj.asset_type != AssetType.Place or AssetObj.moderation_status == 2: + return ReturnPlaceLauncher("Invalid place", 14) + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + if PlaceObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj.is_public == False and userId != 1: + return ReturnPlaceLauncher("Invalid place", 14) + + UserObj : User = User.query.filter_by(id=userId).first() + + if request.cookies.get("t") is not None: + Tracking_Cookie = request.cookies.get("t") + UserHWIDHash = redis_controller.get(f"hwid:{str(Tracking_Cookie)}") + if UserHWIDHash is not None: + UserHWIDLogObject = UserHWIDLog( + user_id = UserObj.id, + hwid = UserHWIDHash + ) + db.session.add(UserHWIDLogObject) + db.session.commit() + + redis_controller.delete(f"hwid:{str(Tracking_Cookie)}") + + if BanUsersForSharedHwid(UserHWIDHash, UserObj.id): + return ReturnPlaceLauncher("Invalid session", 12) + + UserMembershipStatus : MembershipType = GetUserMembership(UserObj) + if UniverseObj.bc_required and UserMembershipStatus == MembershipType.NonBuildersClub: + return ReturnPlaceLauncher("Builders Club required", 12) + if UniverseObj.minimum_account_age > (datetime.utcnow() - UserObj.created).days: + return ReturnPlaceLauncher("Account is too new to join this place", 12) + + if requestedJobId is not None: + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = requestedJobId, serverPlaceId = placeid, reservedServerAccessCode = None ).first() + if PlaceServerObj is None: + return ReturnPlaceLauncher("Invalid request", 12) + if PlaceServerObj.maxPlayerCount <= PlaceServerObj.playerCount: + return ReturnPlaceLauncher("Server is full", 6, authenticated_userid=userId) + elif requestType == "RequestPrivateGame": + server_accessCode = request.args.get( key = 'accessCode', default = None, type = str) + if server_accessCode is None: + return ReturnPlaceLauncher("Invalid request", 12) + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serverPlaceId = placeid, reservedServerAccessCode = server_accessCode ).first() + if PlaceServerObj is None: + return ReturnPlaceLauncher("Invalid request", 12) + if redis_controller.exists(f"reservedserveraccesscode:{str(PlaceServerObj.serveruuid)}:{UserObj.id}") is False: + return ReturnPlaceLauncher("Invalid request", 12) + if PlaceServerObj.maxPlayerCount <= PlaceServerObj.playerCount: + return ReturnPlaceLauncher("Server is full", 6, authenticated_userid=userId) + + redis_controller.delete(f"reservedserveraccesscode:{str(PlaceServerObj.serveruuid)}:{UserObj.id}") + else: + PlaceServerObj : PlaceServer | bool = GetSuitablePlaceServer( placeId = placeid ) + + if PlaceServerObj is False: + logging.info(f"Placelauncher.ashx : {str(placeid)} : {UserObj.username} [{UserObj.id}] : No available place servers found yet") + return ReturnPlaceLauncher(None, 1, authenticated_userid=userId) + authenticatedTicketUUID = str(uuid.uuid4()) + redis_controller.setex(f"place:{placeid}:ticket:{authenticatedTicketUUID}", 60, json.dumps({"id": userId, "jobid": str(PlaceServerObj.serveruuid)})) + + authticket = ''.join(random.choices(string.ascii_uppercase + string.digits, k=256)) + redis_controller.set(f"authticket:{authticket}", userId, 60*10) + resp = make_response(jsonify({ + "jobId": PlaceServerObj.serveruuid, + "status": 2, + "joinScriptUrl": config.BaseURL + "/Game/Join.ashx?placeId=" + str(placeid) + "&jobId=" + str(PlaceServerObj.serveruuid) + "&ticket=" + authenticatedTicketUUID, + "authenticationUrl": config.BaseURL + "/Login/Negotiate.ashx", + "authenticationTicket": authticket, + "message": None, + "rand": random.randint(0, 100000000000) + })) + resp.set_cookie("ticket", authenticatedTicketUUID) + if request.cookies.get(".ROBLOSECURITY") is None: + resp.set_cookie( + key = ".ROBLOSECURITY", + value = auth.CreateToken( userid = userId, expireIn = 60 * 60 * 24 * 3, ip = get_remote_address() ), + expires = datetime.utcnow() + timedelta(days=3), + domain = f".{config.BaseDomain}" + ) + return resp + +@GameJoinRoute.route("/v1/join-game", methods=["POST"]) # Meant for 2020 Android +@csrf.exempt +@auth.authenticated_required_api +def gamejoin_api_v1(): + if not websiteFeatures.GetWebsiteFeature("GameJoinAPI"): + return ReturnPlaceLauncher("GameJoinAPI is disabled", 12) + if not request.is_json: + return ReturnPlaceLauncher("Invalid request", 12) + if "placeId" not in request.json: + return ReturnPlaceLauncher("Invalid request", 12) + try: + requestedPlaceId : int = int(request.json["placeId"]) + isTeleport : bool = request.json["isTeleport"] if "isTeleport" in request.json else False + except: + return ReturnPlaceLauncher("Invalid request", 12) + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: # Shouldnt happen but just in case + return ReturnPlaceLauncher("Invalid request", 12) + + userId = AuthenticatedUser.id + if PlaceServerPlayer.query.filter_by(userid=userId).first() is not None and not isTeleport: + CurrentPlaceServerPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(userid=userId).first() + CurrentPlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=CurrentPlaceServerPlayerObj.serveruuid).first() + try: + EvictPlayer(CurrentPlaceServerObj, userId) + except: + logging.error(f"/v1/join-game - Failed to evict player {userId} from place {CurrentPlaceServerObj.serverPlaceId}") + return ReturnPlaceLauncher("Invalid request", 12) + + AssetObj : Asset = Asset.query.filter_by(id=requestedPlaceId).first() + if AssetObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + if AssetObj.asset_type != AssetType.Place or AssetObj.moderation_status == 2: + return ReturnPlaceLauncher("Invalid place", 14) + PlaceObj : Place = Place.query.filter_by(placeid=requestedPlaceId).first() + if PlaceObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj.is_public == False and userId != 1: + return ReturnPlaceLauncher("Invalid place", 14) + + UserMembershipStatus : MembershipType = GetUserMembership(AuthenticatedUser) + if UniverseObj.bc_required and UserMembershipStatus == MembershipType.NonBuildersClub: + return ReturnPlaceLauncher("Builders Club required", 12) + if UniverseObj.minimum_account_age > (datetime.utcnow() - AuthenticatedUser.created).days: + return ReturnPlaceLauncher("Account is too new to join this place", 12) + + PlaceServerObj : PlaceServer | bool = GetSuitablePlaceServer( placeId = requestedPlaceId ) + + if PlaceServerObj is False: + logging.info(f"/v1/join-game : {str(requestedPlaceId)} : {AuthenticatedUser.username} [{AuthenticatedUser.id}] : No available place servers found yet") + return ReturnPlaceLauncher(None, 1, authenticated_userid=userId) + + ClientTicket = GenerateClientTicket(AuthenticatedUser, PlaceServerObj.serveruuid, TicketVersion = 4, PlaceId = requestedPlaceId) + SessionId : str = f"{str(uuid.uuid4())}|{str(PlaceServerObj.serveruuid)}|0|{str(PlaceServerObj.serverIP)}|8|{datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.000Z')}|0|null|AAAAA" + + resp = make_response(jsonify({ + "jobId": PlaceServerObj.serveruuid, + "status": 2, + "authenticationUrl": config.BaseURL + "/Login/Negotiate.ashx", + "authenticationTicket": "", + "message": None, + "rand": random.randint(0, 100000000000), + "joinScript": { + "ClientPort" : 0, + "MachineAddress" : PlaceServerObj.serverIP, + "ServerConnections": [ + { + "Port": PlaceServerObj.serverPort, + "Address": PlaceServerObj.serverIP + } + ], + "ServerPort" : PlaceServerObj.serverPort, + "PingUrl": "", + "PingInterval": 120, + "UserName": AuthenticatedUser.username, + "DisplayName": AuthenticatedUser.username, + "SeleniumTestMode": False, + "UserId": AuthenticatedUser.id, + "ClientTicket": ClientTicket, + "SuperSafeChat": False, + "PlaceId": PlaceServerObj.serverPlaceId, + "MeasurementUrl": "", + "WaitingForCharacterGuid": str(uuid.uuid4()), + "BaseUrl": config.BaseURL, + "ChatStyle": PlaceObj.chat_style.name, + "VendorId": 0, + "ScreenShotInfo": "", + "VideoInfo": "", + "CreatorId": AssetObj.creator_id, + "CreatorTypeEnum": "User" if AssetObj.creator_type == 0 else "Group", + "MembershipType": GetUserMembership(AuthenticatedUser, changeToString=True), + "AccountAge": (datetime.utcnow() - AuthenticatedUser.created).days, + "CookieStoreFirstTimePlayKey": "rbx_evt_ftp", + "CookieStoreFiveMinutePlayKey": "rbx_evt_fmp", + "CookieStoreEnabled": True, + "IsRobloxPlace": False, + "UniverseId": PlaceObj.parent_universe_id, + "GenerateTeleportJoin": False, + "IsUnknownOrUnder13": False, + "SessionId": SessionId, + "DataCenterId": 0, + "FollowUserId": 0, + "BrowserTrackerId": 0, + "UsePortraitMode": False, + "CharacterAppearance": f"http://www.nexium.fit/v1/avatar-fetch?userId={str(AuthenticatedUser.id)}&placeId={str(requestedPlaceId)}", + "GameId": PlaceServerObj.serverPlaceId, + "RobloxLocale": "en_us", + "GameLocale": "en_us", + "characterAppearanceId": AuthenticatedUser.id + } + })) + return resp + +def GenerateClientTicket( UserObj : User, JobId : str, CharacterURL : str = None, CustomTimestamp : str = "", TicketVersion : int = 1, PlaceId : int = 1) -> str: + """ + Generates a client ticket so that RCC can verify the user is authenticated + If CharacterURL is not None, it will be used as the character URL instead of the default + If CustomTimestamp is not 0, it will be used as the timestamp instead of the current time + """ + if CustomTimestamp == "": + CustomTimestamp = datetime.utcnow().strftime("%m/%d/%Y %I:%M:%S %p") + if CharacterURL is None: + if TicketVersion == 2: + CharacterURL = str(UserObj.id) + elif TicketVersion == 1: + CharacterURL = Config.BaseURL + "/Asset/CharacterFetch.ashx?userId=" + str(UserObj.id) # f"http://www.nexium.fit/v1.1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(PlaceId)}" + elif TicketVersion == 4: + CharacterURL = f"http://www.nexium.fit/v1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(PlaceId)}" + + FirstTicketUnsigned = f"{str(UserObj.id)}\n{UserObj.username}\n{CharacterURL}\n{JobId}\n{str(CustomTimestamp)}" + SignedFirstTicketRaw : bytes = signUTF8(FirstTicketUnsigned, formatAutomatically=False, addNewLine=False, useNewKey=(TicketVersion > 1)) + SignedFirstTicket = base64.b64encode(SignedFirstTicketRaw).decode("utf-8") + + AccountAge = (datetime.utcnow() - UserObj.created).days + UserMembershipType = GetUserMembership(UserObj, changeToString=True) + + if TicketVersion <= 3: + SecondTicketUnsigned = f"{str(UserObj.id)}\n{str(JobId)}\n{str(CustomTimestamp)}" + elif TicketVersion == 4: + SecondTicketUnsigned = f"{CustomTimestamp}\n{JobId}\n{UserObj.id}\n{UserObj.id}\n0\n{AccountAge}\nf\n{len(UserObj.username)}\n{UserObj.username}\n{len(UserMembershipType)}\n{UserMembershipType}\n0\n\n0\n\n{len(UserObj.username)}\n{UserObj.username}" + + SignedSecondTicketRaw : bytes = signUTF8(SecondTicketUnsigned, formatAutomatically=False, addNewLine=False, useNewKey=(TicketVersion > 1)) + SignedSecondTicket = base64.b64encode(SignedSecondTicketRaw).decode("utf-8") + + return f"{str(CustomTimestamp)};{SignedFirstTicket};{SignedSecondTicket}{f';{TicketVersion}' if TicketVersion > 1 else ''}" + +@GameJoinRoute.route('/Game/Join.ashx', methods=['GET', 'POST']) +@csrf.exempt +def join(): + placeid = request.args.get('placeId', default = None, type = int) + jobid = request.args.get('jobId', default = None, type = str) + ticket = request.args.get('ticket', default = None, type = str) + if placeid is None or jobid is None or ticket is None: + return 'Invalid request ( 0 )',400 + + ticketInfo = redis_controller.get(f"place:{placeid}:ticket:{ticket}") + if ticketInfo is None: + return 'Invalid request ( 1 )',400 + ticketInfo = json.loads(ticketInfo) + if ticketInfo['jobid'] != jobid: + return 'Invalid request ( 2 )',400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobid).first() + if PlaceServerObj is None: + return 'Invalid request ( 3 )',400 + if PlaceServerObj.serverPlaceId != placeid: + return 'Invalid request ( 4 )',400 + if PlaceServerObj.serverRunningTime == 0: + return 'Invalid request ( 5 )',400 + if PlaceServerObj.maxPlayerCount <= PlaceServerObj.playerCount: + return 'Invalid request ( 6 )',400 + UserObj : User = User.query.filter_by(id=ticketInfo['id']).first() + if UserObj is None: + return 'Invalid request ( 7 )',400 + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + AssetObj : Asset = Asset.query.filter_by(id=placeid).first() + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj.place_year == PlaceYear.Sixteen: + return 'Who is bro', 400 + ClientTicket = GenerateClientTicket(UserObj, jobid, TicketVersion = 1 if UniverseObj.place_year in [PlaceYear.Sixteen, PlaceYear.Fourteen] else ( 2 if UniverseObj.place_year == PlaceYear.Eighteen else 4), PlaceId = placeid) + + AuthenticationTicket = auth.CreateToken(UserObj.id, get_remote_address() , (60*60*24) ) + SessionId : str = f"{str(uuid.uuid4())}|{str(PlaceServerObj.serveruuid)}|0|{str(PlaceServerObj.serverIP)}|8|{datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.000Z')}|0|null|{AuthenticationTicket}" + + UserMembershipStatus : str = GetUserMembership(UserObj, changeToString=True) + JoinData : str = json.dumps({ + "ClientPort" : 0, + "MachineAddress" : PlaceServerObj.serverIP, + "ServerConnections": [ + { + "Port": PlaceServerObj.serverPort, + "Address": PlaceServerObj.serverIP + } + ], + "ServerPort" : PlaceServerObj.serverPort, + "PingUrl": "", + "PingInterval": 120, + "UserName": UserObj.username, + "DisplayName": UserObj.username, + "SeleniumTestMode": False, + "UserId": UserObj.id, + "ClientTicket": ClientTicket, + "SuperSafeChat": False, + "PlaceId": PlaceServerObj.serverPlaceId, + "MeasurementUrl": "", + "WaitingForCharacterGuid": str(uuid.uuid4()), + "BaseUrl": config.BaseURL, + "ChatStyle": PlaceObj.chat_style.name, + "VendorId": 0, + "ScreenShotInfo": "", + "VideoInfo": "", + "CreatorId": AssetObj.creator_id, + "CreatorTypeEnum": "User" if AssetObj.creator_type == 0 else "Group", + "MembershipType": UserMembershipStatus, + "AccountAge": (datetime.utcnow() - UserObj.created).days, + "CookieStoreFirstTimePlayKey": "rbx_evt_ftp", + "CookieStoreFiveMinutePlayKey": "rbx_evt_fmp", + "CookieStoreEnabled": True, + "IsRobloxPlace": False, + "UniverseId": PlaceObj.parent_universe_id, + "GenerateTeleportJoin": False, + "IsUnknownOrUnder13": False, + "SessionId": SessionId, + "DataCenterId": 0, + "FollowUserId": 0, + "BrowserTrackerId": 0, + "UsePortraitMode": False, + "CharacterAppearance": config.BaseURL + "/Asset/CharacterFetch.ashx?userId=" + str(UserObj.id) if PlaceObj.placeyear in [PlaceYear.Fourteen, PlaceYear.Sixteen] else ( f"http://www.nexium.fit/v1.1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(placeid)}" if PlaceObj.placeyear in [PlaceYear.Eighteen] else f"http://www.nexium.fit/v1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(placeid)}" ), + "GameId": PlaceServerObj.serverPlaceId, + "RobloxLocale": "en_us", + "GameLocale": "en_us", + "characterAppearanceId": UserObj.id + }) + if UniverseObj.place_year == PlaceYear.Sixteen: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False) + elif UniverseObj.place_year == PlaceYear.Eighteen: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False, useNewKey=True) + elif UniverseObj.place_year == PlaceYear.Twenty: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False, useNewKey=True) + elif UniverseObj.place_year == PlaceYear.Fourteen: + JoinData = json.loads(JoinData) + VerificationTicket = str(uuid.uuid4()) + JoinData["CharacterAppearance"] = f"{config.BaseURL}/Asset/CharacterFetch.ashx?userId={str(UserObj.id)}&t={VerificationTicket}&legacy=1" + redis_controller.set( + f"joinashx-auth:{str(jobid)}:{str(UserObj.id)}:{placeid}:{VerificationTicket}", + json.dumps({ + "CharacterAppearance": JoinData["CharacterAppearance"], + "Username": JoinData["UserName"] + }), + ex = 60 + ) + JoinData = json.dumps(JoinData) + + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False) + elif UniverseObj.place_year == PlaceYear.TwentyOne: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False, useNewKey=True) + else: + return 'Invalid request ( 8 )',400 + + if UniverseObj.place_year in [ PlaceYear.Fourteen, PlaceYear.Sixteen ]: + redis_controller.set(f"allow_join:{str(UserObj.id)}:{str(placeid)}:{str(jobid)}", "1", ex=120) + + joinResposne = make_response(SignedJoinData) + joinResposne.headers['Content-Type'] = 'text/plain' + joinResposne.set_cookie( + key = "Syntax-Session-Id", + value = SessionId, + expires = datetime.utcnow() + timedelta(days=1), + domain = f".{config.BaseDomain}" + ) + if request.cookies.get(".ROBLOSECURITY") is None: # 2018 and 2020 doesen't want to authenticate properly with negotiate.ashx :(, so this is my hack till i can figure out why + joinResposne.set_cookie( + key = ".ROBLOSECURITY", + value = auth.CreateToken( userid = UserObj.id, expireIn = 60 * 60 * 24 * 3, ip = get_remote_address() ), + expires = datetime.utcnow() + timedelta(days=3), + domain = f".{config.BaseDomain}" + ) + return joinResposne diff --git a/app/routes/gamesapi.py b/app/routes/gamesapi.py new file mode 100644 index 0000000..b09c133 --- /dev/null +++ b/app/routes/gamesapi.py @@ -0,0 +1,504 @@ +# games.roblox.com + +import math +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from app.extensions import redis_controller, get_remote_address, csrf, limiter, db +from app.util import auth, websiteFeatures, placeinfo +from app.models.place import Place +from app.models.asset import Asset +from app.models.placeservers import PlaceServer +from app.models.user import User +from app.models.groups import Group +from app.models.asset_thumbnail import AssetThumbnail +from app.models.universe import Universe +from app.enums.PlaceYear import PlaceYear +from app.routes.rate import GetAssetLikesAndDislikes, GetAssetFavoriteCount, GetUserFavoriteStatus +from flask_wtf.csrf import CSRFError, generate_csrf +from sqlalchemy import func, and_ +from flask_sqlalchemy import pagination + +GamesAPIRoute = Blueprint('gamesapi', __name__, url_prefix='/') + +csrf.exempt(GamesAPIRoute) +@GamesAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@GamesAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@GamesAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + + +@GamesAPIRoute.route('/v1/games/sorts', methods=["GET"]) +@auth.authenticated_required_api +def games_sorts(): + return jsonify({ + "sorts" : [ + { + "token": "MostPopular", + "name": "most_popular", + "displayName": "Popular", + "gameSetTypeId": 1, + "gameSetTargetId": 90, + "timeOptionsAvailable": False, + "genreOptionsAvailable": False, + "numberOfRows": 2, + "numberOfGames": 0, + "isDefaultSort": True, + "contextUniverseId": None, + "contextCountryRegionId": 1, + "tokenExpiryInSeconds": 3600 + }, + { + "token": "Featured", + "name": "featured", + "displayName": "Featured", + "gameSetTypeId": 2, + "gameSetTargetId": 91, + "timeOptionsAvailable": False, + "genreOptionsAvailable": False, + "numberOfRows": 1, + "numberOfGames": 0, + "isDefaultSort": True, + "contextUniverseId": None, + "contextCountryRegionId": 1, + "tokenExpiryInSeconds": 3600 + }, + { + "token": "RecentlyUpdated", + "name": "recently_updated", + "displayName": "Recently Updated", + "gameSetTypeId": 3, + "gameSetTargetId": 93, + "timeOptionsAvailable": False, + "genreOptionsAvailable": False, + "numberOfRows": 1, + "numberOfGames": 0, + "isDefaultSort": True, + "contextUniverseId": None, + "contextCountryRegionId": 1, + "tokenExpiryInSeconds": 3600 + }, + ], + "timeFilters": [ + { + "token": "Now", + "name": "Now", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "PastDay", + "name": "PastDay", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "PastWeek", + "name": "PastWeek", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "PastMonth", + "name": "PastMonth", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "AllTime", + "name": "AllTime", + "tokenExpiryInSeconds": 3600 + } + ], + "genreFilters": [ + { + "token": "T638364961735517991_1_89de", + "name": "All", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518009_19_3d2", + "name": "Building", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518045_11_3de6", + "name": "Horror", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518062_7_558c", + "name": "Town and City", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518076_17_c371", + "name": "Military", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518094_15_2056", + "name": "Comedy", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518107_8_6d4f", + "name": "Medieval", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518120_13_c168", + "name": "Adventure", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518134_9_e6aa", + "name": "Sci-Fi", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518156_12_13fb", + "name": "Naval", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518169_20_46a", + "name": "FPS", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518183_21_4bbf", + "name": "RPG", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518192_14_efc6", + "name": "Sports", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518205_10_fa83", + "name": "Fighting", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518223_16_5d38", + "name": "Western", + "tokenExpiryInSeconds": 3600 + } + ], + "gameFilters": [ + { + "token": "T638364961735518263_Any_56d2", + "name": "Any", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518277_Classic_a1f4", + "name": "Classic", + "tokenExpiryInSeconds": 3600 + } + ], + "pageContext": { + "pageId": "f5b1510e-3810-42ab-8135-8ffa5ef221ba", + "isSeeAllPage": None + }, + "gameSortStyle": None + }) + +@GamesAPIRoute.route("/v1/games/list", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def games_list(): + sortToken = request.args.get("sortToken", default = "MostPopular", type = str) + startRows = request.args.get("startRows", default = 0, type = int) + maxRows = request.args.get("maxRows", default = 40, type = int) + + if sortToken not in ["MostPopular", "Featured", "RecentlyUpdated"]: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid sort token." } ] } ), 400 + + if startRows < 0: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid start rows." } ] } ), 400 + + if maxRows > 40 or maxRows < 0: + return jsonify( { "errors": [ { "code": 0, "message": "Max rows must be between 0-40" } ] } ), 400 + + pageNumber = math.floor(startRows / maxRows) + 1 + + if sortToken == "MostPopular": + PopularGames = Universe.query.filter( and_( Universe.is_public == True, Universe.place_year == PlaceYear.Twenty ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + PopularGames = PopularGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( func.coalesce( func.sum( Place.visitcount ), 0 ).desc() ) + + UniverseObjsList = PopularGames.paginate( + page = pageNumber, + per_page = maxRows, + error_out = False + ) + elif sortToken == "Featured": + FeaturedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.place_year == PlaceYear.Twenty, Universe.is_featured == True ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + FeaturedGames = FeaturedGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( func.coalesce( func.sum( Place.visitcount ), 0 ).desc() ) + UniverseObjsList = FeaturedGames.paginate( + page = pageNumber, + per_page = maxRows, + error_out = False + ) + else: # Fallback to RecentlyUpdated #sortToken == "RecentlyUpdated": + RecentlyUpdatedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.place_year == PlaceYear.Twenty )).order_by( Universe.updated_at.desc() ) + UniverseObjsList = RecentlyUpdatedGames.paginate( + page = pageNumber, + per_page = maxRows, + error_out = False + ) + + UniverseObjsList : pagination.Pagination = UniverseObjsList + + GameList = [] + for UniverseObj in UniverseObjsList.items: + UniverseObj : Universe + PlaceObj : Place = Place.query.filter_by( placeid = UniverseObj.root_place_id ).first() + Upvotes, Downvotes = GetAssetLikesAndDislikes(PlaceObj.placeid) + PlaceAssetObj : Asset = PlaceObj.assetObj + CreatorObj : User | Group = User.query.filter_by(id=UniverseObj.creator_id).first() if UniverseObj.creator_type == 0 else Group.query.filter_by(id=UniverseObj.creator_id).first() + GameList.append({ + "creatorId": UniverseObj.creator_id, + "creatorName": CreatorObj.username if UniverseObj.creator_type == 0 else CreatorObj.name, + "creatorType": "User" if UniverseObj.creator_type == 0 else "Group", + "creatorHasVerifiedBadge": False, + "totalUpVotes": Upvotes, + "totalDownVotes": Downvotes, + "universeId": UniverseObj.id, + "name": PlaceAssetObj.name, + "placeId": PlaceObj.placeid, + "playerCount": placeinfo.GetUniversePlayingCount(UniverseObj), + "imageToken": "", + "isSponsored": False, + "nativeAdData": "", + "isShowSponsoredLabel": False, + "price": 0, + "analyticsIdentifier": "", + "gameDescription": PlaceAssetObj.description, + "genre": "All", + "minimumAge": 0 + }) + + return jsonify({ + "games": GameList, + "suggestedKeyword": "", + "correctedKeyword": "", + "filteredKeyword": "", + "hasMoreRows": UniverseObjsList.has_next, + "nextPageExclusiveStartId": 0, + "featuredSearchUniverseId": 0, + "emphasis": False, + "cutOffIndex": 0, + "algorithm": "", + "algorithmQueryType": "", + "suggestionAlgorithm": "", + "relatedGames": [] + }) + +@GamesAPIRoute.route("/v1/games//votes", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_place_votes( placeId : int ): + PlaceObj : Place = Place.query.filter_by(placeid=placeId).first() + if not PlaceObj: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid placeId." } ] } ), 400 + + Upvotes, Downvotes = GetAssetLikesAndDislikes(PlaceObj.placeid) + return jsonify({ + "id": PlaceObj.placeid, + "upVotes": Upvotes, + "downVotes": Downvotes + }) + +@GamesAPIRoute.route("/v1/games//votes/user", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_place_user_votes( placeId : int ): + PlaceObj : Place = Place.query.filter_by(placeid=placeId).first() + if not PlaceObj: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid placeId." } ] } ), 400 + + return jsonify({ + "canVote": False, + "userVote": False, + "reasonForNotVoteable": "Voting is disabled" + }) + +@GamesAPIRoute.route("/v1/games/multiget-playability-status", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_playability_status(): + universeIdsList = request.args.get("universeIds", default = "", type = str) + if universeIdsList == "": + return jsonify( { "errors": [ { "code": 8, "message": "No universe IDs were specified." } ] } ), 400 + + try: + universeIdsList = universeIdsList.split(",") + universeIdsList = [int(x) for x in universeIdsList] + universeIdsList = list(set(universeIdsList)) + except: + return jsonify( { "errors": [ { "code": 8, "message": "Invalid universe IDs were specified." } ] } ), 400 + + if len(universeIdsList) > 100: + return jsonify( { "errors": [ { "code": 9, "message": "Too many universe IDs were specified." } ] } ), 400 + + RequestedData = [] + for universeId in universeIdsList: + RequestedData.append({ + "playabilityStatus": 0, + "isPlayable": True, + "universeId": universeId + }) + + return jsonify(RequestedData), 200 + +@GamesAPIRoute.route("/v2/games//media", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_game_media( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + return jsonify({"data": []}), 200 + +@GamesAPIRoute.route("/v1/games", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def multi_get_game_info(): + universeIdsList = request.args.get("universeIds", default = "", type = str) + if universeIdsList == "": + return jsonify( { "errors": [ { "code": 8, "message": "No universe IDs were specified." } ] } ), 400 + + try: + universeIdsList = universeIdsList.split(",") + universeIdsList = [int(x) for x in universeIdsList] + universeIdsList = list(set(universeIdsList)) + except: + return jsonify( { "errors": [ { "code": 8, "message": "Invalid universe IDs were specified." } ] } ), 400 + + if len(universeIdsList) > 100: + return jsonify( { "errors": [ { "code": 9, "message": "Too many universe IDs were specified." } ] } ), 400 + + RequestedData = [] + for universeId in universeIdsList: + UniverseObj : Universe = Universe.query.filter_by(id=universeId).first() + if UniverseObj is None: + continue + PlaceObj : Place = Place.query.filter_by( placeid = UniverseObj.root_place_id ).first() + if PlaceObj is None: + continue + + PlaceAssetObj : Asset = PlaceObj.assetObj + CreatorObj : User | Group = User.query.filter_by(id=UniverseObj.creator_id).first() if UniverseObj.creator_type == 0 else Group.query.filter_by(id=UniverseObj.creator_id).first() + + RequestedData.append({ + "id": UniverseObj.id, + "rootPlaceId": UniverseObj.root_place_id, + "name": PlaceAssetObj.name, + "description": PlaceAssetObj.description, + "sourceName": PlaceAssetObj.name, + "sourceDescription": PlaceAssetObj.description, + "creator": { + "id": CreatorObj.id, + "type": "User" if UniverseObj.creator_type == 0 else "Group", + "name": CreatorObj.username if UniverseObj.creator_type == 0 else CreatorObj.name, + "hasVerifiedBadge": False, + "isRNVAccount": False + }, + "price": 0, + "allowedGearGenres": [], + "allowedGearCategories": [], + "isGenreEnforced": True, + "copyingAllowed": False, + "playing": placeinfo.GetUniversePlayingCount(UniverseObj), + "visits": PlaceObj.visitcount, + "maxPlayers": PlaceObj.maxplayers, + "created": UniverseObj.created_at.strftime("%Y-%m-%dT%H:%M:%S.000Z"), + "updated": UniverseObj.updated_at.strftime("%Y-%m-%dT%H:%M:%S.000Z"), + "studioAccessToApisAllowed": False, + "createVipServersAllowed": False, + "universeAvatarType": 1, + "genre": "All", + "isAllGenre": True, + "isFavoritedByUser": False, + "favoritedCount": GetAssetFavoriteCount(PlaceObj.placeid) + }) + + return jsonify({ + "data": RequestedData + }), 200 + +@GamesAPIRoute.route("/v1/games//favorites", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_game_favorites( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + AuthenticatedUser : User = auth.GetCurrentUser() + + return jsonify({ + "isFavorited": GetUserFavoriteStatus( universeId, AuthenticatedUser.id) + }), 200 + +@GamesAPIRoute.route("/v1/games//social-links/list", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_universe_social_links_list( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + return jsonify({ + "data": [] + }), 200 + +@GamesAPIRoute.route("/v1/games//game-passes", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_universe_game_passes( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + return jsonify({ + "previousPageCursor": None, + "nextPageCursor": None, + "data": [] + }), 200 + +@GamesAPIRoute.route("/v1/games/recommendations/game/", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_recommended_games_from_universeid( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + return jsonify({ + "games": [], + "nextPaginationKey": None + }), 200 \ No newline at end of file diff --git a/app/routes/gametransactions.py b/app/routes/gametransactions.py new file mode 100644 index 0000000..7ce13a9 --- /dev/null +++ b/app/routes/gametransactions.py @@ -0,0 +1,89 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth, friends, websiteFeatures +import logging +from app.services import economy +from app.extensions import db, limiter, csrf, get_remote_address +from app.models.gameservers import GameServer +from app.models.place_developer_product import DeveloperProduct +from app.models.product_receipt import ProductReceipt + +GameTransactionsRoute = Blueprint("gametransactions", __name__, url_prefix="/") + +@GameTransactionsRoute.before_request +def VerifyUserAgent(): + RequestAddress = get_remote_address() + TargetServerObj : GameServer = GameServer.query.filter_by( serverIP = RequestAddress ).first() + if TargetServerObj is None: + abort(404) + + AccessKey = request.headers.get( key = "AccessKey", default = None , type = str ) + if AccessKey is None: + abort(403) + + if AccessKey != TargetServerObj.accessKey: + abort(403) + +@GameTransactionsRoute.route("/gametransactions/getpendingtransactions/", methods=["GET"]) +def GetPendingTransactions(): + PlayerId = request.args.get( key = "PlayerId", default = None, type = int ) + PlaceId = request.args.get( key = "PlaceId", default = None, type = int ) + + if PlayerId is None or PlaceId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + PendingProductReceipts : list[ProductReceipt] = ProductReceipt.query.filter_by( + user_id = PlayerId, is_processed = False + ).outerjoin( + DeveloperProduct, DeveloperProduct.productid == ProductReceipt.product_id + ).filter( DeveloperProduct.placeid == PlaceId ).all() + + PendingProductReceiptsDict = [] + for PendingProductReceipt in PendingProductReceipts: + PendingProductReceiptsDict.append({ + "playerId": PendingProductReceipt.user_id, + "placeId": PlaceId, + "receipt": PendingProductReceipt.receipt_id, + "actionArgs": [ + { + "Key": "productId", + "Value": PendingProductReceipt.product_id + }, + { + "Key": "currencyTypeId", + "Value": 1 + }, + { + "Key": "unitPrice", + "Value": PendingProductReceipt.robux_amount + } + ] + }) + + return jsonify(PendingProductReceiptsDict) + +@GameTransactionsRoute.route("/gametransactions/settransactionstatuscomplete", methods=["POST"]) +@csrf.exempt +def SetTransactionStatusComplete(): + receiptId : int = request.form.get( key = "receipt", default = None, type = int ) + if receiptId is None: + logging.error("Invalid request") + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + ReceiptObj : ProductReceipt = ProductReceipt.query.filter_by( receipt_id = receiptId ).first() + if ReceiptObj is None: + logging.error("Receipt not found") + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + ReceiptObj.is_processed = True + db.session.commit() + + return jsonify({ + "success": True, + }) \ No newline at end of file diff --git a/app/routes/image.py b/app/routes/image.py new file mode 100644 index 0000000..a0edd82 --- /dev/null +++ b/app/routes/image.py @@ -0,0 +1,652 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, Response +import hashlib +import gzip +import json +from PIL import Image +from app.models.groups import GroupIcon +from app.models.user_thumbnail import UserThumbnail +from app.models.asset_thumbnail import AssetThumbnail +from app.models.place_icon import PlaceIcon +from app.models.user import User +from app.models.asset import Asset +from app.routes.thumbnailer import TakeThumbnail +from app.util import s3helper +from app.extensions import redis_controller, csrf +from config import Config +from io import BytesIO + +config = Config() +ImageRoute = Blueprint('image', __name__) + +def HandleResolutionCheck( + WidthParametersName : list[ str ] = [ 'width', 'x' ], + HeightParametersName : list[ str ] = [ 'height', 'y' ], + AllowedWidths : list[ int ] = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights : list[ int ] = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare : bool = True, + CanRoundToNearest : bool = True +) -> ( int, int ): + """ + Handles resolution checking for images. Aborts the request if the resolution is invalid. + Must be called in a flask request context. + + :param WidthParametersName: The names of valid parameters for width. + :param HeightParametersName: The names of valid parameters for height. + :param AllowedWidths: The allowed widths. + :param AllowedHeights: The allowed heights. + :param MustBeSquare: Whether or not the image must be square. + :param CanRoundToNearest: Whether or not the image can round to the nearest resolution. + + :return: ( width, height ) + """ + Width : int = None + Height : int = None + for WidthParameterName in WidthParametersName: + if WidthParameterName in request.args: + Width = request.args.get( key=WidthParameterName, default=None, type=int ) + break + for HeightParameterName in HeightParametersName: + if HeightParameterName in request.args: + Height = request.args.get( key=HeightParameterName, default=None, type=int ) + break + + + if Width is None or Height is None: + abort( 400 ) + if ( Width not in AllowedWidths or Height not in AllowedHeights ) and not CanRoundToNearest: + abort( 400 ) + if MustBeSquare and Width != Height: + abort( 400 ) + + + if CanRoundToNearest: + if Width not in AllowedWidths: + Width = min( AllowedWidths, key=lambda x:abs(x-Width) ) + if Height not in AllowedHeights: + Height = min( AllowedHeights, key=lambda x:abs(x-Height) ) + + return ( Width, Height ) + +def HandleImageResize( + ImageContentHash : str, + TargetWidth : int, + TargetHeight : int, + CroppedHash : str, + CacheControl : str = "max-age=120", + SkipCacheCroppedImage : bool = False, + ReturnAsJSON : bool = False +) -> Response: + """ + Handles image resizing + + :param ImageContentHash: The content hash of the image. + :param TargetWidth: The target width. + :param TargetHeight: The target height. + :param CroppedHash: The hash of the cropped image. + + :return: Flask Response + """ + if s3helper.DoesKeyExist(CroppedHash) and not SkipCacheCroppedImage: + if ReturnAsJSON: + return jsonify({ + "Final": True, + "Url": f"{config.CDN_URL}/{CroppedHash}" + }) + ImageResponse = make_response(redirect(f"{config.CDN_URL}/{CroppedHash}")) + ImageResponse.headers['Cache-Control'] = CacheControl + return ImageResponse + + if not s3helper.DoesKeyExist(ImageContentHash): + if ReturnAsJSON: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + return redirect("/static/img/placeholder.png") + + ImageContent = BytesIO( s3helper.GetFileFromS3(ImageContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + + if ReturnAsJSON: + return jsonify({ + "Final": True, + "Url": f"{config.CDN_URL}/{CroppedHash}" + }) + ImageResponse = make_response(redirect(f"{config.CDN_URL}/{CroppedHash}")) + ImageResponse.headers['Cache-Control'] = CacheControl + return ImageResponse + +@ImageRoute.route("/avatar-thumbnail/image", methods=["GET"]) +@ImageRoute.route('/Thumbs/Avatar.ashx', methods=['GET']) +@ImageRoute.route('/thumbs/avatar.ashx', methods=['GET']) +def avatar(): + userId = request.args.get('userId', default = None, type = int) + username = request.args.get('username', default = None, type = str) + + if (userId is None and username is None): + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare = True, + CanRoundToNearest = True + ) + + if username is not None and userId is None: + UserObj : User = User.query.filter_by(username=username).first() + if UserObj is None: + return redirect("/static/img/placeholder.png") + userId = UserObj.id + + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + + ContentHash = ThumbnailObj.full_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/avatar-thumbnail/json', methods=['GET']) +def avatar_json(): + userId = request.args.get('userId', None, type=int) + if userId is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + + TargetWidth, TargetHeight = HandleResolutionCheck( + WidthParametersName = [ 'width', 'x' ], + HeightParametersName = [ 'height', 'y' ], + AllowedWidths = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare = True, + CanRoundToNearest = True + ) + + thumbnail : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if thumbnail is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + ContentHash = thumbnail.full_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetWidth, + TargetHeight = TargetHeight, + CroppedHash = CroppedHash, + CacheControl = "max-age=120", + ReturnAsJSON = True + ) + +@ImageRoute.route('/headshot-thumbnail/image', methods=['GET']) +@ImageRoute.route('/Thumbs/Head.ashx', methods=['GET']) +def head(): + userId = request.args.get('userId', default = None, type = int) + if userId is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare = True, + CanRoundToNearest = True + ) + + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + + ContentHash = ThumbnailObj.headshot_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/asset-thumbnail/json', methods=['GET']) +def asset_json(): + assetId = request.args.get( 'assetId', None, type=int ) + if assetId is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + + TargetWidth, TargetHeight = HandleResolutionCheck( + WidthParametersName = [ 'width', 'x' ], + HeightParametersName = [ 'height', 'y' ], + AllowedWidths = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,360,1280,720], + AllowedHeights = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,360,1280,720], + MustBeSquare = False, + CanRoundToNearest = True + ) + + thumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=assetId).order_by(AssetThumbnail.asset_version_id.desc()).first() + if thumbnailObj is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + if thumbnailObj.moderation_status != 0 or thumbnailObj.asset.moderation_status != 0: + if thumbnailObj.moderation_status == 2 or thumbnailObj.asset.moderation_status == 2: + return jsonify({ + "Final": True, + "Url": "/static/img/ContentDeleted.png" + }) + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + + ContentHash = thumbnailObj.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetWidth, + TargetHeight = TargetHeight, + CroppedHash = CroppedHash, + CacheControl = "max-age=120", + ReturnAsJSON = True + ) + +@ImageRoute.route('/asset-thumbnail/image', methods=['GET']) +@ImageRoute.route('/thumbs/asset.ashx', methods=['GET']) +@ImageRoute.route('/Thumbs/Asset.ashx', methods=['GET']) +def asset(): + assetId = request.args.get('assetId', default = None, type = int) or request.args.get('assetid', default = None, type = int) + if assetId is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,360,1280,720], + AllowedHeights = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,36,1280,720], + MustBeSquare = False, + CanRoundToNearest = True + ) + + ThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=assetId).order_by(AssetThumbnail.asset_version_id.desc()).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + if ThumbnailObj.moderation_status != 0 or ThumbnailObj.asset.moderation_status != 0: + if ThumbnailObj.moderation_status == 2 or ThumbnailObj.asset.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + ContentHash = ThumbnailObj.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/Thumbs/GroupIcon.ashx', methods=['GET']) +def groupicon(): + groupid = request.args.get( key='groupid', default=None, type=int ) + if groupid is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352], + AllowedHeights = [48,180,420,60,100,150,352], + MustBeSquare = True, + CanRoundToNearest = True + ) + + ThumbnailObj : GroupIcon = GroupIcon.query.filter_by(group_id=groupid).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + if ThumbnailObj.moderation_status != 0: + if ThumbnailObj.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + + ContentHash = ThumbnailObj.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/Thumbs/GameIcon.ashx', methods=['GET']) +@ImageRoute.route('/Thumbs/PlaceIcon.ashx', methods=['GET']) +def placeicon(): + assetId = request.args.get('assetId', default = None, type = int) or request.args.get('assetid', default = None, type = int) + if assetId is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352,324,576], + AllowedHeights = [48,180,420,60,100,150,352,324,576], + MustBeSquare = False, + CanRoundToNearest = True + ) + + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=assetId).first() + if PlaceIconObj is None: + return redirect("/static/img/placeholder.png") + if PlaceIconObj.moderation_status != 0 or PlaceIconObj.asset.moderation_status != 0: + if PlaceIconObj.moderation_status == 2 or PlaceIconObj.asset.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + + ContentHash = PlaceIconObj.contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/Game/Tools/ThumbnailAsset.ashx', methods=['GET']) +def thumbnail_asset(): + ExpectedFormat : str = request.args.get( key='fmt', default='png', type=str ) + AssetId : int = request.args.get( key='aid', default=None, type=int ) + + if AssetId is None: + return redirect("/static/img/placeholder.png") + if ExpectedFormat.lower() != "png": + return redirect("/static/img/placeholder.png") + + AssetObj : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObj is None: + return redirect("/static/img/placeholder.png") + + TargetWidth, TargetHeight = HandleResolutionCheck( + WidthParametersName = [ 'wd', 'width' ], + HeightParametersName = [ 'ht', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352,75], + AllowedHeights = [48,180,420,60,100,150,352,75], + MustBeSquare = True, + CanRoundToNearest = True + ) + + thumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetId).order_by(AssetThumbnail.asset_version_id.desc()).first() + if thumbnail is None: + TakeThumbnail(AssetId) + return redirect("/static/img/placeholder.png") + if thumbnail.moderation_status != 0: + if thumbnail.moderation_status == 2 or thumbnail.asset.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + + ContentHash = thumbnail.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetWidth, + TargetHeight = TargetHeight, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +import urllib.parse + +@ImageRoute.route("/v1/batch", methods=["POST"]) +@csrf.exempt +def BatchImageRequest(): + if request.headers.get("Content-Encoding") == "gzip": + try: + data = gzip.decompress(request.data) + except Exception as e: + return jsonify({"success": False, "message": "Invalid gzip data"}), 400 + try: + JSONData = json.loads(data) + except Exception as e: + return jsonify({"success": False, "message": "Invalid JSON data"}), 400 + else: + JSONData = request.json + if JSONData is None: + return jsonify({"success": False, "message": "Missing JSON data"}), 400 + + # [{'requestId': 'type=GameIcon&id=1&w=128&h=128&filters=', 'targetId': 1, 'type': 'GameIcon', 'size': '128x128', 'isCircular': False}] + + if len(JSONData) > 15: + return jsonify({"success": False, "message": "Too many requests"}), 400 + if len(JSONData) == 0: + return jsonify({"data":[]}), 200 + + ProcessedRequests = [] + for RequestObj in JSONData: + if "requestId" not in RequestObj or "targetId" not in RequestObj or "type" not in RequestObj or "size" not in RequestObj: + continue + if RequestObj["type"] not in [ "Avatar", "AvatarHeadShot", "GameIcon", "GameThumbnail", "Asset", "GroupIcon"]: + continue + + if "x" not in RequestObj["size"]: + continue + SplittedSize = RequestObj["size"].split("x") + if len(SplittedSize) != 2: + continue + try: + TargetWidth = int(SplittedSize[0]) + TargetHeight = int(SplittedSize[1]) + except: + continue + + AllowedSizes = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,36,1280,720] + TargetWidth = min(AllowedSizes, key=lambda x:abs(x-TargetWidth)) + TargetHeight = min(AllowedSizes, key=lambda x:abs(x-TargetHeight)) + + RequestType = RequestObj["type"] + + if RequestType == "Avatar": + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=RequestObj["targetId"]).first() + if ThumbnailObj is None: + continue + ContentHash = ThumbnailObj.full_contenthash + elif RequestType == "AvatarHeadShot": + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=RequestObj["targetId"]).first() + if ThumbnailObj is None: + continue + ContentHash = ThumbnailObj.headshot_contenthash + elif RequestType == "GameIcon": + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=RequestObj["targetId"]).first() + if PlaceIconObj is None: + continue + ContentHash = PlaceIconObj.contenthash + elif RequestType == "GameThumbnail" or RequestType == "Asset": + thumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=RequestObj["targetId"]).order_by(AssetThumbnail.asset_version_id.desc()).first() + if thumbnailObj is None: + continue + if thumbnailObj.moderation_status != 0: + continue + ContentHash = thumbnailObj.content_hash + elif RequestType == "GroupIcon": + ThumbnailObj : GroupIcon = GroupIcon.query.filter_by(group_id=RequestObj["targetId"]).first() + if ThumbnailObj is None: + continue + if ThumbnailObj.moderation_status != 0: + continue + ContentHash = ThumbnailObj.content_hash + else: + continue + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + if not s3helper.DoesKeyExist(CroppedHash): + if not s3helper.DoesKeyExist(ContentHash): + continue + ImageContent = BytesIO( s3helper.GetFileFromS3(ContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + ProcessedRequests.append({ + "requestId": RequestObj["requestId"], + "targetId": RequestObj["targetId"], + "state": "Completed", + "imageUrl": f"{config.CDN_URL}/{CroppedHash}", + "version": None + }) + + return jsonify({ + "data": ProcessedRequests + }) + +@ImageRoute.route("/v1/users/avatar-headshot", methods=["GET"]) +def multi_avatar_headshot(): + userIdsCSV = request.args.get('userIds', default = None, type = str) + if userIdsCSV is None: + return jsonify( { "errors": [ { "code": 4, "message": "The requested Ids are invalid, of an invalid type or missing." } ] } ), 400 + + userIds = userIdsCSV.split(",") + if len(userIds) > 100: + return jsonify( { "errors": [ { "code": 1, "message": "There are too many requested Ids." } ] } ), 400 + + requestedSize = request.args.get('size', default = "48x48", type = str) + + if "x" not in requestedSize: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + SplittedSize = requestedSize.split("x") + if len(SplittedSize) != 2: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + try: + TargetWidth = int(SplittedSize[0]) + TargetHeight = int(SplittedSize[1]) + + AllowedSizes = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,36,1280,720] + TargetWidth = min(AllowedSizes, key=lambda x:abs(x-TargetWidth)) + TargetHeight = min(AllowedSizes, key=lambda x:abs(x-TargetHeight)) + except: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + ProcessedRequests = [] + for userId in userIds: + try: + userId = int(userId) + except: + continue + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if ThumbnailObj is None: + continue + ContentHash = ThumbnailObj.headshot_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + if not s3helper.DoesKeyExist(CroppedHash): + if not s3helper.DoesKeyExist(ContentHash): + continue + ImageContent = BytesIO( s3helper.GetFileFromS3(ContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + ProcessedRequests.append({ + "targetId": userId, + "state": "Completed", + #"imageUrl": f"{config.CDN_URL}/{CroppedHash}", # 2020 Does not allow things like cdn.syntax.eco to be used directly in the "Texture" property so we have to redirect them to an allowed route on the www. domain + "imageUrl": f"{config.BaseURL}/headshot-thumbnail/image?userId={userId}&x={TargetWidth}&y={TargetHeight}", + "version": "1" + }) + + return jsonify({ + "data": ProcessedRequests + }), 200 + +@ImageRoute.route("/v1/games/icons", methods=["GET"]) +def get_game_icons(): + universeIdsCSV = request.args.get('universeIds', default = None, type = str) + if universeIdsCSV is None: + return jsonify( { "errors": [ { "code": 4, "message": "The requested Ids are invalid, of an invalid type or missing." } ] } ), 400 + universeIdsList = universeIdsCSV.split(",") + if len(universeIdsList) > 100: + return jsonify( { "errors": [ { "code": 1, "message": "There are too many requested Ids." } ] } ), 400 + + requestedSize = request.args.get('size', default = "50x50", type = str) + if "x" not in requestedSize: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + SplittedSize = requestedSize.split("x") + if len(SplittedSize) != 2: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + try: + TargetWidth = int(SplittedSize[0]) + TargetHeight = int(SplittedSize[1]) + + AllowedSizes = [50, 128, 150, 256, 420, 512] + TargetWidth = min(AllowedSizes, key=lambda x:abs(x-TargetWidth)) + TargetHeight = min(AllowedSizes, key=lambda x:abs(x-TargetHeight)) + except: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + ProcessedRequests = [] + for universeId in universeIdsList: + try: + universeId = int(universeId) + except: + continue + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=universeId).first() + if PlaceIconObj is None: + continue + ContentHash = PlaceIconObj.contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + if not s3helper.DoesKeyExist(CroppedHash): + if not s3helper.DoesKeyExist(ContentHash): + continue + ImageContent = BytesIO( s3helper.GetFileFromS3(ContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + ProcessedRequests.append({ + "targetId": universeId, + "state": "Completed", + #"imageUrl": f"{config.CDN_URL}/{CroppedHash}" + "imageUrl": f"{config.BaseURL}/Thumbs/GameIcon.ashx?assetId={str(universeId)}&x={str(TargetWidth)}&y={str(TargetHeight)}" + }) + + return jsonify({ + "data": ProcessedRequests + }), 200 \ No newline at end of file diff --git a/app/routes/inventoryapi.py b/app/routes/inventoryapi.py new file mode 100644 index 0000000..5a6ad7d --- /dev/null +++ b/app/routes/inventoryapi.py @@ -0,0 +1,181 @@ +# inventory.roblox.com + +from flask import Blueprint, jsonify, request, make_response +from flask_wtf.csrf import CSRFError, generate_csrf +from app.extensions import db, redis_controller, limiter, csrf +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.asset import Asset +from app.util import membership +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType + +InventoryAPI = Blueprint('InventoryAPI', __name__, url_prefix='/') +csrf.exempt(InventoryAPI) +@InventoryAPI.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@InventoryAPI.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@InventoryAPI.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +itemTypes = { + "asset": 0, + "gamepass": 1, + "badge": 2, + "bundle": 3 +} + +@InventoryAPI.route('/v1/users//items//', methods=['GET']) +@limiter.limit("60/minute") +def get_user_item(userId : int , itemType : str , itemTargetId : int): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 1, "message": "The specified user does not exist!" } ] } ), 400 + + try: + itemType = int(itemType) + if itemType < 0 or itemType > 3: + return jsonify( { "errors": [ { "code": 6, "message": "The specified item type does not exist." } ] } ), 400 + except ValueError: + if itemType.lower() not in itemTypes: + return jsonify( { "errors": [ { "code": 7, "message": "The specified Asset does not exist!" } ] } ), 400 + + itemType = itemTypes[itemType.lower()] + + assetObj : Asset = Asset.query.filter_by(id=itemTargetId).first() + if assetObj is None: + return jsonify( { "errors": [ { "code": 3, "message": "The specified item does not exist!" } ] } ), 400 + + dataList = [] + + userAssetList : list[UserAsset] = UserAsset.query.filter_by(userid=userId, assetid=itemTargetId).all() + for user_asset_obj in userAssetList: + dataList.append({ + "type": "Asset", + "id": user_asset_obj.assetid, + "name": user_asset_obj.asset.name, + "instanceId": user_asset_obj.id, + }) + + return jsonify({ + "previousPageCursor": None, + "nextPageCursor": None, + "data": dataList + }), 200 + +@InventoryAPI.route('/v1/users//items///is-owned', methods=['GET']) +@limiter.limit("60/minute") +def lookup_user_ownership(userId : int , itemType , itemTargetId : int): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 1, "message": "The specified user does not exist!" } ] } ), 400 + + try: + itemType = int(itemType) + if itemType < 0 or itemType > 3: + return jsonify( { "errors": [ { "code": 6, "message": "The specified item type does not exist." } ] } ), 400 + except ValueError: + if itemType.lower() not in itemTypes: + return jsonify( { "errors": [ { "code": 7, "message": "The specified Asset does not exist!" } ] } ), 400 + + itemType = itemTypes[itemType.lower()] + + assetObj : Asset = Asset.query.filter_by(id=itemTargetId).first() + if assetObj is None: + return jsonify( { "errors": [ { "code": 3, "message": "The specified item does not exist!" } ] } ), 400 + + userAssetObj : UserAsset = UserAsset.query.filter_by(userid=userId, assetid=itemTargetId).first() + if userAssetObj is None: + return "false", 200 + + return "true", 200 + +#@InventoryAPI.route('/v2/users//inventory', methods=['GET']) +@InventoryAPI.route('/v2/users//inventory//', methods=['GET']) +@InventoryAPI.route('/v2/users//inventory/', methods=['GET']) +@limiter.limit("60/minute") +def get_user_inventory(userId : int, assetTypeId : int = None): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 1, "message": "Invalid user Id." } ] } ), 400 + + cursorPage : int = request.args.get("cursor", default = 1, type = int) + if cursorPage < 1: + return jsonify( { "errors": [ { "code": 4, "message": "The specified cursor is invalid!" } ] } ), 400 + + pageLimit : int = request.args.get("limit", default = 10, type = int) + if pageLimit not in [10, 25, 50, 100]: + return jsonify( { "errors": [ { "code": 5, "message": "The specified limit is invalid!" } ] } ), 400 + + sortOrder : str = request.args.get("sortOrder", default = "Asc", type = str) + if sortOrder.lower() not in ["asc", "desc"]: + return jsonify( { "errors": [ { "code": 6, "message": "The specified sort order is invalid!" } ] } ), 400 + + try: + AssetTypeEnum : AssetType = AssetType(assetTypeId) + except ValueError: + return jsonify( { "errors": [ { "code": 2, "message": "Invalid asset type Id." } ] } ), 400 + + UserAssetList : list[UserAsset] = UserAsset.query.filter_by(userid=userId).outerjoin( + Asset, UserAsset.assetid == Asset.id + ).filter( + Asset.asset_type == AssetTypeEnum + ).order_by( + UserAsset.updated.desc() if sortOrder.lower() == "desc" else UserAsset.updated.asc() + ).paginate( + page = cursorPage, + per_page = pageLimit, + error_out = False + ) + + UserMembershipType : int = membership.GetUserMembership( userObject ).value + + dataList = [] + for user_asset_obj in UserAssetList.items: + user_asset_obj : UserAsset = user_asset_obj + dataList.append({ + "userAssetId": user_asset_obj.id, + "assetId": user_asset_obj.assetid, + "assetName": user_asset_obj.asset.name, + "collectibleItemId": None, + "collectibleItemInstanceId": None, + "serialNumber": user_asset_obj.serial, + "owner": { + "userId": user_asset_obj.userid, + "username": userObject.username, + "buildersClubMembershipType": UserMembershipType + }, + "created": user_asset_obj.created.isoformat(), + "updated": user_asset_obj.updated.isoformat(), + }) + + return jsonify({ + "previousPageCursor": str(UserAssetList.prev_num) if UserAssetList.has_prev else None, + "nextPageCursor": str(UserAssetList.next_num) if UserAssetList.has_next else None, + "data": dataList + }), 200 \ No newline at end of file diff --git a/app/routes/jobreporthandler.py b/app/routes/jobreporthandler.py new file mode 100644 index 0000000..e9ffbe0 --- /dev/null +++ b/app/routes/jobreporthandler.py @@ -0,0 +1,812 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.extensions import db, redis_controller, csrf, get_remote_address +import requests +import logging +import json +import gzip +import json +import math +from datetime import datetime, timedelta + +from app.models.user import User +from app.models.asset import Asset +from app.models.usereconomy import UserEconomy +from app.models.gameservers import GameServer +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.place import Place +from app.models.groups import Group +from app.models.game_session_log import GameSessionLog +from app.models.universe import Universe +from app.models.user_ban import UserBan + +from app.services.economy import IncrementTargetBalance +from app.services.gameserver_comm import perform_post +from app.pages.home.home import InsertRecentlyPlayed +from app.enums.TransactionType import TransactionType +from app.enums.PlaceYear import PlaceYear +from app.enums.BanType import BanType +from app.util.placeinfo import ClearPlayingCountCache, GetPlayingCount +from app.util.transactions import CreateTransaction + +from config import Config + +config = Config() + +JobReportHandler = Blueprint('jobreporthandler', __name__, url_prefix='/') + +def isValidAuthorizationToken( authtoken : str) -> GameServer: + if authtoken is None: + return None + RequestAddress = get_remote_address() + GameServerObject = GameServer.query.filter_by( accessKey = authtoken, serverIP = RequestAddress ).first() + return GameServerObject + +class InvalidGZIPData(Exception): + pass +class InvalidJSONData(Exception): + pass + +def IncrementPlaceVisits( PlaceObj : Place ): + PlaceObj.visitcount += 1 + + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return + UniverseObj.visit_count += 1 + + db.session.commit() + +def ParsePayloadData(throwException : bool = True): + """ + Handles RCC Post Data and returns the JSON data + """ + if request.headers.get("Content-Encoding") == "gzip": + try: + data = gzip.decompress(request.data) + except Exception as e: + raise InvalidGZIPData("Invalid gzip data") + try: + JSONData = json.loads(data) + except Exception as e: + raise InvalidJSONData("Invalid JSON data") + else: + JSONData = request.json + if JSONData is None: + raise InvalidJSONData("Invalid JSON data") + return JSONData + +def EvictPlayer( PlaceServerObject : PlaceServer, UserId : int ): + PlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObject.serverPlaceId ).first() + MasterServer : GameServer | None = GameServer.query.filter_by(serverId=PlaceServerObject.originServerId).first() + + try: + if PlaceObj.placeyear in [PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.Sixteen]: + if PlaceObj.placeyear in [PlaceYear.Eighteen, PlaceYear.Twenty]: + ExecutionScript = f"""{{ + "Mode": "EvictPlayer", + "MessageVersion": 1, + "Settings": {{ + "PlayerId": {str(UserId)} + }} + }}""" + elif PlaceObj.placeyear in [PlaceYear.Sixteen]: + ExecutionScript = f"""for _, Player in pairs(game:GetService("Players"):GetPlayers()) do if Player.UserId == {UserId} then Player:Kick("Disconnected from game, possibly due to game joined from another device") end end""" + else: + raise Exception("PlaceYear is not compatible") + + ExecuteScriptRequest = perform_post( + TargetGameserver = MasterServer, + Endpoint = "Execute", + JSONData = { + "jobid": str(PlaceServerObject.serveruuid), + "script": ExecutionScript, + "arguments": [] + } + ) + + if ExecuteScriptRequest.status_code != 200: + raise Exception(f"Unexpected Status Code: {ExecuteScriptRequest.status_code}, {ExecuteScriptRequest.content}") + elif PlaceObj.placeyear in [PlaceYear.Fourteen]: + redis_controller.set(f"EvictPlayerRequest:{PlaceServerObject.serveruuid}:{UserId}", 1, ex=60) + StartTime = datetime.utcnow() + + while redis_controller.exists(f"EvictPlayerRequest:{PlaceServerObject.serveruuid}:{UserId}"): + if (datetime.utcnow() - StartTime).total_seconds() > 50: + raise Exception("Failed to evict player") + else: + raise Exception("PlaceYear is not compatible") + + except Exception as e: + logging.error(f"EvictPlayer failed to send request to kick player, {e}") + +@JobReportHandler.before_request +def before_request(): + requesterAddress = get_remote_address() + if requesterAddress is None: + logging.warning(f"Request rejected: ip not found") + return abort(404) + gameserverObj : GameServer = GameServer.query.filter_by(serverIP=requesterAddress).first() + if gameserverObj is None: + logging.warning(f"No gamesever found us stupid {requesterAddress}") + return abort(404) + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + +@JobReportHandler.route('/internal/gameserver/reportshutdown', methods=['POST']) +@csrf.exempt +def reportshutdown(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner : GameServer | None = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + placeId = JSONData["PlaceId"] + jobId = JSONData["JobId"] + + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serverPlaceId=placeId, serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "error", "message": "Invalid place server"}),400 + + try: + logging.info(f"CloseJob : Closing {jobId} for place [{placeId}] because server reports shutdown") + perform_post( + TargetGameserver = PlaceServerOwner, + Endpoint = "CloseJob", + JSONData = { + "jobid": jobId, + } + ) + except Exception as e: + logging.error(f"Failed to close job ( {jobId} ) for place ( {placeId} ), {e}") + + PlaceServerOwner : GameServer = GameServer.query.filter_by(serverId=PlaceServerObject.originServerId).first() + PlaceServerPlayers = PlaceServerPlayer.query.filter_by(serveruuid=jobId).all() + for PlaceServerPlayerObject in PlaceServerPlayers: + db.session.delete(PlaceServerPlayerObject) + db.session.delete(PlaceServerObject) + db.session.commit() + + PlaceObj : Place = Place.query.filter_by(placeid=placeId).first() + if PlaceObj is not None: + ClearPlayingCountCache(PlaceObj) + + return jsonify({"status": "success"}),200 + +@JobReportHandler.route('/internal/gameserver/reportstats', methods=['POST']) +@csrf.exempt +def reportstats(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + placeId = JSONData["PlaceId"] + jobId = JSONData["JobId"] + serverAliveTime = JSONData["ServerAliveTime"] + + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serverPlaceId=placeId, serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "success"}),200 + PlaceServerObject.lastping = datetime.utcnow() + PlaceServerObject.serverRunningTime = serverAliveTime + db.session.commit() + + return jsonify({"status": "success"}),200 + +@JobReportHandler.route('/internal/gameserver/reportplacevalidation', methods=['POST']) +@csrf.exempt +def reportplacevalidation(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + ValidationRequestId = JSONData["ReqId"] + LoadSuccess = JSONData["LoadSuccess"] + ErrorMessage = None + if "ErrorMessage" in JSONData: + ErrorMessage = JSONData["ErrorMessage"] + + redis_controller.set(f"ValidatePlaceFileRequest:{ValidationRequestId}", json.dumps({ + "valid": LoadSuccess, + "error": ErrorMessage + }), ex=600) + logging.info(f"Place validation request ( {ValidationRequestId} ) has been completed") + return jsonify({"status": "success"}),200 + +def HandleUserTimePlayed( UserObj : User, Timeplayed : int, serverUUID : str = None, placeId : int = None ): + """ + For every 40 seconds the user has played a game we give them 1 ticket + however we limit the tickets to 100 per day and the user account must be + more than 2 days old + """ + if serverUUID is not None and placeId is not None: + GameSessionLogObject : GameSessionLog = GameSessionLog.query.filter_by(serveruuid=serverUUID, place_id=placeId, user_id=UserObj.id).first() + if GameSessionLogObject is None: + GameSessionLogObject = GameSessionLog( + user_id = UserObj.id, + serveruuid = serverUUID, + place_id = placeId, + joined_at = datetime.utcnow() - timedelta(seconds=Timeplayed), + left_at = datetime.utcnow() + ) + db.session.add(GameSessionLogObject) + else: + GameSessionLogObject.left_at = datetime.utcnow() + db.session.commit() + + if datetime.utcnow() - timedelta(days=2) < UserObj.created: + return + + RawTicketsEarned = math.floor(Timeplayed / 40) + CurrentDay = datetime.utcnow().day + TicketsEarnedToday = redis_controller.get(f"UserTicketsEarned:{UserObj.id}:{CurrentDay}") + if TicketsEarnedToday is None: + TicketsEarnedToday = 0 + else: + TicketsEarnedToday = int(TicketsEarnedToday) + + if TicketsEarnedToday >= 500: + return + + TicketsToGive = 500 - TicketsEarnedToday + if RawTicketsEarned > TicketsToGive: + RawTicketsEarned = TicketsToGive + + if RawTicketsEarned <= 0: + return + + IncrementTargetBalance(UserObj, RawTicketsEarned, 1) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = RawTicketsEarned, + CurrencyType = 1, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = f"Played game for {str(round(Timeplayed,1))} seconds" + ) + AmountOfTicketsEarnedToday = TicketsEarnedToday + RawTicketsEarned + redis_controller.set(f"UserTicketsEarned:{UserObj.id}:{CurrentDay}", AmountOfTicketsEarnedToday, ex=86400) + +@JobReportHandler.route('/internal/gameserver/verifyplayer', methods=['POST']) +@csrf.exempt +def verifyplayer(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + jobId = JSONData["JobId"] + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "error", "message": "Invalid place server"}),400 + PlaceServerObject.lastping = datetime.utcnow() + PlaceObject : Place = Place.query.filter_by(placeid=PlaceServerObject.serverPlaceId).first() + if PlaceObject is None: + return jsonify({"status": "error", "message": "Invalid place"}),400 + + UserId = JSONData["UserId"] + UserObject : User = User.query.filter_by(id=UserId).first() + if UserObject is None or UserObject.accountstatus != 1: + return jsonify({"status": "error", "message": "Invalid user", "authenticated": False}), 200 + if "Username" not in JSONData or "CharacterAppearance" not in JSONData or "VerificationTicket" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data", "authenticated": False}), 200 + + Username = JSONData["Username"] + CharacterAppearance = JSONData["CharacterAppearance"] + VerificationTicket = JSONData["VerificationTicket"] + + authKeyName = f"joinashx-auth:{str(jobId)}:{str(UserId)}:{str(PlaceObject.placeid)}:{VerificationTicket}" + + if not redis_controller.exists(authKeyName): + return jsonify({"status": "error", "message": "Invalid join request", "authenticated": False}), 200 + + JoinInfo = json.loads(redis_controller.get(authKeyName)) + if JoinInfo is None: + return jsonify({"status": "error", "message": "Invalid join request", "authenticated": False}), 200 + redis_controller.delete(authKeyName) + if JoinInfo["CharacterAppearance"] != CharacterAppearance or JoinInfo["Username"] != Username: + return jsonify({"status": "error", "message": "Invalid join request", "authenticated": False}), 200 + return jsonify({"status": "success", "message": "Valid join request", "authenticated": True}), 200 + +@JobReportHandler.route('/internal/gameserver/reportplayers', methods=['POST']) +@csrf.exempt +def reportplayers(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + jobId = JSONData.get("JobId") + players = JSONData.get("Players", []) # Array of players in the server which each player is a dictionary ( { "UserId": 1, "Name": "test" } ) + playerCount = len(players) + + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "error", "message": "Invalid place server"}),400 + PlaceServerObject.lastping = datetime.utcnow() + PlaceObject : Place = Place.query.filter_by(placeid=PlaceServerObject.serverPlaceId).first() + if PlaceObject is None: + return jsonify({"status": "error", "message": "Invalid place"}),400 + AssetObject : Asset = Asset.query.filter_by(id=PlaceObject.placeid).first() + CreatorObject : User | Group = None + if AssetObject.creator_type == 0: + CreatorObject = User.query.filter_by(id=AssetObject.creator_id).first() + else: + CreatorObject = Group.query.filter_by(id=AssetObject.creator_id).first() + + BadPlayers = [] # Array of players which must be kicked from the server + for player in players: + UserObject : User = User.query.filter_by(id=player["UserId"]).first() + if UserObject is None or UserObject.username != player["Name"] or UserObject.accountstatus != 1: + logging.info(f"/internal/gameserver/reportplayers - {jobId} - Invalid Player ( {player['UserId']} ) - {player['Name']}") + BadPlayers.append(player["UserId"]) + playerCount -= 1 + continue + + if redis_controller.exists(f"EvictPlayerRequest:{jobId}:{player['UserId']}"): + redis_controller.delete(f"EvictPlayerRequest:{jobId}:{player['UserId']}") + logging.info(f"/internal/gameserver/reportplayers - {jobId} - Player ( {player['UserId']} ) requested kick") + BadPlayers.append(player["UserId"]) + playerCount -= 1 + continue + + PlaceServerPlayerObject : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(userid=player["UserId"]).first() + if PlaceServerPlayerObject is None: + if not redis_controller.exists(f"allow_join:{str(player['UserId'])}:{PlaceObject.placeid}:{str(jobId)}"): + logging.info(f"/internal/gameserver/reportplayers - {jobId} - Player ( {player['UserId']} ) is not allowed to join") + BadPlayers.append(player["UserId"]) + playerCount -= 1 + continue + + PlaceServerPlayerObject = PlaceServerPlayer(serveruuid=jobId, userid=player["UserId"], joinTime= datetime.utcnow()) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + db.session.add(PlaceServerPlayerObject) + else: + UserId = player["UserId"] + if str(PlaceServerPlayerObject.serveruuid) == jobId: + PlaceServerPlayerObject.lastHeartbeat = datetime.utcnow() + UserObject.lastonline = datetime.utcnow() + else: + OtherPlaceServerObj = PlaceServer.query.filter_by(serveruuid=PlaceServerPlayerObj.serveruuid).first() + if OtherPlaceServerObj is not None: + EvictPlayer( OtherPlaceServerObj, UserId ) + + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=jobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObj) + + PlaceServerPlayerObj = PlaceServerPlayer(serveruuid=jobId, userid=UserId, joinTime= datetime.utcnow()) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + + PlaceServerPlayers = PlaceServerPlayer.query.filter_by(serveruuid=jobId).all() + for PlaceServerPlayerObject in PlaceServerPlayers: + playerFound = False + for player in players: + if PlaceServerPlayerObject.userid == player["UserId"]: + playerFound = True + break + if playerFound == False: + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=jobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObject) + + PlaceServerObject.playerCount = playerCount + db.session.commit() + ClearPlayingCountCache(PlaceObject) + return jsonify({"status": "success", "bad": BadPlayers}),200 + +# 2022+ endpoint +from sqlalchemy import func +from datetime import datetime +import time + +@JobReportHandler.route('/internal/gameserver/reportjobid', methods=['POST']) +@JobReportHandler.route('//internal/gameserver/reportjobid', methods=['POST']) +@csrf.exempt +def reportjobid(): + MAX_RETRIES = 3 + RETRY_DELAY = 0.5 # seconds + + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}), 400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}), 400 + except Exception as e: + logging.error(f"Error parsing payload data: {str(e)}", exc_info=True) + return jsonify({"status": "error", "message": "Unknown error occurred while parsing data"}), 400 + + if "PlaceId" not in JSONData or "StartTime" not in JSONData: + return jsonify({"status": "error", "message": "Missing PlaceId or StartTime in request"}), 400 + + place_id = JSONData["PlaceId"] + start_time = JSONData["StartTime"] + + for attempt in range(MAX_RETRIES): + try: + active_servers = PlaceServer.query.filter_by(serverPlaceId=place_id)\ + .filter(PlaceServer.lastping > datetime.utcnow() - timedelta(minutes=5))\ + .count() + logging.debug(f"Attempt {attempt + 1}: Found {active_servers} active servers for place {place_id}") + + time_diff = func.abs(func.extract('epoch', PlaceServer.created_at) - start_time) + + place_server = PlaceServer.query.filter_by(serverPlaceId=place_id)\ + .filter(PlaceServer.lastping > datetime.utcnow() - timedelta(minutes=5))\ + .order_by(time_diff)\ + .first() + + if not place_server: + place_server = PlaceServer.query.filter_by(serverPlaceId=place_id)\ + .order_by(time_diff)\ + .first() + + if not place_server: + logging.warning(f"Attempt {attempt + 1}: No matching server found for place_id: {place_id}") + if attempt < MAX_RETRIES - 1: + time.sleep(RETRY_DELAY) + continue + return jsonify({ + "status": "error", + "message": "No available server found for this place", + "suggested_action": "create_new_server", + "debug_info": { + "place_id": place_id, + "active_servers_count": active_servers, + "total_servers_count": PlaceServer.query.filter_by(serverPlaceId=place_id).count() + } + }), 404 + + game_server = GameServer.query.filter_by(serverId=place_server.originServerId).first() + + if not game_server: + logging.error(f"Original GameServer not found for PlaceServer {place_server.serveruuid}") + return jsonify({ + "status": "error", + "message": "Server configuration error", + "debug_info": { + "place_server_uuid": str(place_server.serveruuid), + "origin_server_id": str(place_server.originServerId) + } + }), 500 + + logging.info(f"Found matching server {place_server.serveruuid} for place {place_id}") + return jsonify({ + "status": "success", + "JobId": str(place_server.serveruuid), + "ApiKey": game_server.accessKey, + "ServerIP": place_server.serverIP, + "ServerPort": place_server.serverPort, + "LastPing": place_server.lastping.isoformat() if place_server.lastping else None, + "ServerAge": (datetime.utcnow() - place_server.created_at).total_seconds() if place_server.created_at else None + }) + + except Exception as e: + logging.error(f"Attempt {attempt + 1} failed for place {place_id}: {str(e)}", exc_info=True) + if attempt == MAX_RETRIES - 1: + return jsonify({ + "status": "error", + "message": "Internal server error", + "error_details": str(e), + "attempts": attempt + 1 + }), 500 + time.sleep(RETRY_DELAY) + +@JobReportHandler.route('/internal/gameserver/reportfailure', methods=['POST']) +@csrf.exempt +def reportfailure(): + # TODO: Implement this + return jsonify({"status": "success"}),200 + +# 2018+ endpoints + +@JobReportHandler.route("/v2/CreateOrUpdate/", methods=['POST']) +@csrf.exempt +def CreateOrUpdate(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + RequestHost = request.headers.get('Host') + if RequestHost is None: + logging.warning(f"Request rejected: No host found") + return abort(404) + if not (RequestHost.startswith("gameinstancesapis.") or RequestHost.startswith("gameinstances.api.") or RequestHost.startswith("gameinstances-api.")): + logging.warning(f"Request rejected: Invalid host domain - {RequestHost}") + return abort(404) + + AccessKey = request.args.get( key = 'apiKey', default = None, type = str) + JobId = request.args.get( key = 'gameId', default = None, type = str) + if AccessKey is None or JobId is None: + return abort(404) + + # Newer RCCs uses temporary access keys to report their game status and stuff + if not redis_controller.exists(f"GameServerAccessKey:{AccessKey}:{JobId}"): + logging.warning(f"Invalid access key ( {AccessKey} ) for server ( {JobId} )") + return abort(404) + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=JobId).first() + if PlaceServerObj is None: + originServerUUID = redis_controller.get(f"place:{JobId}:origin") + if originServerUUID is not None: + PlaceServerOwner : GameServer = GameServer.query.filter_by(serverId=originServerUUID).first() + if PlaceServerOwner is not None: + logging.info(f"CloseJob : Closing {JobId} because server does not exist in database") + perform_post( + TargetGameserver = PlaceServerOwner, + Endpoint = "CloseJob", + JSONData = { + "jobid": JobId, + } + ) + + logging.warning(f"Invalid server ( {JobId} )") + return abort(404) + PlaceServerOwner : GameServer = GameServer.query.filter_by(serverId=PlaceServerObj.originServerId).first() + + PlaceObject : Place = Place.query.filter_by(placeid=PlaceServerObj.serverPlaceId).first() + if PlaceObject is None: + logging.warning(f"Invalid place ( {PlaceServerObj.serverPlaceId} ) for server ( {JobId} )") + return jsonify({"status": "error", "message": "Invalid place"}),400 + AssetObject : Asset = Asset.query.filter_by(id=PlaceObject.placeid).first() + CreatorObject : User | Group = None + if AssetObject.creator_type == 0: + CreatorObject = User.query.filter_by(id=AssetObject.creator_id).first() + else: + CreatorObject = Group.query.filter_by(id=AssetObject.creator_id).first() + + PlaceServerObj.lastping = datetime.utcnow() + GameSessions = JSONData.get("GameSessions") + if GameSessions is None: + GameSessions = JSONData.get("gameSessions") + if GameSessions is None: + GameSessions = [] + + for GameSession in GameSessions: + UserId = GameSession["UserId"] + UserObject : User = User.query.filter_by(id=UserId).first() + if UserObject is None or UserObject.accountstatus != 1: + EvictPlayer( PlaceServerObj, UserId ) + logging.warning(f"User ( {UserId} ) is not a valid user, on server ( {PlaceServerObj.serveruuid} )") + continue + + PlaceServerPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(serveruuid=JobId, userid=UserId).first() + if PlaceServerPlayerObj is None: + PlaceServerPlayerObj = PlaceServerPlayer(serveruuid=JobId, userid=UserId, joinTime=datetime.utcnow()) + db.session.add(PlaceServerPlayerObj) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + else: + if str(PlaceServerPlayerObj.serveruuid) == JobId: + PlaceServerPlayerObj.lastHeartbeat = datetime.utcnow() + UserObject.lastonline = datetime.utcnow() + else: + OtherPlaceServerObj = PlaceServer.query.filter_by(serveruuid=PlaceServerPlayerObj.serveruuid).first() + if OtherPlaceServerObj is not None: + EvictPlayer( OtherPlaceServerObj, UserId ) + + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=JobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObj) + + PlaceServerPlayerObj = PlaceServerPlayer(serveruuid=JobId, userid=UserId, joinTime= datetime.utcnow()) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + + PlaceServerPlayers = PlaceServerPlayer.query.filter_by(serveruuid=JobId).all() + for PlaceServerPlayerObject in PlaceServerPlayers: + playerFound = False + for GameSession in GameSessions: + if PlaceServerPlayerObject.userid == GameSession["UserId"]: + playerFound = True + break + if playerFound == False: + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=JobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObject) + + if PlaceServerObj.playerCount == 0 and len(GameSessions) == 0 and PlaceServerObj.serverRunningTime > 60: + logging.info(f"CloseJob : Closing {JobId} for place [{PlaceServerObj.serverPlaceId}] because there was no players in the server for more than 60 seconds") + perform_post( + TargetGameserver = PlaceServerOwner, + Endpoint = "CloseJob", + JSONData = { + "jobid": JobId, + } + ) + logging.info(f"Server ( {JobId} ) has been shutdown because there was no players in the server") + db.session.delete(PlaceServerObj) + db.session.commit() + return jsonify({"status": "success"}),200 + + PlaceServerObj.serverRunningTime = int(float(request.args.get('gameTime', '1', type=str))) + 1 + PlaceServerObj.playerCount = len(GameSessions) + db.session.commit() + + ClearPlayingCountCache(PlaceObject) + return jsonify({"status": "success"}),200 + +@JobReportHandler.route("/v2.0/Refresh", methods=['POST']) +@csrf.exempt +def Refresh(): + return jsonify({"status": "success"}),200 # We don't care about this endpoint since the above endpoint will handle it + +@JobReportHandler.route("/v1/Close/", methods=['POST']) +@csrf.exempt +def CloseJob(): + AccessKey = request.args.get( key = 'apiKey', default = None, type = str) + JobId = request.args.get( key = 'gameId', default = None, type = str) + if AccessKey is None or JobId is None: + return abort(404) + + if not redis_controller.exists(f"GameServerAccessKey:{AccessKey}:{JobId}"): + logging.warning(f"Invalid access key ( {AccessKey} ) for server ( {JobId} )") + return abort(404) + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=JobId).first() + if PlaceServerObj is not None: + AllPlaceServerPlayers : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter_by(serveruuid=JobId).all() + for PlaceServerPlayerObj in AllPlaceServerPlayers: + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObj.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObj.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=JobId, placeId=PlaceServerObj.serverPlaceId) + db.session.delete(PlaceServerPlayerObj) + db.session.delete(PlaceServerObj) + db.session.commit() + + return jsonify({"status": "success"}),200 + +@JobReportHandler.route("/game/report-water-sys", methods=['GET']) +@csrf.exempt +def ReportCheatersHandler(): + RequestHost = request.headers.get('Host') + if RequestHost is None: + return abort(404) + if not RequestHost.startswith("gameinstances.api."): + return abort(404) + + ReportingUserId = request.args.get( key = 'UserID', default = None, type = int) + if ReportingUserId is None: + return abort(404) + ReportingMessage = request.args.get( key = 'Message', default = None, type = str) + if ReportingMessage is None: + return abort(404) + AccessKey = request.args.get( key = 'AccessKey', default = '', type = str ) + if "UserRequest" in AccessKey: + return abort(404) + + ReportingRemoteAddress = get_remote_address() + ReportingGameServer : GameServer = GameServer.query.filter_by(serverIP=ReportingRemoteAddress).first() + + if ReportingGameServer is None: + return abort(404) + + UserObj : User = User.query.filter_by(id=ReportingUserId).first() + if UserObj is None: + return abort(404) + + BannableErrorCodes = { + "carol": "Lua vm hooked (20)", + "murdle": "Cheat Engine Stable Methods (0)", + "olivia": "Debugger found (10)" + } + + isBanned = False + if ReportingMessage.lower() in BannableErrorCodes: + LastestUserBanObj : UserBan = UserBan.query.filter_by(userid=UserObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LastestUserBanObj is None and UserObj.accountstatus == 1: + NewUserBanObj = UserBan( + userid = UserObj.id, + author_userid = 1, + ban_type = BanType.Deleted, + reason = "Exploiting in games is not tolerated on Vortexi", + moderator_note = f"Automatic ban, received detection from gameserver. Error Code: {BannableErrorCodes[ReportingMessage.lower()]} / {BannableErrorCodes[ReportingMessage.lower()]}", + expires_at = None + ) + db.session.add(NewUserBanObj) + UserObj.accountstatus = 3 + db.session.commit() + + isBanned = True + + try: + requests.post( + url = config.CHEATER_REPORTS_DISCORD_WEBHOOK, + json = { + "content": f"Received Cheater Report from GameServer {ReportingGameServer.serverName} ( {ReportingGameServer.serverId} ) for User {UserObj.username} ( {UserObj.id} )\n```{ReportingMessage}```\n Was the user banned? **{isBanned}**", + "username": "Cheater Reports" + } + ) + except Exception as e: + logging.error(f"jobreporthandler : ReportCheatersHandler: Failed to send cheater report to discord, {e}") + + return "OK", 200 + +@JobReportHandler.route("/Game/ClientPresence.ashx", methods=['GET']) +def ClientPresence(): # Does nothing + return "OK", 200 \ No newline at end of file diff --git a/app/routes/kofihandler.py b/app/routes/kofihandler.py new file mode 100644 index 0000000..0730422 --- /dev/null +++ b/app/routes/kofihandler.py @@ -0,0 +1,124 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort +from config import Config +import json +import logging +from app.models.giftcard_key import GiftcardKey +from app.enums.GiftcardType import GiftcardType +from app.models.kofi_transaction import KofiTransaction +from app.extensions import db, csrf +import requests +import datetime +import secrets +import string +from requests.auth import HTTPBasicAuth +from config import Config + +config = Config() + +KofiHandlerRoute = Blueprint("kofihandler", __name__, template_folder="pages") + +def GenerateCode(): + Code = "" + for i in range(0, 5): + Chunk = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(5)) + Code += Chunk + if i != 4: + Code += "-" + return Code + +@KofiHandlerRoute.before_request +def before_request(): + if config.KOFI_ENABLED is False: + return abort(404) + +@KofiHandlerRoute.route("/internal/kofi_handler", methods=["POST"]) +@csrf.exempt +def kofi_handler(): + try: + PurchaseData = json.loads( + request.form.get(key="data", default=None, type=str) + ) + if PurchaseData is None: + return abort(400) + except: + return abort(400) + + if PurchaseData["verification_token"] != Config.KOFI_VERIFICATION_TOKEN: + return abort(401) + + if "email" not in PurchaseData: + logging.error("KofiHandler: Email not in PurchaseData") + return abort(400) + UserEmail : str = PurchaseData["email"] + + logging.info(f"KofiHandler: Received donation from {UserEmail}, Transaction ID: {PurchaseData['kofi_transaction_id']}") + TransactionObj : KofiTransaction = KofiTransaction.query.filter_by(kofi_transaction_id=PurchaseData["kofi_transaction_id"]).first() + if TransactionObj is not None: + logging.error(f"KofiHandler: Transaction ID {PurchaseData['kofi_transaction_id']} already exists") + return abort(400) + + NewGiftcardCode : str = GenerateCode() + NewGiftcardObj : GiftcardKey = GiftcardKey( + key = NewGiftcardCode, + type = GiftcardType.Outrageous_BuildersClub, + value = 1 + ) + db.session.add(NewGiftcardObj) + db.session.commit() + + NewTransactionObj : KofiTransaction = KofiTransaction( + kofi_transaction_id = PurchaseData["kofi_transaction_id"], + timestamp = datetime.datetime.strptime(PurchaseData["timestamp"], "%Y-%m-%dT%H:%M:%SZ"), + donation_type = PurchaseData["type"], + amount = float(PurchaseData["amount"]), + currency = PurchaseData["currency"], + is_subscription_payment = PurchaseData["is_subscription_payment"], + message = PurchaseData["message"], + from_name = PurchaseData["from_name"], + from_email = PurchaseData["email"], + assigned_key = NewGiftcardObj.key + ) + db.session.add(NewTransactionObj) + db.session.commit() + + EmailData = { + "Messages": [ + { + "From": { + "Email": Config.MAILJET_NOREPLY_SENDER, + "Name": "NEXIUM Donation Processor" + }, + "To": [ + { + "Email": UserEmail, + "Name": PurchaseData["from_name"] + } + ], + "TemplateID": Config.MAILJET_DONATION_TEMPLATE_ID, + "TemplateLanguage": True, + "Subject": "Thank you for your donation!", + "Variables": { + "redeem_key": NewGiftcardObj.key, + } + } + ] + } + EmailResponse = requests.post( + url="https://api.mailjet.com/v3.1/send", + data=json.dumps(EmailData), + headers={ + "Content-Type": "application/json" + }, + auth = HTTPBasicAuth( + Config.MAILJET_APIKEY, + Config.MAILJET_SECRETKEY + ) + ) + + if EmailResponse.status_code != 200: + logging.error(f"KofiHandler: Failed to send email to {UserEmail}") + logging.error(EmailResponse.json()) + return "OK", 200 # We don't want to return an error to Ko-fi since we already processed the donation, so we just return OK + + logging.info(f"KofiHandler: Successfully sent email to {UserEmail} and processed donation") + return "OK", 200 diff --git a/app/routes/legacydatapersistence.py b/app/routes/legacydatapersistence.py new file mode 100644 index 0000000..deeb853 --- /dev/null +++ b/app/routes/legacydatapersistence.py @@ -0,0 +1,125 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from config import Config +from app.models.user import User +from app.models.gameservers import GameServer +from app.models.place import Place +from app.models.universe import Universe +from app.models.legacy_data_persistence import LegacyDataPersistence +from app.extensions import redis_controller, get_remote_address, csrf, limiter, db +from datetime import datetime +import logging +import gzip + +LegacyDataPersistenceRoute = Blueprint('legacyDataPersistence', __name__, url_prefix='/persistence/legacy') + +@LegacyDataPersistenceRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + logging.info(f"LegacyDataPersistence - UserAgent {request.user_agent} - Not allowed") + abort(404) + RemoteAddress = get_remote_address() + GameServerObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameServerObj is None: + logging.info(f"LegacyDataPersistence - {RemoteAddress} - Not found") + abort(404) + + if "Roblox-Place-Id" not in request.headers and "placeId" not in request.args: + logging.info(f"LegacyDataPersistence - GameServer {RemoteAddress} - Roblox-Place-Id header and cookie not found") + abort(404) + + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) or request.args.get( key = "placeId", default = None, type = int ) + if PlaceId is None: + logging.info(f"LegacyDataPersistence - GameServer {RemoteAddress} - Roblox-Place-Id header or arg not expected type") + abort(404) + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + logging.info(f"LegacyDataPersistence - Place {PlaceId} - Place not found") + abort(404) + +@LegacyDataPersistenceRoute.route('/load', methods=['POST', 'GET']) +@csrf.exempt +def LoadData(): + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) or request.args.get( key = "placeId", default = None, type = int ) + + RequestedUserId = request.args.get( + key = "userId", + default = None, + type = int + ) + if RequestedUserId is None: + return "Invalid request", 400 + + UserObj : User = User.query.filter_by( id = RequestedUserId ).first() + if UserObj is None: + return "Invalid request", 400 + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + return "Invalid request", 400 + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return "Invalid request", 400 + + LegacyDataPersistenceObj : LegacyDataPersistence = LegacyDataPersistence.query.filter_by( + userid = RequestedUserId, + universe_id = UniverseObj.id + ).first() + logging.info(f"LegacyDataPersistence - User {UserObj.id} - Place {PlaceId} - Universe {UniverseObj.id} - Data requested") + if LegacyDataPersistenceObj is None: + return "", 200 + + return gzip.decompress(LegacyDataPersistenceObj.data), 200 + +@LegacyDataPersistenceRoute.route('/save', methods=['POST']) +@csrf.exempt +def SaveData(): + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) or request.args.get( key = "placeId", default = None, type = int ) + + PayloadData = request.data + if request.content_encoding != "gzip": + PayloadData = gzip.compress( PayloadData ) + + RequestedUserId = request.args.get( + key = "userId", + default = None, + type = int + ) + if RequestedUserId is None: + return "Invalid request", 400 + + UserObj : User = User.query.filter_by( id = RequestedUserId ).first() + if UserObj is None: + return "Invalid request", 400 + + if len(PayloadData) > 1024 * 1024 * 2: + logging.info(f"LegacyDataPersistence - User {UserObj.id} - Place {PlaceId} - Universe {UniverseObj.id} - Payload too large, {len(PayloadData)} bytes") + return "Payload too large", 400 + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + return "Invalid request", 400 + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return "Invalid request", 400 + + LegacyDataPersistenceObj : LegacyDataPersistence = LegacyDataPersistence.query.filter_by( + userid = RequestedUserId, + universe_id = UniverseObj.id + ).first() + + if LegacyDataPersistenceObj is None: + LegacyDataPersistenceObj = LegacyDataPersistence( + placeid = PlaceId, + userid = RequestedUserId, + universe_id = UniverseObj.id + ) + db.session.add( LegacyDataPersistenceObj ) + + LegacyDataPersistenceObj.data = PayloadData + LegacyDataPersistenceObj.last_updated = datetime.utcnow() + db.session.commit() + logging.info(f"LegacyDataPersistence - User {UserObj.id} - Place {PlaceId} - Universe {UniverseObj.id} - Saved {len(LegacyDataPersistenceObj.data)} bytes") + return "OK", 200 + + \ No newline at end of file diff --git a/app/routes/luawebservice.py b/app/routes/luawebservice.py new file mode 100644 index 0000000..7ec50a4 --- /dev/null +++ b/app/routes/luawebservice.py @@ -0,0 +1,577 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from config import Config +from app.models.asset import Asset +from app.models.userassets import UserAsset +from app.enums.AssetType import AssetType +from app.models.follow_relationship import FollowRelationship +from app.models.friend_relationship import FriendRelationship +from app.models.friend_request import FriendRequest +from app.models.package_asset import PackageAsset +from app.models.placeserver_players import PlaceServerPlayer +from app.util import auth, friends, websiteFeatures, membership +from app.services import economy +from app.enums.MembershipType import MembershipType +from app.models.user import User +from app.models.user_email import UserEmail +from sqlalchemy import or_, func +from app.extensions import limiter, db, csrf +import logging +from datetime import datetime, timedelta +from app.models.groups import GroupRole, GroupMember +from app.services.groups import GetGroupMemberCount +from app.services.groups import GetUserRankInGroup, GroupExceptions, GetUserRolesetInGroup +from app.services.user_relationships import followings +config = Config() + +LuaWebServiceRoute = Blueprint('luawebservice', __name__, url_prefix='/') + +def MakeReturnFalseResponse(): + Resposne = make_response("""false""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +def MakeReturnTrueResponse(): + Resposne = make_response("""true""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +def MakeReturnIntResponse(Value : int): + Resposne = make_response(f"""{str(Value)}""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +def MakeReturnStringResponse(Value : str): + Resposne = make_response(Value) + #Resposne = make_response(f"""{Value}""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +@LuaWebServiceRoute.route('/Game/LuaWebService/HandleSocialRequest.ashx', methods=['GET']) +def HandleSocialRequest(): + playerid = request.args.get("playerid", None, int) + groupid = request.args.get("groupid", None, int) + userid = request.args.get("userid", None, int) + method = request.args.get("method", None, str) + if method is None: + return MakeReturnFalseResponse() + if groupid == 1200769: + groupid = config.ADMIN_GROUP_ID + if groupid == 4199740: + groupid = config.STAR_GROUP_ID + if method == "GetGroupRank": + try: + if playerid is None or groupid is None: + return MakeReturnIntResponse(0) + if playerid < 1 or groupid < 1: + return MakeReturnIntResponse(0) + return MakeReturnIntResponse(GetUserRankInGroup(playerid, groupid)) + except GroupExceptions.GroupDoesNotExist: + return MakeReturnIntResponse(0) + except GroupExceptions.UserDoesNotExist: + return MakeReturnIntResponse(0) + elif method == "IsInGroup": + try: + if playerid is None or groupid is None: + return MakeReturnFalseResponse() + if playerid < 1 or groupid < 1: + return MakeReturnFalseResponse() + if GetUserRankInGroup(playerid, groupid) == 0: + return MakeReturnFalseResponse() + return MakeReturnTrueResponse() + except GroupExceptions.GroupDoesNotExist: + return MakeReturnFalseResponse() + except GroupExceptions.UserDoesNotExist: + return MakeReturnFalseResponse() + elif method == "GetGroupRole": + try: + if playerid is None or groupid is None: + return MakeReturnStringResponse("Guest") + if playerid < 1 or groupid < 1: + return MakeReturnStringResponse("Guest") + if GetUserRankInGroup(playerid, groupid) == 0: + return MakeReturnStringResponse("Guest") + Roleset : GroupRole = GetUserRolesetInGroup(playerid, groupid) + return MakeReturnStringResponse(Roleset.name) + except GroupExceptions.GroupDoesNotExist: + return MakeReturnStringResponse("Guest") + except GroupExceptions.UserDoesNotExist: + return MakeReturnStringResponse("Guest") + elif method == "IsFriendsWith": + try: + if playerid is None or userid is None: + return MakeReturnFalseResponse() + if playerid < 1 or userid < 1: + return MakeReturnFalseResponse() + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(playerid, userid) + if FriendRelationshipObj is None: + return MakeReturnFalseResponse() + return MakeReturnTrueResponse() + except Exception as e: + logging.error(f"IsFriendsWith: {e}") + return MakeReturnFalseResponse() + + return MakeReturnFalseResponse() + +@LuaWebServiceRoute.route("/Game/GamePass/GamePassHandler.ashx", methods=['GET']) +def GamePassHandler(): + Action = request.args.get("Action", None, str) + UserID = request.args.get("UserID", None, int) + PassID = request.args.get("PassID", None, int) + if Action is None or UserID is None or PassID is None: + return MakeReturnFalseResponse() + if Action == "HasPass": + AssetObj : Asset = Asset.query.filter_by(id=PassID).first() + if AssetObj is None: + return MakeReturnFalseResponse() + if AssetObj.asset_type != AssetType.GamePass: + return MakeReturnFalseResponse() + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=UserID, assetid=PassID).first() + if UserAssetObj is None: + return MakeReturnFalseResponse() + return MakeReturnTrueResponse() + return MakeReturnFalseResponse() + +@LuaWebServiceRoute.route("/user/request-friendship", methods=['POST']) +@auth.authenticated_client_endpoint +@csrf.exempt +@limiter.limit("1/second") +def RequestFriendship(): + UserID = request.args.get("recipientUserId", None, int) + if UserID is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == UserID: + return jsonify({"success": False, "message": "Invalid request"}), 400 + TargetUserObj : User = User.query.filter_by(id=UserID).first() + if TargetUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + + TargetPlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by(userid=UserID).first() + if TargetPlaceServerPlayerObj is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + AuthenticatedPlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by(userid=AuthenticatedUser.id).first() + if AuthenticatedPlaceServerPlayerObj is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if TargetPlaceServerPlayerObj.serveruuid != AuthenticatedPlaceServerPlayerObj.serveruuid: + return jsonify({"success": False, "message": "Invalid request"}), 400 + + FriendRelationshipObj : FriendRelationship | None = friends.GetFriendRelationship(AuthenticatedUser.id, UserID) + if FriendRelationshipObj is not None: + return jsonify({"success": True }),200 + FriendRequestObj : FriendRequest | None = FriendRequest.query.filter_by(requester_id=AuthenticatedUser.id, requestee_id=UserID).first() + if FriendRequestObj is not None: + return jsonify({"success": True }),200 + FriendRequestObj : FriendRequest | None = FriendRequest.query.filter_by(requester_id=UserID, requestee_id=AuthenticatedUser.id).first() + if FriendRequestObj is not None: + FriendRelationshipObj : FriendRelationship = FriendRelationship( + user_id=AuthenticatedUser.id, + friend_id=UserID + ) + db.session.add(FriendRelationshipObj) + db.session.delete(FriendRequestObj) + db.session.commit() + return jsonify({"success": True }),200 + FriendRequestObj : FriendRequest = FriendRequest( + requester_id=AuthenticatedUser.id, + requestee_id=UserID + ) + db.session.add(FriendRequestObj) + db.session.commit() + return jsonify({"success": True }),200 + +@LuaWebServiceRoute.route("/user/decline-friend-request", methods=['POST']) +@auth.authenticated_client_endpoint +@csrf.exempt +@limiter.limit("1/second") +def DeclineFriendRequest(): + UserID = request.args.get("requesterUserId", None, int) + if UserID is None: + jsonify({"success": False, "message": "Invalid request"}), 400 + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == UserID: + jsonify({"success": False, "message": "Invalid request"}), 400 + TargetUserObj : User = User.query.filter_by(id=UserID).first() + if TargetUserObj is None: + jsonify({"success": False, "message": "Invalid request"}), 400 + FriendRequestObj : FriendRequest | None = FriendRequest.query.filter_by(requester_id=UserID, requestee_id=AuthenticatedUser.id).first() + if FriendRequestObj is None: + FriendRelationshipObj : FriendRelationship | None = friends.GetFriendRelationship(AuthenticatedUser.id, UserID) + if FriendRelationshipObj is None: + jsonify({"success": False, "message": "Invalid request"}), 400 + db.session.delete(FriendRelationshipObj) + db.session.commit() + return jsonify({"success": True }),200 + db.session.delete(FriendRequestObj) + db.session.commit() + return jsonify({"success": True }),200 + +@LuaWebServiceRoute.route("/user/following-exists", methods=["GET"]) +@limiter.limit("60/minute") +def FollowingExists(): + UserID = request.args.get("userId", None, int) + FollowerUserID = request.args.get("followerUserId", None, int) + if UserID is None or FollowerUserID is None: + return jsonify({"success": False, "isFollowing": False}) + + FollowedUserObj : User = User.query.filter_by(id=UserID).first() + FollowerUserObj : User = User.query.filter_by(id=FollowerUserID).first() + if FollowedUserObj is None or FollowerUserObj is None: + return jsonify({"success": False, "isFollowing": False}) + + return jsonify({"success": True, "isFollowing": followings.is_following( follower_user = FollowerUserObj, followed_user = FollowedUserObj)}) + +@LuaWebServiceRoute.route("/user/get-friendship-count", methods=["GET"]) +@limiter.limit("60/minute") +def GetFriendshipCount(): + UserID = request.args.get("userId", None, int) + if UserID is None: + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "count": 0}) + UserID = AuthenticatedUser.id + + FriendRelationshipCount : int = FriendRelationship.query.filter(or_( FriendRelationship.user_id == UserID, FriendRelationship.friend_id == UserID)).count() + + return jsonify({"success": True, "count": FriendRelationshipCount}) + +@LuaWebServiceRoute.route("/user/follow", methods=["POST"]) +@csrf.exempt +@auth.authenticated_client_endpoint +@limiter.limit("20/minute") +def FollowUser(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + TargetUserId = request.form.get("followedUserId", None, int) + if TargetUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + if TargetUserId == AuthenticatedUser.id: + return jsonify({"success": False, "message": "Invalid request"}),400 + + TargetUserObj : User = User.query.filter_by(id=TargetUserId).first() + if TargetUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + try: + followings.follow_user( + follower_user = AuthenticatedUser, + followed_user = TargetUserObj + ) + except followings.FollowingExceptions.AlreadyFollowing: + return jsonify({"success": True}),200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({"success": False, "message": "Rate limited"}),429 + except followings.FollowingExceptions.FollowingIsDisabled: + return jsonify({"success": False, "message": "Following is disabled"}),400 + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/user/unfollow", methods=["POST"]) +@csrf.exempt +@auth.authenticated_client_endpoint +@limiter.limit("20/minute") +def UnfollowUser(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + TargetUserId = request.form.get("followedUserId", None, int) + if TargetUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + if TargetUserId == AuthenticatedUser.id: + return jsonify({"success": False, "message": "Invalid request"}),400 + + TargetUserObj : User = User.query.filter_by(id=TargetUserId).first() + if TargetUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + try: + followings.unfollow_user( + current_follower = AuthenticatedUser, + followed_user = TargetUserObj + ) + except followings.FollowingExceptions.UserNotFollowing: + return jsonify({"success": True}),200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({"success": False, "message": "Rate limited"}),429 + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/my/economy-status", methods=["GET"]) +@auth.authenticated_client_endpoint +def EconomyStatus(): + return jsonify({ + "success": True, + "isMarketplaceEnabled": websiteFeatures.GetWebsiteFeature("EconomyPurchase") + }) + +@LuaWebServiceRoute.route("/currency/balance", methods=["GET"]) +#@auth.authenticated_client_endpoint +def EconomyBalance(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + RobuxBal, TixBal = economy.GetUserBalance(AuthenticatedUser) + return jsonify({ + "success": True, + "robux": RobuxBal, + "tickets": TixBal + }) + +@LuaWebServiceRoute.route("/ownership/hasasset", methods=["GET"]) +@LuaWebServiceRoute.route("/ownership/hasAsset", methods=["GET"]) +#@auth.gameserver_authenticated_required +def HasAsset(): + AssetID = request.args.get("assetId", None, int) + if AssetID is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + UserId = request.args.get("userId", None, int) + if UserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + AssetObj : Asset = Asset.query.filter_by(id=AssetID).first() + if AssetObj is None: + return "false",200 + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=UserId, assetid=AssetID).first() + if UserAssetObj is None: + return "false",200 + return "true",200 + +@LuaWebServiceRoute.route("/Friend/AreFriends", methods=["GET"]) +@auth.gameserver_authenticated_required +def AreFriends(): + userId = request.args.get("userId", None, int) + otherUserId = request.args.get("otherUserId", None, int) + otherUserIdList = request.args.getlist("otherUserIds") + if userId is None or ( otherUserId is None and len(otherUserIdList) == 0): + return jsonify({"success": False, "message": "Invalid request"}),400 + if otherUserId is not None: + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(userId, otherUserId) + if FriendRelationshipObj is not None: + return jsonify({"success": True, "friendStatus": 2}) + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id = userId, requestee_id=otherUserId).first() + if FriendRequestObj is not None: + return jsonify({"success": True, "friendStatus": 3}) + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id = otherUserId, requestee_id=userId).first() + if FriendRequestObj is not None: + return jsonify({"success": True, "friendStatus": 4}) + return jsonify({"success": True, "friendStatus": 1}) + else: + if len(otherUserIdList) > 100: + return jsonify({"success": False, "message": "Invalid request"}),400 + + RequestResult = "" + for TargetUserId in otherUserIdList: + try: + TargetUserId = int(TargetUserId) + except: + continue + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(userId, TargetUserId) + if FriendRelationshipObj is not None: + RequestResult += f"{str(TargetUserId)}," + continue + return RequestResult,200 + +@LuaWebServiceRoute.route("/Friend/CreateFriend", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def CreateFriend(): + firstUserId = request.args.get( "firstUserId", default = None, type = int ) + secondUserId = request.args.get( "secondUserId", default = None, type = int ) + + if firstUserId is None or secondUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + firstUserObj : User = User.query.filter_by(id=firstUserId).first() + secondUserObj : User = User.query.filter_by(id=secondUserId).first() + if firstUserObj is None or secondUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(firstUserId, secondUserId) + if FriendRelationshipObj is not None: + return jsonify({"success": True}),200 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=firstUserId, requestee_id=secondUserId).first() + if FriendRequestObj is not None: + db.session.delete(FriendRequestObj) + SecondFriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=secondUserId, requestee_id=firstUserId).first() + if SecondFriendRequestObj is not None: + db.session.delete(SecondFriendRequestObj) + + FriendRelationshipObj = FriendRelationship( + user_id=firstUserId, + friend_id=secondUserId + ) + db.session.add(FriendRelationshipObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/Friend/BreakFriend", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def BreakFriend(): + firstUserId = request.args.get( "firstUserId", default = None, type = int ) + secondUserId = request.args.get( "secondUserId", default = None, type = int ) + + if firstUserId is None or secondUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + firstUserObj : User = User.query.filter_by(id=firstUserId).first() + secondUserObj : User = User.query.filter_by(id=secondUserId).first() + if firstUserObj is None or secondUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(firstUserId, secondUserId) + if FriendRelationshipObj is not None: + db.session.delete(FriendRelationshipObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/Friend/CreateFriendRequest", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def CreateFriendRequest(): + requesterUserId = request.args.get( "requesterUserId", default = None, type = int ) + requestedUserId = request.args.get( "requestedUserId", default = None, type = int ) + + if requesterUserId is None or requestedUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + requesterUserObj : User = User.query.filter_by(id=requesterUserId).first() + requestedUserObj : User = User.query.filter_by(id=requestedUserId).first() + + if requesterUserObj is None or requestedUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(requesterUserId, requestedUserId) + if FriendRelationshipObj is not None: + return jsonify({"success": True}),200 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=requesterUserId, requestee_id=requestedUserId).first() + OtherFriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=requestedUserId, requestee_id=requesterUserId).first() + if FriendRequestObj is not None and OtherFriendRequestObj is None: + return jsonify({"success": True}),200 + + if OtherFriendRequestObj is not None: + if FriendRequestObj is not None: + db.session.delete(FriendRequestObj) + + db.session.delete(OtherFriendRequestObj) + FriendRelationshipObj = FriendRelationship( + user_id=requesterUserId, + friend_id=requestedUserId + ) + db.session.add(FriendRelationshipObj) + db.session.commit() + + return jsonify({"success": True}),200 + + FriendRequestObj = FriendRequest( + requester_id=requesterUserId, + requestee_id=requestedUserId + ) + db.session.add(FriendRequestObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/Friend/DeleteFriendRequest", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def DeleteFriendRequest(): + requesterUserId = request.args.get( "requesterUserId", default = None, type = int ) + requestedUserId = request.args.get( "requestedUserId", default = None, type = int ) + + if requesterUserId is None or requestedUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + requesterUserObj : User = User.query.filter_by(id=requesterUserId).first() + requestedUserObj : User = User.query.filter_by(id=requestedUserId).first() + + if requesterUserObj is None or requestedUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=requesterUserId, requestee_id=requestedUserId).first() + if FriendRequestObj is not None: + db.session.delete(FriendRequestObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/v2/users//groups/roles", methods=["GET"]) +def GetUserGroupRoles( userId : int ): + if userId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + GroupRoles = [] + UserGroupMemberList : list[GroupMember] = GroupMember.query.filter_by(user_id = userId).all() + for GroupMemberObj in UserGroupMemberList: + GroupRoles.append({ + "group": { + "id": GroupMemberObj.group_id, + "name": GroupMemberObj.group.name, + "memberCount": GetGroupMemberCount(GroupMemberObj.group) + }, + "role" : { + "id": GroupMemberObj.group_role_id, + "name": GroupMemberObj.group_role.name, + "rank": GroupMemberObj.group_role.rank + } + }) + + if GroupMemberObj.group_id == config.ADMIN_GROUP_ID: + GroupRoles.append({ + "group": { + "id": 1200769, + "name": GroupMemberObj.group.name, + "memberCount": GetGroupMemberCount(GroupMemberObj.group) + }, + "role" : { + "id": GroupMemberObj.group_role_id, + "name": GroupMemberObj.group_role.name, + "rank": GroupMemberObj.group_role.rank + } + }) + + if GroupMemberObj.group_id == config.STAR_GROUP_ID: + GroupRoles.append({ + "group": { + "id": 4199740, + "name": GroupMemberObj.group.name, + "memberCount": GetGroupMemberCount(GroupMemberObj.group) + }, + "role" : { + "id": GroupMemberObj.group_role_id, + "name": GroupMemberObj.group_role.name, + "rank": GroupMemberObj.group_role.rank + } + }) + + + return jsonify({ + "data": GroupRoles + }) + +@LuaWebServiceRoute.route("/users/get-by-username/", methods=["GET"]) +def GetUserByUsername(): + RequestedUsername = request.args.get( + key = "username", + default = None, + type = str + ) + if RequestedUsername is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + UserObj : User = User.query.filter(func.lower(User.username) == func.lower(RequestedUsername)).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + return jsonify({ + "Id": UserObj.id, + "Username": UserObj.username + }), 200 diff --git a/app/routes/marketplace.py b/app/routes/marketplace.py new file mode 100644 index 0000000..8d9b11c --- /dev/null +++ b/app/routes/marketplace.py @@ -0,0 +1,408 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, after_this_request +from app.util import auth, friends, websiteFeatures, transactions, redislock +import logging +from app.services import economy +from app.extensions import db, limiter, csrf, redis_controller, user_limiter +from app.models.asset import Asset +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.package_asset import PackageAsset +from app.models.place_developer_product import DeveloperProduct +from app.models.product_receipt import ProductReceipt +from app.models.groups import Group +from app.enums.AssetType import AssetType +from app.enums.TransactionType import TransactionType +from app.pages.catalog.catalog import IncrementAssetCreator, CreateTransactionForSale +import math + +MarketPlaceRoute = Blueprint("marketplace", __name__, url_prefix="/marketplace") +EconomyV1Route = Blueprint("economyv1", __name__, url_prefix="/") + +@MarketPlaceRoute.route("/game-pass-product-info", methods=["GET"]) +@MarketPlaceRoute.route("/productinfo", methods=["GET"]) +def productinfo(): + assetid = request.args.get("assetId") or request.args.get("gamePassId") + if assetid is None: + return "Invalid request",400 + asset : Asset = Asset.query.filter_by(id=assetid).first() + if asset is None: + return "Asset not found",404 + AssetCreator : User | Group = User.query.filter_by(id=asset.creator_id).first() if asset.creator_type == 0 else Group.query.filter_by(id=asset.creator_id).first() + if AssetCreator is None: + AssetCreatorName = "Unknown" + else: + AssetCreatorName = AssetCreator.username if isinstance(AssetCreator, User) else AssetCreator.name + return jsonify({ + "Name": asset.name, + "Description": asset.description, + "Created": asset.created_at, + "Updated": asset.updated_at, + "PriceInRobux": asset.price_robux, + "PriceInTickets": asset.price_tix, + "AssetId": asset.id, + "ProductId": asset.id, + "AssetTypeId": asset.asset_type.value, + "Creator": { + "Id": asset.creator_id, + "Name": AssetCreatorName, + "CreatorType": asset.creator_type + }, + "MinimumMembershipLevel": 0, + "IsForSale": asset.is_for_sale + }) + +@MarketPlaceRoute.route("/productDetails", methods=["GET"]) +def productDetails(): + productId = request.args.get( key = "productId", default = None, type = int ) + if productId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + TargetDeveloperProduct : DeveloperProduct = DeveloperProduct.query.filter_by( productid = productId ).first() + if TargetDeveloperProduct is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + return jsonify({ + "TargetId" : 1, + "ProductType": "Developer Product", + "AssetId": 0, + "ProductId": TargetDeveloperProduct.productid, + "Name": TargetDeveloperProduct.name, + "Description": TargetDeveloperProduct.description, + "AssetTypeId": 0, + "Creator": { + "Id": 0, + "Name": None, + "CreatorType": None, + "CreatorTargetId": 0 + }, + "IconImageAssetId": TargetDeveloperProduct.iconimage_assetid, + "Created": TargetDeveloperProduct.created_at.strftime('%Y-%m-%dT%H:%M:%S.%fZ'), + "Updated": TargetDeveloperProduct.updated_at.strftime('%Y-%m-%dT%H:%M:%S.%fZ'), + "PriceInRobux": TargetDeveloperProduct.robux_price, + "PremiumPriceInRobux": 0, + "PriceInTickets": 0, + "IsNew": False, + "IsForSale": TargetDeveloperProduct.is_for_sale, + "IsPublicDomain": False, + "IsLimited": False, + "IsLimitedUnique": False, + "Remaining": None, + "Sales": None, + "MinimumMembershipLevel": 0 + }) + +@MarketPlaceRoute.route("/purchase", methods=["POST"]) +@csrf.exempt +@auth.authenticated_required_api +@limiter.limit("20/minute") +@limiter.limit("1/second") +@user_limiter.limit("20/minute") +@user_limiter.limit("1/second") +def inGamePurchaseHandler(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + productId = request.form.get("productId", None, int) + currencyTypeId = request.form.get("currencyTypeId", None, int) + expectedPrice = request.form.get("purchasePrice", None, int) + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"success": False, "status": "EconomyDisabled"}),400 + if productId is None or currencyTypeId is None or expectedPrice is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + currencyType = 0 if currencyTypeId == 1 else 1 + AssetObj : Asset = Asset.query.filter_by(id=productId).first() + if AssetObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + if AssetObj.is_limited or not AssetObj.is_for_sale: + return jsonify({"success": False, "status": "NotForSale"}),400 + + LockAssetName = f"asset:{str(AssetObj.id)}" + AssetLock = redislock.acquire_lock(LockAssetName, acquire_timeout=15, lock_timeout=1) + #if AssetLock is False: + # return jsonify({"success": False, "status": "InternalServerError"}),500 + + @after_this_request + def release_asset_lock(response): + if AssetLock: + redislock.release_lock(LockAssetName, AssetLock) + + UserRobuxBalance, UserTixBalance = economy.GetUserBalance(AuthenticatedUser) + if currencyType == 0: + if AssetObj.price_robux == 0 and AssetObj.price_tix != 0: + return jsonify({"success": False, "status": "CurrencyNotAccepted"}),400 + if AssetObj.price_robux != expectedPrice: + return jsonify({"success": False, "status": "PriceChanged"}),400 + if UserRobuxBalance < expectedPrice: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + else: + if AssetObj.price_tix == 0 and AssetObj.price_robux != 0: + return jsonify({"success": False, "status": "CurrencyNotAccepted"}),400 + if AssetObj.price_tix != expectedPrice: + return jsonify({"success": False, "status": "PriceChanged"}),400 + if UserTixBalance < expectedPrice: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=productId).first() + if UserAssetObj is not None: + return jsonify({"success": False, "status": "AlreadyOwned"}),400 + try: + economy.DecrementTargetBalance(AuthenticatedUser, expectedPrice, currencyType) + except economy.InsufficientFundsException: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + UserAssetObj = UserAsset( + userid = AuthenticatedUser.id, + assetid = productId + ) + + if AssetObj.asset_type == AssetType.Package: + PackageAssets = PackageAsset.query.filter_by(package_asset_id=AssetObj.id).all() + for PackageAssetObj in PackageAssets: + NewPackageAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=PackageAssetObj.asset_id) + db.session.add(NewPackageAssetObj) + + IncrementAssetCreator(AssetObj, expectedPrice, currencyType) + + AssetObj.sale_count += 1 + db.session.add(UserAssetObj) + db.session.commit() + + try: + if AssetObj.creator_type == 0: + SellerUserObj : User = User.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + elif AssetObj.creator_type == 1: + SellerGroupObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerGroupObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObj.id)}, message: {str(e)}") + pass + + return jsonify({"success": True}),200 + +@EconomyV1Route.route("/v1/purchases/products/", methods=["POST"]) +@csrf.exempt +@auth.authenticated_required_api +@user_limiter.limit("30/minute") +@user_limiter.limit("1/second") +def SubmitItemPurchaseEconomy( assetid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"purchased": False, "reason": "Unauthorized"}),401 + + if "expectedPrice" not in request.json or "expectedCurrency" not in request.json: + return jsonify({"purchased": False, "reason": "Invalid request", "errorMsg": "Invalid Request"}),400 + + productId = assetid + currencyTypeId = request.json["expectedCurrency"] + expectedPrice = request.json["expectedPrice"] + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"purchased": False, "reason": "EconomyDisabled", "errorMsg": "Purchasing is temporarily disabled, try again later."}),400 + if productId is None or currencyTypeId is None or expectedPrice is None: + return jsonify({"purchased": False, "reason": "Invalid request", "errorMsg": "Invalid Request"}),400 + currencyType = 0 if currencyTypeId == 1 else 1 + AssetObj : Asset = Asset.query.filter_by(id=productId).first() + if AssetObj is None: + return jsonify({"purchased": False, "reason": "Invalid request", "errorMsg": "Invalid Request"}),400 + if AssetObj.is_limited or not AssetObj.is_for_sale: + return jsonify({"purchased": False, "reason": "NotForSale", "errorMsg": "This item is not for sale"}),400 + + LockAssetName = f"asset:{str(AssetObj.id)}" + AssetLock = redislock.acquire_lock(LockAssetName, acquire_timeout=15, lock_timeout=1) + # if AssetLock is False: + # return jsonify({"success": False, "status": "InternalServerError"}),500 + + @after_this_request + def release_asset_lock(response): + if AssetLock: + redislock.release_lock(LockAssetName, AssetLock) + + UserRobuxBalance, UserTixBalance = economy.GetUserBalance(AuthenticatedUser) + if currencyType == 0: + if AssetObj.price_robux == 0 and AssetObj.price_tix != 0: + return jsonify({"purchased": False, "reason": "CurrencyNotAccepted", "errorMsg": "This currency is not accepted for this item"}),400 + if AssetObj.price_robux != expectedPrice: + return jsonify({"purchased": False, "reason": "PriceChanged", "errorMsg": "The price has changed"}),400 + if UserRobuxBalance < expectedPrice: + return jsonify({"purchased": False, "reason": "InsufficientFunds", "errorMsg": "You do not have enough Robux to purchase this item."}),400 + else: + if AssetObj.price_tix == 0 and AssetObj.price_robux != 0: + return jsonify({"purchased": False, "reason": "CurrencyNotAccepted", "errorMsg": "This currency is not accepted for this item"}),400 + if AssetObj.price_tix != expectedPrice: + return jsonify({"purchased": False, "reason": "PriceChanged", "errorMsg": "The price has changed"}),400 + if UserTixBalance < expectedPrice: + return jsonify({"purchased": False, "reason": "InsufficientFunds", "errorMsg": "You do not have enough Robux to purchase this item."}),400 + # Check if the user already owns the asset + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=productId).first() + if UserAssetObj is not None: + return jsonify({"purchased": False, "reason": "AlreadyOwned", "errorMsg": "You already own this item."}),400 + try: + economy.DecrementTargetBalance(AuthenticatedUser, expectedPrice, currencyType) + except economy.InsufficientFundsException: + return jsonify({"purchased": False, "reason": "InsufficientFunds", "errorMsg": "You do not have enough Robux to purchase this item."}),400 + UserAssetObj = UserAsset( + userid = AuthenticatedUser.id, + assetid = productId + ) + + if AssetObj.asset_type == AssetType.Package: + PackageAssets = PackageAsset.query.filter_by(package_asset_id=AssetObj.id).all() + for PackageAssetObj in PackageAssets: + NewPackageAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=PackageAssetObj.asset_id) + db.session.add(NewPackageAssetObj) + + IncrementAssetCreator(AssetObj, expectedPrice, currencyType) + + AssetObj.sale_count += 1 + db.session.add(UserAssetObj) + db.session.commit() + + try: + if AssetObj.creator_type == 0: + SellerUserObj : User = User.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + elif AssetObj.creator_type == 1: + SellerGroupObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerGroupObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObj.id)}, message: {str(e)}") + pass + + if AssetObj.creator_type == 0: + CreatorObj : User = User.query.filter_by(id = AssetObj.creator_id).first() + sellerName = CreatorObj.username + else: + CreatorObj : Group = Group.query.filter_by(id = AssetObj.creator_id).first() + sellerName = CreatorObj.name + + return jsonify({ + "purchased": True, + "reason": "Success", + "productId": assetid, + "currency": currencyTypeId, + "assetId": assetid, + "assetName": AssetObj.name, + "assetType": AssetObj.asset_type.name, + "assetTypeDisplayName": AssetObj.asset_type.name, + "assetIsWearable": False, + "sellerName": sellerName, + "transactionVerb": "bought", + "isMultiPrivateSale": False + }) + +@MarketPlaceRoute.route("/submitpurchase", methods=["POST"]) +@csrf.exempt +@auth.authenticated_required_api +@user_limiter.limit("20/minute") +@user_limiter.limit("1/second") +def SubmitProductPurchase(): + productId : int = request.form.get( key = "productId", default = None, type = int ) + currencyTypeId : int = request.form.get( key = "currencyTypeId", default = None, type = int ) + expectedUnitPrice : int = request.form.get( key = "expectedUnitPrice", default = None, type = int ) + placeId : int = request.form.get( key = "placeId", default = None, type = int ) + requestId : str = request.form.get( key = "requestId", default = None, type = str ) + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"success": False, "status": "EconomyDisabled"}),400 + if productId is None or currencyTypeId is None or expectedUnitPrice is None or placeId is None or requestId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + currencyType = 0 if currencyTypeId == 1 else 1 + TargetDeveloperProduct : DeveloperProduct = DeveloperProduct.query.filter_by( productid = productId, placeid = placeId ).first() + if TargetDeveloperProduct is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + PlaceAssetObj : Asset = Asset.query.filter_by( id = TargetDeveloperProduct.placeid ).first() + + if TargetDeveloperProduct.is_for_sale == False: + return jsonify({"success": False, "message": "Invalid request"}),400 + if TargetDeveloperProduct.robux_price != expectedUnitPrice: + return jsonify({"success": False, "message": "Invalid request"}),400 + + if redis_controller.exists(f"purchase_request:{requestId}"): + return jsonify({"success": False, "message": "Invalid request"}),400 + + if currencyType != 0: # Developer Products can only be purchased with Robux + return jsonify({"success": False, "message": "Invalid request"}),400 + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + UserRobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if UserRobuxBalance < expectedUnitPrice: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + + try: + economy.DecrementTargetBalance(AuthenticatedUser, expectedUnitPrice, currencyType) + except economy.InsufficientFundsException: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + OwnerObj : User | Group = User.query.filter_by( id = PlaceAssetObj.creator_id ).first() if PlaceAssetObj.creator_type == 0 else Group.query.filter_by( id = PlaceAssetObj.creator_id ).first() + + transactions.CreateTransaction( + Reciever = OwnerObj, + Sender = AuthenticatedUser, + CurrencyAmount = expectedUnitPrice, + CurrencyType = currencyType, + TransactionType = TransactionType.Purchase, + CustomText = f"Purchase of Product({TargetDeveloperProduct.name}) from {PlaceAssetObj.name}" + ) + GrossProfitAfterTax = math.floor(expectedUnitPrice * 0.7) + + economy.IncrementTargetBalance(OwnerObj, GrossProfitAfterTax, currencyType) + transactions.CreateTransaction( + Reciever = OwnerObj, + Sender = AuthenticatedUser, + CurrencyAmount = GrossProfitAfterTax, + CurrencyType = currencyType, + TransactionType = TransactionType.Sale, + CustomText = f"Sale of Product({TargetDeveloperProduct.name}) from {PlaceAssetObj.name}" + ) + redis_controller.set(f"purchase_request:{requestId}", "1", ex = 60 * 10) + + DeveloperProductReceiptObj : ProductReceipt = ProductReceipt( + user_id = AuthenticatedUser.id, + product_id = TargetDeveloperProduct.productid, + robux_amount = expectedUnitPrice + ) + TargetDeveloperProduct.sales_count += 1 + db.session.add(DeveloperProductReceiptObj) + db.session.commit() + + return jsonify({ + "success": True, + "receipt": DeveloperProductReceiptObj.receipt_id + }),200 \ No newline at end of file diff --git a/app/routes/mobile.py b/app/routes/mobile.py new file mode 100644 index 0000000..67a9c9e --- /dev/null +++ b/app/routes/mobile.py @@ -0,0 +1,28 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from sqlalchemy import func +import hashlib +import random +import logging +from config import Config +from app.extensions import limiter, csrf, get_remote_address +from app.models.user import User +from app.models.user_email import UserEmail +from app.util import auth +from app.services import economy +from datetime import datetime, timedelta + +config = Config() +MobileAPIRoute = Blueprint('mobile', __name__, url_prefix='/') + +@MobileAPIRoute.route("/device/initialize", methods=["POST"]) +@csrf.exempt +def DeviceInit(): + return jsonify({"browserTrackerId":random.randint(100000000,9999999999),"appDeviceIdentifier":None}) + +@MobileAPIRoute.route("/mobileapi/check-app-version", methods=["GET"]) +def check_app_version(): + return jsonify({"data":{"UpgradeAction":"None"}}) + +@MobileAPIRoute.route("/mobile/pbe", methods=["GET"]) +def mobile_pbe(): + return "", 200 \ No newline at end of file diff --git a/app/routes/pointsservice.py b/app/routes/pointsservice.py new file mode 100644 index 0000000..2b6f8c4 --- /dev/null +++ b/app/routes/pointsservice.py @@ -0,0 +1,52 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from app.models.gameservers import GameServer +from app.models.pointsservice import PointsService +from app.extensions import get_remote_address, db, csrf +import logging + +PointsServiceRoute = Blueprint('pointsservice', __name__) + +@PointsServiceRoute.route("/points/get-point-balance", methods=["GET"]) +def get_point_balance(): + userId = request.args.get('userId') + placeId = request.args.get('placeId') + if userId is None or placeId is None: + return jsonify({"success": False, "message": "Missing parameters"}),400 + if userId.isnumeric() is False or placeId.isnumeric() is False: + return jsonify({"success": False, "message": "Invalid parameters"}),400 + RequestIP = get_remote_address() + if RequestIP is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + server = GameServer.query.filter_by(serverIP=RequestIP).first() + if server is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + points : PointsService = PointsService.query.filter_by(userId=userId, placeId=placeId).first() + if points is None: + points = PointsService(userId=userId, placeId=placeId, points=0) + db.session.add(points) + db.session.commit() + return jsonify({"success": True, "pointBalance": points.points}),200 + + +@PointsServiceRoute.route("/points/award-points", methods=["POST"]) +@csrf.exempt +def award_points(): + userId = request.args.get(key='userId', default=None, type=int) + placeId = request.args.get(key='placeId', default=None, type=int) + amount = request.args.get(key='amount', default=None, type=int) + if userId is None or placeId is None or amount is None: + return jsonify({"success": False, "message": "Missing parameters"}),400 + RequestIP = get_remote_address() + if RequestIP is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + server = GameServer.query.filter_by(serverIP=RequestIP).first() + if server is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + points : PointsService = PointsService.query.filter_by(userId=userId, placeId=placeId).first() + if points is None: + points = PointsService(userId=userId, placeId=placeId, points=0) + db.session.add(points) + db.session.commit() + points.points += int(amount) + db.session.commit() + return jsonify({"success": True, "userBalance": points.points, "pointsAwarded": amount, "userGameBalance": points.points}),200 \ No newline at end of file diff --git a/app/routes/presence.py b/app/routes/presence.py new file mode 100644 index 0000000..df896d1 --- /dev/null +++ b/app/routes/presence.py @@ -0,0 +1,17 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response +from app.extensions import csrf, db +from app.util import auth, friends +from app.models.user import User +from datetime import datetime + +PresenceRoute = Blueprint("presence", __name__, url_prefix="/presence") + +@PresenceRoute.route("/", methods=["GET"]) +@auth.authenticated_required_api +def UpdatePresence(): + Authuser : User = auth.GetCurrentUser() + if Authuser is None: + return "BAD REQUEST", 400 + Authuser.lastonline = datetime.utcnow() + db.session.commit() + return "OK", 200 \ No newline at end of file diff --git a/app/routes/presenceapi.py b/app/routes/presenceapi.py new file mode 100644 index 0000000..6c7676b --- /dev/null +++ b/app/routes/presenceapi.py @@ -0,0 +1,105 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth +from app.extensions import db, csrf, limiter +from flask_wtf.csrf import CSRFError, generate_csrf +from datetime import datetime, timedelta + +from app.models.user_email import UserEmail +from app.models.user import User +from app.models.placeserver_players import PlaceServerPlayer +from app.models.placeservers import PlaceServer +from app.models.place import Place +from app.models.asset import Asset + +PresenceAPIRoute = Blueprint('presenceapiroute', __name__, url_prefix='/') + +csrf.exempt(PresenceAPIRoute) +@PresenceAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@PresenceAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@PresenceAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@PresenceAPIRoute.route("/v1/presence/users", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +def multi_get_users_presence(): + if not request.is_json: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + if "userIds" not in request.json: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + userIds = request.json["userIds"] + + if type(userIds) is not list: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + if len(userIds) > 100: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + requestedData = [] + for userId in userIds: + try: + userId = int(userId) + except: + return jsonify({"errors": [{"code": 1,"message": "Invalid UserId"}]}), 400 + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify({"errors": [{"code": 1,"message": "Invalid UserId"}]}), 400 + else: + isUserOnline = userObject.lastonline > datetime.utcnow() - timedelta(minutes=1) + UserPlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = userId ).first() + isUserInGame = UserPlaceServerPlayerObj is not None + userPresenceType = 2 if isUserInGame else 1 if isUserOnline else 0 + + PlaceServerHost : PlaceServer | None = None + PlaceObject : Place | None = None + + if isUserInGame: + PlaceServerHost : PlaceServer = PlaceServer.query.filter_by( serveruuid = UserPlaceServerPlayerObj.serveruuid ).first() + if PlaceServerHost is not None: + PlaceObject : Place = Place.query.filter_by( placeid = PlaceServerHost.serverPlaceId ).first() + PlaceAssetObj : Asset = PlaceObject.assetObj + else: + PlaceAssetObj = None + UserPlaceServerPlayerObj = None + + requestedData.append({ + "userPresenceType": userPresenceType, + "lastLocation": "Website" if not isUserInGame else PlaceAssetObj.name, + "placeId": PlaceAssetObj.id if isUserInGame else None, + "rootPlaceId": PlaceAssetObj.id if isUserInGame else None, + "gameId": PlaceServerHost.serveruuid if isUserInGame else None, + "userId": userId, + "lastOnline": userObject.lastonline.strftime("%Y-%m-%dT%H:%M:%S.000Z"), + }) + + return jsonify({ + "userPresences": requestedData + }), 200 \ No newline at end of file diff --git a/app/routes/prometheus.py b/app/routes/prometheus.py new file mode 100644 index 0000000..8660bc9 --- /dev/null +++ b/app/routes/prometheus.py @@ -0,0 +1,100 @@ +# prometheus.py +# Used for providing metrics to Prometheus +# https://prometheus.io/docs/instrumenting/writing_exporters/ + +import time +from flask import Blueprint, Response, abort +from datetime import datetime, timedelta +from sqlalchemy import func + +from app.models.user import User +from app.models.placeserver_players import PlaceServerPlayer +from app.models.placeservers import PlaceServer +from app.models.gameservers import GameServer +from app.models.game_session_log import GameSessionLog +from app.models.asset import Asset + +from app.extensions import get_remote_address +from config import Config + +config = Config() + +PrometheusRoute = Blueprint('prometheus', __name__, url_prefix='/') + +@PrometheusRoute.before_request +def before_request(): + if not config.PROMETHEUS_ENABLED: + return abort( 404 ) + ClientRemoteAddress = get_remote_address() + if ClientRemoteAddress not in config.PROMETHEUS_ALLOWED_IPS: + return abort( 404 ) + + +@PrometheusRoute.route('/metrics', methods=['GET']) +def metrics(): + StartingMeasureTime = time.time() + + UsersOnlineCount = User.query.filter(User.lastonline > (datetime.utcnow() - timedelta(minutes=1))).count() + UsersIngame = PlaceServerPlayer.query.count() + UsersInReservedServers = PlaceServerPlayer.query.join( PlaceServer, PlaceServerPlayer.serveruuid == PlaceServer.serveruuid ).filter(PlaceServer.reservedServerAccessCode != None).count() + ActivePlaceServers = PlaceServer.query.count() + ActiveReservedPlaceServers = PlaceServer.query.filter(PlaceServer.reservedServerAccessCode != None).count() + UsersSignedUpPast24Hours = User.query.filter(User.created > (datetime.utcnow() - timedelta(days=1))).count() + GameServersTotalMemoryUsage = GameServer.query.with_entities( func.sum(GameServer.RCCmemoryUsage) ).scalar() # Megabytes + UniqueGameSessionsPast24Hours = GameSessionLog.query.filter(GameSessionLog.joined_at > (datetime.utcnow() - timedelta(days=1))).distinct(GameSessionLog.user_id).count() + GameSessionsPast24Hours = GameSessionLog.query.filter(GameSessionLog.joined_at > (datetime.utcnow() - timedelta(days=1))).count() + TotalUsersSignedUp = User.query.count() + TotalAssets = Asset.query.count() + + TimeTaken = time.time() - StartingMeasureTime + + PROMETHEUS_RESPONSE = f"""# HELP syntaxeco_users_online The number of users currently online +# TYPE syntaxeco_users_online gauge +syntaxeco_users_online {UsersOnlineCount} + +# HELP syntaxeco_users_ingame The number of users currently in a game +# TYPE syntaxeco_users_ingame gauge +syntaxeco_users_ingame {UsersIngame} + +# HELP syntaxeco_active_placeservers The number of active place servers +# TYPE syntaxeco_active_placeservers gauge +syntaxeco_active_placeservers {ActivePlaceServers} + +# HELP syntaxeco_active_reserved_placeservers The number of active reserved place servers +# TYPE syntaxeco_active_reserved_placeservers gauge +syntaxeco_active_reserved_placeservers {ActiveReservedPlaceServers} + +# HELP syntaxeco_users_in_reserved_servers The number of users currently in reserved servers +# TYPE syntaxeco_users_in_reserved_servers gauge +syntaxeco_users_in_reserved_servers {UsersInReservedServers} + +# HELP syntaxeco_users_signed_up_past_24_hours The number of users that signed up in the past 24 hours +# TYPE syntaxeco_users_signed_up_past_24_hours gauge +syntaxeco_users_signed_up_past_24_hours {UsersSignedUpPast24Hours} + +# HELP syntaxeco_gameservers_total_memory_usage The total memory usage of all game servers +# TYPE syntaxeco_gameservers_total_memory_usage gauge +syntaxeco_gameservers_total_memory_usage {GameServersTotalMemoryUsage} + +# HELP syntaxeco_unique_gamesessions_past_24_hours The number of unique game sessions in the past 24 hours +# TYPE syntaxeco_unique_gamesessions_past_24_hours gauge +syntaxeco_unique_gamesessions_past_24_hours {UniqueGameSessionsPast24Hours} + +# HELP syntaxeco_gamesessions_past_24_hours The number of game sessions in the past 24 hours +# TYPE syntaxeco_gamesessions_past_24_hours gauge +syntaxeco_gamesessions_past_24_hours {GameSessionsPast24Hours} + +# HELP syntaxeco_total_users_signed_up The total number of users that have signed up +# TYPE syntaxeco_total_users_signed_up gauge +syntaxeco_total_users_signed_up {TotalUsersSignedUp} + +# HELP syntaxeco_total_assets The total number of assets +# TYPE syntaxeco_total_assets gauge +syntaxeco_total_assets {TotalAssets} + +# HELP syntaxeco_prometheus_request_time The time taken to generate the Prometheus metrics +# TYPE syntaxeco_prometheus_request_time gauge +syntaxeco_prometheus_request_time {TimeTaken} +""" + + return Response(PROMETHEUS_RESPONSE, mimetype="text/plain") \ No newline at end of file diff --git a/app/routes/publicapi.py b/app/routes/publicapi.py new file mode 100644 index 0000000..7b449c8 --- /dev/null +++ b/app/routes/publicapi.py @@ -0,0 +1,525 @@ +import time +import math +import calendar +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort, flash +from sqlalchemy import func +from app.extensions import limiter, csrf, db, user_limiter +from app.models.user import User +from app.models.asset import Asset +from app.models.userassets import UserAsset +from app.models.user_trades import UserTrade +from app.models.user_trade_items import UserTradeItem +from app.models.groups import Group +from app.models.linked_discord import LinkedDiscord +from app.models.placeserver_players import PlaceServerPlayer +from app.models.limited_item_transfers import LimitedItemTransfer +from app.util import auth, redislock +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType +from app.enums.TradeStatus import TradeStatus +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from app.util.membership import GetUserMembership +from app.services.economy import GetAssetRap, GetUserBalance, DecrementTargetBalance, IncrementTargetBalance, CalculateUserRAP +from app.services.groups import GetGroupFromId +from app.pages.trades.trades import createTradePost +from datetime import datetime, timedelta +from sqlalchemy import or_, and_ +from app.models.user_ban import UserBan + +PublicAPIRoute = Blueprint("publicapi", __name__, url_prefix="/public-api") + +def ReturnError( message : str, code : int = 403 ): + return jsonify({ + "success": False, + "message": message, + "data": None + }), code + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise Exception("User does not exist.") + return TargetUser + +def ReturnUserObject( UserObj : User ) -> dict: + return { + "id": UserObj.id, + "username": UserObj.username, + "last_online": int(calendar.timegm(UserObj.lastonline.timetuple())), + "created_at": int(calendar.timegm(UserObj.created.timetuple())), + "description": UserObj.description, + "membership": GetUserMembership(UserObj, changeToString=True), + "is_banned": UserObj.accountstatus != 1, + "inventory_rap": CalculateUserRAP(UserObj) + } + +def ReturnGroupObject( GroupObj : Group ) -> dict: + return { + "id": GroupObj.id, + "name": GroupObj.name, + "created_at": int(calendar.timegm(GroupObj.created_at.timetuple())), + "user_owner_id": GroupObj.owner_id + } + +def ReturnItemObject( AssetObj : Asset, ListCreator : bool = True, includeLimitedInfo : bool = True) -> dict: + Item = { + "id": AssetObj.id, + "name": AssetObj.name, + "description": AssetObj.description, + "asset_type": AssetObj.asset_type.name, + "asset_type_value": AssetObj.asset_type.value, + "creator_id": AssetObj.creator_id, + "creator_type": AssetObj.creator_type, + "created_at": int(calendar.timegm(AssetObj.created_at.timetuple())), + "updated_at": int(calendar.timegm(AssetObj.updated_at.timetuple())), + "is_for_sale": AssetObj.is_for_sale, + "price_robux": AssetObj.price_robux, + "price_tickets": AssetObj.price_tix, + "sales": AssetObj.sale_count + } + if includeLimitedInfo: + Item["is_limited"] = AssetObj.is_limited + Item["is_limited_unique"] = AssetObj.is_limited_unique + Item["asset_rap"] = GetAssetRap(AssetObj.id) if AssetObj.is_limited and not AssetObj.is_for_sale else None + if ListCreator: + Item["creator"] = ReturnUserObject(GetUserFromId(AssetObj.creator_id)) if AssetObj.creator_type == 0 else ReturnGroupObject(GetGroupFromId(AssetObj.creator_id)) + return Item + +@PublicAPIRoute.errorhandler(429) +def ratelimit_handler(e): + return ReturnError("You are being ratelimited, please try again later.", 429) + +@PublicAPIRoute.errorhandler(500) +def internalerror_handler(e): + return ReturnError("An internal error occured, please try again later.", 500) + +@PublicAPIRoute.route("/", methods=["GET"]) +def PublicAPIDocs(): + return render_template("swaggerdocs.html") + +@PublicAPIRoute.route("/v1/users/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserId(userid : int): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return ReturnError("User not found", 404) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObj) + }), 200 + +@PublicAPIRoute.route("/v1/users/username/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUsername(username : str): + UserObj : User = User.query.filter(func.lower(User.username) == func.lower(username)).first() + if UserObj is None: + return ReturnError("User not found", 404) + if UserObj.accountstatus == 4: # GDPR + return ReturnError("User not found", 404) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObj) + }), 200 + +@PublicAPIRoute.route("/sitestats", methods=["GET"]) +@limiter.limit("30/minute") +def SiteStatsHTTP(): + UsersOnline = User.query.filter(User.lastonline > (datetime.utcnow() - timedelta(minutes=1))).count() + UsersIngame = PlaceServerPlayer.query.count() + BannedByAnticheat = UserBan.query.filter_by(reason="Exploiting in games is not tolerated on NEXIUM").count() # meme + UsersSignedUpToday = User.query.filter(User.created > (datetime.utcnow() - timedelta(days=1))).count() + UsersSignedUpYesterday = User.query.filter(and_( User.created > ( datetime.utcnow() - timedelta(days=2) ), User.created < ( datetime.utcnow() - timedelta(days=1) ) )).count() # i actually forgot why this is needed, but its probably needed to do some cool shit idk + TotalUsers = User.query.count() + return jsonify({ + "success": True, + "message": "", + "data": { + "users_online": UsersOnline, + "users_ingame": UsersIngame, + "signed_up_today": UsersSignedUpToday, + "signed_up_yesterday": UsersSignedUpYesterday, + "total_users": TotalUsers, + "banned_by_ac": BannedByAnticheat + } + }), 200 + +@PublicAPIRoute.route("/v1/users/discord_id/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserByDiscordId(discordid : int): + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by( discord_id = discordid ).first() + if LinkedDiscordObj is None: + return ReturnError("No NEXIUM account is associated with this Discord ID", 404) + UserObj : User = User.query.filter_by( id = LinkedDiscordObj.user_id ).first() + if UserObj.accountstatus == 4: + return ReturnError("No NEXIUM account is associated with this Discord ID", 404) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObj) + }), 200 + +@PublicAPIRoute.route("/v1/asset/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupItemId(assetid : int): + ItemObj : Asset = Asset.query.filter_by(id=assetid).first() + if ItemObj is None: + return ReturnError("Asset not found", 404) + if ItemObj.creator_type == 0 and ItemObj.creator_id == 1 and ( datetime.utcnow() < ( ItemObj.created_at + timedelta(minutes=10) ) ): + return ReturnError("Asset created recently, please wait...", 403) + return jsonify({ + "success": True, + "message": "", + "data": ReturnItemObject(ItemObj, includeLimitedInfo=False) + }), 200 + +@PublicAPIRoute.route("/v1/inventory/collectibles/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserInventoryCollectibles(userid : int): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return ReturnError("User not found", 404) + PageNumber = request.args.get("page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + UserAssets : list[UserAsset] = UserAsset.query.filter_by(userid=userid).join(Asset).filter_by(is_limited=True).paginate( page = PageNumber, per_page = 12, error_out = False ) + FormattedUserAsset = [] + + for UserAssetObj in UserAssets.items: + FormattedUserAsset.append({ + "uaid": UserAssetObj.id, + "serial": UserAssetObj.serial, + "price": UserAssetObj.price, + "asset": ReturnItemObject(UserAssetObj.asset, ListCreator=False) + }) + + return jsonify({ + "success": True, + "message": "", + "data": FormattedUserAsset, + "page": PageNumber, + "total_pages": UserAssets.pages, + "next_page": UserAssets.next_num if UserAssets.has_next else None + }) + +@PublicAPIRoute.route("/v1/inventory/assets//", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserInventory( userid : int, assettypeid : int ): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return ReturnError("User not found", 404) + + PageNumber = request.args.get("page", default=1, type=int) + try: + AssetTypeObj : AssetType = AssetType(assettypeid) + except ValueError: + ReturnError("Invalid asset type, please refer to documentation https://create.roblox.com/docs/reference/engine/enums/AssetType", 400) + if PageNumber < 1: + PageNumber = 1 + UserAssets : list[UserAsset] = UserAsset.query.filter_by(userid=userid).join(Asset).filter_by(asset_type=AssetTypeObj).order_by(UserAsset.id.desc()).paginate( page = PageNumber, per_page = 12, error_out = False ) + FormattedUserAsset = [] + for UserAssetObj in UserAssets.items: + FormattedUserAsset.append({ + "uaid": UserAssetObj.id, + "serial": UserAssetObj.serial, + "price": UserAssetObj.price, + "asset": ReturnItemObject(UserAssetObj.asset, ListCreator=False) + }) + + return jsonify({ + "success": True, + "message": "", + "data": FormattedUserAsset, + "page": PageNumber, + "total_pages": UserAssets.pages, + "next_page": UserAssets.next_num if UserAssets.has_next else None + }) + +@PublicAPIRoute.route("/v1/economy/my-balance", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def GetMyBalance(): + AuthenticatedUser : User = auth.GetCurrentUser() + RobuxBal, TicketsBal = GetUserBalance(AuthenticatedUser) + return jsonify({ + "success": True, + "message": "", + "data": { + "robux": RobuxBal, + "tickets": TicketsBal + } + }) + +@PublicAPIRoute.route("/v1/users/my-profile", methods=["GET"]) +@auth.authenticated_required_api +def GetMyProfile(): + AuthenticatedUser : User = auth.GetCurrentUser() + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(AuthenticatedUser) + }) + +@PublicAPIRoute.route("/v1/trade/list", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def GetMyTrades(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = request.args.get("page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + UserTradesList : list[UserTrade] = UserTrade.query.filter(or_(UserTrade.sender_userid == AuthenticatedUser.id, UserTrade.recipient_userid == AuthenticatedUser.id)).order_by(UserTrade.id.desc()).paginate( page = PageNumber, per_page = 12, error_out = False ) + FormattedUserTrades = [] + for tradeObj in UserTradesList: + tradeObj : UserTrade = tradeObj # type hinting + FormattedUserTrades.append({ + "id": tradeObj.id, + "sender_userid": tradeObj.sender_userid, + "recipient_userid": tradeObj.recipient_userid, + "created_at": int(calendar.timegm(tradeObj.created_at.timetuple())), + "expires_at": int(calendar.timegm(tradeObj.expires_at.timetuple())), + "status": tradeObj.status.name + }) + + return jsonify({ + "success": True, + "message": "", + "data": FormattedUserTrades, + "page": PageNumber, + "total_pages": UserTradesList.pages, + "next_page": UserTradesList.next_num if UserTradesList.has_next else None + }) + +@PublicAPIRoute.route("/v1/trade/", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def GetTradeInfo(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.sender_userid != AuthenticatedUser.id and TradeObj.recipient_userid != AuthenticatedUser.id: + return ReturnError("You are not the sender or recipient of this trade") + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + SenderItems = [] + RecipientItems = [] + + for TradeItem in TradeItems: + TradeItem : UserTradeItem = TradeItem + if TradeItem.userid == TradeObj.sender_userid: + SenderItems.append({ + "uaid": TradeItem.userasset.id, + "serial": TradeItem.userasset.serial, + "price": TradeItem.userasset.price, + "asset": ReturnItemObject(TradeItem.userasset.asset, ListCreator=False) + }) + else: + RecipientItems.append({ + "uaid": TradeItem.userasset.id, + "serial": TradeItem.userasset.serial, + "price": TradeItem.userasset.price, + "asset": ReturnItemObject(TradeItem.userasset.asset, ListCreator=False) + }) + + return jsonify({ + "success": True, + "message": "", + "data": { + "id": TradeObj.id, + "sender_userid": TradeObj.sender_userid, + "recipient_userid": TradeObj.recipient_userid, + "created_at": int(calendar.timegm(TradeObj.created_at.timetuple())), + "expires_at": int(calendar.timegm(TradeObj.expires_at.timetuple())), + "status": TradeObj.status.name, + "sender_items": SenderItems, + "recipient_items": RecipientItems, + "sender_robux": TradeObj.sender_userid_robux, + "recipient_robux": TradeObj.recipient_userid_robux + } + }) + +@PublicAPIRoute.route("/v1/trade/create/", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +@user_limiter.limit("5/minute") +@csrf.exempt +def createTradeProxy( recipient_userid : int ): + return createTradePost(recipient_userid) + +@PublicAPIRoute.route("/v1/trade/accept/", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def acceptTrade( tradeid : int ): + + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return ReturnError("You are not the recipient of this trade") + if TradeObj.status != TradeStatus.Pending: + return ReturnError("Trade is not pending") + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + return ReturnError("Trade has expired") + + if AuthenticatedUser.TOTPEnabled: + JSONPayload = request.json + if JSONPayload is None: + return ReturnError("Expected JSON payload", 400) + if "TOTPCode" not in JSONPayload: + return ReturnError("Missing parameter 'TOTPCode' in JSON payload", 400) + if not auth.Validate2FACode(AuthenticatedUser.id, JSONPayload["TOTPCode"]): + return ReturnError("Invalid 2FA code") + + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser.id) + if UserCurrentMembership == MembershipType.NonBuildersClub: + return ReturnError("You must be a Builders Club member to accept trades") + + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + if OppositeUser is None: + return ReturnError("An error occured while trying to complete this trade. Please try again later.") + OppositeUserCurrentMembership : MembershipType = GetUserMembership(OppositeUser.id) + if OppositeUserCurrentMembership == MembershipType.NonBuildersClub: + return ReturnError("The other user must be a Builders Club member to accept trades") + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj is None: + return ReturnError("One of the items no longer exists and this trade cannot be completed.", 400) + if UserAssetObj.userid != TradeItem.userid: + return ReturnError("One of the items no longer belongs to its original owner and this trade cannot be completed.", 400) + + SenderRobuxBal, _ = GetUserBalance(GetUserFromId(TradeObj.sender_userid)) + RecipientRobuxBal, _ = GetUserBalance(GetUserFromId(TradeObj.recipient_userid)) + + if SenderRobuxBal < TradeObj.sender_userid_robux: + return ReturnError("You do not have enough Robux to complete this trade.") + + if RecipientRobuxBal < TradeObj.recipient_userid_robux: + return ReturnError("The other user does not have enough Robux to complete this trade.") + + ItemLocks = [] + for TradeItem in TradeItems: + TradeItemLock = redislock.acquire_lock(f"item:{str(TradeItem.user_asset_id)}", acquire_timeout=20, lock_timeout=5) + if not TradeItemLock: + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + return ReturnError("An error occured while trying to complete this trade. Please try again later.") + ItemLocks.append([TradeItemLock, TradeItem.user_asset_id]) + + def ReleaseAllLocks(): + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + + if TradeObj.sender_userid_robux > 0: + DecrementTargetBalance(GetUserFromId(TradeObj.sender_userid), TradeObj.sender_userid_robux, 0) + FinalAdded = math.floor(TradeObj.sender_userid_robux * 0.7) + IncrementTargetBalance(GetUserFromId(TradeObj.recipient_userid), FinalAdded, 0) + if TradeObj.recipient_userid_robux > 0: + DecrementTargetBalance(GetUserFromId(TradeObj.recipient_userid), TradeObj.recipient_userid_robux, 0) + FinalAdded = math.floor(TradeObj.recipient_userid_robux * 0.7) + IncrementTargetBalance(GetUserFromId(TradeObj.sender_userid), FinalAdded, 0) + + def CreateItemTransferLog( original_owner_id : int, new_owner_id : int, asset_id : int, user_asset_id : int ): + NewTransferLog = LimitedItemTransfer( + original_owner_id = original_owner_id, + new_owner_id = new_owner_id, + asset_id = asset_id, + user_asset_id = user_asset_id, + transfer_method = LimitedItemTransferMethod.Trade, + associated_trade_id = TradeObj.id + ) + db.session.add(NewTransferLog) + + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj.userid == TradeObj.sender_userid: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.recipient_userid + else: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.sender_userid + + UserAssetObj.price = 0 + UserAssetObj.is_for_sale = False + UserAssetObj.updated = datetime.utcnow() + db.session.commit() + + TradeObj.status = TradeStatus.Accepted + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + ReleaseAllLocks() + + return jsonify({ + "success": True, + "message": "Trade Completed", + "data": None + }) + +@PublicAPIRoute.route("/v1/trade/decline/", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def declineTrade( tradeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return ReturnError("You are not the recipient of this trade") + if TradeObj.status != TradeStatus.Pending: + return ReturnError("Trade is not pending") + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + return ReturnError("Trade has expired") + + TradeObj.status = TradeStatus.Declined + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return jsonify({ + "success": True, + "message": "Trade Declined", + "data": None + }) + +@PublicAPIRoute.route("/v1/trade/cancel/", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def cancelTrade( tradeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.sender_userid != AuthenticatedUser.id: + return ReturnError("You are not the sender of this trade") + if TradeObj.status != TradeStatus.Pending: + return ReturnError("Trade is not pending") + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + return ReturnError("Trade has expired") + + TradeObj.status = TradeStatus.Cancelled + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return jsonify({ + "success": True, + "message": "Trade Cancelled", + "data": None + }) \ No newline at end of file diff --git a/app/routes/rate.py b/app/routes/rate.py new file mode 100644 index 0000000..fe0a89b --- /dev/null +++ b/app/routes/rate.py @@ -0,0 +1,131 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort +from app.models.asset_votes import AssetVote +from app.models.asset_favorite import AssetFavorite +from app.models.asset import Asset +from app.enums.AssetType import AssetType +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.previously_played import PreviouslyPlayed +from app.extensions import limiter, db, redis_controller +from app.util import auth +import json + +AssetRateRoute = Blueprint("assetrate", __name__, template_folder="pages") + +def ClearAssetVotesCache( assetId : int ): + redis_controller.delete(f"asset:{str(assetId)}:votes") + +def GetAssetLikesAndDislikes( assetId : int ) -> tuple[int, int]: + """ + Returns 2 int values the first being the likes count and the second being the dislikes count. + """ + # See if we have the likes and dislikes in redis + CachedVoteData = redis_controller.get(f"asset:{str(assetId)}:votes") + if CachedVoteData is not None: + CachedVoteData = json.loads(CachedVoteData) + return CachedVoteData["likes"], CachedVoteData["dislikes"] + + LikesCount = AssetVote.query.filter_by(assetid=assetId, vote=True).count() + DislikesCount = AssetVote.query.filter_by(assetid=assetId, vote=False).count() + redis_controller.set(f"asset:{str(assetId)}:votes", json.dumps({"likes":LikesCount, "dislikes":DislikesCount}), ex=600) + + return LikesCount, DislikesCount + +def GetUserVoteStatus( assetId : int, userId : int ) -> int: # 2 = dislike, 0 = no vote, 1 = like + """ + Returns an int value which is 2 if the user disliked the asset, 0 if the user didn't vote and 1 if the user liked the asset. + """ + UserVoteObj : AssetVote = AssetVote.query.filter_by(assetid=assetId, userid=userId).first() + if UserVoteObj is None: + return 0 + if UserVoteObj.vote == True: + return 1 + return 2 + +def GetAssetVotePercentage( assetId : int ) -> int: + """ + Returns an int value which is the percentage of likes the asset has. + """ + LikesCount, DislikesCount = GetAssetLikesAndDislikes(assetId) + if LikesCount == 0 and DislikesCount == 0: + return 50 + return int((LikesCount / (LikesCount + DislikesCount)) * 100) + +@AssetRateRoute.route("/vote//", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +def vote_asset(assetid : int, status : int): + if status > 2 or status < 0: + return abort(400) + AuthenticatedUser = auth.GetCurrentUser() + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + if AssetObj.asset_type == AssetType.Place: + if PreviouslyPlayed.query.filter_by(userid=AuthenticatedUser.id, placeid=AssetObj.id).first() is None: + return abort(400) + elif AssetObj.asset_type in [AssetType.GamePass, AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Hat, AssetType.Gear, AssetType.Plugin, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory, AssetType.EarAccessory, AssetType.EyeAccessory, AssetType.TShirtAccessory, AssetType.ShirtAccessory, AssetType.PantsAccessory, AssetType.JacketAccessory, AssetType.Package]: + if UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=AssetObj.id).first() is None: + return abort(400) + + AssetVoteObj : AssetVote = AssetVote.query.filter_by(assetid=assetid, userid=AuthenticatedUser.id).first() + if AssetVoteObj is None and status != 0: + AssetVoteObj = AssetVote(assetid=assetid, userid=AuthenticatedUser.id, vote=True) + db.session.add(AssetVoteObj) + + if AssetVoteObj is not None and status == 0: + db.session.delete(AssetVoteObj) + + if AssetVoteObj is not None and status != 0: + AssetVoteObj.vote = status == 1 + + db.session.commit() + ClearAssetVotesCache(assetid) + LikesCount, DislikesCount = GetAssetLikesAndDislikes(assetid) + + return jsonify({"success":True}), 200 + +def GetAssetFavoriteCount( assetId : int ) -> int: + """ + Returns an int value which is the amount of users who favorited the asset. + """ + if redis_controller.exists(f"asset:{str(assetId)}:favorites"): + return int(redis_controller.get(f"asset:{str(assetId)}:favorites")) + favoriteCount = AssetFavorite.query.filter_by(assetid=assetId).count() + redis_controller.set(f"asset:{str(assetId)}:favorites", str(favoriteCount)) + return favoriteCount + +def GetUserFavoriteStatus( assetId : int, userId : int ) -> bool: + """ + Returns a bool value which is True if the user favorited the asset and False if the user didn't favorite the asset. + """ + UserFavoriteObj : AssetFavorite = AssetFavorite.query.filter_by(assetid=assetId, userid=userId).first() + if UserFavoriteObj is None: + return False + return True + +@AssetRateRoute.route("/favorite/", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +def favorite_asset(assetid : int): + AuthenticatedUser = auth.GetCurrentUser() + AssetFavoriteObj : AssetFavorite = AssetFavorite.query.filter_by(assetid=assetid, userid=AuthenticatedUser.id).first() + if AssetFavoriteObj is None: + AssetFavoriteObj = AssetFavorite(assetid=assetid, userid=AuthenticatedUser.id) + db.session.add(AssetFavoriteObj) + db.session.commit() + return jsonify({"success":True}), 200 + +@AssetRateRoute.route("/favorite/", methods=["DELETE"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +def unfavorite_asset(assetid : int): + AuthenticatedUser = auth.GetCurrentUser() + AssetFavoriteObj : AssetFavorite = AssetFavorite.query.filter_by(assetid=assetid, userid=AuthenticatedUser.id).first() + if AssetFavoriteObj is not None: + db.session.delete(AssetFavoriteObj) + db.session.commit() + redis_controller.delete(f"asset:{str(assetid)}:favorites") + return jsonify({"success":True}), 200 \ No newline at end of file diff --git a/app/routes/rbxapi.py b/app/routes/rbxapi.py new file mode 100644 index 0000000..3b1d31d --- /dev/null +++ b/app/routes/rbxapi.py @@ -0,0 +1,186 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify +from app.util import auth, membership +from app.enums.MembershipType import MembershipType +from app.extensions import db, redis_controller, get_remote_address +from app.models.user import User +from app.models.user_email import UserEmail +from app.services import economy +from datetime import datetime, timedelta +from config import Config +config = Config() + +RBXAPIRoute = Blueprint('RBXAPIRoute', __name__, template_folder='pages') +# cuh what +@RBXAPIRoute.route("/users/", methods=["GET"]) +def UserInfoAPI( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None: + return jsonify( { "success" : False, "message" : "User not found" } ), 404 + return jsonify({ + "Id" : UserObj.id, + "Username" : UserObj.username + }) + +@RBXAPIRoute.route("/users/account-info", methods=["GET"]) +@auth.authenticated_required_api +def GetUserAccountInfo(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + UserMembershipType : int = membership.GetUserMembership( AuthenticatedUser ).value + RobuxBalance, _ = economy.GetUserBalance( AuthenticatedUser ) + + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first() + if UserEmailObj is not None: + emailParts = UserEmailObj.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + else: + HiddenEmail = None + + return jsonify({ + "UserId": AuthenticatedUser.id, + "Username": AuthenticatedUser.username, + "DisplayName": AuthenticatedUser.username, + "HasPasswordSet": True, + "Email": HiddenEmail, + "MembershipType": UserMembershipType, + "RobuxBalance": RobuxBalance, + "AgeBracket": 0, + "Roles": [], + "EmailNotificationEnabled": False, + "PasswordNotifcationEnabled": False + }) + +@RBXAPIRoute.route("/my/settings/json", methods=["GET"]) +@auth.authenticated_required_api +def GetMySettingsJSON(): + AuthenticatedUser : User = auth.GetCurrentUser() + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first() + if UserEmailObj is not None: + emailParts = UserEmailObj.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + else: + HiddenEmail = None + + UserMembershipType : MembershipType = membership.GetUserMembership( AuthenticatedUser ) + + return jsonify({ + "ChangeUsernameEnabled": True, + "IsAdmin": False, + "UserId": AuthenticatedUser.id, + "Name": AuthenticatedUser.username, + "DisplayName": AuthenticatedUser.username, + "IsEmailOnFile": UserEmailObj is not None, + "IsEmailVerified": UserEmailObj is not None and UserEmailObj.verified, + "IsPhoneFeatureEnabled": False, + "RobuxRemainingForUsernameChange": 0, + "PreviousUserNames": "", + "UseSuperSafePrivacyMode": False, + "IsSuperSafeModeEnabledForPrivacySetting": False, + "UseSuperSafeChat": False, + "IsAppChatSettingEnabled": True, + "IsGameChatSettingEnabled": True, + "IsAccountPrivacySettingsV2Enabled": True, + "IsSetPasswordNotificationEnabled": False, + "ChangePasswordRequiresTwoStepVerification": False, + "ChangeEmailRequiresTwoStepVerification": False, + "UserEmail": HiddenEmail, + "UserEmailMasked": True, + "UserEmailVerified": UserEmailObj is not None and UserEmailObj.verified, + "CanHideInventory": False, + "CanTrade": UserMembershipType != MembershipType.NonBuildersClub, + "MissingParentEmail": False, + "IsUpdateEmailSectionShown": True, + "IsUnder13UpdateEmailMessageSectionShown": False, + "IsUserConnectedToFacebook": False, + "IsTwoStepToggleEnabled": False, + "AgeBracket": 0, + "UserAbove13": True, + "ClientIpAddress": get_remote_address(), + "AccountAgeInDays": (datetime.utcnow() - AuthenticatedUser.created).days, + "IsOBC": UserMembershipType == MembershipType.OutrageousBuildersClub, + "IsTBC": UserMembershipType == MembershipType.TurboBuildersClub, + "IsAnyBC": UserMembershipType != MembershipType.NonBuildersClub, + "IsPremium": False, + "IsBcRenewalMembership": False, + "BcExpireDate": "/Date(-0)/", + "BcRenewalPeriod": None, + "BcLevel": None, + "HasCurrencyOperationError": False, + "CurrencyOperationErrorMessage": None, + "BlockedUsersModel": { + "BlockedUserIds": [], + "BlockedUsers": [], + "MaxBlockedUsers": 50, + "Total": 1, + "Page": 1 + }, + "Tab": None, + "ChangePassword": False, + "IsAccountPinEnabled": True, + "IsAccountRestrictionsFeatureEnabled": True, + "IsAccountRestrictionsSettingEnabled": False, + "IsAccountSettingsSocialNetworksV2Enabled": False, + "IsUiBootstrapModalV2Enabled": True, + "IsI18nBirthdayPickerInAccountSettingsEnabled": True, + "InApp": False, + "MyAccountSecurityModel": { + "IsEmailSet": UserEmailObj is not None, + "IsEmailVerified": UserEmailObj is not None and UserEmailObj.verified, + "IsTwoStepEnabled": False, + "ShowSignOutFromAllSessions": True, + "TwoStepVerificationViewModel": { + "UserId": AuthenticatedUser.id, + "IsEnabled": False, + "CodeLength": 6, + "ValidCodeCharacters": None + } + }, + "ApiProxyDomain": config.BaseURL, + "AccountSettingsApiDomain": config.BaseURL, + "AuthDomain": config.BaseURL, + "IsDisconnectFbSocialSignOnEnabled": True, + "IsDisconnectXboxEnabled": True, + "NotificationSettingsDomain": config.BaseURL, + "AllowedNotificationSourceTypes": [ + "Test", + "FriendRequestReceived", + "FriendRequestAccepted", + "PartyInviteReceived", + "PartyMemberJoined", + "ChatNewMessage", + "PrivateMessageReceived", + "UserAddedToPrivateServerWhiteList", + "ConversationUniverseChanged", + "TeamCreateInvite", + "GameUpdate", + "DeveloperMetricsAvailable" + ], + "AllowedReceiverDestinationTypes": [ + "DesktopPush", + "NotificationStream" + ], + "BlacklistedNotificationSourceTypesForMobilePush": [], + "MinimumChromeVersionForPushNotifications": 50, + "PushNotificationsEnabledOnFirefox": True, + "LocaleApiDomain": config.BaseURL, + "HasValidPasswordSet": True, + "IsUpdateEmailApiEndpointEnabled": True, + "FastTrackMember": None, + "IsFastTrackAccessible": False, + "HasFreeNameChange": False, + "IsAgeDownEnabled": False, + "IsSendVerifyEmailApiEndpointEnabled": True, + "IsPromotionChannelsEndpointEnabled": True, + "ReceiveNewsletter": False, + "SocialNetworksVisibilityPrivacy": 6, + "SocialNetworksVisibilityPrivacyValue": "AllUsers", + "Facebook": None, + "Twitter": None, + "YouTube": None, + "Twitch": None + }) \ No newline at end of file diff --git a/app/routes/rolimons.py b/app/routes/rolimons.py new file mode 100644 index 0000000..3bb55e2 --- /dev/null +++ b/app/routes/rolimons.py @@ -0,0 +1,307 @@ +import json +from flask import Blueprint, request, jsonify, abort, make_response, Response +from datetime import datetime, timedelta + +from app.models.asset import Asset +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.placeserver_players import PlaceServerPlayer +from app.models.limited_item_transfers import LimitedItemTransfer + +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod + +from app.services import economy + +from app.extensions import csrf, redis_controller +from config import Config + +config = Config() + +RolimonsAPI = Blueprint('RolimonsAPI', __name__, url_prefix='/api/internal_rolimons') + +@RolimonsAPI.before_request +def before_request_authentication(): + if config.ROLIMONS_API_ENABLED != True: + abort(404) + + rolimonAccessKey = request.headers.get( + key = "X-Rolimons-Access-Key", + default = None, + type = str + ) + + if rolimonAccessKey is None or rolimonAccessKey != config.ROLIMONS_API_KEY: + abort(404) + +@RolimonsAPI.errorhandler( 500 ) +def internal_error( error ): + return make_response(jsonify({ + "error": "Internal Server Error", + "success": False + }), 500) + +@RolimonsAPI.route('/get_item_owners/', methods=['GET']) +def get_item_owners( assetid : int ): + AssetObj : Asset = Asset.query.filter_by( id = assetid ).first() + if AssetObj is None: + return make_response(jsonify({ + "error": "Asset not found", + "success": False + }), 404) + + if not AssetObj.is_limited: + return make_response(jsonify({ + "error": "Asset is not a limited", + "success": False + }), 400) + + UserAssets : list[UserAsset] = UserAsset.query.filter_by( assetid = assetid ).order_by( UserAsset.serial ).all() + AllItemOwners : list[dict] = [] + + for UserAssetObj in UserAssets: + OwnerUserObj : User = User.query.filter_by( id = UserAssetObj.userid ).first() + if OwnerUserObj is None: + continue + + AllItemOwners.append({ + "uaid": UserAssetObj.id, + "item_id": assetid, + "owner_id": OwnerUserObj.id if OwnerUserObj.accountstatus not in [3,4] else None, + "owner_name": OwnerUserObj.username if OwnerUserObj.accountstatus not in [3,4] else None, + "serial_number": UserAssetObj.serial, + "owned_since": f"{UserAssetObj.updated.isoformat()}Z" + }) + + return make_response(jsonify({ + "success": True, + "data": AllItemOwners + })) + +@RolimonsAPI.route('/get_player_inventory/', methods=['GET']) +def get_user_collectibles( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None or UserObj.accountstatus == 4: + return make_response(jsonify({ + "error": "User not found", + "success": False + }), 404) + + PageNumber = max( + request.args.get( + key = "cursor", + default = 1, + type = int + ), + 1 + ) + + UserAssets = UserAsset.query.filter_by( userid = userid ).join( Asset, UserAsset.assetid == Asset.id ).filter( Asset.is_limited == True ).order_by( UserAsset.id.desc() ).paginate( + page = PageNumber, + per_page = 50, + error_out = False + ) + + AllUserCollectibleAssets : list[dict] = [] + for UserAssetObj in UserAssets.items: + UserAssetObj : UserAsset + AssetObj : Asset = UserAssetObj.asset + + AllUserCollectibleAssets.append({ + "assetId": UserAssetObj.assetid, + "userAssetId": UserAssetObj.id, + "serialNumber": UserAssetObj.serial, + "name": AssetObj.name + }) + + return jsonify({ + "data": AllUserCollectibleAssets, + "nextPageCursor": str(UserAssets.next_num if UserAssets.has_next else None), + "previousPageCursor": str(UserAssets.prev_num if UserAssets.has_prev else None), + "success": True + }) + +@RolimonsAPI.route("/user_by_username/", methods=['GET']) +def get_user_by_username( username : str ): + if len(username) < 3 or len(username) > 32: + return make_response(jsonify({ + "error": "Username length must be between 3 and 32 characters", + "success": False + }), 400) + SearchQuery = username.strip().replace('%', '') + + UserSearchResults = User.query.filter( User.username.ilike( '%' + SearchQuery + '%' ) ).filter( User.accountstatus != 4 ).order_by( User.id ).all() + + UserSearchResultsData = [] + for UserObj in UserSearchResults: + UserSearchResultsData.append({ + "Name": UserObj.username, + "UserID": UserObj.id, + "Description": UserObj.description + }) + + return jsonify({ + "UserSearchResults": UserSearchResultsData, + "success": True + }) + +@RolimonsAPI.route("/multi_get_user_presence", methods=['POST']) +@csrf.exempt +def multi_get_user_presence(): + if not request.is_json: + return make_response(jsonify({ + "error": "Invalid JSON", + "success": False + }), 400) + + if "userIds" not in request.json: + return make_response(jsonify({ + "error": "userIds not found in JSON Payload", + "success": False + }), 400) + + UserIds = request.json["userIds"] + if not isinstance(UserIds, list): + return make_response(jsonify({ + "error": "userIds must be a list", + "success": False + }), 400) + + if len(UserIds) > 100: + return make_response(jsonify({ + "error": "userIds list must not exceed 100 items", + "success": False + }), 400) + + UserPresenceData : list[dict] = [] + for UserId in UserIds: + if not isinstance(UserId, int): + continue + + UserObj : User = User.query.filter_by( id = UserId ).first() + if UserObj is None or UserObj.accountstatus == 4: + continue + + UserObjPresenceData = { + "userId": UserObj.id, + "lastOnline": f"{UserObj.lastonline.isoformat()}Z", + "userPresenceType": "InGame" if PlaceServerPlayer.query.filter_by( userid = UserObj.id ).first() is not None else ( "Online" if UserObj.lastonline > datetime.utcnow() - timedelta( minutes = 1 ) else "Offline" ) + } + + UserObjPresenceData["lastLocation"] = "Playing" if UserObjPresenceData["userPresenceType"] == "InGame" else "Website" + UserPresenceData.append(UserObjPresenceData) + + return jsonify({ + "userPresences": UserPresenceData, + "success": True + }) + +@RolimonsAPI.route("/get_user_by_id/", methods=['GET']) +def get_user_by_id( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None or UserObj.accountstatus == 4: + return make_response(jsonify({ + "error": "User not found", + "success": False + }), 404) + + return jsonify({ + "id": UserObj.id, + "name": UserObj.username, + "description": UserObj.description, + "isBanned": UserObj.accountstatus in [ 3, 4 ], + }) + +@RolimonsAPI.route("/get_all_limiteds", methods=["GET"]) +def get_all_limiteds(): + def _generate_response() -> list: + AllLimiteds = [] + LimitedsListAssetObj : list[Asset] = Asset.query.filter( + Asset.is_limited == True + ).order_by( Asset.id.desc() ).all() + + for LimitedAsset in LimitedsListAssetObj: + LimitedAsset : Asset + LowestAvailablePrice : UserAsset | None = UserAsset.query.filter_by( assetid = LimitedAsset.id, is_for_sale = True ).order_by( UserAsset.price ).first() + + AllLimiteds.append({ + "name": LimitedAsset.name, + "id": LimitedAsset.id, + "description": LimitedAsset.description, + "rap": economy.GetAssetRap( LimitedAsset ), + "price": LowestAvailablePrice.price if LowestAvailablePrice is not None else None, + "original_price": LimitedAsset.price_robux if LimitedAsset.price_robux != 0 else LimitedAsset.price_tix, + "original_price_type": "Robux" if LimitedAsset.price_robux != 0 else "Tickets", + "type": LimitedAsset.asset_type.name, + "is_limited_unique": LimitedAsset.is_limited_unique, + "updated_at": f"{LimitedAsset.updated_at.isoformat()}Z" + }) + + return AllLimiteds + + if redis_controller.exists("rolimons_all_limiteds"): + return jsonify({ + "data": json.loads( redis_controller.get("rolimons_all_limiteds") ), + "success": True + }) + + AllLimiteds = _generate_response() + redis_controller.set( "rolimons_all_limiteds", json.dumps(AllLimiteds), ex = 5 ) + return jsonify({ + "data": AllLimiteds, + "success": True + }) + +@RolimonsAPI.route("/get_item_sales/", methods=["GET"]) +def get_item_sales( assetid : int ): + AssetObj : Asset = Asset.query.filter_by( id = assetid ).first() + if AssetObj is None: + return make_response(jsonify({ + "error": "Asset not found", + "success": False + }), 404) + + if not AssetObj.is_limited: + return make_response(jsonify({ + "error": "Asset is not a limited", + "success": False + }), 400) + + PageNumber = max( + request.args.get( + key = "cursor", + default = 1, + type = int + ), + 1 + ) + + AllItemTransfers : list[LimitedItemTransfer] = LimitedItemTransfer.query.filter_by( asset_id = assetid, transfer_method = LimitedItemTransferMethod.Purchase ).order_by( LimitedItemTransfer.transferred_at.desc() ).paginate( + page = 1, + per_page = 15, + error_out = False + ) + + AllItemSalesData : list[dict] = [] + for ItemTransfer in AllItemTransfers.items: + ItemTransfer : LimitedItemTransfer + OriginalOwnerObj : User = User.query.filter_by( id = ItemTransfer.original_owner_id ).first() + NewOwnerObj : User = User.query.filter_by( id = ItemTransfer.new_owner_id ).first() + + AllItemSalesData.append({ + "userAssetId": ItemTransfer.user_asset_id, + + "sellerId": OriginalOwnerObj.id, + "sellerName": OriginalOwnerObj.username, + + "buyerId": NewOwnerObj.id, + "buyerName": NewOwnerObj.username, + + "price": ItemTransfer.purchased_price + }) + + return jsonify({ + "sales": AllItemSalesData, + "success": True, + "nextPageCursor": str(AllItemTransfers.next_num) if AllItemTransfers.has_next else None, + "previousPageCursor": str(AllItemTransfers.prev_num) if AllItemTransfers.has_prev else None + }) \ No newline at end of file diff --git a/app/routes/sets.py b/app/routes/sets.py new file mode 100644 index 0000000..d94582b --- /dev/null +++ b/app/routes/sets.py @@ -0,0 +1,51 @@ +import requests +from app.routes.asset import migrateAsset +from app.extensions import limiter, db, redis_controller +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort + +SetsRoute = Blueprint("sets", __name__, template_folder="pages") + +def FetchSetData( setId : int, avoidCache : bool = False ) -> str: + """ + Fetches the set data from sets.pizzaboxer.xyz and then caches it in redis. + """ + if not avoidCache: + CachedSetData = redis_controller.get(f"set:{str(setId)}:data") + if CachedSetData is not None: + return CachedSetData + SetData = requests.get(f"https://sets.pizzaboxer.xyz/Game/Tools/InsertAsset.ashx?sid={str(setId)}").text + redis_controller.set(f"set:{str(setId)}:data", SetData, ex=(60 * 60 * 24 * 31)) + return SetData + +def FetchUserSetsData( nsets : int = 20, type : str = "user", userid : int = 1, avoidCache : bool = False ) -> str: + """ + Fetches the user's sets data from sets.pizzaboxer.xyz and then caches it in redis. + """ + if not avoidCache: + CachedSetData = redis_controller.get(f"sets:{str(userid)}:data") + if CachedSetData is not None: + return CachedSetData + SetData = requests.get(f"https://sets.pizzaboxer.xyz/Game/Tools/InsertAsset.ashx?nsets={str(nsets)}&type={type}&userid={str(userid)}").text + redis_controller.set(f"sets:{str(userid)}:data", SetData, ex=(60 * 60 * 24 * 31)) + return SetData + +@SetsRoute.route("/Game/Tools/InsertAsset.ashx", methods=["GET"]) +def insert_asset(): + SetId = request.args.get( key = "sid", default = None, type = int ) + if SetId is None: + NSets = request.args.get( key = "nsets", default = None, type = int ) + OwnerType = request.args.get( key = "type", default = None, type = str ) + UserId = request.args.get( key = "userid", default = None, type = int ) + + if NSets is None or OwnerType is None or UserId is None: + return abort(400) + + SetData : str = FetchUserSetsData(nsets=NSets, type=OwnerType, userid=UserId) + DataResponse = make_response(SetData) + DataResponse.headers["Content-Type"] = "text/xml" + return DataResponse + + SetData : str = FetchSetData(SetId) + DataResponse = make_response(SetData) + DataResponse.headers["Content-Type"] = "text/xml" + return DataResponse \ No newline at end of file diff --git a/app/routes/teleportservice.py b/app/routes/teleportservice.py new file mode 100644 index 0000000..09b8aae --- /dev/null +++ b/app/routes/teleportservice.py @@ -0,0 +1,139 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from app.models.placeservers import PlaceServer +from app.models.gameservers import GameServer +from app.models.place import Place +from app.models.universe import Universe +from app.models.user import User +from app.extensions import redis_controller, get_remote_address, csrf, limiter, db +from app.enums.PlaceYear import PlaceYear +from app.routes.gamejoin import CreateNewPlaceServer +import logging +import secrets +import string + +TeleportServiceRoute = Blueprint('teleportServiceinternal', __name__, url_prefix='/reservedservers') + +@TeleportServiceRoute.before_request +def before_request_hook(): + if "Roblox/" not in request.user_agent.string: + logging.info(f"TeleportServiceInternal - UserAgent {request.user_agent} - Not allowed") + abort(404) + RemoteAddress = get_remote_address() + GameServerObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameServerObj is None: + logging.info(f"TeleportServiceInternal - {RemoteAddress} - Not found") + abort(404) + + if "Roblox-Place-Id" not in request.headers: + logging.info(f"TeleportServiceInternal - GameServer {RemoteAddress} - Roblox-Place-Id header not found") + abort(404) + + accessKeyRequest = request.headers.get( key = "accesskey", default = "" ) + if "UserRequest" in accessKeyRequest: + logging.warning(f"TeleportServiceInternal - GameServer {RemoteAddress} - UserRequest access key used") + abort(404) + + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if PlaceId is None: + logging.info(f"TeleportServiceInternal - GameServer {RemoteAddress} - Roblox-Place-Id header not expected type") + abort(404) + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + logging.info(f"TeleportServiceInternal - Place {PlaceId} - Place not found") + abort(404) + +@TeleportServiceRoute.route('/create', methods=['POST']) +@csrf.exempt +def create_reserved_server(): + OriginPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + TargetPlaceId = request.args.get( key = "placeId", default = None, type = int ) + + if OriginPlaceId is None or TargetPlaceId is None: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - OriginPlaceId {OriginPlaceId} TargetPlaceId {TargetPlaceId} - Both has to be not none") + return "Invalid request", 400 + + OriginPlaceObj : Place = Place.query.filter_by( placeid = OriginPlaceId ).first() + TargetPlaceObj : Place = Place.query.filter_by( placeid = TargetPlaceId ).first() + if OriginPlaceObj is None or TargetPlaceObj is None: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - Place {OriginPlaceId} or {TargetPlaceId} not found") + return "Invalid request", 400 + + if OriginPlaceObj.parent_universe_id != TargetPlaceObj.parent_universe_id: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - OriginPlace {OriginPlaceId} and TargetPlace {TargetPlaceId} are not in the same universe") + return "Invalid request", 400 + + UniverseObj : Universe = Universe.query.filter_by( id = OriginPlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return "Invalid request", 400 + + if UniverseObj.place_year not in [ PlaceYear.Sixteen, PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne]: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - Universe {UniverseObj.id} - PlaceYear {UniverseObj.place_year} is not supported") + return "Invalid request", 400 + + CooldownKeyName = f"reserved_server_creation_cooldown:{OriginPlaceObj.parent_universe_id}" + ReservedServerAccessCode = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(64)) + + if not redis_controller.exists( CooldownKeyName ): + redis_controller.setex( name = CooldownKeyName, time = 10, value = "1" ) + try: + NewPlaceServerObj : PlaceServer = CreateNewPlaceServer( + placeId = TargetPlaceId, + reserved_server_access_code = ReservedServerAccessCode + ) + except Exception as e: + logging.error(f"TeleportServiceInternal - create_reserved_server - Place {TargetPlaceId} - Universe {UniverseObj.id} - {e}") + return "Failed to start new server", 400 + + redis_controller.set( f"reservedserveraccesscode_server:{ReservedServerAccessCode}", TargetPlaceObj.placeid, ex = 60 * 60 * 24 ) + + return jsonify({ + "ReservedServerAccessCode": ReservedServerAccessCode, + "ReservedServerGameCode": ReservedServerAccessCode + }) + +@TeleportServiceRoute.route('/grantaccess', methods=['POST']) +@csrf.exempt +def grant_access_to_reserved(): + given_reservedServerAccessCode = request.args.get( key = 'reservedServerAccessCode', default = None, type = str ) + OriginPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if given_reservedServerAccessCode is None or OriginPlaceId is None: + return "Invalid request", 400 + + OriginPlaceObj : Place = Place.query.filter_by( placeid = OriginPlaceId ).first() + if OriginPlaceObj is None: + return "Invalid request", 400 + + TargetPlaceServerObj : PlaceServer = PlaceServer.query.filter_by( reservedServerAccessCode = given_reservedServerAccessCode ).first() + if TargetPlaceServerObj is None: + accessCodePlaceIdOrigin = redis_controller.get( f"reservedserveraccesscode_server:{given_reservedServerAccessCode}" ) + if accessCodePlaceIdOrigin is None: + return "Invalid request", 400 + TargetPlaceObj : Place = Place.query.filter_by( placeid = int( accessCodePlaceIdOrigin ) ).first() + if TargetPlaceObj is None: + return "Invalid request", 400 + + if TargetPlaceObj.parent_universe_id != OriginPlaceObj.parent_universe_id: + return "Invalid request", 400 + + try: + TargetPlaceServerObj : PlaceServer = CreateNewPlaceServer( + placeId = TargetPlaceObj.placeid, + reserved_server_access_code = given_reservedServerAccessCode + ) + except Exception as e: + logging.error(f"TeleportServiceInternal - grant_access_to_reserved - Place {TargetPlaceObj.placeid} - Universe {TargetPlaceObj.parent_universe_id} - {e}") + return "Failed to start new server", 400 + redis_controller.set( f"reservedserveraccesscode_server:{given_reservedServerAccessCode}", TargetPlaceObj.placeid, ex = 60 * 60 * 24 ) + + AllowedUserIds = request.form.getlist( key = "playerIds", type = int ) + if len( AllowedUserIds ) == 0: + return "Invalid request", 400 + + for UserId in AllowedUserIds: + UserObj : User = User.query.filter_by( id = UserId ).first() + if UserObj is None: + return "Invalid request", 400 + redis_controller.set( f"reservedserveraccesscode:{TargetPlaceServerObj.serveruuid}:{UserObj.id}", "1", ex = 60 * 8) + + return "", 200 diff --git a/app/routes/thumbnailer.py b/app/routes/thumbnailer.py new file mode 100644 index 0000000..52edeab --- /dev/null +++ b/app/routes/thumbnailer.py @@ -0,0 +1,670 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from app.extensions import db, redis_controller, csrf +import uuid +import json +import requests +import hashlib +import logging +import os +import base64 +from datetime import datetime + +from app.services.gameserver_comm import perform_post +from app.util import websiteFeatures, s3helper + +from app.models.gameservers import GameServer +from app.models.asset_version import AssetVersion +from app.models.asset_thumbnail import AssetThumbnail +from app.models.user_thumbnail import UserThumbnail +from app.models.place_icon import PlaceIcon +from app.models.asset import Asset +from app.models.package_asset import PackageAsset +from app.models.place import Place +from app.models.user_avatar import UserAvatar +from app.models.user_avatar_asset import UserAvatarAsset + +from app.enums.PlaceYear import PlaceYear + +Thumbnailer = Blueprint('thumbnailer', __name__, url_prefix='/internal') +AssetTypetoThumbnailRenderType = { + 4 : 4, + 8 : 11, + 9 : 5, + 10 : 3, + 11 : 15, + 12 : 14, + 1 : 6, + 13 : 6, + 18 : 6, + 19 : 12, + 2 : 7, + 17 : 8, + 27 : 9, + 28 : 9, + 29 : 9, + 30 : 9, + 31 : 9, + 32 : 17, + 41 : 11, + 42 : 11, + 43 : 11, + 44 : 11, + 45 : 11, + 46 : 11, + 47 : 11, + 40 : 13, +} + +""" + omg was i fucking high or something several months ago i gotta rewrite this one day + - something.else 19/2/2024 +""" + +def GetAvatarHash( userid : int ) -> str: + """ + Returns the avatar hash for the userid provided + """ + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id=userid).first() + if UserAvatarObject is None: + return None + UserAvatarAssetObject : UserAvatarAsset = UserAvatarAsset.query.filter_by(user_id=userid).all() + HashString = "" + for UserAvatarAssetObject in UserAvatarAssetObject: + HashString += str(UserAvatarAssetObject.asset_id)+"-" + HashString += str(UserAvatarObject.head_color_id)+"-" + HashString += str(UserAvatarObject.torso_color_id)+"-" + HashString += str(UserAvatarObject.left_arm_color_id)+"-" + HashString += str(UserAvatarObject.right_arm_color_id)+"-" + HashString += str(UserAvatarObject.left_leg_color_id)+"-" + HashString += str(UserAvatarObject.right_leg_color_id)+'-' + HashString += str(UserAvatarObject.r15)+'-' + HashString += str(UserAvatarObject.height_scale)+'-' + HashString += str(UserAvatarObject.width_scale)+'-' + HashString += str(UserAvatarObject.head_scale)+'-' + HashString += str(UserAvatarObject.proportion_scale)+'-' + HashString += str(UserAvatarObject.body_type_scale) + + AvatarHash = hashlib.sha256(HashString.encode()).hexdigest() + return AvatarHash + + +def findBestThumbnailer() -> GameServer | None: + weight_ping_time = 3 + weight_queue_size = 0.3 + + AllGameServers : list[GameServer] = GameServer.query.filter_by(allowThumbnailGen=True, isRCCOnline=True).filter( GameServer.thumbnailQueueSize < 40 ).all() + if len(AllGameServers) == 0: + return None + BestGameServer : GameServer = None + for GameServerObject in AllGameServers: + GameServerObject.score = (weight_ping_time * GameServerObject.heartbeatResponseTime) + (weight_queue_size * GameServerObject.thumbnailQueueSize) + if BestGameServer is None: + BestGameServer = GameServerObject + continue + if GameServerObject.score < BestGameServer.score: + BestGameServer = GameServerObject + #logging.info(f"GameserverLoadBalancer: {str(BestGameServer.serverId)} - {str(BestGameServer.score)} - Ping: {str(round(BestGameServer.heartbeatResponseTime, 3))}secs - Queue: {str(BestGameServer.thumbnailQueueSize)}") + return BestGameServer + +def TakeUserThumbnail(UserId: int, bypassCooldown=False, bypassCache=False, Is3D=False): + """ + Takes a thumbnail and headshot for the userid provided + bypassCooldown: Bypasses the 5 second cooldown for that user + bypassCache: Bypasses the cache and takes a new thumbnail and headshot + Is3D: Whether to request a 3D thumbnail + """ + if redis_controller.get(f"Thumbnailer:UserId:{UserId}:Taken") is not None and not bypassCooldown: + return "Thumbnail Attempted Recently" + redis_controller.set(f"Thumbnailer:UserId:{UserId}:Taken", "True", 5) + + ImageHeadshotCache = None + ImageThumbnailCache = None + Image3DThumbnailCache = None + AvatarHash = GetAvatarHash(UserId) + + if not bypassCache: + UserThumbnailObject = UserThumbnail.query.filter_by(userid=UserId).first() + if UserThumbnailObject is None: + UserThumbnailObject = UserThumbnail(userid=UserId, full_contenthash=None, headshot_contenthash=None, full_3dcontenthash=None, updated_at=datetime.utcnow()) + db.session.add(UserThumbnailObject) + + ImageThumbnailCache = redis_controller.get(f"Thumbnailer:UserImage:{AvatarHash}:Thumbnail") + if ImageThumbnailCache is not None: + UserThumbnailObject.full_contenthash = ImageThumbnailCache + + ImageHeadshotCache = redis_controller.get(f"Thumbnailer:UserImage:{AvatarHash}:Headshot") + if ImageHeadshotCache is not None: + UserThumbnailObject.headshot_contenthash = ImageHeadshotCache + + Image3DThumbnailCache = redis_controller.get(f"Thumbnailer:UserImage:{AvatarHash}:3DThumbnail") + if Image3DThumbnailCache is not None and Is3D: + UserThumbnailObject.full_3dcontenthash = Image3DThumbnailCache + + db.session.commit() + + if ImageThumbnailCache is not None and ImageHeadshotCache is not None: + if not Is3D or (Is3D and Image3DThumbnailCache is not None): + return + + if redis_controller.get(f"Thumbnailer:AvatarHash:{AvatarHash}:Lock") is not None: + return "Thumbnail Attempted Recently" + redis_controller.set(f"Thumbnailer:AvatarHash:{AvatarHash}:Lock", "True", 5) + + if not websiteFeatures.GetWebsiteFeature("ThumbnailRendering"): + return "Thumbnail Rendering is disabled" + + GameServerObject: GameServer = findBestThumbnailer() + if GameServerObject is None: + return "No suitable game servers found" + + requests_to_send = 0 + UserAvatarObj: UserAvatar = UserAvatar.query.filter_by(user_id=UserId).first() + + if (not bypassCache and ImageThumbnailCache is None) or bypassCache: + ThumbnailReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{ThumbnailReqId}", json.dumps({ + "UserId": UserId, + "Type": 0, + "Is3D": False + }), ex=600) + + try: + perform_post( + TargetGameserver=GameServerObject, + Endpoint="Thumbnail", + JSONData={ + "type": 16 if UserAvatarObj.r15 else 0, + "userid": UserId, + "reqid": ThumbnailReqId, + "image_x": 768, + "image_y": 768, + "Is3D": False + }, + RequestTimeout=0.5 + ) + requests_to_send += 1 + except Exception as e: + logging.error(f"Error requesting 2D thumbnail for UserId {UserId}: {str(e)}") + + if (not bypassCache and ImageHeadshotCache is None) or bypassCache: + HeadshotReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{HeadshotReqId}", json.dumps({ + "UserId": UserId, + "Type": 1, + "Is3D": False + }), ex=600) + + try: + perform_post( + TargetGameserver=GameServerObject, + Endpoint="Thumbnail", + JSONData={ + "type": 1, + "userid": UserId, + "reqid": HeadshotReqId, + "image_x": 768, + "image_y": 768, + "Is3D": False + }, + RequestTimeout=0.5 + ) + requests_to_send += 1 + except Exception as e: + logging.error(f"Error requesting headshot for UserId {UserId}: {str(e)}") + + if Is3D and ((not bypassCache and Image3DThumbnailCache is None) or bypassCache): + ThreeDReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{ThreeDReqId}", json.dumps({ + "UserId": UserId, + "Type": 0, + "Is3D": True + }), ex=600) + + try: + perform_post( + TargetGameserver=GameServerObject, + Endpoint="Thumbnail", + JSONData={ + "type": 16 if UserAvatarObj.r15 else 0, + "userid": UserId, + "reqid": ThreeDReqId, + "image_x": 768, + "image_y": 768, + "Is3D": True + }, + RequestTimeout=0.5 + ) + requests_to_send += 1 + except Exception as e: + logging.error(f"Error requesting 3D thumbnail for UserId {UserId}: {str(e)}") + + if requests_to_send > 0: + GameServerObject.thumbnailQueueSize += requests_to_send + db.session.commit() + + return "Thumbnail request sent" + +def ValidatePlaceFileRequest(PlaceId : int, RequestId : str = None, AssetYear : PlaceYear = None ) -> None: + """ + Sends a validate file request to a thumbnailer server + """ + if not websiteFeatures.GetWebsiteFeature("AssetValidationService"): + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "Asset Validation Service is temporarily disabled, try again later" + }), ex=600) + + GameServerObject : GameServer = findBestThumbnailer() + if GameServerObject is None: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "Cannot verify file at this time, try again later" + }), ex=600) + return + if AssetYear is None: + PlaceObj : Place = Place.query.filter_by(placeid=PlaceId).first() + AssetYear = PlaceYear.Eighteen + if PlaceObj is not None: + AssetYear = PlaceObj.placeyear + try: + AssetYearToEndpoint = { + PlaceYear.Eighteen: "AssetValidation2018", + PlaceYear.Sixteen: "AssetValidation2016", + PlaceYear.Fourteen: "AssetValidation2016", + PlaceYear.Twenty: "AssetValidation2020", + PlaceYear.TwentyOne: "AssetValidation2021" + } + if AssetYear not in AssetYearToEndpoint: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "Invalid place year" + }), ex=600) + return + + response = perform_post( + TargetGameserver = GameServerObject, + Endpoint = AssetYearToEndpoint[AssetYear], + JSONData = { + "assetid": PlaceId + }, + RequestTimeout = 60 + ) + + response.raise_for_status() + response = response.json() + if response["valid"]: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": True, + "error": None + }), ex=600) + return + else: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": response["reason"] + }), ex=600) + return + except Exception as e: + logging.error(f"Error while trying to validate place file: {str(e)}") + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "An error occured while trying to validate the place file" + }), ex=600) + return + +def TakeThumbnail(AssetId : int, isIcon = False, bypassCooldown = False, bypassCache = False): # isIcon only used for game icons + """ + Takes a thumbnail for the assetid provided + bypassCooldown: Bypasses the 2 minute cooldown for that asset + """ + from app.routes.asset import GenerateTempAuthToken + if redis_controller.get(f"Thumbnailer:AssetId:{AssetId}:{str(isIcon)}:Taken") is not None and not bypassCooldown: + return "Thumbnail Attempted Recently" + redis_controller.set(f"Thumbnailer:AssetId:{AssetId}:{str(isIcon)}:Taken", "True", 120) + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + AssetVersionObject : AssetVersion = AssetVersion.query.filter_by(asset_id=AssetId).order_by(AssetVersion.version.desc()).first() + if AssetVersionObject is None and AssetObject.asset_type.value != 32: + return "Asset version not found" + if not bypassCache: + if not isIcon: + ImageThumbnailCache = redis_controller.get(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:Thumbnail") + if ImageThumbnailCache is not None: + ThumbnailObject : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetId, asset_version_id=AssetVersionObject.version).first() + if ThumbnailObject is None: + AssetModeration = 1 + if AssetObject.roblox_asset_id is not None: + AssetModeration = 0 + ThumbnailObject = AssetThumbnail( + asset_id=AssetId, + asset_version_id=AssetVersionObject.version, + content_hash=ImageThumbnailCache, + moderation_status=AssetModeration, + created_at=datetime.utcnow() + ) + db.session.add(ThumbnailObject) + try: + db.session.commit() + except: + return + return + if ThumbnailObject.content_hash == ImageThumbnailCache: + return + ThumbnailObject.content_hash = ImageThumbnailCache + ThumbnailObject.moderation_status = 1 + try: + db.session.commit() + except: + return + return + else: + ImageIconCache = redis_controller.get(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:PlaceIcon") + if ImageIconCache is not None: + PlaceIconObject : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetId).first() + if PlaceIconObject is None: + PlaceIconObject = PlaceIcon( + placeid=AssetId, + contenthash=ImageIconCache, + updated_at=datetime.utcnow(), + moderation_status=1, # Pending + ) + db.session.add(PlaceIconObject) + db.session.commit() + return + if PlaceIconObject.contenthash == ImageIconCache: + return + PlaceIconObject.contenthash = ImageIconCache + PlaceIconObject.moderation_status = 1 + PlaceIconObject.updated_at = datetime.utcnow() + db.session.commit() + return + + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObject is None: + return "Asset not found" + AssetType = AssetObject.asset_type.value + ThumbnailType = AssetTypetoThumbnailRenderType.get(AssetType) + if ThumbnailType is None: + if AssetType in[39, 3, 24, 5, 48,49,50,51,52,53,54,55,56]: # SolidModel, Animation, Lua and Audio + if AssetType == 39: + StaticImage = open("./app/files/NoRender.png", "rb").read() + elif AssetType == 3: + StaticImage = open("./app/files/AudioThumbnail.png", "rb").read() + elif AssetType in [24,48,49,50,51,52,53,54,55,56]: + StaticImage = open("./app/files/AnimationThumbnail.png", "rb").read() + elif AssetType == 5: + StaticImage = open("./app/files/LuaThumbnail.png", "rb").read() + ImageHash = hashlib.sha512(StaticImage).hexdigest() + if not s3helper.DoesKeyExist(ImageHash): + s3helper.UploadBytesToS3(StaticImage, ImageHash, contentType="image/png") + try: + NewThumbnailObject : AssetThumbnail = AssetThumbnail( + asset_id=AssetId, + asset_version_id=AssetVersionObject.version, + content_hash=ImageHash, + moderation_status=0, + created_at=datetime.utcnow() + ) + db.session.add(NewThumbnailObject) + db.session.commit() + except: + pass + return "Used Static Image" + + return "Thumbnail type not found" + + if not websiteFeatures.GetWebsiteFeature("ThumbnailRendering"): + return "Thumbnail Rendering is disabled" + + GameServerObject : GameServer = findBestThumbnailer() + if GameServerObject is None: + return "No suitable game servers found" + + ThumbnailReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{ThumbnailReqId}", json.dumps({ + "AssetId": AssetId, + "AssetVersionId": AssetVersionObject.version, + "isIcon": isIcon, + "AssetType": AssetType, + }), ex=600) + TargetX = 1024 + TargetY = 1024 + PlaceAuthorisationToken = None + if AssetType == 9: + PlaceAuthorisationToken = GenerateTempAuthToken( AssetId, Expiration = 600, CreatorIP = None ) + if AssetType == 9 and not isIcon: + TargetX = 1280 + TargetY = 720 + if AssetType == 1: # Image + TargetX = 256 + TargetY = 256 + if AssetType == 32: # Package + AllPackageAssets : list[PackageAsset] = PackageAsset.query.filter_by(package_asset_id=AssetId).all() + AssetId = "" + for i in range(len(AllPackageAssets)): + AssetId += f"https://www.nexium.fit/asset/?id={str(AllPackageAssets[i].asset_id)}" + if i != len(AllPackageAssets) - 1: + AssetId += ";" + try: + logging.info(f"thumbnailer : TakeThumbnail : Sent request to thumbnailer for asset {AssetId} with type {ThumbnailType} to {GameServerObject.serverName} [ {GameServerObject.serverId} ]") + perform_post( + TargetGameserver = GameServerObject, + Endpoint = "Thumbnail", + JSONData = { + "type": ThumbnailType, + "asset": AssetId, + "reqid": ThumbnailReqId, + "image_x": TargetX, + "image_y": TargetY, + "placetoken": PlaceAuthorisationToken + } + ) + GameServerObject.thumbnailQueueSize += 1 + db.session.commit() + except Exception as e: + return str(e) + return "Thumbnail request sent" + + +def isValidAuthorizationToken( authtoken : str) -> GameServer: + if authtoken is None: + return None + GameServerObject = GameServer.query.filter_by(accessKey=authtoken).first() + return GameServerObject + +import base64 +def Handle3DObjectData(EncodedData: bytes) -> str: + """ + Process the 3D object data from the thumbnailer and return a hash + """ + try: + Data = json.loads(EncodedData) + + TextureHashes = [] + OBJBytes = None + MTLBytes = None + OBJHash = None + MTLHash = None + + for FileName, FileDict in Data["files"].items(): + DecodedData: bytes = base64.b64decode(FileDict["content"]) + + if FileName.endswith(".obj"): + OBJBytes = DecodedData + OBJHash = f"{hashlib.sha512(DecodedData).hexdigest()}" + s3helper.UploadBytesToS3(DecodedData, OBJHash, contentType="text/plain") + elif FileName.endswith(".mtl"): + MTLBytes = DecodedData + MTLHash = f"{hashlib.sha512(DecodedData).hexdigest()}" + else: + TextureHash = f"{hashlib.sha512(DecodedData).hexdigest()}" + TextureHashes.append(TextureHash) + s3helper.UploadBytesToS3(DecodedData, TextureHash, contentType="image/png") + + if MTLBytes: + MTLBytes = MTLBytes.replace(FileName.encode(), f"{TextureHash}".encode()) + + if MTLBytes: + s3helper.UploadBytesToS3(MTLBytes, MTLHash, contentType="text/plain") + + OutputData = { + "camera": Data["camera"], + "aabb": Data["AABB"], + "obj": OBJHash, + "mtl": MTLHash, + "textures": TextureHashes + } + + JsonContent = json.dumps(OutputData).encode() + # bruh + ContentHash = f"{hashlib.sha512(JsonContent).hexdigest()}" + + s3helper.UploadBytesToS3(JsonContent, ContentHash, contentType="application/json") + + return ContentHash + except Exception as e: + logging.error(f"Error in Handle3DObjectData: {str(e)}") + return None + +@Thumbnailer.route('/thumbnailreturn', methods=["POST"]) +@csrf.exempt +def thumbnailreturn(): + AuthorizationToken = request.headers.get("Authorization") + if AuthorizationToken is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}), 400 + + ThumbnailerOwner: GameServer = isValidAuthorizationToken(AuthorizationToken) + if ThumbnailerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}), 400 + + ReqId = request.headers.get("ReturnUUID") + if ReqId is None: + return jsonify({"status": "error", "message": "Invalid request id"}), 400 + + RequestData = redis_controller.get(f"Thumbnailer:Request:{ReqId}") + if RequestData is None: + return jsonify({"status": "error", "message": "Invalid request id"}), 400 + + redis_controller.delete(f"Thumbnailer:Request:{ReqId}") + RequestData = json.loads(RequestData) + + if "UserId" not in RequestData: + AssetId = RequestData["AssetId"] + AssetVersionId = RequestData["AssetVersionId"] + isIcon = RequestData["isIcon"] + AssetType = RequestData["AssetType"] + + ImageData = request.data + ImageHash = hashlib.sha512(ImageData).hexdigest() + + s3helper.UploadBytesToS3(ImageData, ImageHash, contentType="image/png") + AssetVersionObject: AssetVersion = AssetVersion.query.filter_by(asset_id=AssetId, version=AssetVersionId).first() + if isIcon and AssetType == 9: + PlaceIconObject: PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetId).first() + if PlaceIconObject is None: + PlaceIconObject = PlaceIcon(placeid=AssetId, contenthash=ImageHash, updated_at=datetime.utcnow()) + db.session.add(PlaceIconObject) + else: + PlaceIconObject.contenthash = ImageHash + PlaceIconObject.updated_at = datetime.utcnow() + PlaceIconObject.moderation_status = 1 + if AssetVersionObject: + redis_controller.setex(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:PlaceIcon", 60 * 60 * 24 * 3, ImageHash) + try: + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + except: + pass + return jsonify({"status": "success", "message": "Thumbnail saved"}), 200 + + if AssetVersionObject: + redis_controller.setex(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:Thumbnail", 60 * 60 * 24 * 3, ImageHash) + + ThumbnailObject: AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetId, asset_version_id=AssetVersionId).first() + if ThumbnailObject is not None: + ThumbnailObject.content_hash = ImageHash + ThumbnailObject.updated_at = datetime.utcnow() + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + return jsonify({"status": "success", "message": "Thumbnail saved"}), 200 + + AssetObject: Asset = Asset.query.filter_by(id=AssetId).first() + AssetModeration = 1 + if AssetObject.roblox_asset_id is not None: + AssetModeration = 0 + + AssetThumbnailObject = AssetThumbnail(asset_id=AssetId, asset_version_id=AssetVersionId, content_hash=ImageHash, created_at=datetime.utcnow(), moderation_status=AssetModeration) # 0 = Approved, 1 = Pending, 2 = Denied + db.session.add(AssetThumbnailObject) + db.session.commit() + + return jsonify({"status": "success", "message": "Thumbnail saved"}), 200 + else: + UserId = RequestData["UserId"] + ThumbnailType = RequestData["Type"] + ThumbnailIs3D = RequestData.get("Is3D", False) + ImageData = request.data + ImageHash = None + + AvatarHash = GetAvatarHash(UserId) + + if ThumbnailIs3D: + try: + ContentHash = Handle3DObjectData(ImageData) + if ContentHash is None: + return jsonify({"status": "error", "message": "Failed to process 3D data"}), 500 + + redis_controller.setex(f"Thumbnailer:UserImage:{AvatarHash}:3DThumbnail", 60 * 60 * 24 * 3, ContentHash) + ImageHash = ContentHash + except Exception as e: + logging.error(f"Error processing 3D avatar data: {str(e)}") + return jsonify({"status": "error", "message": f"Error processing 3D data: {str(e)}"}), 500 + else: + ImageHash = hashlib.sha512(ImageData).hexdigest() + s3helper.UploadBytesToS3(ImageData, ImageHash, contentType="image/png") + + if ThumbnailType == 0: + redis_controller.setex(f"Thumbnailer:UserImage:{AvatarHash}:Thumbnail", 60 * 60 * 24 * 3, ImageHash) + elif ThumbnailType == 1: + redis_controller.setex(f"Thumbnailer:UserImage:{AvatarHash}:Headshot", 60 * 60 * 24 * 3, ImageHash) + + UserThumbnailObject = UserThumbnail.query.filter_by(userid=UserId).first() + if UserThumbnailObject is None: + if ThumbnailType == 0: + if ThumbnailIs3D: + UserThumbnailObject = UserThumbnail( + userid=UserId, + full_contenthash=None, + headshot_contenthash=None, + full_3dcontenthash=ImageHash, + updated_at=datetime.utcnow() + ) + else: + UserThumbnailObject = UserThumbnail( + userid=UserId, + full_contenthash=ImageHash, + headshot_contenthash=None, + full_3dcontenthash=None, + updated_at=datetime.utcnow() + ) + else: + UserThumbnailObject = UserThumbnail( + userid=UserId, + headshot_contenthash=ImageHash, + full_contenthash=None, + full_3dcontenthash=None, + updated_at=datetime.utcnow() + ) + db.session.add(UserThumbnailObject) + else: + if ThumbnailType == 0: + if ThumbnailIs3D: + UserThumbnailObject.full_3dcontenthash = ImageHash + else: + UserThumbnailObject.full_contenthash = ImageHash + else: + UserThumbnailObject.headshot_contenthash = ImageHash + + UserThumbnailObject.updated_at = datetime.utcnow() + + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + return jsonify({"status": "success", "message": "Thumbnail updated"}), 200 \ No newline at end of file diff --git a/app/routes/usersapi.py b/app/routes/usersapi.py new file mode 100644 index 0000000..843ecb5 --- /dev/null +++ b/app/routes/usersapi.py @@ -0,0 +1,219 @@ +# users.roblox.com + +from flask import Blueprint, jsonify, request, make_response +from flask_wtf.csrf import CSRFError, generate_csrf +from app.extensions import db, redis_controller, limiter, csrf +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.past_usernames import PastUsername +from app.models.asset import Asset +from app.util import membership, auth +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType +from sqlalchemy import func + +UsersAPI = Blueprint('UsersAPI', __name__, url_prefix='/') +csrf.exempt(UsersAPI) +@UsersAPI.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@UsersAPI.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@UsersAPI.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + if request.path == "/v1/usernames/users" or request.path == "/v1/users": + return + csrf.protect() + +@UsersAPI.route('/v1/users/', methods=['GET']) +@limiter.limit("60/minute") +def get_user( userId : int ): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 3, "message": "The user id is invalid." } ] } ), 404 + + return jsonify({ + "description": userObject.description, + "created": userObject.created.isoformat(), + "isBanned": userObject.accountstatus != 1, + "externalAppDisplayName": userObject.username, + "hasVerifiedBadge": False, + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username, + }) + +@UsersAPI.route('/v1/users/authenticated', methods=['GET']) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_authenticated_user(): + AuthenticatedUser : User = auth.GetCurrentUser() + + return jsonify({ + "id": AuthenticatedUser.id, + "name": AuthenticatedUser.username, + "displayName": AuthenticatedUser.username, + }) + +@UsersAPI.route("/v1/users/authenticated/roles", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_authenticated_user_roles(): + return jsonify({ + "roles": [] + }), 200 + +@UsersAPI.route("/v1/usernames/users", methods=["POST"]) +@limiter.limit("60/minute") +def multi_username_lookup(): + if not request.is_json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if "usernames" not in request.json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if not isinstance(request.json["usernames"], list): + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + usernames = request.json["usernames"] + if len(usernames) > 100: + return jsonify( { "errors": [ { "code": 2, "message": "Too many usernames." } ] } ), 400 + + alreadySearchedUsernames = [] + data_result = [] + + for username in usernames: + username = str(username) + if username.lower() in alreadySearchedUsernames: + continue + + alreadySearchedUsernames.append(username.lower()) + + userObject : User = User.query.filter(func.lower(User.username) == username.lower()).first() + if userObject is not None: + data_result.append({ + "requestedUsername": username, + "hasVerifiedBadge": False, + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username + }) + + continue + + pastusernameLookup : PastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == username.lower()).first() + if pastusernameLookup is not None: + userObject : User = User.query.filter_by(id=pastusernameLookup.user_id).first() + if userObject is not None: + data_result.append({ + "requestedUsername": username, + "hasVerifiedBadge": False, + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username + }) + + continue + + return jsonify({ + "data": data_result + }), 200 + +@UsersAPI.route("/v1/users", methods=["POST"]) +@limiter.limit("60/minute") +def multi_user_lookup(): + if not request.is_json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if "userIds" not in request.json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if not isinstance(request.json["userIds"], list): + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + userIds = request.json["userIds"] + if len(userIds) > 100: + return jsonify( { "errors": [ { "code": 2, "message": "Too many usernames." } ] } ), 400 + + alreadySearchedUserIds = [] + data_result = [] + + for userId in userIds: + if type(userId) != int: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + if userId in alreadySearchedUserIds: + continue + + alreadySearchedUserIds.append(userId) + + userObject : User = User.query.filter_by(id=userId).first() + if userObject is not None: + data_result.append({ + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username, + "hasVerifiedBadge": False + }) + + continue + + return jsonify({ + "data": data_result + }), 200 + +@UsersAPI.route("/v1/users//username-history", methods=["GET"]) +@limiter.limit("60/minute") +def past_username_history_lookup( userId : int ): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 3, "message": "The user id is invalid." } ] } ), 404 + + cursorPage : int = request.args.get("cursor", default = 1, type = int) + if cursorPage < 1: + return jsonify( { "errors": [ { "code": 4, "message": "The specified cursor is invalid!" } ] } ), 400 + + pageLimit : int = request.args.get("limit", default = 10, type = int) + if pageLimit not in [10, 25, 50, 100]: + return jsonify( { "errors": [ { "code": 5, "message": "The specified limit is invalid!" } ] } ), 400 + + sortOrder : str = request.args.get("sortOrder", default = "Asc", type = str) + if sortOrder.lower() not in ["asc", "desc"]: + return jsonify( { "errors": [ { "code": 6, "message": "The specified sort order is invalid!" } ] } ), 400 + + pastUsernames = PastUsername.query.filter_by(user_id=userId).order_by( + PastUsername.id.desc() if sortOrder.lower() == "desc" else PastUsername.id.asc() + ).paginate(page=cursorPage, per_page=pageLimit, error_out=False) + + data_result = [] + for pastUsername in pastUsernames.items: + data_result.append({ + "name": pastUsername.username, + }) + + return jsonify({ + "previousPageCursor": str(pastUsernames.prev_num) if pastUsernames.has_prev else None, + "nextPageCursor": str(pastUsernames.next_num) if pastUsernames.has_next else None, + "data": data_result + }),200 \ No newline at end of file diff --git a/app/services/economy.py b/app/services/economy.py new file mode 100644 index 0000000..8fe1fae --- /dev/null +++ b/app/services/economy.py @@ -0,0 +1,270 @@ +from app.extensions import redis_controller, db +from app.util import redislock + +from app.models.usereconomy import UserEconomy +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.groups import Group, GroupEconomy +from app.models.asset import Asset +from app.models.asset_rap import AssetRap +from app.services.groups import GetGroupFromId, GetUserFromId + +import redis_lock +import math + +class InvalidCurrencyTypeException(Exception): + pass +class EconomyLockAcquireException(Exception): + pass +class InsufficientFundsException(Exception): + pass +class AssetNotLimitedException(Exception): + pass +class AssetDoesNotExistException(Exception): + pass + +def TaxCurrencyAmount( Amount : int ) -> int: + return math.floor( Amount * 0.7 ) + +def GetAssetFromId( assetid : int | Asset ) -> Asset | None: + """ + Returns the Asset object for the given assetid + """ + if isinstance(assetid, Asset): + return assetid + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + raise AssetDoesNotExistException("Asset does not exist") + return AssetObj + +def GetUserEconomyObj( TargetUser : User ) -> UserEconomy | None: + """ + Returns the UserEconomy object for the given user + """ + return UserEconomy.query.filter_by( userid=TargetUser.id ).first() + +def GetGroupEconomyObj( TargetGroup : Group ) -> GroupEconomy | None: + """ + Returns the GroupEconomy object for the given group + """ + return GroupEconomy.query.filter_by( group_id=TargetGroup.id ).first() + +def GetUserBalance( TargetUser : User ) -> tuple[int, int]: + """ + Returns the User's Robux and Tickets balance + """ + EconomyObj : UserEconomy = GetUserEconomyObj( TargetUser ) + return EconomyObj.robux, EconomyObj.tix + +def GetGroupBalance( TargetGroup : Group ) -> tuple[int, int]: + """ + Returns the Group's Robux and Tickets balance + """ + EconomyObj : GroupEconomy = GetGroupEconomyObj( TargetGroup ) + return EconomyObj.robux_balance, EconomyObj.tix_balance + +def UnsafeIncrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Increments the Target Balance ( Not Recommended for normal use please instead use IncrementTargetBalance) + """ + if isinstance(Target, User): + TargetEconomyObj : UserEconomy = GetUserEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux += Amount + elif CurrencyType == 1: + TargetEconomyObj.tix += Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + elif isinstance(Target, Group): + TargetEconomyObj : GroupEconomy = GetGroupEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux_balance += Amount + elif CurrencyType == 1: + TargetEconomyObj.tix_balance += Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + else: + raise TypeError("Invalid Target Type") + +def UnsafeDecrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Decrements the Target Balance ( Not Recommended for normal use please instead use DecrementTargetBalance) + """ + if isinstance(Target, User): + TargetEconomyObj : UserEconomy = GetUserEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux -= Amount + elif CurrencyType == 1: + TargetEconomyObj.tix -= Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + elif isinstance(Target, Group): + TargetEconomyObj : GroupEconomy = GetGroupEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux_balance -= Amount + elif CurrencyType == 1: + TargetEconomyObj.tix_balance -= Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + else: + raise TypeError("Invalid Target Type") + +def IncrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Increments the Target Balance + """ + if Amount < 0: + raise ValueError("Amount must be positive") + if isinstance(Target, User): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy:{Target.id}", expire = 1, auto_renewal = True ): + UnsafeIncrementTargetBalance( Target, Amount, CurrencyType ) + return + elif isinstance(Target, Group): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy_group:{Target.id}", expire = 1, auto_renewal = True ): + UnsafeIncrementTargetBalance( Target, Amount, CurrencyType ) + return + else: + raise TypeError("Invalid Target Type") + +def DecrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Decrements the Target Balance + """ + if Amount < 0: + raise ValueError("Amount must be positive") + if isinstance(Target, User): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy:{Target.id}", expire = 1, auto_renewal = True ): + TargetEconomyObj : UserEconomy = GetUserEconomyObj( Target ) + if CurrencyType == 0: + if TargetEconomyObj.robux < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if TargetEconomyObj.tix < Amount: + raise InsufficientFundsException("Insufficient Funds") + UnsafeDecrementTargetBalance( Target, Amount, CurrencyType ) + return + elif isinstance(Target, Group): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy_group:{Target.id}", expire = 1, auto_renewal = True ): + TargetEconomyObj : GroupEconomy = GroupEconomy.query.filter_by( group_id=Target.id ).first() + if CurrencyType == 0: + if TargetEconomyObj.robux_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if TargetEconomyObj.tix_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + UnsafeDecrementTargetBalance( Target, Amount, CurrencyType ) + return + else: + raise TypeError("Invalid Target Type") + +def TransferFunds( Source : User | Group, Target : User | Group, Amount : int, CurrencyType : int, ApplyTax : bool = False): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Transfers funds from the source to the target + """ + + if Amount < 0: + raise ValueError("Amount must be positive") + if Source == Target: + raise ValueError("Source and Target must be different") + if CurrencyType not in [0,1]: + raise InvalidCurrencyTypeException("Invalid Currency Type") + if isinstance(Source, User): + SourceEconomyObj : UserEconomy = GetUserEconomyObj( Source ) + if CurrencyType == 0: + if SourceEconomyObj.robux < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if SourceEconomyObj.tix < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif isinstance(Source, Group): + SourceEconomyObj : GroupEconomy = GroupEconomy.query.filter_by( group_id=Source.id ).first() + if CurrencyType == 0: + if SourceEconomyObj.robux_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if SourceEconomyObj.tix_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + else: + raise TypeError("Invalid Source Type") + + TakenAmount : int = Amount + GivenAmount : int = Amount + if ApplyTax: + GivenAmount = TaxCurrencyAmount( Amount ) + try: + DecrementTargetBalance( Source, TakenAmount, CurrencyType ) + except InsufficientFundsException: + raise InsufficientFundsException("Insufficient Funds") + IncrementTargetBalance( Target, GivenAmount, CurrencyType ) + + return + +def AdjustAssetRap(AssetObj : Asset | int, robux : int): + """ Adjusts the RAP of an asset + https://roblox.fandom.com/wiki/Recent_Average_Price + This will only work with assets that are limited + """ + AssetObj : Asset = GetAssetFromId(AssetObj) + + AssetRapObject : AssetRap = AssetRap.query.filter_by(assetid=AssetObj.id).first() + if AssetRapObject is None: + if not AssetObj.is_limited: + raise AssetNotLimitedException("Asset is not limited") + AssetRapObject = AssetRap(assetid=AssetObj.id, rap=robux) + db.session.add(AssetRapObject) + db.session.commit() + return True + if AssetRapObject.rap <= 0: + AssetRapObject.rap = robux + CurrentRAP = AssetRapObject.rap + AssetRapObject.rap = math.floor(CurrentRAP - ( CurrentRAP - robux ) / 10) + db.session.commit() + return True + +def GetAssetRap(AssetObj : Asset | int ) -> int: + """ + Returns the RAP of an asset + """ + AssetObj : Asset = GetAssetFromId(AssetObj) + if not AssetObj.is_limited: + raise AssetNotLimitedException("Asset is not limited") + + AssetRapObject : AssetRap = AssetRap.query.filter_by(assetid=AssetObj.id).first() + if AssetRapObject is None: + AssetRapObject = AssetRap(assetid=AssetObj.id, rap=0) + db.session.add(AssetRapObject) + db.session.commit() + return AssetRapObject.rap + +def GetCreatorOfAsset( AssetObj : Asset | int ) -> User | Group | None: + """ + Returns the creator of an asset + """ + AssetObj : Asset = GetAssetFromId(AssetObj) + if AssetObj.creator_type == 1: + return GetGroupFromId(AssetObj.creator_id) + elif AssetObj.creator_type == 0: + return GetUserFromId(AssetObj.creator_id) + else: + return None + +def CalculateUserRAP( UserObj : User | int, skipCache : bool = False ) -> int: + """ + Calculates the RAP of a user + """ + if redis_controller.exists(f"rap_calculation:{UserObj.id}") and not skipCache: + return int(redis_controller.get(f"rap_calculation:{UserObj.id}")) + + UserObj : User = GetUserFromId(UserObj) + UserRAP : int = 0 + UserLimitedAssets : list[UserAsset] = UserAsset.query.filter_by(userid=UserObj.id).outerjoin( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).all() + + for UserLimitedAsset in UserLimitedAssets: + UserRAP += GetAssetRap(UserLimitedAsset.assetid) + + redis_controller.set(f"rap_calculation:{UserObj.id}", UserRAP, ex = 60) + return UserRAP \ No newline at end of file diff --git a/app/services/gameserver_comm.py b/app/services/gameserver_comm.py new file mode 100644 index 0000000..a0b451b --- /dev/null +++ b/app/services/gameserver_comm.py @@ -0,0 +1,117 @@ +import requests +import time +import base64 +import json + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import padding + +from app.models.gameservers import GameServer + +from config import Config + +config = Config() + +def sign_content( content : bytes ) -> str: + """ + Signs the given content using the gameserver private key + + :param content: The content to sign + + :returns: str + """ + assert isinstance( content, bytes ), "content must be a bytes object" + + with open( config.GAMESERVER_COMM_PRIVATE_KEY_LOCATION, "rb" ) as f: + private_key = serialization.load_pem_private_key( + f.read(), + password=None, + backend=default_backend() + ) + + signature = private_key.sign( + content, + padding.PKCS1v15(), + hashes.SHA256() + ) + + return base64.b64encode( signature ).decode( "utf-8" ) + +def perform_get( + TargetGameserver : GameServer, + Endpoint : str, + AdditionalHeaders : dict = {}, + + RequestTimeout : int = 10 +) -> requests.Response: + """ + Performs a GET request to the given gameserver + + :param TargetGameserver: The gameserver to send the request to + :param Endpoint: The endpoint to send the request to + :param AdditionalHeaders: Additional headers to send with the request + :param RequestTimeout: The amount of time before the request times out + + :returns: requests.Response + """ + assert isinstance( TargetGameserver, GameServer ), "TargetGameserver must be an instance of GameServer" + assert isinstance( Endpoint, str ), "Endpoint must be a string" + assert isinstance( AdditionalHeaders, dict ), "AdditionalHeaders must be a dictionary" + + RequestTimestamp = time.time() + signed_content = sign_content( f'{RequestTimestamp}\nGET'.encode( 'utf-8' ) ) + ReqSignature = f"{str(RequestTimestamp)}|{ signed_content }" + + headers = { + "User-Agent": "SYNTAX-Gameserver-Communication/1.0", + "X-Syntax-Request-Signature": ReqSignature + } + + return requests.get( + url = f"http://{TargetGameserver.serverIP}:{TargetGameserver.serverPort}/{Endpoint}", + headers = headers, + timeout = RequestTimeout + ) + +def perform_post( + TargetGameserver : GameServer, + Endpoint : str, + JSONData : dict | list = {}, + AdditionalHeaders : dict = {}, + + RequestTimeout : int = 10 +) -> requests.Response: + """ + Performs a POST request to the given gameserver + + :param TargetGameserver: The gameserver to send the request to + :param Endpoint: The endpoint to send the request to + :param JSONData: The JSON data to send with the request + :param AdditionalHeaders: Additional headers to send with the request + :param RequestTimeout: The amount of time before the request times out + + :returns: requests.Response + """ + assert isinstance( TargetGameserver, GameServer ), "TargetGameserver must be an instance of GameServer" + assert isinstance( Endpoint, str ), "Endpoint must be a string" + assert isinstance( JSONData, ( dict, list ) ), "JSONData must be a dictionary or list" + assert isinstance( AdditionalHeaders, dict ), "AdditionalHeaders must be a dictionary" + + RequestTimestamp = time.time() + signed_content = sign_content( f"{RequestTimestamp}\nPOST\n{json.dumps(JSONData)}".encode( "utf-8" )) + ReqSignature = f"{str(RequestTimestamp)}|{signed_content}" + + headers = { + "User-Agent": "SYNTAX-Gameserver-Communication/1.0", + "X-Syntax-Request-Signature": ReqSignature, + "Content-Type": "application/json" + } + headers.update( AdditionalHeaders ) + + return requests.post( + url = f"http://{TargetGameserver.serverIP}:{TargetGameserver.serverPort}/{Endpoint}", + headers = headers, + data = json.dumps( JSONData ), + timeout = RequestTimeout + ) \ No newline at end of file diff --git a/app/services/groups.py b/app/services/groups.py new file mode 100644 index 0000000..600fae2 --- /dev/null +++ b/app/services/groups.py @@ -0,0 +1,690 @@ +import logging + +from app.extensions import db, redis_controller +from app.util import redislock + +from app.models.user import User +from app.models.groups import Group, GroupIcon, GroupSettings, GroupRole, GroupRolePermission, GroupMember, GroupEconomy, GroupJoinRequest, GroupStatus, GroupWallPost + +class GroupExceptions: + class RolesetDoesNotExist(Exception): + pass + class GroupDoesNotExist(Exception): + pass + class UserDoesNotExist(Exception): + pass + class RolesetNameNotUnique(Exception): + pass + class InvalidRankNumber(Exception): + pass + class UserNotInGroup(Exception): + pass + class UserAlreadyInsideGroup(Exception): + pass + class CorruptedGroup(Exception): + pass + class GroupNameAlreadyTaken(Exception): + pass + class GroupNameNotAllowed(Exception): + pass + class InsufficientPermssions(Exception): + pass + +class UserGroupEntry: + group_id : int = 0 + group_name : str = "" + group_description : str = "" + group_owner_id : int = 0 + + group_member_count : int = 0 + + user_rank : int = 0 + user_roleset : GroupRole | None = None + + def __init__(self, Group : Group, UserRoleset : GroupRole | None): + self.group_id = Group.id + self.group_name = Group.name + self.group_description = Group.description + self.group_owner_id = Group.owner_id + + self.user_rank = UserRoleset.rank + self.user_roleset = UserRoleset + + self.group_member_count = GetGroupMemberCount(Group) + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise GroupExceptions.UserDoesNotExist("User does not exist.") + return TargetUser + +def GetRolesetFromId( Role : GroupRole | int ) -> GroupRole | None: + """ + Returns a GroupRole object from a GroupRole ID. + """ + if isinstance(Role, GroupRole): + return Role + else: + TargetGroupRole : GroupRole | None = GroupRole.query.filter_by(id=Role).first() + if TargetGroupRole is None: + raise GroupExceptions.RolesetDoesNotExist("Roleset does not exist.") + return TargetGroupRole + +def GetGroupFromId( GroupObj : Group | int ) -> Group | None: + """ + Returns a Group object from a Group ID. + """ + if isinstance(GroupObj, Group): + return GroupObj + else: + TargetGroup : Group | None = Group.query.filter_by(id=GroupObj).first() + if TargetGroup is None: + raise GroupExceptions.GroupDoesNotExist("Group does not exist.") + return TargetGroup + +def RefreshRolesetCount( Role : GroupRole | int ) -> int: + """ + Recounts the amount of users in a GroupRole and updates the database. + then returns the amount of users in the role. + """ + Role : GroupRole | None = GetRolesetFromId(Role) + + TotalMembers : int = GroupMember.query.filter_by(group_id=Role.group_id, group_role_id=Role.id).count() + Role.member_count = TotalMembers + db.session.commit() + + return TotalMembers + +def GetGroupMemberCount( Group : Group | int ) -> int: + """ + Returns the amount of members in a group. + """ + Group : Group | None = GetGroupFromId(Group) + TotalMembers : int = 0 + for Role in GroupRole.query.filter_by(group_id=Group.id).all(): + TotalMembers += Role.member_count + + return TotalMembers + +def GetUserRankInGroup( TargetUser : User | int, TargetGroup : Group | int ) -> int: + """ + Returns a integer between 0-255 representing the user rank in the group. + 0 - Guest ( Not in the group ) + 1 - 244 - Custom ranks + 255 - Group Owner + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + UserGroupMembership : GroupMember | None = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if UserGroupMembership is None: + return 0 # Guest + try: + UserAssignedRoleset : GroupRole = GetRolesetFromId(UserGroupMembership.group_role_id) + except GroupExceptions.RolesetDoesNotExist: + logging.warn(f"User {TargetUser.id} is in group {TargetGroup.id} but the roleset {UserGroupMembership.group_role_id} does not exist.") + return 0 # Weird edge case where the user is in the group but the roleset doesn't exist + return UserAssignedRoleset.rank + +def GetUserRolesetInGroup( TargetUser : User | int, TargetGroup : Group | int ) -> GroupRole | None: + """ + Returns a GroupRole object representing the user's roleset in the group. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + UserGroupMembership : GroupMember | None = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if UserGroupMembership is None: + GuestRoleset : GroupRole | None = GroupRole.query.filter_by(group_id=TargetGroup.id, rank=0).first() + if GuestRoleset is None: + raise GroupExceptions.CorruptedGroup("Group has no guest roleset.") + return GuestRoleset + try: + UserAssignedRoleset : GroupRole = GetRolesetFromId(UserGroupMembership.group_role_id) + except GroupExceptions.RolesetDoesNotExist: + logging.warn(f"User {TargetUser.id} is in group {TargetGroup.id} but the roleset {UserGroupMembership.group_role_id} does not exist.") + return None + return UserAssignedRoleset + +def GetUserGroups( TargetUser : User | int ) -> list[UserGroupEntry]: + """ + Returns a list of UserGroupEntry objects representing the user's groups. + """ + TargetUser : User = GetUserFromId(TargetUser) + + UserGroups : list[UserGroupEntry] = [] + for UserGroupMembership in GroupMember.query.filter_by(user_id=TargetUser.id).all(): + try: + UserAssignedRoleset : GroupRole = GetRolesetFromId(UserGroupMembership.group_role_id) + except GroupExceptions.RolesetDoesNotExist: + logging.warn(f"User {TargetUser.id} is in group {UserGroupMembership.group_id} but the roleset {UserGroupMembership.group_role_id} does not exist.") + continue + GroupObj : Group = GetGroupFromId(UserGroupMembership.group_id) + UserGroups.append(UserGroupEntry( + Group=GroupObj, + UserRoleset=UserAssignedRoleset + )) + return UserGroups + +def GetGroupRolesets( TargetGroup : Group | int ) -> list[GroupRole]: + """ + Returns a list of GroupRole objects representing the group's rolesets. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + + return GroupRole.query.filter_by(group_id=TargetGroup.id).order_by(GroupRole.rank.asc()).all() + +def CreateGroupRoleset( TargetGroup : Group | int, Name : str, Description : str, Rank : int ) -> GroupRole: + """ + Creates a new roleset in the group and returns the GroupRole object. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + if GroupRole.query.filter_by(group_id=TargetGroup.id, name=Name).first() is not None: + raise GroupExceptions.RolesetNameNotUnique("A roleset with that name already exists.") + if Rank < 0 or Rank > 255: + raise GroupExceptions.InvalidRankNumber("Rank must be between 0 and 255.") + if len(Name) > 255: + raise ValueError("Name must be less than 255 characters.") + if len(Description) > 255: + raise ValueError("Description must be less than 255 characters.") + + NewRoleset : GroupRole = GroupRole( + group_id=TargetGroup.id, + name=Name, + description=Description, + rank=Rank, + member_count=0 + ) + db.session.add(NewRoleset) + db.session.commit() + + RolesetPermission : GroupRolePermission = GroupRolePermission( + group_role_id=NewRoleset.id + ) + RolesetPermission.view_status = True + db.session.add(RolesetPermission) + db.session.commit() + + return NewRoleset + +def ChangeUserRole( TargetUser : User | int , TargetRoleset : GroupRole | int ) -> None: + """ + Changes the user's roleset in the group if possible. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetRoleset : GroupRole = GetRolesetFromId(TargetRoleset) + TargetGroup : Group = GetGroupFromId(TargetRoleset.group_id) + + if GetUserRankInGroup(TargetUser, TargetRoleset.group_id) == 0: + raise GroupExceptions.UserNotInGroup("User is not in the group.") + + if GetUserRolesetInGroup(TargetUser, TargetRoleset.group_id) == TargetRoleset: + return + + if TargetGroup.owner_id == TargetUser.id and TargetRoleset.rank != 255: + raise ValueError("Cannot change the owner's roleset.") + + UserGroupMembership : GroupMember = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + OldRolesetId : int = UserGroupMembership.group_role.id + UserGroupMembership.group_role_id = TargetRoleset.id + db.session.commit() + RefreshRolesetCount(OldRolesetId) + RefreshRolesetCount(TargetRoleset.id) + + return + +def AddUserToGroup( TargetUser : User | int , TargetGroup : Group | int, ForceJoin : bool = False ) -> GroupMember | GroupJoinRequest | None: + """ + Adds the user to the group if possible. + ForceJoin : bool ( If the group requires manual approval, this will bypass it. ) + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + if GetUserRankInGroup(TargetUser, TargetGroup) != 0: + raise GroupExceptions.UserAlreadyInsideGroup("User is already in the group.") + + TargetGroupSettings : GroupSettings | None = GroupSettings.query.filter_by(group_id=TargetGroup.id).first() + if TargetGroupSettings is None: + raise ValueError("Group settings do not exist.") + if TargetGroupSettings.approval_required and not ForceJoin: + ExisitingJoinRequest : GroupJoinRequest | None = GroupJoinRequest.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if ExisitingJoinRequest is not None: + return ExisitingJoinRequest + NewJoinRequest : GroupJoinRequest = GroupJoinRequest( + user_id=TargetUser.id, + group_id=TargetGroup.id + ) + db.session.add(NewJoinRequest) + db.session.commit() + return GroupJoinRequest + + LowestRankRoleset : GroupRole | None = GroupRole.query.filter_by(group_id=TargetGroup.id).filter(GroupRole.rank > 0).order_by(GroupRole.rank.asc()).first() + if LowestRankRoleset is None: + raise GroupExceptions.CorruptedGroup("Group has no rolesets.") + if LowestRankRoleset.rank == 255: + raise GroupExceptions.CorruptedGroup("Group has no member roleset.") + + NewGroupMember : GroupMember = GroupMember( + user_id=TargetUser.id, + group_id=TargetGroup.id, + group_role_id=LowestRankRoleset.id + ) + + db.session.add(NewGroupMember) + db.session.commit() + + RefreshRolesetCount(LowestRankRoleset) + + return NewGroupMember + +def GetJoinRequest( TargetUser : User | int, TargetGroup : Group | int ) -> GroupJoinRequest | None: + """ + Returns a GroupJoinRequest object from a user and group. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + return GroupJoinRequest.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + +def AcceptJoinRequest( TargetUser : User | int, TargetGroup : Group | int ) -> GroupMember | None: + """ + Accepts the user's join request. + """ + ExisitingJoinRequest : GroupJoinRequest | None = GroupJoinRequest.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if ExisitingJoinRequest is None: + raise ValueError("Join request does not exist.") + db.session.delete(ExisitingJoinRequest) + db.session.commit() + return AddUserToGroup(TargetUser, TargetGroup, ForceJoin=True) + +def GetRolesetPermission( GroupRoleset : GroupRole | int ) -> GroupRolePermission: + """ + Returns a GroupRolePermission object from a GroupRole. + """ + GroupRoleset : GroupRole = GetRolesetFromId(GroupRoleset) + RolesetPermission : GroupRolePermission | None = GroupRolePermission.query.filter_by(group_role_id=GroupRoleset.id).first() + if RolesetPermission is None: + RolesetPermission : GroupRolePermission = GroupRolePermission( + group_role_id=GroupRoleset.id + ) + db.session.add(RolesetPermission) + db.session.commit() + return RolesetPermission + +def ModifyRolesetPermission( + GroupRoleset : GroupRole, + DeleteFromWall : bool = None, + PostToWall : bool = None, + InviteMembers : bool = None, + PostToStatus : bool = None, + RemoveMembers : bool = None, + ViewStatus : bool = None, + ViewWall : bool = None, + ChangeRank : bool = None, + AdvertiseGroup : bool = None, + ManageRelationships : bool = None, + AddGroupPlaces : bool = None, + ViewAuditLogs : bool = None, + CreateItems : bool = None, + ManageItems : bool = None, + SpendGroupFunds : bool = None, + ManageClan : bool = None, + ManageGroupGames : bool = None + ) -> None: + """ + Modifies the roleset's permissions. + """ + RolesetPermission : GroupRolePermission = GetRolesetPermission(GroupRoleset) + + if DeleteFromWall is not None: + RolesetPermission.delete_from_wall = DeleteFromWall + if PostToWall is not None: + RolesetPermission.post_to_wall = PostToWall + if InviteMembers is not None: + RolesetPermission.invite_members = InviteMembers + if PostToStatus is not None: + RolesetPermission.post_to_status = PostToStatus + if RemoveMembers is not None: + RolesetPermission.remove_members = RemoveMembers + if ViewStatus is not None: + RolesetPermission.view_status = ViewStatus + if ViewWall is not None: + RolesetPermission.view_wall = ViewWall + if ChangeRank is not None: + RolesetPermission.change_rank = ChangeRank + if AdvertiseGroup is not None: + RolesetPermission.advertise_group = AdvertiseGroup + if ManageRelationships is not None: + RolesetPermission.manage_relationships = ManageRelationships + if AddGroupPlaces is not None: + RolesetPermission.add_group_places = AddGroupPlaces + if ViewAuditLogs is not None: + RolesetPermission.view_audit_logs = ViewAuditLogs + if CreateItems is not None: + RolesetPermission.create_items = CreateItems + if ManageItems is not None: + RolesetPermission.manage_items = ManageItems + if SpendGroupFunds is not None: + RolesetPermission.spend_group_funds = SpendGroupFunds + if ManageClan is not None: + RolesetPermission.manage_clan = ManageClan + if ManageGroupGames is not None: + RolesetPermission.manage_group_games = ManageGroupGames + + db.session.commit() + return + +from app.util.textfilter import FilterText, TextNotAllowedException +from sqlalchemy import func + +def SearchGroupByName( GroupName : str ) -> Group | None : + """ + Returns a Group object from a group name. + """ + GroupName = GroupName.lower() + return Group.query.filter(func.lower(Group.name) == GroupName).first() + +def isGroupNameAllowed( GroupName : str ) -> bool: + """ + Returns True if the group name is allowed. + """ + if len(GroupName) > 255: + return False + if len(GroupName) < 3: + return False + + AlphanumericCharacters : int = 0 + for Character in GroupName: + if Character.isalnum(): + AlphanumericCharacters += 1 + if AlphanumericCharacters < 3: + return False + try: + FilterText( Text = GroupName, ThrowException = True) + except TextNotAllowedException: + return False + return True + +def AssertUserHasPermission( TargetUser : User | int, TargetGroup : Group | int, Permission ) -> None: # Permission should be like GroupRolePermission.post_to_status + """ + Raises an exception if the user does not have the permission. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + UserRoleset : GroupRole | None = GetUserRolesetInGroup(TargetUser, TargetGroup) + if UserRoleset is None: + raise GroupExceptions.CorruptedGroup("Group does not have a guest roleset.") + RolesetPermission : GroupRolePermission = GetRolesetPermission(UserRoleset) + + if not getattr(RolesetPermission, Permission.name): + raise GroupExceptions.InsufficientPermssions("User does not have permission.") + return + + +def CreateGroup( GroupName : str, GroupDescription : str, GroupOwner : User | int, GroupIconContentHash : str ) -> Group | None : + """ + Creates a new group and returns the Group object. + """ + + CreateLock = redislock.acquire_lock("group_creation_lock", 30, 5) + if not CreateLock: + raise ValueError("Failed to acquire global creation lock.") + + if SearchGroupByName(GroupName) is not None: + redislock.release_lock("group_creation_lock", CreateLock) + raise GroupExceptions.GroupNameAlreadyTaken("Group name is already taken.") + + if isGroupNameAllowed(GroupName) is False: + redislock.release_lock("group_creation_lock", CreateLock) + raise GroupExceptions.GroupNameNotAllowed("Group name is not allowed.") + if len(GroupDescription) > 1024: + redislock.release_lock("group_creation_lock", CreateLock) + raise ValueError("Group description must be less than 1024 characters.") + GroupOwner : User = GetUserFromId(GroupOwner) + + NewGroup : Group = Group( + name=GroupName, + description=GroupDescription, + owner_id=GroupOwner.id + ) + db.session.add(NewGroup) + db.session.commit() + redislock.release_lock("group_creation_lock", CreateLock) + NewGroupSettings : GroupSettings = GroupSettings( + group_id=NewGroup.id + ) + db.session.add(NewGroupSettings) + + NewGroupIcon : GroupIcon = GroupIcon( + group_id=NewGroup.id, + content_hash=GroupIconContentHash, + moderation_status=1, + creator_id=GroupOwner.id + ) + db.session.add(NewGroupIcon) + + NewGroupEconomy : GroupEconomy = GroupEconomy( + group_id=NewGroup.id + ) + db.session.add(NewGroupEconomy) + db.session.commit() + + GuestGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Guest", + Description="A non-group member.", + Rank=0 + ) + ModifyRolesetPermission(GuestGroupRoleset, ViewStatus=True, ViewWall=True) + MemberGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Member", + Description="A regular group member.", + Rank=1 + ) + ModifyRolesetPermission(MemberGroupRoleset, ViewStatus=True, ViewWall=True, PostToWall=True) + AdminGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Admin", + Description="A group administrator.", + Rank=254 + ) + ModifyRolesetPermission(AdminGroupRoleset, ViewStatus=True, ViewWall=True, PostToWall=True) + OwnerGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Owner", + Description="The group's owner.", + Rank=255 + ) + ModifyRolesetPermission( + OwnerGroupRoleset, + DeleteFromWall=True, + PostToWall=True, + InviteMembers=True, + PostToStatus=True, + RemoveMembers=True, + ViewStatus=True, + ViewWall=True, + ChangeRank=True, + AdvertiseGroup=True, + ManageRelationships=True, + AddGroupPlaces=True, + ViewAuditLogs=True, + CreateItems=True, + ManageItems=True, + SpendGroupFunds=True, + ManageClan=True, + ManageGroupGames=True + ) + + AddUserToGroup(GroupOwner, NewGroup, ForceJoin=True) + ChangeUserRole(GroupOwner, OwnerGroupRoleset) + + return NewGroup + +def PostToGroupStatus( Poster : User | int, TargetGroup : Group | int, StatusMessage : str, ForcePost : bool = False ) -> GroupStatus: + """ + Posts a status to the group. + ForcePost : bool ( If True this function will not check for the user permissions. ) + """ + Poster : User = GetUserFromId(Poster) + TargetGroup : Group = GetGroupFromId(TargetGroup) + if not ForcePost: + AssertUserHasPermission(Poster, TargetGroup, GroupRolePermission.post_to_status) + + FilteredMessage : str = FilterText(Text=StatusMessage) + if len(FilteredMessage) > 1024: + raise ValueError("Status message must be less than 1024 characters.") + NewStatus : GroupStatus = GroupStatus( + group_id=TargetGroup.id, + poster_id=Poster.id, + content=FilteredMessage + ) + db.session.add(NewStatus) + db.session.commit() + + return NewStatus + +def PostToGroupWall( Poster : User | int, TargetGroup : Group | int, WallMessage : str, ForcePost : bool = False ) -> GroupWallPost: + """ + Posts a message to the group wall. + ForcePost : bool ( If True this function will not check for the user permissions. ) + """ + Poster : User = GetUserFromId(Poster) + TargetGroup : Group = GetGroupFromId(TargetGroup) + if not ForcePost: + AssertUserHasPermission(Poster, TargetGroup, GroupRolePermission.post_to_wall) + + FilteredMessage : str = FilterText(Text=WallMessage) + if len(FilteredMessage) > 1024: + raise ValueError("Wall message must be less than 1024 characters.") + NewWallPost : GroupWallPost = GroupWallPost( + group_id=TargetGroup.id, + poster_id=Poster.id, + content=FilteredMessage + ) + db.session.add(NewWallPost) + db.session.commit() + + return NewWallPost + +def GetGroupWallPosts( TargetGroup : Group | int, Page : int = 1, PerPage : int= 10 ) -> list[GroupWallPost]: + """ + Returns a list of GroupWallPost objects representing the group's wall posts. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + + return GroupWallPost.query.filter_by(group_id=TargetGroup.id).order_by(GroupWallPost.created_at.desc()).paginate(Page, PerPage, False).items + +def RemoveUserFromGroup( TargetUser : User | int, TargetGroup : Group | int, AllowOwnerRemove : bool = False ) -> bool: + """ + Removes the user from the group. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + if GetUserRankInGroup(TargetUser, TargetGroup.id) == 0: + raise GroupExceptions.UserNotInGroup("User is not in the group.") + + if TargetGroup.owner_id == TargetUser.id and not AllowOwnerRemove: + raise ValueError("Cannot remove the owner from the group.") + + if TargetGroup.owner_id == TargetUser.id: + TargetGroup.owner_id = None + + UserGroupMembership : GroupMember = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + OldRolesetId : int = UserGroupMembership.group_role.id + db.session.delete(UserGroupMembership) + db.session.commit() + + RefreshRolesetCount(OldRolesetId) + + return True + +def isGroupNameAllowed( GroupName : str ) -> tuple[bool, str]: + """ + Returns True if the group name is allowed. + If not it returns a bool and a string which is the reason why its not allowed + """ + if len(GroupName) > 50: + return False, "Group name must be less than 40 characters." + if len(GroupName) < 3: + return False, "Group name must be more than 3 characters." + + AlphanumericCharacters : int = 0 + for Character in GroupName: + if Character.isalnum(): + AlphanumericCharacters += 1 + if AlphanumericCharacters < 3: + return False, "Group name must contain at least 3 alphanumeric characters." + try: + FilterText( Text = GroupName, ThrowException = True) + except TextNotAllowedException: + return False, "Group name is not allowed." + return True, "" + +def DeleteGroupWallPost( TargetPost : GroupWallPost, Remover : User | int, ForceDelete : bool = False ) -> None: + """ + Deletes a group wall post. + ForceDelete : bool ( If True this function will not check for the user permissions. ) + """ + TargetPost : GroupWallPost = TargetPost + Remover : User = GetUserFromId(Remover) + TargetGroup : Group = GetGroupFromId(TargetPost.group_id) + if not ForceDelete: + AssertUserHasPermission(Remover, TargetGroup, GroupRolePermission.delete_from_wall) + + db.session.delete(TargetPost) + db.session.commit() + return + +def GetLatestGroupStatus( TargetGroup : Group | int, ignoreEmpty : bool = True ) -> GroupWallPost | None: + """ + Returns the latest group status. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + + LatestGroupStatusPost : GroupStatus | None = GroupStatus.query.filter_by(group_id=TargetGroup.id).order_by(GroupStatus.created_at.desc()).first() + if LatestGroupStatusPost is None: + return None + if ignoreEmpty and LatestGroupStatusPost.content == "": + return None + return LatestGroupStatusPost + +def SetNewGroupIcon( TargetGroup : Group | int, NewIconHash : str, Uploader : User | int ) -> GroupIcon: + """ + Sets a new group icon. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + Uploader : User = GetUserFromId(Uploader) + + if TargetGroup.icon is not None: + db.session.delete(TargetGroup.icon) + db.session.commit() + + NewGroupIcon : GroupIcon = GroupIcon( + group_id=TargetGroup.id, + content_hash=NewIconHash, + moderation_status=1, + creator_id=Uploader.id + ) + db.session.add(NewGroupIcon) + db.session.commit() + + return NewGroupIcon + +def GetUserGroupCount( UserObj : User | int ) -> int: + """ + Gets the amount of groups a user is in. + """ + UserObj : User = GetUserFromId(UserObj) + + return GroupMember.query.filter_by(user_id=UserObj.id).count() \ No newline at end of file diff --git a/app/services/invitekeys.py b/app/services/invitekeys.py new file mode 100644 index 0000000..5b57bde --- /dev/null +++ b/app/services/invitekeys.py @@ -0,0 +1,70 @@ +import random +import string +import uuid +from datetime import datetime +from app.extensions import db + +from app.models.invite_key import InviteKey +from app.models.user import User + +class InviteExceptions: + class InvalidInviteKey(Exception): + pass + class UserDoesNotExist(Exception): + pass + class InviteKeyAlreadyUsed(Exception): + pass + +def _GenerateInviteKey() -> str: + """ + Returns a randomly generated invite key + """ + RandomUUID = str(uuid.uuid4()) + invite_key = "nexium" + RandomUUID[6:] + InviteKeyObj : InviteKey = InviteKey.query.filter_by(key=invite_key).first() + if InviteKeyObj is not None: + return _GenerateInviteKey() + return invite_key + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise InviteExceptions.UserDoesNotExist("User does not exist.") + return TargetUser + +def GetInviteKey( key : str ) -> InviteKey: + InviteKeyObj : InviteKey = InviteKey.query.filter_by(key=key).first() + if InviteKeyObj is None: + raise InviteExceptions.InvalidInviteKey() + return InviteKeyObj + +def UseInviteKey( key : str, user : User ) -> InviteKey: + InviteKeyObj : InviteKey = GetInviteKey(key) + if InviteKeyObj.used_by is not None: + raise InviteExceptions.InviteKeyAlreadyUsed() + InviteKeyObj.used_by = user.id + InviteKeyObj.used_on = datetime.utcnow() + db.session.add(InviteKeyObj) + db.session.commit() + return InviteKeyObj + +def CreateInviteKey( creator : User | int | None ) -> InviteKey: + """ + Create a new invite key. + """ + if creator is not None: + creator = GetUserFromId(creator) + invite_key = _GenerateInviteKey() + InviteKeyObj = InviteKey( + key = invite_key, + created_by = creator.id if creator is not None else None + ) + db.session.add(InviteKeyObj) + db.session.commit() + return InviteKeyObj \ No newline at end of file diff --git a/app/services/proxydetection.py b/app/services/proxydetection.py new file mode 100644 index 0000000..32895e6 --- /dev/null +++ b/app/services/proxydetection.py @@ -0,0 +1,82 @@ +import requests +import logging +import json +from app.extensions import redis_controller +from app import Config + +config = Config() + +class IPHubQueryFailed(Exception): + pass +class IPHubRateLimited(Exception): + pass + +def lookup_address_info( address : str, skip_cache : bool = False, lookup_timeout : int = 10 ) -> dict: + if not skip_cache: + try: + CachedResponse : str = redis_controller.get(f"iphub_lookup_{address}") + if CachedResponse is not None: + return json.loads(CachedResponse) + except Exception as e: + logging.error(f"lookup_address_info : IPHub cache lookup failed: {e}") + redis_controller.delete(f"iphub_lookup_{address}") + try: + LookupResponse : requests.Response = requests.get( + f"https://api.ipapi.is/?q={address}&key={config.IPAPI_AUTH_KEY}", # We NEED to put this in env (and not hardcode it) + headers = { }, + timeout = lookup_timeout + ) + if LookupResponse.status_code == 403 or LookupResponse.status_code == 429: + logging.error("lookup_address_info : IPHub rate limited") + raise IPHubRateLimited("IPHub rate limited") + elif LookupResponse.status_code != 200: + logging.error(f"lookup_address_info : IPHub query failed: {LookupResponse.status_code} {LookupResponse.text}") + raise IPHubQueryFailed(f"IPHub query failed: {LookupResponse.status_code} {LookupResponse.text}") + + LookupResponseJSON : dict = LookupResponse.json() + redis_controller.setex( + name = f"iphub_lookup_{address}", + time = config.IPAPI_CACHE_LIFETIME, + value = json.dumps(LookupResponseJSON) + ) + return LookupResponseJSON + except requests.exceptions.Timeout: + logging.error(f"lookup_address_info : IPHub query timed out after {lookup_timeout} seconds") + raise IPHubQueryFailed("IPHub query timed out") + except Exception as e: + logging.error(f"lookup_address_info : IPHub query failed: {e}") + raise IPHubQueryFailed(f"IPHub query failed: {e}") + +def fetch_address_risk( address : str, skip_cache : bool = False, lookup_timeout : int = 10, fallback_on_exception : bool = True ) -> int: + """ + :param address: The IP address to check + :param skip_cache: Whether to skip the cache and query IPHub directly + :param lookup_timeout: The timeout for the query + :param fallback_on_exception: Whether to return 0 if the query fails + + :return: The risk level of the IP address (0, 1, or 2) + + https://iphub.info/api + + 0 - Residential or business IP (i.e. safe IP) + 1 - Non-residential IP (hosting provider, proxy, etc.) + 2 - Non-residential & residential IP (warning, may flag innocent people) + """ + + try: + LookupResponseJSON: dict = lookup_address_info(address, skip_cache, lookup_timeout) + if LookupResponseJSON.get("is_crawler", True) \ + or LookupResponseJSON.get("is_datacenter", False) \ + or LookupResponseJSON.get("is_tor", False) \ + or LookupResponseJSON.get("is_proxy", False) \ + or LookupResponseJSON.get("is_vpn", False) \ + or LookupResponseJSON.get("is_abuser", False): + return 1 + else: + return + except Exception as e: + if fallback_on_exception: + logging.error(f"fetch_address_risk : Exception raised falling back: {e}") + return 3 # Why would we let them pass???????????? + else: + raise e \ No newline at end of file diff --git a/app/services/user_relationships/followings.py b/app/services/user_relationships/followings.py new file mode 100644 index 0000000..1b0b6f7 --- /dev/null +++ b/app/services/user_relationships/followings.py @@ -0,0 +1,216 @@ +from app.models.follow_relationship import FollowRelationship +from app.models.user import User +from app.extensions import db, redis_controller +from app.util.websiteFeatures import GetWebsiteFeature + +import redis_lock + +class FollowingExceptions(): + class AlreadyFollowing(Exception): + pass + class CannotFollowSelf(Exception): + pass + class RedisLockAcquireError(Exception): + pass + class UserRateLimited(Exception): + pass + class UserNotFollowing(Exception): + pass + class FollowingIsDisabled(Exception): + pass + +def follow_user( + follower_user : User, + followed_user : User, + + bypass_rate_limit : bool = False +) -> None: + """ + :param follower_user : User : The user that is following + :param followed_user : User : The user that is being followed + + :param bypass_rate_limit : bool : Bypass the rate limit check + + :return None + + :raises FollowingExceptions.AlreadyFollowing : The user is already following the other user + :raises FollowingExceptions.CannotFollowSelf : The user cannot follow themselves + :raises FollowingExceptions.UserNotFound : The user is not found + :raises FollowingExceptions.RedisLockAcquireError : The Redis lock cannot be acquired + :raises FollowingExceptions.UserRateLimited : The user is rate limited + :raises FollowingExceptions.FollowingIsDisabled : Following is disabled + """ + + assert isinstance(follower_user, User), f"Expected follower_user to be of type User, got {follower_user.__class__.__name__}" + assert isinstance(followed_user, User), f"Expected followed_user to be of type User, got {followed_user.__class__}" + + if follower_user.id == followed_user.id: + raise FollowingExceptions.CannotFollowSelf + + if GetWebsiteFeature("FollowingUsers") is False: + raise FollowingExceptions.FollowingIsDisabled + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:followings:follow_user:{follower_user.id}", expire = 10 ): + if not bypass_rate_limit: + if redis_controller.get(f"rate_limit:followings:follow_user_action:{follower_user.id}") is not None: + raise FollowingExceptions.UserRateLimited + redis_controller.set(f"rate_limit:followings:follow_user_action:{follower_user.id}", "1", ex = 5) + + if FollowRelationship.query.filter_by(followerUserId = follower_user.id, followeeUserId = followed_user.id).first() is not None: + raise FollowingExceptions.AlreadyFollowing + + follow_relationship = FollowRelationship( + followerUserId = follower_user.id, + followeeUserId = followed_user.id + ) + db.session.add(follow_relationship) + db.session.commit() + + return None + except AssertionError: + raise FollowingExceptions.RedisLockAcquireError + +def unfollow_user( + current_follower : User, + followed_user : User, + + bypass_rate_limit : bool = False +) -> None: + """ + :param current_follower : User : The user that is unfollowing + :param followed_user : User : The user that is being unfollowed + + :param bypass_rate_limit : bool : Bypass the rate limit check + + :return None + + :raises FollowingExceptions.UserNotFollowing : The user is not following the other user + :raises FollowingExceptions.RedisLockAcquireError : The Redis lock cannot be acquired + :raises FollowingExceptions.UserRateLimited : The user is rate limited + """ + + assert isinstance(current_follower, User), f"Expected current_follower to be of type User, got {current_follower.__class__.__name__}" + assert isinstance(followed_user, User), f"Expected followed_user to be of type User, got {followed_user.__class__}" + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:followings:unfollow_user:{current_follower.id}", expire = 10 ): + if not bypass_rate_limit: + if redis_controller.get(f"rate_limit:followings:unfollow_user_action:{current_follower.id}") is not None: + raise FollowingExceptions.UserRateLimited + redis_controller.set(f"rate_limit:followings:unfollow_user_action:{current_follower.id}", "1", ex = 1) + + follow_relationship = FollowRelationship.query.filter_by(followerUserId = current_follower.id, followeeUserId = followed_user.id).first() + if follow_relationship is None: + raise FollowingExceptions.UserNotFollowing + + db.session.delete(follow_relationship) + db.session.commit() + + return None + except AssertionError: + raise FollowingExceptions.RedisLockAcquireError + +def is_following( + follower_user : User, + followed_user : User +) -> bool: + """ + :param follower_user : User : The user that is following + :param followed_user : User : The user that is being followed + + :return bool : Whether the user is following the other user + """ + + assert isinstance(follower_user, User), f"Expected follower_user to be of type User, got {follower_user.__class__.__name__}" + assert isinstance(followed_user, User), f"Expected followed_user to be of type User, got {followed_user.__class__}" + + return FollowRelationship.query.filter_by(followerUserId = follower_user.id, followeeUserId = followed_user.id).first() is not None + +def get_followers( + requested_user : User, + + return_as_query : bool = False +) -> list[User]: + """ + :param requested_user : User : The user that is being requested + :param return_as_query : bool : Whether to return the result as a query or a list + + :return list[User] : The list of users that are following the requested user + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__.__name__}" + + FollowersQuery = User.query.join(FollowRelationship, FollowRelationship.followerUserId == User.id).filter(FollowRelationship.followeeUserId == requested_user.id) + if return_as_query: + return FollowersQuery + + return FollowersQuery.all() + +def get_follower_count( + requested_user : User, + + skip_cache : bool = False +) -> int: + """ + :param requested_user : User : The user that is being requested + :param skip_cache : bool : Whether to skip the cache + + :return int : The number of users that are following the requested user + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__}" + + if not skip_cache: + CachedFollowerCount = redis_controller.get(f"services:followings:follower_count:{requested_user.id}") + if CachedFollowerCount is not None: + return int(CachedFollowerCount) + + FollowerCount : int = get_followers(requested_user, return_as_query = True).count() + redis_controller.set(f"services:followings:follower_count:{requested_user.id}", FollowerCount, ex = 10) + + return FollowerCount + +def get_following( + requested_user : User, + + return_as_query : bool = False +) -> list[User]: + """ + :param requested_user : User : The user that is being requested + :param return_as_query : bool : Whether to return the result as a query or a list + + :return list[User] : The list of users that the requested user is following + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__}" + + FollowingQuery = User.query.join(FollowRelationship, FollowRelationship.followeeUserId == User.id).filter(FollowRelationship.followerUserId == requested_user.id) + if return_as_query: + return FollowingQuery + + return FollowingQuery.all() + +def get_following_count( + requested_user : User, + + skip_cache : bool = False +) -> int: + """ + :param requested_user : User : The user that is being requested + :param skip_cache : bool : Whether to skip the cache + + :return int : The number of users that the requested user is following + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__}" + + if not skip_cache: + CachedFollowingCount = redis_controller.get(f"services:followings:following_count:{requested_user.id}") + if CachedFollowingCount is not None: + return int(CachedFollowingCount) + + FollowingCount : int = get_following(requested_user, return_as_query = True).count() + redis_controller.set(f"services:followings:following_count:{requested_user.id}", FollowingCount, ex = 10) + + return FollowingCount \ No newline at end of file diff --git a/app/services/user_relationships/friends.py b/app/services/user_relationships/friends.py new file mode 100644 index 0000000..d626af7 --- /dev/null +++ b/app/services/user_relationships/friends.py @@ -0,0 +1,200 @@ +from app.models.friend_relationship import FriendRelationship +from app.models.friend_request import FriendRequest +from app.models.user import User + +from app.extensions import db, redis_controller + +import redis_lock + +class FriendExceptions(): + class AlreadyFriends(Exception): + pass + class CannotFriendSelf(Exception): + pass + class RedisLockAcquireError(Exception): + pass + class UserRateLimited(Exception): + pass + class UserNotFriends(Exception): + pass + class FriendIsDisabled(Exception): + pass + class RecipientHasTooManyFriends(Exception): + pass + class SenderHasTooManyFriends(Exception): + pass + +def get_friend_count( + user : User +) -> int: + """ + :param user : User : The user + + :return int : The amount of friends the user has + """ + + assert isinstance(user, User), f"Expected user to be of type User, got {user.__class__}" + + return FriendRelationship.query.filter( + (FriendRelationship.user_id == user.id) | (FriendRelationship.friend_id == user.id) + ).count() + +def get_friend_relationship( + user1 : User, + user2 : User +) -> FriendRelationship | None: + """ + :param user1 : User : The first user + :param user2 : User : The second + + :return FriendRelationship | None : The friend relationship or None + """ + + assert isinstance(user1, User), f"Expected user1 to be of type User, got {user1.__class__.__name__}" + assert isinstance(user2, User), f"Expected user2 to be of type User, got {user2.__class__}" + + return FriendRelationship.query.filter( + (FriendRelationship.user_id == user1.id and FriendRelationship.friend_id == user2.id) | + (FriendRelationship.user_id == user2.id and FriendRelationship.friend_id == user1.id) + ).first() + +def create_friend_relationship( + user1 : User, + user2 : User, +) -> FriendRelationship: + """ + :param user1 : User : The first user + :param user2 : User : The second + + :return FriendRelationship : The friend relationship + """ + + assert isinstance(user1, User), f"Expected user1 to be of type User, got {user1.__class__.__name__}" + assert isinstance(user2, User), f"Expected user2 to be of type User, got {user2.__class__}" + + FirstUser = user1 if user1.id < user2.id else user2 + SecondUser = user2 if user1.id < user2.id else user1 + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:friends:create_friend_relationship:{FirstUser.id}:{SecondUser.id}", expire = 10 ): + if get_friend_relationship(user1, user2) is not None: + raise FriendExceptions.AlreadyFriends + + friendRelationship = FriendRelationship( + user_id = user1.id, + friend_id = user2.id + ) + + db.session.add(friendRelationship) + db.session.commit() + + return friendRelationship + except AssertionError: + raise FriendExceptions.RedisLockAcquireError + +def remove_friend_relationship( + user1 : User, + user2 : User +) -> None: + """ + :param user1 : User : The first user + :param user2 : User : The second + + :return None + """ + + assert isinstance(user1, User), f"Expected user1 to be of type User, got {user1.__class__}" + assert isinstance(user2, User), f"Expected user2 to be of type User, got {user2.__class__}" + + FirstUser = user1 if user1.id < user2.id else user2 + SecondUser = user2 if user1.id < user2.id else user1 + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:friends:remove_friend_relationship:{FirstUser.id}:{SecondUser.id}", expire = 10 ): + friendRelationship = get_friend_relationship(user1, user2) + if friendRelationship is None: + raise FriendExceptions.UserNotFriends + + db.session.delete(friendRelationship) + db.session.commit() + + return None + except AssertionError: + raise FriendExceptions.RedisLockAcquireError + +def send_friend_request( + sender_user : User, + recipient_user : User +) -> FriendRequest | FriendRelationship: + """ + :param sender_user : User : The user sending the friend request + :param recipient_user : User : The user receiving the friend request + + :return FriendRequest | FriendRelationship : The friend request or friend relationship if there is already an existing friend request from the recipient user + """ + + assert isinstance(sender_user, User), f"Expected user1 to be of type User, got {sender_user.__class__}" + assert isinstance(recipient_user, User), f"Expected user2 to be of type User, got {recipient_user.__class__}" + + FirstUser = sender_user if sender_user.id < recipient_user.id else recipient_user + SecondUser = recipient_user if sender_user.id < recipient_user.id else sender_user + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:friends:send_friend_request:{FirstUser.id}:{SecondUser.id}", expire = 10 ): + if get_friend_relationship(sender_user, recipient_user) is not None: + raise FriendExceptions.AlreadyFriends + + if sender_user.id == recipient_user.id: + raise FriendExceptions.CannotFriendSelf + + if get_friend_count(recipient_user) >= 200: + raise FriendExceptions.RecipientHasTooManyFriends + if get_friend_count(sender_user) >= 200: + raise FriendExceptions.SenderHasTooManyFriends + + if redis_controller.get(f"rate_limit:friends:send_friend_request:{sender_user.id}") is not None: + raise FriendExceptions.UserRateLimited + redis_controller.set(f"rate_limit:friends:send_friend_request:{sender_user.id}", "1", ex = 3) + + otherFriendRequest = FriendRequest.query.filter_by(requester_id = recipient_user.id, requestee_id = sender_user.id).first() + if otherFriendRequest is not None: + db.session.delete(otherFriendRequest) + db.session.commit() + + return create_friend_relationship( user1 = sender_user, user2 = recipient_user) + + friendRequest = FriendRequest.query.filter_by(requester_id = sender_user.id, requestee_id = recipient_user.id).first() + if friendRequest is not None: + return friendRequest + + friendRequest = FriendRequest( + requester_id = sender_user.id, + requestee_id = recipient_user.id + ) + db.session.add(friendRequest) + db.session.commit() + + return friendRequest + except AssertionError: + raise FriendExceptions.RedisLockAcquireError + +def decline_friend_request( + sender_user : User, + recipient_user : User +) -> None: + """ + :param sender_user : User : The user sending the friend request + :param recipient_user : User : The user receiving the friend request + + :return None + """ + + assert isinstance(sender_user, User), f"Expected user1 to be of type User, got {sender_user.__class__}" + assert isinstance(recipient_user, User), f"Expected user2 to be of type User, got {recipient_user.__class__}" + + friendRequest = FriendRequest.query.filter_by(requester_id = sender_user.id, requestee_id = recipient_user.id).first() + if friendRequest is not None: + db.session.delete(friendRequest) + db.session.commit() + + return None \ No newline at end of file diff --git a/app/shell_commands.py b/app/shell_commands.py new file mode 100644 index 0000000..d5deaed --- /dev/null +++ b/app/shell_commands.py @@ -0,0 +1,522 @@ +# Commands for flask shell +from app.extensions import db, redis_controller +from app.models.user import User +from app.util import auth +from sqlalchemy import func +import logging +# henlo from china! +def lookup_user_id(): + """Lookup user by Id""" + try: + UserId : int = int(input("User Lookup by UserId: ")) + if UserId < 0: + raise Exception("UserId must be a positive integer") + except Exception as e: + logging.error(f"Unable to parse user input, please enter a valid integer, error: {e}") + + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + logging.error(f"Unable to find user with UserId: {UserId}") + else: + logging.info(f""" +Username : {UserObj.username} +UserId : {UserObj.id} +CreatedOn : {UserObj.created} +LastPing : {UserObj.lastonline} +AccountStatus : {UserObj.accountstatus} +2FA Enabled : {UserObj.TOTPEnabled} + +-- Description -- +{UserObj.description} +-- End Description -- + +""") + +def lookup_user_name(): + """Lookup user by Username""" + try: + Username : str = str(input("User Lookup by Username: ")) + if len(Username) < 1: + raise Exception("Username must be a valid string") + except Exception as e: + logging.error(f"Unable to parse user input, please enter a valid string, error: {e}") + + UserObj : User = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if UserObj is None: + logging.error(f"Unable to find user with Username: {Username}") + else: + logging.info(f""" +Username : {UserObj.username} +UserId : {UserObj.id} +CreatedOn : {UserObj.created} +LastPing : {UserObj.lastonline} +AccountStatus : {UserObj.accountstatus} +2FA Enabled : {UserObj.TOTPEnabled} + +-- Description -- +{UserObj.description} +-- End Description -- + +""") + +def refund_unused_invite_keys(): + from app.models.invite_key import InviteKey + from app.services.economy import IncrementTargetBalance + from app.util.transactions import CreateTransaction + from app.enums.TransactionType import TransactionType + from app.pages.messages.messages import CreateSystemMessage + + allDistinctInviteKeyCreators : list[User] = User.query.join(InviteKey, User.id == InviteKey.created_by).filter(InviteKey.used_by == None).distinct(User.id).all() + + def process_user_invite_keys( userObj : User ): + AmountOwed : int = 0 + InviteKeysDeleted : int = 0 + + AllInviteKeys : list[InviteKey] = InviteKey.query.filter_by(created_by=userObj.id, used_by=None).all() + for InviteKeyObj in AllInviteKeys: + AmountOwed += 20 + InviteKeysDeleted += 1 + db.session.delete(InviteKeyObj) + db.session.commit() + + if AmountOwed > 0: + IncrementTargetBalance(userObj, AmountOwed, 0) + CreateTransaction( + Reciever = userObj, + Sender = None, + CurrencyAmount = AmountOwed, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = f"Refunded {InviteKeysDeleted} unused invite keys", + ) + CreateSystemMessage( + subject = "Invite Key Refund", + message = f"""Hello {userObj.username}, + This is an automated message to inform you that as invite keys are no longer used on NEXIUM, we have refunded you R$ {AmountOwed} for {InviteKeysDeleted} unused invite keys. Please contact us on our Discord Server if you have any questions. + +Sincerely, +The NEXIUM Team""", + userid = userObj.id + ) + + logging.info(f"Refunded {InviteKeysDeleted} unused invite keys for user {userObj.username}") + + logging.info(f"Found {len(allDistinctInviteKeyCreators)} users with unused invite keys") + for UserObj in allDistinctInviteKeyCreators: + process_user_invite_keys(UserObj) + +def refund_limiteds(): + from app.models.userassets import UserAsset + from app.models.asset import Asset + from app.models.user_trade_items import UserTradeItem + from app.services.economy import IncrementTargetBalance, GetAssetRap + from app.util.transactions import CreateTransaction + from app.enums.TransactionType import TransactionType + from app.enums.MembershipType import MembershipType + from app.pages.messages.messages import CreateSystemMessage + from app.models.user import User + from app.util.membership import GetUserMembership + import math + import logging + from app import db + + limitedRAPValueLookup: dict[int, int] = {} + refundCapAmount: dict[MembershipType, int] = { + MembershipType.NonBuildersClub: 200, + MembershipType.BuildersClub: 500, + MembershipType.TurboBuildersClub: 750, + MembershipType.OutrageousBuildersClub: 1200, + } + + def _get_limited_rap_value(assetId: int): + if assetId in limitedRAPValueLookup: + return limitedRAPValueLookup[assetId] + else: + rapValue: int = GetAssetRap(assetId) + limitedRAPValueLookup[assetId] = rapValue + return rapValue + + def refund_user_limiteds(userObj: User): + WipedAssets: list = [] + AllLimitedUserAssets: list[UserAsset] = ( + UserAsset.query.filter_by(userid=userObj.id) + .join(Asset, UserAsset.assetid == Asset.id) + .filter(Asset.is_limited == True) + .all() + ) + AmountOwed: int = 0 + + for UserAssetObj in AllLimitedUserAssets: + AssetObj: Asset = UserAssetObj.asset + + LimitedRAPValue: int = _get_limited_rap_value(UserAssetObj.assetid) + AssetOriginalPrice: int = ( + AssetObj.price_robux + if AssetObj.price_robux > 0 + else AssetObj.price_tix + ) + + if not AssetObj.price_robux > 0 and AssetOriginalPrice > 0: + AssetOriginalPrice = math.floor(AssetOriginalPrice / 10) + + RefundedAmount: int = max( + AssetOriginalPrice + if AssetOriginalPrice > LimitedRAPValue + else LimitedRAPValue, + 50, + ) + AmountOwed += RefundedAmount + + WipedAssets.append( + f" - {AssetObj.name} [UAID: {UserAssetObj.id} / Serial: {UserAssetObj.serial}] - R$ {RefundedAmount}" + ) + + # First delete any trade items that reference this UserAsset + UserTradeItem.query.filter_by(user_asset_id=UserAssetObj.id).delete() + + # Then delete the UserAsset itself + db.session.delete(UserAssetObj) + + db.session.commit() + + ActualAmountOwed = min(AmountOwed, refundCapAmount[GetUserMembership(userObj)]) + + # ===== CHECK FOR ROBUX OVERFLOW ===== + max_int_32 = 2_147_483_647 + if userObj.economy.robux + ActualAmountOwed > max_int_32: + logging.warning( + f"Skipping refund for {userObj.username}: balance would exceed 32-bit integer limit" + ) + return + # ==================================== + + if ActualAmountOwed > 0: + ItemListText: str = "\n".join(WipedAssets) + + IncrementTargetBalance(userObj, ActualAmountOwed, 0) + CreateTransaction( + Reciever=userObj, + Sender=None, + CurrencyAmount=ActualAmountOwed, + CurrencyType=0, + TransactionType=TransactionType.BuildersClubStipend, + AssetId=None, + CustomText="Limited item refund", + ) + + CreateSystemMessage( + subject="Limited Item Refund", + message=f"""Hello {userObj.username}, + +This is an automated message to inform you that all limited items are being refunded as we are resetting the economy. We have refunded you R$ {ActualAmountOwed} for the following items: +{ItemListText} + +Item Refund Cap: R$ {refundCapAmount[GetUserMembership(userObj)]} +Total Value before Cap: R$ {AmountOwed} + +Refunded Amount: R$ {ActualAmountOwed} + +Please contact us on our Discord Server if you have any questions. + +Sincerely, +The NEXIUM Team""", + userid=userObj.id, + ) + + logging.info( + f"Refunded {len(AllLimitedUserAssets)} limited items for user {userObj.username}" + ) + + AllUsersWithLimiteds: list[User] = ( + User.query.join(UserAsset, User.id == UserAsset.userid) + .join(Asset, UserAsset.assetid == Asset.id) + .filter(Asset.is_limited == True) + .distinct(User.id) + .all() + ) + logging.info(f"Found {len(AllUsersWithLimiteds)} users with limiteds") + + for UserObj in AllUsersWithLimiteds: + refund_user_limiteds(UserObj) + + +def delete_limited_assets(): + from app.models.asset import Asset + from app.models.asset_version import AssetVersion + from app.models.asset_thumbnail import AssetThumbnail + from app.models.user_avatar_asset import UserAvatarAsset + + # Step 1: Get all limited asset IDs + limited_assets = Asset.query.filter_by(is_limited=True).all() + limited_asset_ids = [asset.id for asset in limited_assets] + + # Step 2: Delete UserAvatarAssets referencing limited assets + UserAvatarAsset.query.filter(UserAvatarAsset.asset_id.in_(limited_asset_ids)).delete(synchronize_session=False) + db.session.commit() + + # Step 3: Delete related asset versions + AssetVersion.query.filter(AssetVersion.asset_id.in_(limited_asset_ids)).delete(synchronize_session=False) + + # Step 4: Delete related asset thumbnails + AssetThumbnail.query.filter(AssetThumbnail.asset_id.in_(limited_asset_ids)).delete(synchronize_session=False) + db.session.commit() + + # Step 5: Delete the limited assets themselves + Asset.query.filter(Asset.id.in_(limited_asset_ids)).delete(synchronize_session=False) + db.session.commit() + +def clear_user_avatar_assets(): + from app.models.user_avatar_asset import UserAvatarAsset + from app.models.asset import Asset + from app.routes.thumbnailer import TakeUserThumbnail + + NeedReRender : list[int] = [] + + AllUserAvatarAssets : list[UserAvatarAsset] = UserAvatarAsset.query.outerjoin(Asset, UserAvatarAsset.asset_id == Asset.id).filter(Asset.id == None).all() + for UserAvatarAssetObj in AllUserAvatarAssets: + if UserAvatarAssetObj.user_id not in NeedReRender: + NeedReRender.append(UserAvatarAssetObj.user_id) + db.session.delete(UserAvatarAssetObj) + + db.session.commit() + + for UserId in NeedReRender: + logging.info(f"Re-rendering avatar for user {UserId}") + TakeUserThumbnail(UserId) + +def clear_bad_transactions(): + from app.models.user_transactions import UserTransaction + from app.models.asset import Asset + + AllBadTransactions : list[UserTransaction] = UserTransaction.query.outerjoin(Asset, UserTransaction.assetId == Asset.id).filter(Asset.id == None).all() + print(f"Found {len(AllBadTransactions)} bad transactions") + + while True: + BatchTransactions : list[UserTransaction] = AllBadTransactions[:1000] + if len(BatchTransactions) == 0: + break + for TransactionObj in BatchTransactions: + db.session.delete(TransactionObj) + db.session.commit() + AllBadTransactions = AllBadTransactions[1000:] + logging.info(f"Deleted 1000 bad transactions, {len(AllBadTransactions)} remaining") + +def delete_asset( asset_id : int ): + from app.models.asset import Asset + from app.models.asset_version import AssetVersion + from app.models.asset_thumbnail import AssetThumbnail + + AllAssetVersions : list[AssetVersion] = AssetVersion.query.filter_by(asset_id=asset_id).all() + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=asset_id).all() + + for AssetVersionObj in AllAssetVersions: + print(f"Deleting asset version {AssetVersionObj.id}") + db.session.delete(AssetVersionObj) + for AssetThumbnailObj in AllAssetThumbnails: + print(f"Deleting asset thumbnail {AssetThumbnailObj.id}") + db.session.delete(AssetThumbnailObj) + + db.session.commit() + + AssetObj : Asset = Asset.query.filter_by(id=asset_id).first() + db.session.delete(AssetObj) + + db.session.commit() + +def create_admin_user(): + """ + ! FIRST TIME SETUP ONLY ! + Creates a user with all admin permissions and a random password + + Note: will raise an exception if User ID 1 already exists + """ + import datetime + import random + import string + from app.models.user import User + from app.models.admin_permissions import AdminPermissions + from app.models.usereconomy import UserEconomy + from app.models.user_avatar import UserAvatar + from app.util.auth import SetPassword + from app.pages.admin.permissionsdefinition import PermissionsDefinition + + if User.query.filter_by(id=1).first() is not None: + raise Exception("User ID 1 already exists") + + NewUser : User = User( + username = "Admin", + password = "", + created = datetime.datetime.utcnow(), + lastonline = datetime.datetime.utcnow() + ) + + db.session.add(NewUser) + db.session.commit() + + NewPassword : str = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(24)) + + SetPassword( + UserObj = NewUser, + password = NewPassword + ) + + UserEconomyObj : UserEconomy = UserEconomy( + userid = NewUser.id, + robux = 0, + tix = 0, + ) + + db.session.add(UserEconomyObj) + + UserAvatarObj : UserAvatar = UserAvatar( + user_id = NewUser.id, + ) + + db.session.add(UserAvatarObj) + + for permission_name in PermissionsDefinition: + permissionObj : AdminPermissions = AdminPermissions( + userid = NewUser.id, + permission = permission_name + ) + db.session.add(permissionObj) + + db.session.commit() + + print(f""" +Successfully created Admin User +Username: Admin +Password: {NewPassword}""") + +def convert_places_to_universes(): + from app.models.asset import Asset + from app.models.place import Place + from app.models.universe import Universe + from app.models.place_datastore import PlaceDatastore + from app.models.place_ordered_datastore import PlaceOrderedDatastore + from app.models.legacy_data_persistence import LegacyDataPersistence + from app.models.place_badge import PlaceBadge + from app.models.gamepass_link import GamepassLink + from app.models.place_developer_product import DeveloperProduct + + AllPlaces : list[Place] = Place.query.filter_by( parent_universe_id = 0 ).order_by(Place.placeid).all() + logging.info(f"convert_places_to_universes > Found {len(AllPlaces)} places to convert") + for PlaceObj in AllPlaces: + PlaceObj : Place + try: + PlaceAssetObj : Asset = Asset.query.filter_by( id = PlaceObj.placeid ).first() + UniverseObj : Universe = Universe( + root_place_id = PlaceObj.placeid, + creator_id = PlaceAssetObj.creator_id, + creator_type = PlaceAssetObj.creator_type, + place_rig_choice = PlaceObj.rig_choice, + place_year = PlaceObj.placeyear, + is_featured = PlaceObj.featured, + minimum_account_age = PlaceObj.min_account_age, + bc_required = PlaceObj.bc_required, + allow_direct_join = False, + is_public = PlaceObj.is_public, + updated_at = PlaceAssetObj.updated_at, + created_at = PlaceAssetObj.created_at + ) + db.session.add(UniverseObj) + db.session.commit() + + logging.info(f"convert_places_to_universes > Created universe {UniverseObj.id} from place {PlaceObj.placeid}") + PlaceObj.parent_universe_id = UniverseObj.id + db.session.commit() + + logging.info(f"convert_places_to_universes > Converting place {PlaceObj.placeid}'s items to universe {UniverseObj.id}") + + db.session.query(PlaceDatastore).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(PlaceOrderedDatastore).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(LegacyDataPersistence).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(PlaceBadge).filter_by( associated_place_id = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(GamepassLink).filter_by( place_id = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(DeveloperProduct).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + + db.session.commit() + + logging.info(f"convert_places_to_universes > Successfully converted place {PlaceObj.placeid}'s items to universe {UniverseObj.id}") + except Exception as e: + logging.error(f"convert_places_to_universes > Failed to migrate place {PlaceObj.placeid}, error: {e}") + +def recalculate_universe_visits(): + from app.models.place import Place + from app.models.universe import Universe + + AllUniverses : list[Universe] = Universe.query.all() + logging.info(f"recalculate_universe_visits > Found {len(AllUniverses)} universes to recalculate") + + for UniverseObj in AllUniverses: + try: + UniverseObj : Universe + UniverseObj.visit_count = Place.query.filter_by( parent_universe_id = UniverseObj.id ).with_entities(func.sum(Place.visitcount)).scalar() + db.session.commit() + logging.info(f"recalculate_universe_visits > Successfully recalculated universe {UniverseObj.id}, new visit count: {UniverseObj.visit_count}") + + except Exception as e: + logging.error(f"recalculate_universe_visits > Failed to recalculate universe {UniverseObj.id}, error: {e}") + +def reverse_item_transfer(): + from app.models.limited_item_transfers import LimitedItemTransfer + from app.models.asset import Asset + from app.models.user import User + from app.services.economy import IncrementTargetBalance, DecrementTargetBalance, GetAssetRap + from app.models.asset_rap import AssetRap + from app.models.userassets import UserAsset + import math + from datetime import datetime + from sqlalchemy import and_ + from app.pages.messages.messages import CreateSystemMessage + + def reverse_transfer( ItemTransferRecordObj : LimitedItemTransfer ): + logging.info(f"reverse_item_transfer > Reversing transfer {ItemTransferRecordObj.id}") + RecievingUserObj : User = User.query.filter_by( id = ItemTransferRecordObj.new_owner_id ).first() + SendingUserObj : User = User.query.filter_by( id = ItemTransferRecordObj.original_owner_id ).first() + UserAssetObj : UserAsset = UserAsset.query.filter_by( id = ItemTransferRecordObj.user_asset_id ).first() + + if RecievingUserObj is None or SendingUserObj is None or UserAssetObj is None: + logging.error(f"reverse_item_transfer > Unable to find user or asset for transfer {ItemTransferRecordObj.id}") + return + + AssetObj : Asset = Asset.query.filter_by( id = ItemTransferRecordObj.asset_id ).first() + AssetRapObj : AssetRap = AssetRap.query.filter_by( assetid = AssetObj.id ).first() + CurrentRapValue : int = GetAssetRap( AssetObj ) + ReversedRapValue : int = math.floor( ( ( CurrentRapValue * 10 ) - ItemTransferRecordObj.purchased_price ) / 9 ) + + RobuxGivenToOriginalOwner : int = math.floor( ItemTransferRecordObj.purchased_price * 0.7 ) + + UserAssetObj.userid = ItemTransferRecordObj.original_owner_id + UserAssetObj.updated = datetime.utcnow() + UserAssetObj.is_for_sale = False + AssetRapObj.rap = ReversedRapValue + db.session.commit() + + IncrementTargetBalance( Target = RecievingUserObj, Amount = ItemTransferRecordObj.purchased_price, CurrencyType = 0 ) + DecrementTargetBalance( Target = SendingUserObj, Amount = RobuxGivenToOriginalOwner, CurrencyType = 0 ) + + CreateSystemMessage( subject = "Item Transfer Reversed", message = f"""Hello {RecievingUserObj.username}, +This is an automated message to inform you that a recent item transfer has been reversed. You have been refunded R$ {ItemTransferRecordObj.purchased_price} for the item {AssetObj.name} which has been taken from your inventory. +Please contact us on our Discord Server if you have any questions. + +Sincerely, +The NEXIUM Team""", userid = RecievingUserObj.id ) + + CreateSystemMessage( subject = "Item Transfer Reversed", message = f"""Hello {SendingUserObj.username}, +This is an automated message to inform you that a recent item transfer has been reversed. R$ {RobuxGivenToOriginalOwner} has been taken from your account and your item ( {AssetObj.name} ) has been returned to your inventory. +Please contact us on our Discord Server if you have any questions. + +Sincerely, +The NEXIUM Team""", userid = SendingUserObj.id ) + + logging.info(f"reverse_item_transfer > Successfully reversed transfer {ItemTransferRecordObj.id} - R$ {ItemTransferRecordObj.purchased_price} given to {RecievingUserObj.username}, R$ {RobuxGivenToOriginalOwner} taken from {SendingUserObj.username}") + logging.info(f"reverse_item_transfer > New RAP value for asset {AssetObj.id}: {CurrentRapValue} -> {ReversedRapValue}") + + FradulentTransfers : list[LimitedItemTransfer] = LimitedItemTransfer.query.filter(and_( LimitedItemTransfer.id > 453, LimitedItemTransfer.id < 472 )).order_by(LimitedItemTransfer.id.desc()).all() + logging.info(f"reverse_item_transfer > Found {len(FradulentTransfers)} fradulent transfers to reverse") + + for TransferObj in FradulentTransfers: + reverse_transfer( TransferObj ) + diff --git a/app/static/avatarrules.json b/app/static/avatarrules.json new file mode 100644 index 0000000..3fb2a46 --- /dev/null +++ b/app/static/avatarrules.json @@ -0,0 +1,553 @@ +{ + "wearableAssetTypes": [ + { + "maxNumber": 5, + "id": 8, + "name": "Hat" + }, + { + "maxNumber": 5, + "id": 41, + "name": "Hair Accessory" + }, + { + "maxNumber": 5, + "id": 42, + "name": "Face Accessory" + }, + { + "maxNumber": 1, + "id": 43, + "name": "Neck Accessory" + }, + { + "maxNumber": 1, + "id": 44, + "name": "Shoulder Accessory" + }, + { + "maxNumber": 1, + "id": 45, + "name": "Front Accessory" + }, + { + "maxNumber": 1, + "id": 46, + "name": "Back Accessory" + }, + { + "maxNumber": 1, + "id": 47, + "name": "Waist Accessory" + }, + { + "maxNumber": 1, + "id": 18, + "name": "Face" + }, + { + "maxNumber": 1, + "id": 19, + "name": "Gear" + }, + { + "maxNumber": 1, + "id": 17, + "name": "Head" + }, + { + "maxNumber": 1, + "id": 29, + "name": "Left Arm" + }, + { + "maxNumber": 1, + "id": 30, + "name": "Left Leg" + }, + { + "maxNumber": 1, + "id": 12, + "name": "Pants" + }, + { + "maxNumber": 1, + "id": 28, + "name": "Right Arm" + }, + { + "maxNumber": 1, + "id": 31, + "name": "Right Leg" + }, + { + "maxNumber": 1, + "id": 11, + "name": "Shirt" + }, + { + "maxNumber": 1, + "id": 2, + "name": "T-Shirt" + }, + { + "maxNumber": 1, + "id": 27, + "name": "Torso" + }, + { + "maxNumber": 1, + "id": 48, + "name": "Climb Animation" + }, + { + "maxNumber": 1, + "id": 49, + "name": "Death Animation" + }, + { + "maxNumber": 1, + "id": 50, + "name": "Fall Animation" + }, + { + "maxNumber": 1, + "id": 51, + "name": "Idle Animation" + }, + { + "maxNumber": 1, + "id": 52, + "name": "Jump Animation" + }, + { + "maxNumber": 1, + "id": 53, + "name": "Run Animation" + }, + { + "maxNumber": 1, + "id": 54, + "name": "Swim Animation" + }, + { + "maxNumber": 1, + "id": 55, + "name": "Walk Animation" + }, + { + "maxNumber": 1, + "id": 56, + "name": "Pose Animation" + }, + { + "maxNumber": 0, + "id": 61, + "name": "Emote Animation" + } + ], + "bodyColorsPalette": [ + { + "brickColorId": 361, + "hexColor": "#564236", + "name": "Dirt brown" + }, + { + "brickColorId": 192, + "hexColor": "#694028", + "name": "Reddish brown" + }, + { + "brickColorId": 217, + "hexColor": "#7C5C46", + "name": "Brown" + }, + { + "brickColorId": 153, + "hexColor": "#957977", + "name": "Sand red" + }, + { + "brickColorId": 359, + "hexColor": "#AF9483", + "name": "Linen" + }, + { + "brickColorId": 352, + "hexColor": "#C7AC78", + "name": "Burlap" + }, + { + "brickColorId": 5, + "hexColor": "#D7C59A", + "name": "Brick yellow" + }, + { + "brickColorId": 101, + "hexColor": "#DA867A", + "name": "Medium red" + }, + { + "brickColorId": 1007, + "hexColor": "#A34B4B", + "name": "Dusty Rose" + }, + { + "brickColorId": 1014, + "hexColor": "#AA5500", + "name": "CGA brown" + }, + { + "brickColorId": 38, + "hexColor": "#A05F35", + "name": "Dark orange" + }, + { + "brickColorId": 18, + "hexColor": "#CC8E69", + "name": "Nougat" + }, + { + "brickColorId": 125, + "hexColor": "#EAB892", + "name": "Light orange" + }, + { + "brickColorId": 1030, + "hexColor": "#FFCC99", + "name": "Pastel brown" + }, + { + "brickColorId": 133, + "hexColor": "#D5733D", + "name": "Neon orange" + }, + { + "brickColorId": 106, + "hexColor": "#DA8541", + "name": "Bright orange" + }, + { + "brickColorId": 105, + "hexColor": "#E29B40", + "name": "Br. yellowish orange" + }, + { + "brickColorId": 1017, + "hexColor": "#FFAF00", + "name": "Deep orange" + }, + { + "brickColorId": 24, + "hexColor": "#F5CD30", + "name": "Bright yellow" + }, + { + "brickColorId": 334, + "hexColor": "#F8D96D", + "name": "Daisy orange" + }, + { + "brickColorId": 226, + "hexColor": "#FDEA8D", + "name": "Cool yellow" + }, + { + "brickColorId": 141, + "hexColor": "#27462D", + "name": "Earth green" + }, + { + "brickColorId": 1021, + "hexColor": "#3A7D15", + "name": "Camo" + }, + { + "brickColorId": 28, + "hexColor": "#287F47", + "name": "Dark green" + }, + { + "brickColorId": 37, + "hexColor": "#4B974B", + "name": "Bright green" + }, + { + "brickColorId": 310, + "hexColor": "#5B9A4C", + "name": "Shamrock" + }, + { + "brickColorId": 317, + "hexColor": "#7C9C6B", + "name": "Moss" + }, + { + "brickColorId": 119, + "hexColor": "#A4BD47", + "name": "Br. yellowish green" + }, + { + "brickColorId": 1011, + "hexColor": "#002060", + "name": "Navy blue" + }, + { + "brickColorId": 1012, + "hexColor": "#2154B9", + "name": "Deep blue" + }, + { + "brickColorId": 1010, + "hexColor": "#0000FF", + "name": "Really blue" + }, + { + "brickColorId": 23, + "hexColor": "#0D69AC", + "name": "Bright blue" + }, + { + "brickColorId": 305, + "hexColor": "#527CAE", + "name": "Steel blue" + }, + { + "brickColorId": 102, + "hexColor": "#6E99CA", + "name": "Medium blue" + }, + { + "brickColorId": 45, + "hexColor": "#B4D2E4", + "name": "Light blue" + }, + { + "brickColorId": 107, + "hexColor": "#008F9C", + "name": "Bright bluish green" + }, + { + "brickColorId": 1018, + "hexColor": "#12EED4", + "name": "Teal" + }, + { + "brickColorId": 1027, + "hexColor": "#9FF3E9", + "name": "Pastel blue-green" + }, + { + "brickColorId": 1019, + "hexColor": "#00FFFF", + "name": "Toothpaste" + }, + { + "brickColorId": 1013, + "hexColor": "#04AFEC", + "name": "Cyan" + }, + { + "brickColorId": 11, + "hexColor": "#80BBDC", + "name": "Pastel Blue" + }, + { + "brickColorId": 1024, + "hexColor": "#AFDDFF", + "name": "Pastel light blue" + }, + { + "brickColorId": 104, + "hexColor": "#6B327C", + "name": "Bright violet" + }, + { + "brickColorId": 1023, + "hexColor": "#8C5B9F", + "name": "Lavender" + }, + { + "brickColorId": 321, + "hexColor": "#A75E9B", + "name": "Lilac" + }, + { + "brickColorId": 1015, + "hexColor": "#AA00AA", + "name": "Magenta" + }, + { + "brickColorId": 1031, + "hexColor": "#6225D1", + "name": "Royal purple" + }, + { + "brickColorId": 1006, + "hexColor": "#B480FF", + "name": "Alder" + }, + { + "brickColorId": 1026, + "hexColor": "#B1A7FF", + "name": "Pastel violet" + }, + { + "brickColorId": 21, + "hexColor": "#C4281C", + "name": "Bright red" + }, + { + "brickColorId": 1004, + "hexColor": "#FF0000", + "name": "Really red" + }, + { + "brickColorId": 1032, + "hexColor": "#FF00BF", + "name": "Hot pink" + }, + { + "brickColorId": 1016, + "hexColor": "#FF66CC", + "name": "Pink" + }, + { + "brickColorId": 330, + "hexColor": "#FF98DC", + "name": "Carnation pink" + }, + { + "brickColorId": 9, + "hexColor": "#E8BAC8", + "name": "Light reddish violet" + }, + { + "brickColorId": 1025, + "hexColor": "#FFC9C9", + "name": "Pastel orange" + }, + { + "brickColorId": 364, + "hexColor": "#5A4C42", + "name": "Dark taupe" + }, + { + "brickColorId": 351, + "hexColor": "#BC9B5D", + "name": "Cork" + }, + { + "brickColorId": 1008, + "hexColor": "#C1BE42", + "name": "Olive" + }, + { + "brickColorId": 29, + "hexColor": "#A1C48C", + "name": "Medium green" + }, + { + "brickColorId": 1022, + "hexColor": "#7F8E64", + "name": "Grime" + }, + { + "brickColorId": 151, + "hexColor": "#789082", + "name": "Sand green" + }, + { + "brickColorId": 135, + "hexColor": "#74869D", + "name": "Sand blue" + }, + { + "brickColorId": 1020, + "hexColor": "#00FF00", + "name": "Lime green" + }, + { + "brickColorId": 1028, + "hexColor": "#CCFFCC", + "name": "Pastel green" + }, + { + "brickColorId": 1009, + "hexColor": "#FFFF00", + "name": "New Yeller" + }, + { + "brickColorId": 1029, + "hexColor": "#FFFFCC", + "name": "Pastel yellow" + }, + { + "brickColorId": 1003, + "hexColor": "#111111", + "name": "Really black" + }, + { + "brickColorId": 26, + "hexColor": "#1B2A35", + "name": "Black" + }, + { + "brickColorId": 199, + "hexColor": "#635F62", + "name": "Dark stone grey" + }, + { + "brickColorId": 194, + "hexColor": "#A3A2A5", + "name": "Medium stone grey" + }, + { + "brickColorId": 1002, + "hexColor": "#CDCDCD", + "name": "Mid gray" + }, + { + "brickColorId": 208, + "hexColor": "#E5E4DF", + "name": "Light stone grey" + }, + { + "brickColorId": 1, + "hexColor": "#F2F3F3", + "name": "White" + }, + { + "brickColorId": 1001, + "hexColor": "#F8F8F8", + "name": "Institutional white" + } + ], + "scales": { + "height": { + "min": 0.9, + "max": 1.05, + "increment": 0.01 + }, + "width": { + "min": 0.7, + "max": 1, + "increment": 0.01 + }, + "head": { + "min": 0.95, + "max": 1, + "increment": 0.01 + }, + "proportion": { + "min": 0, + "max": 1, + "increment": 0.01 + }, + "bodyType": { + "min": 0, + "max": 1, + "increment": 0.01 + } + } +} \ No newline at end of file diff --git a/app/static/css/admin.css b/app/static/css/admin.css new file mode 100644 index 0000000..582167f --- /dev/null +++ b/app/static/css/admin.css @@ -0,0 +1,42 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.container a { + color: var(--bs-body-color); + text-decoration: none; +} + +.admin-box { + transition: 0.2s; + background-color: var(--surface-alt); + /* drop shadow*/ + box-shadow: 0 0 10px var(--card-shadow); +} +.admin-box p { + color: var(--text-muted); +} + +.admin-box:hover { + transform: scale(1.05); +} + +.gameserver-box { + transition: 0.2s; + border: 1px solid var(--linebreak) !important; +} +.greenborder { + border-color: rgb(0, 199, 0) !important; +} +.redborder { + border-color: rgb(199, 0, 0) !important; +} +.yellowborder { + border-color: rgb(199, 199, 0) !important; +} + +.gameserver-box:hover { + transform: scale(1.015); +} diff --git a/app/static/css/avatar.css b/app/static/css/avatar.css new file mode 100644 index 0000000..dca678f --- /dev/null +++ b/app/static/css/avatar.css @@ -0,0 +1,95 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 40px; +} + + +.head { + width: 60px; + border: 1px solid var(--linebreak); + cursor: pointer; + height: 60px; + margin: 0 auto; + display: block; + border-radius: 5px; +} +.torso { + width: 120px; + border: 1px solid var(--linebreak); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + margin-top: 10px; + border-radius: 5px; +} +.leftArm { + width: 50px; + border: 1px solid var(--linebreak); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: -60px; + border-radius: 5px; +} +.rightArm { + width: 50px; + border: 1px solid var(--linebreak); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: 130px; + border-radius: 5px; + margin-top: -120px; +} +.legs { + width: 120px; + height: 100%; + margin: 10px auto 0 auto; + display: block; +} +.leftLeg { + float: left; + width: calc(50% - 10px); + border: 1px solid var(--linebreak); + cursor: pointer; + height: 120px; + margin-right: 10px; + border-radius: 5px; +} +.rightLeg { + float: right; + width: calc(50% - 10px); + border: 1px solid var(--linebreak); + cursor: pointer; + height: 120px; + margin-left: 10px; + border-radius: 5px; +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: var(--surface-alt); /* Adjust the opacity and color as needed */ + z-index: 9999; /* Make sure the overlay is above other elements */ + border-radius: 5px; + overflow-y: scroll; + overflow-x: hidden; +} + +.color-picker-item { + border-radius: 50%; + border: 1px solid var(--linebreak); + width: 30px; + height: 30px; + margin: 2px; + cursor: pointer; +} \ No newline at end of file diff --git a/app/static/css/avatar.css1 b/app/static/css/avatar.css1 new file mode 100644 index 0000000..b650957 --- /dev/null +++ b/app/static/css/avatar.css1 @@ -0,0 +1,157 @@ +#main { + display: flex; + min-height: 100vh; + padding-top: 24px; +} + +.messagealerts { + background: rgba(255,0,0,0.15); + color: #e2e2e2; + word-wrap: break-word; +} + +.head { + width: 60px; + border: 1px solid #3a3a3a; + cursor: pointer; + height: 60px; + margin: 0 auto; + display: block; + border-radius: 5px; + transition: border-color 0.15s; +} + +.head:hover { + border-color: #0066ff; +} + +.torso { + width: 120px; + border: 1px solid #3a3a3a; + cursor: pointer; + height: 120px; + margin: 10px auto 0 auto; + display: block; + border-radius: 5px; + transition: border-color 0.15s; +} + +.torso:hover { + border-color: #0066ff; +} + +.leftArm { + width: 50px; + border: 1px solid #3a3a3a; + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: -60px; + border-radius: 5px; + transition: border-color 0.15s; +} + +.leftArm:hover { + border-color: #0066ff; +} + +.rightArm { + width: 50px; + border: 1px solid #3a3a3a; + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: 130px; + border-radius: 5px; + margin-top: -120px; + transition: border-color 0.15s; +} + +.rightArm:hover { + border-color: #0066ff; +} + +.legs { + width: 120px; + height: 100%; + margin: 10px auto 0 auto; + display: block; +} + +.leftLeg { + float: left; + width: calc(50% - 10px); + border: 1px solid #3a3a3a; + cursor: pointer; + height: 120px; + margin-right: 10px; + border-radius: 5px; + transition: border-color 0.15s; +} + +.leftLeg:hover { + border-color: #0066ff; +} + +.rightLeg { + float: right; + width: calc(50% - 10px); + border: 1px solid #3a3a3a; + cursor: pointer; + height: 120px; + margin-left: 10px; + border-radius: 5px; + transition: border-color 0.15s; +} + +.rightLeg:hover { + border-color: #0066ff; +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #1b1b1b; + z-index: 9999; + border-radius: 5px; + overflow-y: scroll; + overflow-x: hidden; +} + +.color-picker-item { + border-radius: 50%; + border: 2px solid transparent; + width: 30px; + height: 30px; + margin: 3px; + cursor: pointer; + transition: border-color 0.15s, transform 0.1s; +} + +.color-picker-item:hover { + border-color: #fff; + transform: scale(1.15); +} + +.asset-card-button { + font-size: 11px; + padding: 3px 7px; +} + +.form-range { + width: 100%; + accent-color: #0066ff; +} + +.form-label { + color: #e3e3e3; + font-size: 0.875rem; + margin-bottom: 4px; +} \ No newline at end of file diff --git a/app/static/css/bootstrapv3.min.css b/app/static/css/bootstrapv3.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/app/static/css/bootstrapv3.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/app/static/css/bootstrapv3.min.css.bak b/app/static/css/bootstrapv3.min.css.bak new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/app/static/css/bootstrapv3.min.css.bak @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/app/static/css/catalog.css b/app/static/css/catalog.css new file mode 100644 index 0000000..a9da9a6 --- /dev/null +++ b/app/static/css/catalog.css @@ -0,0 +1,5 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} diff --git a/app/static/css/develop.css b/app/static/css/develop.css new file mode 100644 index 0000000..b1a8f11 --- /dev/null +++ b/app/static/css/develop.css @@ -0,0 +1,6 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + diff --git a/app/static/css/gameview.css b/app/static/css/gameview.css new file mode 100644 index 0000000..ffb802c --- /dev/null +++ b/app/static/css/gameview.css @@ -0,0 +1,132 @@ +.nav-link { + color: var(--text-muted) !important; +} +.nav-link.active { + color: var(--bs-body-color) !important; +} +.details-container h2 { + font-size: 29px; + font-weight: 500; +} +.details-container p { + font-size: 12px; +} +.redBg { + background: #CE645B; + width: 100%; + height: 5px; +} + +.greenBg { + background: #52A846; + height: 5px; +} + +.borderLeft { + border-left: 1px solid #c3c3c3; +} + +.thumbsText { + font-size: 12px; +} + +.usersVote { + padding: 0 28px; + height: 30px; + position: relative; + max-width: 300px; + width: 70%; + display: block; + float: right; + margin-top: .5rem; + margin-right: auto; + margin-left: auto; +} + +.upvote { + left: 0; + position: absolute; + top: -3px; + right: 0; +} + +.downvote { + right: 0; + position: absolute; + top: -3px; +} + +.votedetails { + display: block; + width: 100%; +} + +.votecontainer { + width: 100%; + height: 6px; + margin: 6px 0 0 0; + position: relative; + display: block; +} + +.votenumbers { + display: block; +} + +.votebackground { + background-color: #E27676; + width: 100%; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.votepercentage { + background-color: #02b757; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.segment { + background-color: rgba(20, 20, 20, 0.3); + height: 6px; + width: 2px; + position: absolute; + top: 0; +} + +.countleft { + float: left; + color: var(--text-muted); +} + +.countright { + float: right; + color: var(--text-muted); + text-align: right; +} +.cursor-pointer { + cursor: pointer; +} +.vote-up-text { + color: #02b757; +} +.vote-down-text { + color: #E27676; +} +.text-favorite { + color: #F6B702; + font-size: 16px; + font-weight: 400; +} +.favorite-button-container { + float: left; + margin-left: 10px; + width: 15%; + cursor: pointer; +} \ No newline at end of file diff --git a/app/static/css/gameview.css1 b/app/static/css/gameview.css1 new file mode 100644 index 0000000..32bb6b4 --- /dev/null +++ b/app/static/css/gameview.css1 @@ -0,0 +1,323 @@ +.text-secondary { + color: #c3c3c3 !important; +} + +.nav-link { + color: #a0a0a0 !important; + text-decoration: none; + padding: 10px 14px; + font-size: 0.875rem; + font-weight: 600; + border-bottom: 2px solid transparent; + transition: color 0.12s, border-color 0.12s; +} + +.nav-link:hover { + color: #e3e3e3 !important; +} + +.nav-link.active { + color: #ffffff !important; + border-bottom-color: #ffffff; +} + +.details-container h2 { + font-size: 1.4rem; + font-weight: 600; +} + +.details-container p { + font-size: 0.8rem; + color: #909090; + margin: 0; +} + +.redBg { + background: #CE645B; + width: 100%; + height: 5px; +} + +.greenBg { + background: #52A846; + height: 5px; +} + +.borderLeft { + border-left: 1px solid #393b3d; +} + +.thumbsText { + font-size: 12px; +} + +.usersVote { + padding: 0 28px; + height: 30px; + position: relative; + max-width: 300px; + width: 70%; + display: block; + float: right; + margin-top: 0.5rem; + margin-right: auto; + margin-left: auto; +} + +.upvote { + left: 0; + position: absolute; + top: -3px; + right: 0; +} + +.downvote { + right: 0; + position: absolute; + top: -3px; +} + +.votedetails { + display: block; + width: 100%; +} + +.votecontainer { + width: 100%; + height: 6px; + margin: 6px 0 0 0; + position: relative; + display: block; +} + +.votenumbers { + display: block; +} + +.votebackground { + background-color: #E27676; + width: 100%; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.votepercentage { + background-color: #02b757; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.segment { + background-color: rgba(20,20,20,0.3); + height: 6px; + width: 2px; + position: absolute; + top: 0; +} + +.countleft { + float: left; + color: #c0c0c0; +} + +.countright { + float: right; + color: #c0c0c0; + text-align: right; +} + +.cursor-pointer { + cursor: pointer; +} + +.vote-up-text { + color: #02b757; +} + +.vote-down-text { + color: #E27676; +} + +.text-favorite { + color: #F6B702; + font-size: 16px; + font-weight: 400; +} + +.favorite-button-container { + float: left; + margin-left: 10px; + width: 15%; + cursor: pointer; +} + +.text-robux { + color: #1ad467; + font-size: 13px; + font-weight: 600; +} + +.page-tabs { + display: flex; + border-bottom: 2px solid #393b3d; + background-color: #242424; + border-radius: 4px 4px 0 0; + overflow: hidden; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .tab-pane.show.active { + display: block; +} + +.game-badge-row { + background-color: #2a2a2a; + border-radius: 4px; + margin-bottom: 6px; + padding: 10px; + display: flex; + align-items: center; + gap: 12px; +} + +.server-row { + background-color: #141414; + border-radius: 4px; + margin: 6px; + padding: 10px; +} + +.server-players-row { + display: flex; + flex-wrap: wrap; + gap: 4px; + min-height: 60px; + background-color: #0f0f0f; + border-radius: 3px; + padding: 6px; + margin-top: 8px; +} + +.server-fill-bar { + height: 6px; + border-radius: 3px; + background-color: #2a2a2a; + overflow: hidden; + margin-top: 6px; +} + +.server-fill-inner { + height: 100%; + background-color: #b0b0b0; +} + +.gamepass-card { + width: 150px; + min-height: 200px; + background-color: #2c2c2c; + box-shadow: 0 0 5px #000; + border-radius: 4px; + padding: 6px; +} + +.launch-modal-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.6); + z-index: 10000; + display: none; + justify-content: center; + align-items: center; +} + +.launch-modal-box { + background-color: #1e1e1e; + box-shadow: 0 0 20px #000; + border-radius: 8px; + padding: 24px; + min-width: 400px; + min-height: 220px; + position: relative; + display: flex; + flex-direction: column; + align-items: center; + gap: 14px; +} + +.progress { + width: 100%; + height: 20px; + background-color: #2a2a2a; + border-radius: 4px; + overflow: hidden; +} + +.progress-bar { + height: 100%; + background-color: #0066ff; + background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); + background-size: 1rem 1rem; + animation: progress-bar-stripes 1s linear infinite; +} + +@keyframes progress-bar-stripes { + from { background-position: 1rem 0; } + to { background-position: 0 0; } +} + +.purchase-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.6); + z-index: 10001; + display: none; + justify-content: center; + align-items: center; +} + +.purchase-modal.open { + display: flex; +} + +.purchase-modal-box { + background-color: #242424; + border: 1px solid #393b3d; + border-radius: 6px; + min-width: 340px; + overflow: hidden; +} + +.purchase-modal-header { + padding: 14px 18px; + border-bottom: 1px solid #393b3d; + display: flex; + align-items: center; + justify-content: space-between; +} + +.purchase-modal-body { + padding: 16px 18px; +} + +.purchase-modal-footer { + padding: 12px 18px; + border-top: 1px solid #393b3d; + display: flex; + justify-content: flex-end; + gap: 8px; +} \ No newline at end of file diff --git a/app/static/css/global.css b/app/static/css/global.css new file mode 100644 index 0000000..c9309ea --- /dev/null +++ b/app/static/css/global.css @@ -0,0 +1,522 @@ +html[data-theme="dark"] { + color-scheme: dark; + --bs-body-bg: rgb(9, 9, 9) !important; + --bs-body-color: rgb(240, 240, 240) !important; + --bs-heading-color: #fff !important; + --page-bg: rgb(9, 9, 9); + --nav-bg: rgb(9, 9, 9); + --nav-border: rgb(90, 90, 90); + --subnav-bg: rgb(23, 23, 23); + --subnav-link: rgb(199, 199, 199); + --subnav-link-hover: rgb(255, 255, 255); + --footer-bg: rgb(15, 15, 15); + --footer-text: rgb(255, 255, 255); + --linebreak: rgb(60, 60, 60); + --card-bg: rgb(30, 30, 30); + --card-shadow: rgb(0, 0, 0); + --text-muted: rgb(170, 170, 170); + --nav-text: rgb(255, 255, 255); + --website-message-bg: rgb(65, 7, 7); + --surface-alt: rgb(27, 27, 27); + --surface-sunken: rgb(18, 18, 18); + --track-bg: rgb(49, 49, 49); + --track-fill: rgb(85, 85, 85); + --alert-bg: rgba(255, 0, 0, 0.2); + --alert-text: rgb(226, 226, 226); + --auth-bg: rgb(20, 20, 20); + --auth-dot: #333; + --auth-card-bg: rgba(25, 25, 25, 1); + --auth-card-shadow: rgba(0, 0, 0, 0.7); +} + +html[data-theme="light"] { + color-scheme: light; + --bs-body-bg: rgb(245, 247, 250) !important; + --bs-body-color: rgb(31, 41, 55) !important; + --bs-heading-color: rgb(17, 24, 39) !important; + --page-bg: rgb(245, 247, 250); + --nav-bg: rgb(255, 255, 255); + --nav-border: rgb(210, 216, 224); + --subnav-bg: rgb(241, 243, 246); + --subnav-link: rgb(70, 80, 99); + --subnav-link-hover: rgb(17, 24, 39); + --footer-bg: rgb(233, 237, 245); + --footer-text: rgb(26, 35, 48); + --linebreak: rgb(208, 215, 226); + --card-bg: rgb(255, 255, 255); + --card-shadow: rgba(15, 23, 42, 0.12); + --text-muted: rgb(87, 96, 113); + --nav-text: rgb(31, 41, 55); + --website-message-bg: rgb(255, 243, 205); + --surface-alt: rgb(229, 231, 235); + --surface-sunken: rgb(214, 218, 225); + --track-bg: rgb(222, 226, 232); + --track-fill: rgb(178, 185, 196); + --alert-bg: rgba(220, 38, 38, 0.12); + --alert-text: rgb(153, 27, 27); + --auth-bg: rgb(238, 240, 244); + --auth-dot: rgba(15, 23, 42, 0.08); + --auth-card-bg: rgb(255, 255, 255); + --auth-card-shadow: rgba(15, 23, 42, 0.15); +} + +body { + background-color: var(--bs-body-bg) !important; + color: var(--bs-body-color) !important; + --bs-heading-color: var(--bs-heading-color) !important; + font-family: 'Exo 2', sans-serif; +} + +.linebreak { + width: 100%; + border-bottom: 1px solid var(--linebreak); + margin: 10px 0; + height: 1px; +} + +.place-card { + background-color: var(--card-bg); + min-height: 220px; + transition: 0.2s; + width: 150px; + border-radius: 3px; + box-shadow: 0 0 5px var(--card-shadow); +} + +.place-card h5 { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.place-card:hover { + transform: 0.2s; + transform: scale(1.05); +} + +.place-card .votePercentageBackground { + background-color: var(--track-bg); + z-index: 1; + height: 10px; + border-radius: 4px; + overflow: hidden; + position: relative; + border: 1px solid var(--surface-alt); + margin-top: 3px; +} + +.place-card .votePercentageFill { + background-color: var(--track-fill); + height: 10px; +} + +.place-card .segment { + background-color: var(--surface-alt); + height: 10px; + width: 2px; + position: absolute; + top: 0; + z-index: 3; +} + +.messagealerts { + background: var(--alert-bg); + color: var(--alert-text); + word-wrap: break-word; +} + +.bg-surface { + background-color: var(--surface-alt) !important; +} + +html[data-theme="light"] .rbx-icon-nav-robux, +html[data-theme="light"] .rbx-icon-nav-tix, +html[data-theme="light"] .rbx-icon-nav-settings { + filter: invert(1); +} + +#websitewidemessage { + background-color: var(--website-message-bg); +} + +#websitewidemessage p { + margin: 0; + padding: 0 24px; + font-weight: 500; + font-size: 1rem; + text-align: center; +} + +#websitewidemessage-close { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + font-size: 1.25rem; + line-height: 1; + padding: 0 4px; + cursor: pointer; + color: inherit; + opacity: 0.7; +} + +#websitewidemessage-close:hover { + opacity: 1; +} + +#websitewidemessage a { + text-decoration: underline !important; + color: rgb(0, 140, 255) !important; + font-weight: 400 !important; + transition: 0.2s; +} + +.navbar { + background-color: var(--nav-bg); + border-bottom: 1px solid var(--nav-border); +} + +.navbar-brand h1 { + font-size: 2rem; + margin-bottom: 0; + font-weight: 700; + text-align: center; +} + +#footer { + border-top: 1px solid var(--nav-border); + background-color: var(--footer-bg); + min-height: 100px; +} + +#footerlist a { + display: flex; + width: 100%; + text-decoration: none !important; + color: var(--footer-text) !important; + font-weight: 400 !important; + transition: 0.2s; +} + +#currencydiv span { + margin-left: 4px; + font-size: 1.25rem; + font-weight: 400; + color: var(--nav-text); + min-width: 28px; +} + +.text-secondary { + color: var(--text-muted) !important; +} + +.rbx-icon-default-navigation,.rbx-icon-nav-menu,.rbx-icon-nav-robux,.rbx-icon-nav-tix,.rbx-icon-nav-settings,.rbx-icon-nav-search,.rbx-icon-nav-home,.rbx-icon-nav-profile,.rbx-icon-nav-message,.rbx-icon-nav-friends,.rbx-icon-nav-charactercustomizer,.rbx-icon-nav-inventory,.rbx-icon-nav-trade,.rbx-icon-nav-group,.rbx-icon-nav-forum,.rbx-icon-nav-blog,.rbx-icon-nav-search-white,.rbx-icon-nav-shop { + background-image: url(/static/svg/navigation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; +} + +.rbx-icon-nav-menu { + background-position: 0 0; +} + +.rbx-icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .rbx-icon-nav-menu,a:hover .rbx-icon-nav-menu { + background-position: -28px 0; +} + +.rbx-icon-nav-robux { + background-position: 0 -28px; +} + +.rbx-icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .rbx-icon-nav-robux,a:hover .rbx-icon-nav-robux { + background-position: -28px -28px; +} + +.rbx-icon-nav-tix { + background-position: 0 -56px; +} + +.rbx-icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .rbx-icon-nav-tix,a:hover .rbx-icon-nav-tix { + background-position: -28px -56px; +} + +.rbx-icon-nav-settings { + background-position: 0 -84px; +} + +.rbx-icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .rbx-icon-nav-settings,a:hover .rbx-icon-nav-settings { + background-position: -28px -84px; +} + +.rbx-icon-nav-search { + background-position: 0 -112px; +} + +.rbx-icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .rbx-icon-nav-search,a:hover .rbx-icon-nav-search { + background-position: -28px -112px; +} + +.rbx-icon-nav-home { + background-position: 0 -140px; +} + +.rbx-icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .rbx-icon-nav-home,a:hover .rbx-icon-nav-home { + background-position: -28px -140px; +} + +.rbx-icon-nav-profile { + background-position: 0 -168px; +} + +.rbx-icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .rbx-icon-nav-profile,a:hover .rbx-icon-nav-profile { + background-position: -28px -168px; +} + +.rbx-icon-nav-message { + background-position: 0 -196px; +} + +.rbx-icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .rbx-icon-nav-message,a:hover .rbx-icon-nav-message { + background-position: -28px -196px; +} + +.rbx-icon-nav-friends { + background-position: 0 -224px; +} + +.rbx-icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .rbx-icon-nav-friends,a:hover .rbx-icon-nav-friends { + background-position: -28px -224px; +} + +.rbx-icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.rbx-icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +button:hover .rbx-icon-nav-charactercustomizer,a:hover .rbx-icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.rbx-icon-nav-inventory { + background-position: 0 -280px; +} + +.rbx-icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .rbx-icon-nav-inventory,a:hover .rbx-icon-nav-inventory { + background-position: -28px -280px; +} + +.rbx-icon-nav-trade { + background-position: 0 -308px; +} + +.rbx-icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .rbx-icon-nav-trade,a:hover .rbx-icon-nav-trade { + background-position: -28px -308px; +} + +.rbx-icon-nav-group { + background-position: 0 -336px; +} + +.rbx-icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .rbx-icon-nav-group,a:hover .rbx-icon-nav-group { + background-position: -28px -336px; +} + +.rbx-icon-nav-forum { + background-position: 0 -364px; +} + +.rbx-icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .rbx-icon-nav-forum,a:hover .rbx-icon-nav-forum { + background-position: -28px -364px; +} + +.rbx-icon-nav-blog { + background-position: 0 -392px; +} + +.rbx-icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .rbx-icon-nav-blog,a:hover .rbx-icon-nav-blog { + background-position: -28px -392px; +} + +.rbx-icon-nav-search-white { + background-position: 0 -420px; +} + +.rbx-icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .rbx-icon-nav-search-white,a:hover .rbx-icon-nav-search-white { + background-position: -28px -420px; +} + +.rbx-icon-nav-shop { + background-position: 0 -448px; +} + +.rbx-icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .rbx-icon-nav-shop,a:hover .rbx-icon-nav-shop { + background-position: -28px -448px; +} + +.rbx-icon-default-bc,.rbx-icon-bc,.rbx-icon-tbc,.rbx-icon-obc, .rbx-icon-negative-bc, .rbx-icon-negative-tbc, .rbx-icon-negative-obc{ + background-image: url(/static/img/Style/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; +} + +.rbx-icon-default-iconlabels,.rbx-icon-bc-label,.rbx-icon-tbc-label,.rbx-icon-obc-label,.rbx-icon-limited-label,.rbx-icon-limited-bc-label,.rbx-icon-limited-tbc-label,.rbx-icon-limited-obc-label,.rbx-icon-limited-unique-label,.rbx-icon-limited-unique-bc-label,.rbx-icon-limited-unique-tbc-label,.rbx-icon-limited-unique-obc-label { + background-image: url(/static/img/Style/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; +} + +.rbx-icon-bc { + background-position: 0 0; +} + +.rbx-icon-tbc { + background-position: 0 -28px; +} + +.rbx-icon-obc { + background-position: 0 -56px; +} + +.rbx-icon-negative-bc { + background-position: -52px 0; +} + +.rbx-icon-negative-tbc { + background-position: -52px -28px; +} + +.rbx-icon-negative-obc { + background-position: -52px -56px; +} + +.rbx-icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.rbx-icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.rbx-icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.rbx-icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.rbx-icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.rbx-icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.rbx-icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.rbx-icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.rbx-icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.rbx-icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.rbx-icon-limited-unique-obc-label { + background-position: 0 -180px; +} \ No newline at end of file diff --git a/app/static/css/global.css1 b/app/static/css/global.css1 new file mode 100644 index 0000000..dfe6093 --- /dev/null +++ b/app/static/css/global.css1 @@ -0,0 +1,1126 @@ +@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800&display=swap'); + +:root { + --rbx-bg: #1a1a1a; + --rbx-surface: #242424; + --rbx-surface-2: #2a2a2a; + --rbx-border: #393b3d; + --rbx-text: #e3e3e3; + --rbx-text-dim: #c3c3c3; + --rbx-text-muted: #909090; + --rbx-accent: #0066ff; + --rbx-accent-hover: #0052cc; + --rbx-danger: #e3000b; + --rbx-header-h: 44px; + --rbx-sidenav-w: 44px; + --rbx-sidenav-expanded-w: 220px; +} + +[class*="icon-nav-"]::before, +[class*="icon-nav-"]::after, +[class*="rbx-icon-nav-"]::before, +[class*="rbx-icon-nav-"]::after { + content: none !important; + display: none !important; +} + +.rbx-sidenav-icon { + font-size: 1rem; + color: inherit; +} + +.rbx-sidenav-icon i { + font-size: 1rem; + line-height: 1; + color: inherit; +} + + + +*, *::before, *::after { + box-sizing: border-box; +} + +html, body { + margin: 0; + padding: 0; + background-color: var(--rbx-bg) !important; + color: var(--rbx-text) !important; + font-family: 'Nunito', 'Gotham SSm A', 'Gotham SSm B', Arial, sans-serif !important; + font-size: 14px; + line-height: 1.42857143; +} + +body.rbx-body { + background-color: var(--rbx-bg) !important; +} + +a { + color: var(--rbx-accent); + text-decoration: none; +} + +a:hover { + color: var(--rbx-accent-hover); + text-decoration: none; +} + +.icon-default-navigation, +.icon-nav-menu, +.icon-nav-robux, +.icon-nav-tix, +.icon-nav-settings, +.icon-nav-search, +.icon-nav-home, +.icon-nav-profile, +.icon-nav-message, +.icon-nav-friends, +.icon-nav-charactercustomizer, +.icon-nav-inventory, +.icon-nav-trade, +.icon-nav-group, +.icon-nav-forum, +.icon-nav-blog, +.icon-nav-search-white, +.icon-nav-shop { + background-image: url('/static/svg/navigation.svg') !important; +} + +.rbx-icon-default-navigation, +.rbx-icon-nav-menu, +.rbx-icon-nav-robux, +.rbx-icon-nav-tix, +.rbx-icon-nav-settings, +.rbx-icon-nav-search, +.rbx-icon-nav-home, +.rbx-icon-nav-profile, +.rbx-icon-nav-message, +.rbx-icon-nav-friends, +.rbx-icon-nav-charactercustomizer, +.rbx-icon-nav-inventory, +.rbx-icon-nav-trade, +.rbx-icon-nav-group, +.rbx-icon-nav-forum, +.rbx-icon-nav-blog, +.rbx-icon-nav-search-white, +.rbx-icon-nav-shop { + background-image: url('/static/svg/navigation.svg'); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.rbx-icon-nav-menu { background-position: 0 0; } +.rbx-icon-nav-menu:hover { background-position: -28px 0; } +.rbx-icon-nav-robux { background-position: 0 -28px; } +.rbx-icon-nav-robux:hover { background-position: -28px -28px; } +a:hover .rbx-icon-nav-robux { background-position: -28px -28px; } +.rbx-icon-nav-tix { background-position: 0 -56px; } +.rbx-icon-nav-tix:hover { background-position: -28px -56px; } +a:hover .rbx-icon-nav-tix { background-position: -28px -56px; } +.rbx-icon-nav-settings { background-position: 0 -84px; } +.rbx-icon-nav-settings:hover{ background-position: -28px -84px; } +.rbx-icon-nav-search { background-position: 0 -112px; } + +.rbx-icon-default-bc, .rbx-icon-bc, .rbx-icon-tbc, .rbx-icon-obc, +.rbx-icon-negative-bc, .rbx-icon-negative-tbc, .rbx-icon-negative-obc { + background-image: url('/static/img/Style/bc.svg'); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; +} + +.rbx-icon-bc { background-position: 0 0; } +.rbx-icon-tbc { background-position: 0 -28px; } +.rbx-icon-obc { background-position: 0 -56px; } +.rbx-icon-negative-bc { background-position: -52px 0; } +.rbx-icon-negative-tbc { background-position: -52px -28px; } +.rbx-icon-negative-obc { background-position: -52px -56px; } + +.rbx-icon-default-iconlabels, +.rbx-icon-bc-label, .rbx-icon-tbc-label, .rbx-icon-obc-label, +.rbx-icon-limited-label, .rbx-icon-limited-unique-label { + background-image: url('/static/img/Style/icon_labels.svg'); + background-repeat: no-repeat; + background-size: auto auto; + height: 18px; + display: inline-block; +} + +.rbx-icon-bc-label { width: 30px; background-position: 0 0; } +.rbx-icon-tbc-label { width: 40px; background-position: 0 -18px; } +.rbx-icon-obc-label { width: 40px; background-position: 0 -36px; } +.rbx-icon-limited-label { width: 60px; background-position: 0 -54px; } +.rbx-icon-limited-unique-label { width: 80px; background-position: 0 -126px; } + +#navigation-container { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 9000; + pointer-events: none; +} + +#header, .rbx-header { + pointer-events: all; + position: fixed !important; + top: 0; + left: 0; + right: 0; + height: var(--rbx-header-h); + background-color: #1a1a1a !important; + border-bottom: 1px solid var(--rbx-border) !important; + z-index: 9100; +} + +.rbx-header-inner { + display: flex; + align-items: center; + height: var(--rbx-header-h); + padding: 0 8px; + gap: 0; +} + +.rbx-navbar-header { + display: flex; + align-items: center; + flex-shrink: 0; + gap: 4px; +} + +.rbx-nav-collapse { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + cursor: pointer; + flex-shrink: 0; + transition: background-color 0.15s; +} + +.rbx-nav-collapse:hover { + background-color: rgba(255,255,255,0.1); +} + +.navbar-header { + display: flex; + align-items: center; +} + +.nexium-brand { + text-decoration: none !important; + display: flex; + align-items: center; +} + +.nexium-logo { + font-size: 1.35rem; + font-weight: 800; + color: #ffffff !important; + letter-spacing: 3px; + text-transform: uppercase; + font-family: 'Nunito', 'Gotham SSm A', sans-serif; + padding: 0 6px; + user-select: none; +} + +.nav.rbx-navbar, ul.rbx-navbar { + list-style: none; + margin: 0; + padding: 0; + display: flex; + align-items: stretch; + height: var(--rbx-header-h); + flex-shrink: 0; +} + +.rbx-navbar-top-links { + margin-left: 8px; +} + +.nav.rbx-navbar li, +ul.rbx-navbar li { + display: flex; + align-items: stretch; +} + +.nav.rbx-navbar li a, +ul.rbx-navbar li a, +.font-header-2.nav-menu-title, +a.nav-menu-title { + display: flex; + align-items: center; + padding: 0 14px; + color: #c3c3c3 !important; + text-decoration: none !important; + font-size: 0.875rem; + font-weight: 600; + white-space: nowrap; + transition: color 0.12s, background-color 0.12s; + font-family: 'Nunito', Arial, sans-serif !important; +} + +.nav.rbx-navbar li a:hover, +ul.rbx-navbar li a:hover, +.font-header-2.nav-menu-title:hover, +a.nav-menu-title:hover { + color: #ffffff !important; + background-color: rgba(255,255,255,0.07); +} + +#right-navigation-header { + margin-left: auto; + display: flex; + align-items: center; + height: var(--rbx-header-h); + gap: 4px; + flex-shrink: 0; +} + +.nav-search-container { + display: flex; + align-items: center; +} + +.nav-search-form { + display: flex; + align-items: center; + background-color: #2e2e2e; + border: 1px solid #4a4a4a; + border-radius: 4px; + height: 30px; + overflow: hidden; + transition: border-color 0.15s; +} + +.nav-search-form:focus-within { + border-color: var(--rbx-accent); +} + +.nav-search-input { + background: transparent; + border: none; + outline: none; + color: #e3e3e3; + font-size: 0.825rem; + padding: 0 10px; + width: 130px; + font-family: inherit; +} + +.nav-search-input::placeholder { + color: #666; +} + +.nav-search-btn { + background: transparent; + border: none; + cursor: pointer; + padding: 0 8px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.12s; +} + +.nav-search-btn:hover { + background-color: rgba(255,255,255,0.08); +} + +.nav-currency-section { + display: flex; + align-items: center; +} + +.nav-currency-item { + display: flex; + align-items: center; + gap: 3px; + text-decoration: none !important; + color: #e3e3e3 !important; + font-size: 0.875rem; + font-weight: 700; + padding: 0 8px; + height: 36px; + border-radius: 4px; + transition: background-color 0.12s, color 0.12s; +} + +.nav-currency-item:hover { + background-color: rgba(255,255,255,0.08); + color: #ffffff !important; +} + +.nav-currency-amt { + min-width: 20px; + font-variant-numeric: tabular-nums; +} + +.nav-account-section { + display: flex; + align-items: center; +} + +.nav-account-dropdown-wrap { + position: relative; +} + +.nav-account-btn { + display: flex; + align-items: center; + gap: 6px; + background: none; + border: none; + color: #e3e3e3; + font-family: inherit; + font-size: 0.825rem; + font-weight: 600; + cursor: pointer; + padding: 0 8px; + height: 36px; + border-radius: 4px; + transition: background-color 0.12s, color 0.12s; +} + +.nav-account-btn:hover { + background-color: rgba(255,255,255,0.08); + color: #ffffff; +} + +.nav-headshot { + width: 28px; + height: 28px; + border-radius: 4px; + display: block; + object-fit: cover; + flex-shrink: 0; +} + +.nav-account-name { + max-width: 110px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nav-notif-dot { + width: 8px; + height: 8px; + background-color: var(--rbx-danger); + border-radius: 50%; + flex-shrink: 0; +} + +.nav-dropdown-menu { + display: none; + position: absolute; + top: calc(100% + 4px); + right: 0; + min-width: 180px; + background-color: #242424; + border: 1px solid var(--rbx-border); + border-radius: 4px; + box-shadow: 0 6px 20px rgba(0,0,0,0.55); + z-index: 9999; + padding: 4px 0; +} + +.nav-account-dropdown-wrap.open .nav-dropdown-menu { + display: block; +} + +.nav-dropdown-item { + display: flex; + align-items: center; + gap: 6px; + width: 100%; + padding: 7px 14px; + color: #c3c3c3 !important; + text-decoration: none !important; + font-size: 0.825rem; + font-weight: 500; + background: none; + border: none; + cursor: pointer; + font-family: inherit; + text-align: left; + transition: background-color 0.1s, color 0.1s; + white-space: nowrap; +} + +.nav-dropdown-item:hover { + background-color: rgba(255,255,255,0.07); + color: #ffffff !important; +} + +.nav-dropdown-admin { + color: #f0a500 !important; +} + +.nav-dropdown-admin:hover { + color: #ffc107 !important; +} + +.nav-dropdown-logout { + color: var(--rbx-danger) !important; + font-weight: 600; +} + +.nav-dropdown-logout:hover { + color: #ff3d3d !important; +} + +.nav-dropdown-divider { + border-top: 1px solid var(--rbx-border); + margin: 3px 0; +} + +.nav-badge { + display: inline-flex; + align-items: center; + justify-content: center; + background-color: var(--rbx-danger); + color: #fff; + border-radius: 10px; + padding: 1px 5px; + font-size: 0.65rem; + font-weight: 700; + line-height: 1.4; + min-width: 16px; +} + +#left-navigation-container { + pointer-events: all; + position: fixed; + top: var(--rbx-header-h); + left: 0; + width: var(--rbx-sidenav-w); + height: calc(100vh - var(--rbx-header-h)); + background-color: #1a1a1a; + border-right: 1px solid var(--rbx-border); + z-index: 8900; + overflow: hidden; + transition: width 0.18s ease; + display: flex; + flex-direction: column; +} + +#left-navigation-container.rbx-sidenav-expanded { + width: var(--rbx-sidenav-expanded-w); + box-shadow: 4px 0 16px rgba(0,0,0,0.45); +} + +.rbx-sidenav { + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; +} + +.rbx-sidenav-list { + list-style: none; + margin: 0; + padding: 6px 0; + flex: 1; + overflow-y: auto; + overflow-x: hidden; + scrollbar-width: none; +} + +.rbx-sidenav-list::-webkit-scrollbar { + display: none; +} + +.rbx-sidenav-item { + display: block; +} + +.rbx-sidenav-link { + display: flex; + align-items: center; + width: var(--rbx-sidenav-expanded-w); + height: 40px; + text-decoration: none !important; + color: #a0a0a0 !important; + font-size: 0.825rem; + font-weight: 600; + overflow: hidden; + white-space: nowrap; + transition: background-color 0.12s, color 0.12s; +} + +.rbx-sidenav-link:hover { + background-color: rgba(255,255,255,0.06); + color: #ffffff !important; +} + +.rbx-sidenav-admin { + color: #f0a500 !important; +} + +.rbx-sidenav-admin:hover { + color: #ffc107 !important; +} + +.rbx-sidenav-icon { + width: var(--rbx-sidenav-w); + min-width: var(--rbx-sidenav-w); + height: 40px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.rbx-sidenav-label { + opacity: 0; + transition: opacity 0.14s; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; +} + +#left-navigation-container.rbx-sidenav-expanded .rbx-sidenav-label { + opacity: 1; +} + +.rbx-sidenav-badge { + display: inline-flex; + align-items: center; + justify-content: center; + background-color: var(--rbx-danger); + color: #fff; + border-radius: 10px; + padding: 1px 5px; + font-size: 0.6rem; + font-weight: 700; + line-height: 1.4; + min-width: 14px; +} + +#page-main-content, .rbx-page-main { + margin-top: var(--rbx-header-h); + margin-left: var(--rbx-sidenav-w); + min-height: calc(100vh - var(--rbx-header-h)); + background-color: var(--rbx-bg); + color: var(--rbx-text); +} + +.rbx-page-no-nav { + margin-top: 0 !important; + margin-left: 0 !important; +} + +.container-footer, #footer-container { + margin-left: var(--rbx-sidenav-w); + background-color: #111111; + border-top: 1px solid var(--rbx-border); +} + +.footer-inner { + max-width: 1200px; + margin: 0 auto; + padding: 36px 24px; + display: flex; + flex-wrap: wrap; + gap: 32px; +} + +.footer-col { + display: flex; + flex-direction: column; + gap: 6px; + min-width: 120px; +} + +.footer-brand-col { + flex: 1; + min-width: 200px; +} + +.footer-nexium-logo { + font-size: 1.4rem; + font-weight: 800; + letter-spacing: 3px; + color: #ffffff; + font-family: 'Nunito', sans-serif; +} + +.footer-disclaimer { + color: var(--rbx-text-muted); + font-size: 0.78rem; + margin: 6px 0 0; + line-height: 1.5; + max-width: 280px; +} + +.footer-col-title { + color: #ffffff; + font-size: 0.78rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + margin: 0 0 4px; +} + +.footer-link { + color: var(--rbx-text-muted) !important; + text-decoration: none !important; + font-size: 0.825rem; + font-weight: 500; + transition: color 0.12s; +} + +.footer-link:hover { + color: #ffffff !important; +} + +#websitewidemessage { + position: fixed; + top: 0; + left: 0; + right: 0; + background-color: rgb(255,136,0); + z-index: 9200; + padding: 4px 12px; +} + +#websitewidemessage p { + margin: 0; + font-weight: 500; + font-size: 0.9rem; + text-align: center; + color: #fff; +} + +#websitewidemessage a { + text-decoration: underline !important; + color: #fff !important; + font-weight: 600 !important; +} + +.linebreak { + width: 100%; + border-bottom: 1px solid var(--rbx-border); + margin: 10px 0; + height: 1px; +} + +.place-card { + background-color: var(--rbx-surface-2); + min-height: 220px; + transition: transform 0.15s; + width: 150px; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0,0,0,0.4); +} + +.place-card h5 { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.place-card:hover { + transform: scale(1.04); +} + +.place-card .votePercentageBackground { + background-color: #313131; + z-index: 1; + height: 10px; + border-radius: 4px; + overflow: hidden; + position: relative; + border: 1px solid #1b1b1b; + margin-top: 3px; +} + +.place-card .votePercentageFill { + background-color: #555; + height: 10px; +} + +.place-card .segment { + background-color: #1b1b1b; + height: 10px; + width: 2px; + position: absolute; + top: 0; + z-index: 3; +} + +.text-secondary { + color: var(--rbx-text-muted) !important; +} + +.cursor-pointer { + cursor: pointer; +} + +.badge, .badge-danger { + display: inline-flex; + align-items: center; + justify-content: center; + background-color: var(--rbx-danger); + color: #fff; + border-radius: 10px; + padding: 2px 6px; + font-size: 0.7rem; + font-weight: 700; + min-width: 16px; +} + +.alert { + border-radius: 4px; + padding: 10px 16px; + margin-bottom: 10px; +} + +.alert-danger { background-color: rgba(227,0,11,0.15); border: 1px solid rgba(227,0,11,0.35); color: #ff6b6b; } +.alert-success { background-color: rgba(0,180,80,0.12); border: 1px solid rgba(0,180,80,0.30); color: #5fe890; } +.alert-info { background-color: rgba(0,102,255,0.12); border: 1px solid rgba(0,102,255,0.30); color: #6babff; } +.alert-warning { background-color: rgba(240,165,0,0.12); border: 1px solid rgba(240,165,0,0.30); color: #ffd060; } + +.btn, button.btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 7px 18px; + font-size: 0.875rem; + font-weight: 600; + border-radius: 4px; + border: none; + cursor: pointer; + transition: background-color 0.15s, opacity 0.15s; + font-family: inherit; + text-decoration: none !important; +} + +.btn-primary, .btn-growth-md, .btn-full-width { + background-color: var(--rbx-accent); + color: #fff !important; +} + +.btn-primary:hover { + background-color: var(--rbx-accent-hover); + color: #fff !important; +} + +.btn-secondary { + background-color: var(--rbx-surface-2); + color: var(--rbx-text) !important; + border: 1px solid var(--rbx-border); +} + +.btn-secondary:hover { + background-color: #333; +} + +.btn-danger { + background-color: var(--rbx-danger); + color: #fff !important; +} + +.btn-danger:hover { + background-color: #b50009; +} + +.btn-sm { + padding: 4px 10px; + font-size: 0.78rem; +} + +.btn-lg { + padding: 10px 24px; + font-size: 1rem; +} + +.form-control, input[type="text"], input[type="password"], input[type="email"], +input[type="number"], textarea, select { + background-color: #2a2a2a !important; + border: 1px solid #4a4a4a !important; + color: var(--rbx-text) !important; + border-radius: 4px; + padding: 6px 10px; + font-family: inherit; + font-size: 0.875rem; + transition: border-color 0.15s; + width: 100%; +} + +.form-control:focus, input[type="text"]:focus, input[type="password"]:focus, +input[type="email"]:focus, input[type="number"]:focus, textarea:focus, select:focus { + border-color: var(--rbx-accent) !important; + outline: none; + background-color: #2e2e2e !important; +} + +.form-control::placeholder, input::placeholder, textarea::placeholder { + color: #666 !important; +} + +select option { + background-color: #2a2a2a; + color: var(--rbx-text); +} + +.card, .panel, .well { + background-color: var(--rbx-surface); + border: 1px solid var(--rbx-border); + border-radius: 4px; +} + +.modal-content { + background-color: var(--rbx-surface) !important; + border: 1px solid var(--rbx-border) !important; + color: var(--rbx-text) !important; +} + +.modal-header { + border-bottom: 1px solid var(--rbx-border) !important; +} + +.modal-footer { + border-top: 1px solid var(--rbx-border) !important; +} + +.dropdown-menu { + background-color: var(--rbx-surface-2) !important; + border: 1px solid var(--rbx-border) !important; + border-radius: 4px; +} + +.dropdown-item, .dropdown-menu a { + color: var(--rbx-text-dim) !important; + font-size: 0.85rem; +} + +.dropdown-item:hover, .dropdown-menu a:hover { + background-color: rgba(255,255,255,0.07) !important; + color: #fff !important; +} + +.dropdown-divider, .dropdown-menu hr { + border-color: var(--rbx-border) !important; +} + +table { + width: 100%; + border-collapse: collapse; + color: var(--rbx-text); +} + +th { + border-bottom: 2px solid var(--rbx-border); + padding: 8px 12px; + text-align: left; + font-weight: 700; + font-size: 0.825rem; + color: var(--rbx-text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +td { + padding: 8px 12px; + border-bottom: 1px solid var(--rbx-border); + font-size: 0.875rem; +} + +tr:last-child td { + border-bottom: none; +} + +.pagination { + display: flex; + list-style: none; + gap: 4px; + padding: 0; + margin: 16px 0; +} + +.pagination li a, .pagination li span { + display: flex; + align-items: center; + justify-content: center; + min-width: 32px; + height: 32px; + padding: 0 8px; + background-color: var(--rbx-surface-2); + border: 1px solid var(--rbx-border); + border-radius: 4px; + color: var(--rbx-text-dim) !important; + font-size: 0.825rem; + font-weight: 600; + text-decoration: none !important; + transition: background-color 0.12s; +} + +.pagination li.active a, +.pagination li.active span { + background-color: var(--rbx-accent); + border-color: var(--rbx-accent); + color: #fff !important; +} + +.pagination li a:hover { + background-color: rgba(255,255,255,0.1); +} + +h1, h2, h3, h4, h5, h6 { + color: var(--rbx-text); + font-family: 'Nunito', 'Gotham SSm A', sans-serif; +} + +.title-logo { + font-size: 1.35rem; + font-weight: 800; + letter-spacing: 3px; + margin-bottom: 0; + text-transform: uppercase; + color: #fff; +} + +.container, .container-fluid { + width: 100%; + padding: 0 16px; +} + +.container { + max-width: 1200px; + margin: 0 auto; +} + +.row { + display: flex; + flex-wrap: wrap; + margin: 0 -8px; +} + +[class^="col-"], [class*=" col-"] { + padding: 0 8px; + flex: 1; +} + +.col-4 { flex: 0 0 33.3333%; max-width: 33.3333%; } +.col-6 { flex: 0 0 50%; max-width: 50%; } +.col-8 { flex: 0 0 66.6666%; max-width: 66.6666%; } +.col-12 { flex: 0 0 100%; max-width: 100%; } +.col { flex: 1; } + +.d-flex { display: flex !important; } +.align-items-center { align-items: center !important; } +.justify-content-center { justify-content: center !important; } +.justify-content-between { justify-content: space-between !important; } +.flex-wrap { flex-wrap: wrap !important; } +.gap-2 { gap: 8px !important; } +.gap-3 { gap: 12px !important; } +.gap-4 { gap: 16px !important; } +.ms-auto { margin-left: auto !important; } +.me-auto { margin-right: auto !important; } +.mt-1 { margin-top: 4px !important; } +.mt-2 { margin-top: 8px !important; } +.mt-3 { margin-top: 12px !important; } +.mt-4 { margin-top: 16px !important; } +.mb-1 { margin-bottom: 4px !important; } +.mb-2 { margin-bottom: 8px !important; } +.mb-3 { margin-bottom: 12px !important; } +.mb-4 { margin-bottom: 16px !important; } +.pt-1 { padding-top: 4px !important; } +.pt-2 { padding-top: 8px !important; } +.pt-3 { padding-top: 12px !important; } +.pt-4 { padding-top: 16px !important; } +.pb-1 { padding-bottom: 4px !important; } +.pb-2 { padding-bottom: 8px !important; } +.pb-3 { padding-bottom: 12px !important; } +.pb-4 { padding-bottom: 16px !important; } +.ps-3 { padding-left: 12px !important; } +.pe-3 { padding-right: 12px !important; } +.p-0 { padding: 0 !important; } +.p-2 { padding: 8px !important; } +.p-3 { padding: 12px !important; } +.p-4 { padding: 16px !important; } +.text-center { text-align: center !important; } +.text-end { text-align: right !important; } +.text-white { color: #fff !important; } +.text-muted { color: var(--rbx-text-muted) !important; } +.fw-bold { font-weight: 700 !important; } +.fw-semibold { font-weight: 600 !important; } +.small { font-size: 0.78rem !important; } +.w-100 { width: 100% !important; } +.rounded { border-radius: 4px !important; } +.rounded-circle { border-radius: 50% !important; } +.overflow-hidden { overflow: hidden !important; } +.border { border: 1px solid var(--rbx-border) !important; } +.border-bottom { border-bottom: 1px solid var(--rbx-border) !important; } +.bg-danger { background-color: var(--rbx-danger) !important; } +.bg-success { background-color: #008f40 !important; } +.position-relative { position: relative !important; } +.position-absolute { position: absolute !important; } +.fixed-top { position: fixed !important; top: 0; left: 0; right: 0; } +.d-none { display: none !important; } +.d-block { display: block !important; } +.d-inline-block { display: inline-block !important; } +.d-inline-flex { display: inline-flex !important; } +.invisible { visibility: hidden !important; } +.opacity-0 { opacity: 0 !important; } +.opacity-100 { opacity: 1 !important; } +.font-weight-bold { font-weight: 700 !important; } +.me-1 { margin-right: 4px !important; } +.me-2 { margin-right: 8px !important; } +.me-3 { margin-right: 12px !important; } +.ms-1 { margin-left: 4px !important; } +.ms-2 { margin-left: 8px !important; } +.ms-3 { margin-left: 12px !important; } + +.badge.text-bg-danger, .badge.bg-danger { + background-color: var(--rbx-danger) !important; + color: #fff !important; +} + +.badge.text-bg-success, .badge.bg-success { + background-color: #008f40 !important; + color: #fff !important; +} + +@media (max-width: 768px) { + .rbx-navbar-top-links { + display: none !important; + } + + .nav-search-container { + display: none; + } + + .nav-account-name { + display: none; + } + + #page-main-content, .rbx-page-main { + margin-left: 0; + } + + .container-footer, #footer-container { + margin-left: 0; + } + + #left-navigation-container { + width: 0; + border-right: none; + } + + #left-navigation-container.rbx-sidenav-expanded { + width: var(--rbx-sidenav-expanded-w); + border-right: 1px solid var(--rbx-border); + } +} \ No newline at end of file diff --git a/app/static/css/home.css b/app/static/css/home.css new file mode 100644 index 0000000..8ea49a5 --- /dev/null +++ b/app/static/css/home.css @@ -0,0 +1,33 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.card-container { + background-color: var(--card-bg) !important; + box-shadow: 0 0 10px 0 var(--card-shadow); + border-radius: 5px; +} + +.status-icon { + position: absolute; + bottom : -8px; + right: -8px; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(0, 139, 219); + border: 2px solid var(--card-bg); +} + +.status-icon-green { + background-color: rgb(15, 211, 80) !important; +} + +.image-container { + position: relative; + display: table; + margin: 0 auto; + +} \ No newline at end of file diff --git a/app/static/css/home.css1 b/app/static/css/home.css1 new file mode 100644 index 0000000..7b21047 --- /dev/null +++ b/app/static/css/home.css1 @@ -0,0 +1,32 @@ +#main { + display: flex; + min-height: 100vh; + padding-top: 24px; +} + +.card-container { + background-color: #242424; + box-shadow: 0 0 10px rgba(0,0,0,0.3); + border-radius: 4px; +} + +.status-icon { + position: absolute; + bottom: -6px; + right: -6px; + width: 18px; + height: 18px; + border-radius: 50%; + background-color: rgb(0,139,219); + border: 2px solid #1a1a1a; +} + +.status-icon-green { + background-color: #02b757 !important; +} + +.image-container { + position: relative; + display: table; + margin: 0 auto; +} \ No newline at end of file diff --git a/app/static/css/icons.css b/app/static/css/icons.css new file mode 100644 index 0000000..e4504ce --- /dev/null +++ b/app/static/css/icons.css @@ -0,0 +1,1549 @@ +/* + FILE ARCHIVED ON 20:10:15 Mar 23, 2016 AND RETRIEVED FROM THE + INTERNET ARCHIVE ON 16:20:56 Aug 07, 2021. + JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. + + ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. + SECTION 108(a)(3)). +*/ +.icon-default-navigation, +.icon-nav-menu, +.icon-nav-robux, +.icon-nav-tix, +.icon-nav-settings, +.icon-nav-search, +.icon-nav-home, +.icon-nav-profile, +.icon-nav-message, +.icon-nav-friends, +.icon-nav-charactercustomizer, +.icon-nav-inventory, +.icon-nav-trade, +.icon-nav-group, +.icon-nav-forum, +.icon-nav-blog, +.icon-nav-search-white, +.icon-nav-shop { + background-image: url('/static/img/navigation_02012016.svg'); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.dark-icon { + background-image: url('/static/img/navigation_02012016-dark.svg') !important; +} + +.icon-nav-menu { + background-position: 0 0; +} + +.icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .icon-nav-menu, +a:hover .icon-nav-menu { + background-position: -28px 0; +} + +.icon-nav-robux { + background-position: 0 -28px; +} + +.icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .icon-nav-robux, +a:hover .icon-nav-robux { + background-position: -28px -28px; +} + +.icon-nav-tix { + background-position: 0 -56px; +} + +.icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .icon-nav-tix, +a:hover .icon-nav-tix { + background-position: -28px -56px; +} + +.icon-nav-settings { + background-position: 0 -84px; +} + +.icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .icon-nav-settings, +a:hover .icon-nav-settings { + background-position: -28px -84px; +} + +.icon-nav-search { + background-position: 0 -112px; +} + +.icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .icon-nav-search, +a:hover .icon-nav-search { + background-position: -28px -112px; +} + +.icon-nav-home { + background-position: 0 -140px; +} + +.hover-icon-nav-home:hover { + color: #02b757; +} + +.icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .icon-nav-home, +a:hover .icon-nav-home { + background-position: -28px -140px; +} + +.icon-nav-profile { + background-position: 0 -168px; +} + +.hover-icon-nav-profile:hover { + color: #f68802; +} + +.icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .icon-nav-profile, +a:hover .icon-nav-profile { + background-position: -28px -168px; +} + +.icon-nav-message { + background-position: 0 -196px; +} + +.icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .icon-nav-message, +a:hover .icon-nav-message { + background-position: -28px -196px; +} + +.icon-nav-friends { + background-position: 0 -224px; +} + +.icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .icon-nav-friends, +a:hover .icon-nav-friends { + background-position: -28px -224px; +} + +.icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +.hover-icon-nav-charactercustomizer:hover { + color: #f68802; +} + +button:hover .icon-nav-charactercustomizer, +a:hover .icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.icon-nav-inventory { + background-position: 0 -280px; +} + +.hover-icon-nav-inventory:hover { + color: #02b757; +} + +.icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .icon-nav-inventory, +a:hover .icon-nav-inventory { + background-position: -28px -280px; +} + +.icon-nav-trade { + background-position: 0 -308px; +} + +.icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .icon-nav-trade, +a:hover .icon-nav-trade { + background-position: -28px -308px; +} + +.icon-nav-group { + background-position: 0 -336px; +} + +.icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .icon-nav-group, +a:hover .icon-nav-group { + background-position: -28px -336px; +} + +.icon-nav-forum { + background-position: 0 -364px; +} + +.icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .icon-nav-forum, +a:hover .icon-nav-forum { + background-position: -28px -364px; +} + +.icon-nav-blog { + background-position: 0 -392px; +} + +.icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .icon-nav-blog, +a:hover .icon-nav-blog { + background-position: -28px -392px; +} + +.icon-nav-search-white { + background-position: 0 -420px; +} + +.icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .icon-nav-search-white, +a:hover .icon-nav-search-white { + background-position: -28px -420px; +} + +.icon-nav-shop { + background-position: 0 -448px; +} + +.icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .icon-nav-shop, +a:hover .icon-nav-shop { + background-position: -28px -448px; +} + +.icon-default-generic, +.icon-home, +.icon-search, +.icon-settings, +.icon-edit, +.icon-inactive, +.icon-male, +.icon-female, +.icon-page, +.icon-brokenpage, +.icon-audio, +.icon-moreinfo, +.icon-play, +.icon-pause, +.icon-menu, +.icon-right, +.icon-left, +.icon-up, +.icon-down, +.icon-next, +.icon-back, +.icon-checkmark, +.icon-checkmark-on, +.icon-close, +.icon-more, +.icon-sorting, +.icon-additem, +.icon-carousel-right, +.icon-carousel-left, +.icon-games-carousel-right, +.icon-games-carousel-left, +.icon-games-carousel-right.hover, +.icon-games-carousel-left.hover, +.icon-clock, +.icon-grid, +.icon-slideshow, +.icon-pastname, +.btn-generic-edit-lg .icon-edit, +a.btn-generic-edit-lg .icon-edit, +.btn-generic-edit-lg:hover .icon-edit, +a.btn-generic-edit-lg:hover .icon-edit, +.btn-generic-edit-md .icon-edit, +a.btn-generic-edit-md .icon-edit, +.btn-generic-edit-md:hover .icon-edit, +a.btn-generic-edit-md:hover .icon-edit, +.btn-generic-edit-sm .icon-edit, +a.btn-generic-edit-sm .icon-edit, +.btn-generic-edit-sm:hover .icon-edit, +a.btn-generic-edit-sm:hover .icon-edit, +.btn-generic-edit-xs .icon-edit, +a.btn-generic-edit-xs .icon-edit, +.btn-generic-edit-xs:hover .icon-edit, +a.btn-generic-edit-xs:hover .icon-edit { + background-image: url(/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-generic-16x16, +.icon-edit-16x16, +.icon-right-16x16, +.icon-left-16x16, +.icon-up-16x16, +.icon-down-16x16, +.icon-checkmark-16x16, +.icon-close-16x16, +.rbx-input-group-btn .rbx-input-dropdown-btn:hover .icon-down, +.rbx-input-group-btn .rbx-input-dropdown-btn:focus .icon-down, +.rbx-select-group:hover .icon-down, +.open .rbx-input-dropdown-btn .icon-down { + background-image: url(/static/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: 32px auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-games, +.icon-inventory, +.icon-games, +.icon-catalog, +.icon-like, +.icon-like.selected, +.icon-dislike, +.icon-dislike.selected, +.icon-playaudio, +.icon-copylocked, +.icon-nocopylocked, +.icon-publicserver, +.icon-privateserver, +.icon-allgears, +.icon-partialgears, +.icon-nogear, +.icon-MeleeWeapon, +.icon-RangedWeapon, +.icon-PowerUp, +.icon-Explosive, +.icon-MusicalInstrument, +.icon-NavigationEnhancer, +.icon-BuildingTool, +.icon-SocialItem, +.icon-PersonalTransport { + background-image: url(/static/img/games.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-badges, +.icon-inviter, +.icon-friendship, +.icon-welcome-to-the-club, +.icon-ambassador, +.icon-combat-initiation, +.icon-warrior, +.icon-bloxxer, +.icon-homestead, +.icon-bricksmith, +.icon-official-model-maker, +.icon-builders-club, +.icon-turbo-builders-club, +.icon-outrageous-builders-club, +.icon-administrator, +.icon-veteran { + background-image: url(/static/img/roblox_badges.svg); + background-repeat: no-repeat; + background-size: 280px auto; + width: 140px; + height: 140px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-friendstatus, +.icon-game, +.icon-studio, +.icon-online { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Home/friendsstatus.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-creation, +.icon-profile, +.icon-develop, +.icon-charactercustomizer, +.icon-place, +.icon-personalserver, +.icon-shirt, +.icon-tshirt, +.icon-decal, +.icon-pants, +.icon-models, +.icon-tutorial { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/creation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-social, +.icon-message, +.icon-addfriend, +.icon-friends, +.icon-group, +.icon-forum, +.icon-blog, +.icon-trade, +.icon-share { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/social.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-branded, +.icon-playerpoint, +.icon-clanpoint, +.icon-leaderboard, +.icon-favorite, +.icon-favorite.favorited, +.icon-robux, +.icon-tix { + background-image: url(/static/img/branded.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-bc, +.icon-bc, +.icon-tbc, +.icon-obc { + background-image: url(/static/img/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-negative, +.icon-report.active, +.icon-remove, +.icon-alert, +.icon-flag, +.icon-warning, +.icon-lock { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/negative_08272015.svg); + background-repeat: no-repeat; + background-size: 200% auto; + width: 20px; + height: 20px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-stars { + background-image: url(/web/20160323201015im_/http://static.rbxcdn.com/images/Games/stars.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-thumbs-16x16, +.icon-thumbs-up, +.icon-thumbs-down { + background-image: url(/static/img/thumbs.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-iconlabels, +.icon-bc-label, +.icon-tbc-label, +.icon-obc-label, +.icon-limited-label, +.icon-limited-bc-label, +.icon-limited-tbc-label, +.icon-limited-obc-label, +.icon-limited-unique-label, +.icon-limited-unique-bc-label, +.icon-limited-unique-tbc-label, +.icon-limited-unique-obc-label { + background-image: url(/static/img/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-charts, +.icon-line-chart, +.icon-line-chart.selected, +.icon-pie-chart, +.icon-pie-chart.selected, +.icon-bar-chart, +.icon-bar-chart.selected { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Icons/charts.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-home { + background-position: 0 0; +} + +.icon-search { + background-position: 0 -28px; +} + +.icon-settings { + background-position: 0 -56px; +} + +.icon-edit { + background-position: 0 -84px; +} + +.icon-inactive { + background-position: 0 -112px; +} + +.icon-male { + background-position: 0 -140px; +} + +.icon-male:hover { + background-position: -28px -140px; +} + +button:hover .icon-male, +a:hover .icon-male { + background-position: -28px -140px; +} + +.icon-female { + background-position: 0 -168px; +} + +.icon-female:hover { + background-position: -28px -168px; +} + +button:hover .icon-female, +a:hover .icon-female { + background-position: -28px -168px; +} + +.icon-page { + background-position: 0 -196px; +} + +.icon-brokenpage { + background-position: 0 -224px; +} + +.icon-audio { + background-position: 0 -252px; +} + +.icon-moreinfo { + background-position: 0 -280px; +} + +.icon-moreinfo:hover { + background-position: -28px -280px; +} + +button:hover .icon-moreinfo, +a:hover .icon-moreinfo { + background-position: -28px -280px; +} + +.icon-play { + background-position: 0 -308px; +} + +.icon-pause { + background-position: 0 -336px; +} + +.icon-menu { + background-position: 0 -364px; +} + +.icon-right { + background-position: 0 -392px; +} + +.icon-right:hover { + background-position: -28px -392px; +} + +button:hover .icon-right, +a:hover .icon-right { + background-position: -28px -392px; +} + +.icon-left { + background-position: 0 -420px; +} + +.icon-left:hover { + background-position: -28px -420px; +} + +button:hover .icon-left, +a:hover .icon-left { + background-position: -28px -420px; +} + +.icon-up { + background-position: 0 -448px; +} + +.icon-down { + background-position: 0 -476px; +} + +.icon-next { + background-position: 0 -504px; +} + +.icon-back { + background-position: 0 -532px; +} + +.icon-checkmark { + background-position: 0 -560px; +} + +.icon-checkmark-on { + background-position: -28px -560px; +} + +.icon-close { + background-position: 0 -588px; +} + +.icon-more { + background-position: 0 -616px; +} + +.icon-more:hover { + background-position: -28px -616px; +} + +button:hover .icon-more, +a:hover .icon-more { + background-position: -28px -616px; +} + +.icon-sorting { + background-position: 0 -644px; +} + +.icon-additem { + background-position: 0 -672px; +} + +.icon-edit-16x16 { + background-position: 0 -48px; +} + +.icon-right-16x16 { + background-position: 0 -224px; +} + +.icon-left-16x16 { + background-position: 0 -240px; +} + +.icon-up-16x16 { + background-position: 0 -256px; +} + +.icon-down-16x16 { + background-position: 0 -272px; +} + +.icon-checkmark-16x16 { + background-position: 0 -320px; +} + +.icon-close-16x16 { + background-position: 0 -336px; +} + +.icon-carousel-right { + background-position: 0 -896px; +} + +.icon-carousel-left { + background-position: 0 -924px; +} + +.icon-games-carousel-right { + background-position: 0 -952px; +} + +.icon-games-carousel-right:hover { + background-position: -28px -952px; +} + +button:hover .icon-games-carousel-right, +a:hover .icon-games-carousel-right { + background-position: -28px -952px; +} + +.icon-games-carousel-left { + background-position: 0 -980px; +} + +.icon-games-carousel-left:hover { + background-position: -28px -980px; +} + +button:hover .icon-games-carousel-left, +a:hover .icon-games-carousel-left { + background-position: -28px -980px; +} + +.icon-games-carousel-right.hover { + background-position: -28px -952px; +} + +.icon-games-carousel-left.hover { + background-position: -28px -980px; +} + +.icon-clock { + background-position: 0 -1008px; +} + +.icon-clock:hover { + background-position: -28px -1008px; +} + +button:hover .icon-clock, +a:hover .icon-clock { + background-position: -28px -1008px; +} + +.icon-grid { + background-position: 0 -1036px; +} + +.icon-slideshow { + background-position: 0 -1064px; +} + +.icon-pastname { + background-position: 0 -1092px; +} + +.icon-inventory { + background-position: 0 0; +} + +.icon-games { + background-position: 0 -28px; +} + +.icon-catalog { + background-position: 0 -56px; +} + +.icon-like { + background-position: 0 -84px; +} + +.icon-like:hover { + background-position: -28px -84px; +} + +button:hover .icon-like, +a:hover .icon-like { + background-position: -28px -84px; +} + +.icon-like.selected { + background-position: -28px -84px; +} + +.icon-dislike { + background-position: 0 -112px; +} + +.icon-dislike:hover { + background-position: -28px -112px; +} + +button:hover .icon-dislike, +a:hover .icon-dislike { + background-position: -28px -112px; +} + +.icon-dislike.selected { + background-position: -28px -112px; +} + +.icon-playaudio { + background-position: 0 -140px; +} + +.icon-copylocked { + background-position: 0 -168px; +} + +.icon-nocopylocked { + background-position: 0 -196px; +} + +.icon-publicserver { + background-position: 0 -224px; +} + +.icon-privateserver { + background-position: 0 -252px; +} + +.icon-allgears { + background-position: 0 -280px; +} + +.icon-partialgears { + background-position: 0 -308px; +} + +.icon-nogear { + background-position: 0 -336px; +} + +.icon-MeleeWeapon { + background-position: 0 -364px; +} + +.icon-RangedWeapon { + background-position: 0 -392px; +} + +.icon-PowerUp { + background-position: 0 -420px; +} + +.icon-Explosive { + background-position: 0 -448px; +} + +.icon-MusicalInstrument { + background-position: 0 -476px; +} + +.icon-NavigationEnhancer { + background-position: 0 -504px; +} + +.icon-BuildingTool { + background-position: 0 -532px; +} + +.icon-SocialItem { + background-position: 0 -560px; +} + +.icon-PersonalTransport { + background-position: 0 -588px; +} + +.icon-profile { + background-position: 0 0; +} + +.icon-develop { + background-position: 0 -28px; +} + +.icon-charactercustomizer { + background-position: 0 -56px; +} + +.icon-place { + background-position: 0 -84px; +} + +.icon-personalserver { + background-position: 0 -112px; +} + +.icon-shirt { + background-position: 0 -140px; +} + +.icon-tshirt { + background-position: 0 -168px; +} + +.icon-decal { + background-position: 0 -196px; +} + +.icon-pants { + background-position: 0 -224px; +} + +.icon-models { + background-position: 0 -252px; +} + +.icon-tutorial { + background-position: 0 -280px; +} + +.icon-playerpoint { + background-position: 0 0; +} + +.icon-clanpoint { + background-position: 0 -28px; +} + +.icon-leaderboard { + background-position: 0 -56px; +} + +.icon-favorite { + background-position: 0 -84px; +} + +.icon-favorite:hover { + background-position: -28px -84px; +} + +button:hover .icon-favorite, +a:hover .icon-favorite { + background-position: -28px -84px; +} + +.icon-favorite.favorited { + background-position: -28px -84px; +} + +.icon-robux { + background-position: 0 -112px; +} + +.icon-tix { + background-position: 0 -140px; +} + +.icon-message { + background-position: 0 0; +} + +.icon-addfriend { + background-position: 0 -28px; +} + +.icon-friends { + background-position: 0 -56px; +} + +.icon-group { + background-position: 0 -84px; +} + +.icon-forum { + background-position: 0 -112px; +} + +.icon-blog { + background-position: 0 -140px; +} + +.icon-trade { + background-position: 0 -168px; +} + +.icon-share { + background-position: 0 -224px; +} + +.icon-share:hover { + background-position: -28px -224px; +} + +button:hover .icon-share, +a:hover .icon-share { + background-position: -28px -224px; +} + +.icon-bc { + background-position: 0 0; +} + +.icon-tbc { + background-position: 0 -28px; +} + +.icon-obc { + background-position: 0 -56px; +} + +.icon-report.active { + background-position: -20px -40px; +} + +.icon-remove { + background-position: 0 0; +} + +.icon-remove:hover { + background-position: -20px 0; +} + +button:hover .icon-remove, +a:hover .icon-remove { + background-position: -20px 0; +} + +.icon-alert { + background-position: 0 -20px; +} + +.icon-alert:hover { + background-position: -20px -20px; +} + +button:hover .icon-alert, +a:hover .icon-alert { + background-position: -20px -20px; +} + +.icon-flag { + background-position: 0 -40px; +} + +.icon-flag:hover { + background-position: -20px -40px; +} + +button:hover .icon-flag, +a:hover .icon-flag { + background-position: -20px -40px; +} + +.icon-warning { + background-position: 0 -60px; +} + +.icon-lock { + background-position: 0 -80px; +} + +.icon-lock:hover { + background-position: -20px -80px; +} + +button:hover .icon-lock, +a:hover .icon-lock { + background-position: -20px -80px; +} + +.icon-votes-background { + background-position: 0 0; +} + +.icon-votes-foreground { + background-position: 0 -16px; +} + +.icon-votes-foreground.hover { + background-position: 0 -32px; +} + +.icon-thumbs-up { + background-position: 0 0; +} + +.icon-thumbs-up:hover, .icon-thumbs-up.colored { + background-position: -16px 0; +} + +button:hover .icon-thumbs-up, +a:hover .icon-thumbs-up { + background-position: -16px 0; +} + +.icon-thumbs-down { + background-position: 0 -16px; +} + +.icon-thumbs-down:hover, .icon-thumbs-down.colored { + background-position: -16px -16px; +} + +button:hover .icon-thumbs-down, +a:hover .icon-thumbs-down { + background-position: -16px -16px; +} + +.icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.icon-limited-unique-obc-label { + background-position: 0 -180px; +} + +.icon-inviter { + background-position: 0 0; +} + +.icon-friendship { + background-position: -140px 0; +} + +.icon-welcome-to-the-club { + background-position: -140px -140px; +} + +.icon-ambassador { + background-position: 0 -420px; +} + +.icon-combat-initiation { + background-position: -140px -420px; +} + +.icon-warrior { + background-position: 0 -560px; +} + +.icon-bloxxer { + background-position: -140px -560px; +} + +.icon-homestead { + background-position: 0 -700px; +} + +.icon-bricksmith { + background-position: -140px -700px; +} + +.icon-official-model-maker { + background-position: -140px -1260px; +} + +.icon-builders-club { + background-position: 0 -700px; +} + +@media (max-width: 767px) { + .icon-builders-club { + background-position: 0 -425px; + } +} + +.icon-turbo-builders-club { + background-position: -140px -700px; +} + +@media (max-width: 767px) { + .icon-turbo-builders-club { + background-position: -85px -425px; + } +} + +.icon-outrageous-builders-club { + background-position: 0 -840px; +} + +@media (max-width: 767px) { + .icon-outrageous-builders-club { + background-position: 0 -510px; + } +} + +.icon-administrator { + /* background-position: -140px -1540px; */ + background-position: -140px -840px; +} + +.icon-veteran { + background-position: 0 -1680px; +} + +.icon-line-chart { + background-position: 0 0; +} + +.icon-line-chart:hover { + background-position: -28px 0; +} + +button:hover .icon-line-chart, +a:hover .icon-line-chart { + background-position: -28px 0; +} + +.icon-line-chart.selected { + background-position: -28px 0; +} + +.icon-pie-chart { + background-position: 0 -28px; +} + +.icon-pie-chart:hover { + background-position: -28px -28px; +} + +button:hover .icon-pie-chart, +a:hover .icon-pie-chart { + background-position: -28px -28px; +} + +.icon-pie-chart.selected { + background-position: -28px -28px; +} + +.icon-bar-chart { + background-position: 0 -56px; +} + +.icon-bar-chart:hover { + background-position: -28px -56px; +} + +button:hover .icon-bar-chart, +a:hover .icon-bar-chart { + background-position: -28px -56px; +} + +.icon-bar-chart.selected { + background-position: -28px 0; +} + +.icon-game { + background-position: 0 0; +} + +.icon-studio { + background-position: 0 -28px; +} + +.icon-online { + background-position: 0 -56px; +} + +/* + Genre Icons +*/ + +div.GamesInfoIcon { + height: 16px; + width: 16px; + display: inline-block; + top: 0; + padding: 0; + margin-right: 3px; + background: url(/img/CategoryIcons/CategorySprite.png); +} + +div.GamesInfoIcon { + background: url(/img/GenreIcons/GenreIconsSprite.png); + height: 16px; +} + +div.GamesInfoIcon.Melee { + background-position: 48px 0; +} + +div.GamesInfoIcon.Ranged { + background-position: 64px 16px; +} + +div.GamesInfoIcon.Explosive { + background-position: -16px 0; +} + +div.GamesInfoIcon.PowerUps { + background-position: -16px -16px; +} + +div.GamesInfoIcon.Navigation { + background-position: 16px 0; + z-index: inherit; +} + +div.GamesInfoIcon.Music { + background-position: 32px 0; +} + +div.GamesInfoIcon.Social { + background-position: 48px 16px; +} + +div.GamesInfoIcon.Building { + background-position: 0 0; +} + +div.GamesInfoIcon.PersonalTransport { + background-position: 0 16px; +} + +div.GamesInfoIcon.Adventure { + background-position: 0 0; +} + +div.GamesInfoIcon.War { + background-position: 16px -3px; +} + +div.GamesInfoIcon.Funny { + background-position: 32px 0; +} + +div.GamesInfoIcon.Scary { + background-position: 49px 0; +} + +div.GamesInfoIcon.Fantasy { + background-position: -16px 0; +} +div.GamesInfoIcon.TownAndCity, +div.GamesInfoIcon.Town.City { + background-position: -32px 0; +} + +div.GamesInfoIcon.All { + background-position: -47px 1px; +} + +div.GamesInfoIcon.Ninja { + background-position: 0 16px; +} + +div.GamesInfoIcon.Wild.West { + background-position: 16px 15px; +} + +div.GamesInfoIcon.Tutorial { + background-position: 32px 16px; +} + +div.GamesInfoIcon.Sports { + background-position: 49px 16px; +} + +div.GamesInfoIcon.Pirate { + background-position: -16px 16px; +} + +div.GamesInfoIcon.Sci-Fi { + background-position: -32px 16px; +} +div.GamesInfoIcon.SkatePark, +div.GamesInfoIcon.Skate.Park { + background-position: -48px 16px; + width: 15px; +} + +div.GamesInfoIcon.FPS { + background: url(/img/GenreIcons/FPS.png) no-repeat; + height: 16px; +} + +div.GamesInfoIcon.RPG { + background: url(/img/GenreIcons/RPG.png) no-repeat; + height: 16px; +} + +.icon-default-friendstatus, +.icon-game, +.icon-online, +.icon-studio { + background-image: url(/img/FriendsStatus.svg); + background-repeat: no-repeat; + background-size: 100% auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} +.icon-game { + background-position: 0 0; +} +.icon-studio { + background-position: 0 -28px; +} +.icon-online { + background-position: 0 -56px; +} + +span.game-privacy-symbol { + padding-left: 18px; + font-size: 12px; + background-image: url("/img/ico-game_privacy.png"); + background-repeat: no-repeat; + display: inline; + height: 15px; +} + +span.game-privacy-symbol.gps-inactive { + background-position: 0 -45px; +} + +span.game-privacy-symbol.gps-active { + background-position: 0 0; +} + +.tiny-thumbs-up, .tiny-thumbs-down, .upvote.tiny, .downvote.tiny { + background: url('/img/thumbsup.png') no-repeat 0 -170px; + width: 12px; + height: 13px; + padding-right: 5px; + display: inline-block; + position: relative; + top: 2px; +} + +.tiny-thumbs-down { + background-position: 0 -224px; + margin-right: 0; + padding-right: 0; + margin-left: 5px; + top: 2px; +} \ No newline at end of file diff --git a/app/static/css/icons.css1 b/app/static/css/icons.css1 new file mode 100644 index 0000000..034112e --- /dev/null +++ b/app/static/css/icons.css1 @@ -0,0 +1,1549 @@ +/* + FILE ARCHIVED ON 20:10:15 Mar 23, 2016 AND RETRIEVED FROM THE + INTERNET ARCHIVE ON 16:20:56 Aug 07, 2021. + JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. + + ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. + SECTION 108(a)(3)). +*/ +.icon-default-navigation, +.icon-nav-menu, +.icon-nav-robux, +.icon-nav-tix, +.icon-nav-settings, +.icon-nav-search, +.icon-nav-home, +.icon-nav-profile, +.icon-nav-message, +.icon-nav-friends, +.icon-nav-charactercustomizer, +.icon-nav-inventory, +.icon-nav-trade, +.icon-nav-group, +.icon-nav-forum, +.icon-nav-blog, +.icon-nav-search-white, +.icon-nav-shop { + background-image: url('/static/svg/navigation.svg'); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.dark-icon { + background-image: url('/static/svg/navigation.svg') !important; +} + +.icon-nav-menu { + background-position: 0 0; +} + +.icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .icon-nav-menu, +a:hover .icon-nav-menu { + background-position: -28px 0; +} + +.icon-nav-robux { + background-position: 0 -28px; +} + +.icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .icon-nav-robux, +a:hover .icon-nav-robux { + background-position: -28px -28px; +} + +.icon-nav-tix { + background-position: 0 -56px; +} + +.icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .icon-nav-tix, +a:hover .icon-nav-tix { + background-position: -28px -56px; +} + +.icon-nav-settings { + background-position: 0 -84px; +} + +.icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .icon-nav-settings, +a:hover .icon-nav-settings { + background-position: -28px -84px; +} + +.icon-nav-search { + background-position: 0 -112px; +} + +.icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .icon-nav-search, +a:hover .icon-nav-search { + background-position: -28px -112px; +} + +.icon-nav-home { + background-position: 0 -140px; +} + +.hover-icon-nav-home:hover { + color: #02b757; +} + +.icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .icon-nav-home, +a:hover .icon-nav-home { + background-position: -28px -140px; +} + +.icon-nav-profile { + background-position: 0 -168px; +} + +.hover-icon-nav-profile:hover { + color: #f68802; +} + +.icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .icon-nav-profile, +a:hover .icon-nav-profile { + background-position: -28px -168px; +} + +.icon-nav-message { + background-position: 0 -196px; +} + +.icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .icon-nav-message, +a:hover .icon-nav-message { + background-position: -28px -196px; +} + +.icon-nav-friends { + background-position: 0 -224px; +} + +.icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .icon-nav-friends, +a:hover .icon-nav-friends { + background-position: -28px -224px; +} + +.icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +.hover-icon-nav-charactercustomizer:hover { + color: #f68802; +} + +button:hover .icon-nav-charactercustomizer, +a:hover .icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.icon-nav-inventory { + background-position: 0 -280px; +} + +.hover-icon-nav-inventory:hover { + color: #02b757; +} + +.icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .icon-nav-inventory, +a:hover .icon-nav-inventory { + background-position: -28px -280px; +} + +.icon-nav-trade { + background-position: 0 -308px; +} + +.icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .icon-nav-trade, +a:hover .icon-nav-trade { + background-position: -28px -308px; +} + +.icon-nav-group { + background-position: 0 -336px; +} + +.icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .icon-nav-group, +a:hover .icon-nav-group { + background-position: -28px -336px; +} + +.icon-nav-forum { + background-position: 0 -364px; +} + +.icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .icon-nav-forum, +a:hover .icon-nav-forum { + background-position: -28px -364px; +} + +.icon-nav-blog { + background-position: 0 -392px; +} + +.icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .icon-nav-blog, +a:hover .icon-nav-blog { + background-position: -28px -392px; +} + +.icon-nav-search-white { + background-position: 0 -420px; +} + +.icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .icon-nav-search-white, +a:hover .icon-nav-search-white { + background-position: -28px -420px; +} + +.icon-nav-shop { + background-position: 0 -448px; +} + +.icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .icon-nav-shop, +a:hover .icon-nav-shop { + background-position: -28px -448px; +} + +.icon-default-generic, +.icon-home, +.icon-search, +.icon-settings, +.icon-edit, +.icon-inactive, +.icon-male, +.icon-female, +.icon-page, +.icon-brokenpage, +.icon-audio, +.icon-moreinfo, +.icon-play, +.icon-pause, +.icon-menu, +.icon-right, +.icon-left, +.icon-up, +.icon-down, +.icon-next, +.icon-back, +.icon-checkmark, +.icon-checkmark-on, +.icon-close, +.icon-more, +.icon-sorting, +.icon-additem, +.icon-carousel-right, +.icon-carousel-left, +.icon-games-carousel-right, +.icon-games-carousel-left, +.icon-games-carousel-right.hover, +.icon-games-carousel-left.hover, +.icon-clock, +.icon-grid, +.icon-slideshow, +.icon-pastname, +.btn-generic-edit-lg .icon-edit, +a.btn-generic-edit-lg .icon-edit, +.btn-generic-edit-lg:hover .icon-edit, +a.btn-generic-edit-lg:hover .icon-edit, +.btn-generic-edit-md .icon-edit, +a.btn-generic-edit-md .icon-edit, +.btn-generic-edit-md:hover .icon-edit, +a.btn-generic-edit-md:hover .icon-edit, +.btn-generic-edit-sm .icon-edit, +a.btn-generic-edit-sm .icon-edit, +.btn-generic-edit-sm:hover .icon-edit, +a.btn-generic-edit-sm:hover .icon-edit, +.btn-generic-edit-xs .icon-edit, +a.btn-generic-edit-xs .icon-edit, +.btn-generic-edit-xs:hover .icon-edit, +a.btn-generic-edit-xs:hover .icon-edit { + background-image: url(/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-generic-16x16, +.icon-edit-16x16, +.icon-right-16x16, +.icon-left-16x16, +.icon-up-16x16, +.icon-down-16x16, +.icon-checkmark-16x16, +.icon-close-16x16, +.rbx-input-group-btn .rbx-input-dropdown-btn:hover .icon-down, +.rbx-input-group-btn .rbx-input-dropdown-btn:focus .icon-down, +.rbx-select-group:hover .icon-down, +.open .rbx-input-dropdown-btn .icon-down { + background-image: url(/static/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: 32px auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-games, +.icon-inventory, +.icon-games, +.icon-catalog, +.icon-like, +.icon-like.selected, +.icon-dislike, +.icon-dislike.selected, +.icon-playaudio, +.icon-copylocked, +.icon-nocopylocked, +.icon-publicserver, +.icon-privateserver, +.icon-allgears, +.icon-partialgears, +.icon-nogear, +.icon-MeleeWeapon, +.icon-RangedWeapon, +.icon-PowerUp, +.icon-Explosive, +.icon-MusicalInstrument, +.icon-NavigationEnhancer, +.icon-BuildingTool, +.icon-SocialItem, +.icon-PersonalTransport { + background-image: url(/static/img/games.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-badges, +.icon-inviter, +.icon-friendship, +.icon-welcome-to-the-club, +.icon-ambassador, +.icon-combat-initiation, +.icon-warrior, +.icon-bloxxer, +.icon-homestead, +.icon-bricksmith, +.icon-official-model-maker, +.icon-builders-club, +.icon-turbo-builders-club, +.icon-outrageous-builders-club, +.icon-administrator, +.icon-veteran { + background-image: url(/static/img/roblox_badges.svg); + background-repeat: no-repeat; + background-size: 280px auto; + width: 140px; + height: 140px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-friendstatus, +.icon-game, +.icon-studio, +.icon-online { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Home/friendsstatus.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-creation, +.icon-profile, +.icon-develop, +.icon-charactercustomizer, +.icon-place, +.icon-personalserver, +.icon-shirt, +.icon-tshirt, +.icon-decal, +.icon-pants, +.icon-models, +.icon-tutorial { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/creation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-social, +.icon-message, +.icon-addfriend, +.icon-friends, +.icon-group, +.icon-forum, +.icon-blog, +.icon-trade, +.icon-share { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/social.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-branded, +.icon-playerpoint, +.icon-clanpoint, +.icon-leaderboard, +.icon-favorite, +.icon-favorite.favorited, +.icon-robux, +.icon-tix { + background-image: url(/static/img/branded.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-bc, +.icon-bc, +.icon-tbc, +.icon-obc { + background-image: url(/static/img/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-negative, +.icon-report.active, +.icon-remove, +.icon-alert, +.icon-flag, +.icon-warning, +.icon-lock { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/negative_08272015.svg); + background-repeat: no-repeat; + background-size: 200% auto; + width: 20px; + height: 20px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-stars { + background-image: url(/web/20160323201015im_/http://static.rbxcdn.com/images/Games/stars.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-thumbs-16x16, +.icon-thumbs-up, +.icon-thumbs-down { + background-image: url(/static/img/thumbs.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-iconlabels, +.icon-bc-label, +.icon-tbc-label, +.icon-obc-label, +.icon-limited-label, +.icon-limited-bc-label, +.icon-limited-tbc-label, +.icon-limited-obc-label, +.icon-limited-unique-label, +.icon-limited-unique-bc-label, +.icon-limited-unique-tbc-label, +.icon-limited-unique-obc-label { + background-image: url(/static/img/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-charts, +.icon-line-chart, +.icon-line-chart.selected, +.icon-pie-chart, +.icon-pie-chart.selected, +.icon-bar-chart, +.icon-bar-chart.selected { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Icons/charts.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-home { + background-position: 0 0; +} + +.icon-search { + background-position: 0 -28px; +} + +.icon-settings { + background-position: 0 -56px; +} + +.icon-edit { + background-position: 0 -84px; +} + +.icon-inactive { + background-position: 0 -112px; +} + +.icon-male { + background-position: 0 -140px; +} + +.icon-male:hover { + background-position: -28px -140px; +} + +button:hover .icon-male, +a:hover .icon-male { + background-position: -28px -140px; +} + +.icon-female { + background-position: 0 -168px; +} + +.icon-female:hover { + background-position: -28px -168px; +} + +button:hover .icon-female, +a:hover .icon-female { + background-position: -28px -168px; +} + +.icon-page { + background-position: 0 -196px; +} + +.icon-brokenpage { + background-position: 0 -224px; +} + +.icon-audio { + background-position: 0 -252px; +} + +.icon-moreinfo { + background-position: 0 -280px; +} + +.icon-moreinfo:hover { + background-position: -28px -280px; +} + +button:hover .icon-moreinfo, +a:hover .icon-moreinfo { + background-position: -28px -280px; +} + +.icon-play { + background-position: 0 -308px; +} + +.icon-pause { + background-position: 0 -336px; +} + +.icon-menu { + background-position: 0 -364px; +} + +.icon-right { + background-position: 0 -392px; +} + +.icon-right:hover { + background-position: -28px -392px; +} + +button:hover .icon-right, +a:hover .icon-right { + background-position: -28px -392px; +} + +.icon-left { + background-position: 0 -420px; +} + +.icon-left:hover { + background-position: -28px -420px; +} + +button:hover .icon-left, +a:hover .icon-left { + background-position: -28px -420px; +} + +.icon-up { + background-position: 0 -448px; +} + +.icon-down { + background-position: 0 -476px; +} + +.icon-next { + background-position: 0 -504px; +} + +.icon-back { + background-position: 0 -532px; +} + +.icon-checkmark { + background-position: 0 -560px; +} + +.icon-checkmark-on { + background-position: -28px -560px; +} + +.icon-close { + background-position: 0 -588px; +} + +.icon-more { + background-position: 0 -616px; +} + +.icon-more:hover { + background-position: -28px -616px; +} + +button:hover .icon-more, +a:hover .icon-more { + background-position: -28px -616px; +} + +.icon-sorting { + background-position: 0 -644px; +} + +.icon-additem { + background-position: 0 -672px; +} + +.icon-edit-16x16 { + background-position: 0 -48px; +} + +.icon-right-16x16 { + background-position: 0 -224px; +} + +.icon-left-16x16 { + background-position: 0 -240px; +} + +.icon-up-16x16 { + background-position: 0 -256px; +} + +.icon-down-16x16 { + background-position: 0 -272px; +} + +.icon-checkmark-16x16 { + background-position: 0 -320px; +} + +.icon-close-16x16 { + background-position: 0 -336px; +} + +.icon-carousel-right { + background-position: 0 -896px; +} + +.icon-carousel-left { + background-position: 0 -924px; +} + +.icon-games-carousel-right { + background-position: 0 -952px; +} + +.icon-games-carousel-right:hover { + background-position: -28px -952px; +} + +button:hover .icon-games-carousel-right, +a:hover .icon-games-carousel-right { + background-position: -28px -952px; +} + +.icon-games-carousel-left { + background-position: 0 -980px; +} + +.icon-games-carousel-left:hover { + background-position: -28px -980px; +} + +button:hover .icon-games-carousel-left, +a:hover .icon-games-carousel-left { + background-position: -28px -980px; +} + +.icon-games-carousel-right.hover { + background-position: -28px -952px; +} + +.icon-games-carousel-left.hover { + background-position: -28px -980px; +} + +.icon-clock { + background-position: 0 -1008px; +} + +.icon-clock:hover { + background-position: -28px -1008px; +} + +button:hover .icon-clock, +a:hover .icon-clock { + background-position: -28px -1008px; +} + +.icon-grid { + background-position: 0 -1036px; +} + +.icon-slideshow { + background-position: 0 -1064px; +} + +.icon-pastname { + background-position: 0 -1092px; +} + +.icon-inventory { + background-position: 0 0; +} + +.icon-games { + background-position: 0 -28px; +} + +.icon-catalog { + background-position: 0 -56px; +} + +.icon-like { + background-position: 0 -84px; +} + +.icon-like:hover { + background-position: -28px -84px; +} + +button:hover .icon-like, +a:hover .icon-like { + background-position: -28px -84px; +} + +.icon-like.selected { + background-position: -28px -84px; +} + +.icon-dislike { + background-position: 0 -112px; +} + +.icon-dislike:hover { + background-position: -28px -112px; +} + +button:hover .icon-dislike, +a:hover .icon-dislike { + background-position: -28px -112px; +} + +.icon-dislike.selected { + background-position: -28px -112px; +} + +.icon-playaudio { + background-position: 0 -140px; +} + +.icon-copylocked { + background-position: 0 -168px; +} + +.icon-nocopylocked { + background-position: 0 -196px; +} + +.icon-publicserver { + background-position: 0 -224px; +} + +.icon-privateserver { + background-position: 0 -252px; +} + +.icon-allgears { + background-position: 0 -280px; +} + +.icon-partialgears { + background-position: 0 -308px; +} + +.icon-nogear { + background-position: 0 -336px; +} + +.icon-MeleeWeapon { + background-position: 0 -364px; +} + +.icon-RangedWeapon { + background-position: 0 -392px; +} + +.icon-PowerUp { + background-position: 0 -420px; +} + +.icon-Explosive { + background-position: 0 -448px; +} + +.icon-MusicalInstrument { + background-position: 0 -476px; +} + +.icon-NavigationEnhancer { + background-position: 0 -504px; +} + +.icon-BuildingTool { + background-position: 0 -532px; +} + +.icon-SocialItem { + background-position: 0 -560px; +} + +.icon-PersonalTransport { + background-position: 0 -588px; +} + +.icon-profile { + background-position: 0 0; +} + +.icon-develop { + background-position: 0 -28px; +} + +.icon-charactercustomizer { + background-position: 0 -56px; +} + +.icon-place { + background-position: 0 -84px; +} + +.icon-personalserver { + background-position: 0 -112px; +} + +.icon-shirt { + background-position: 0 -140px; +} + +.icon-tshirt { + background-position: 0 -168px; +} + +.icon-decal { + background-position: 0 -196px; +} + +.icon-pants { + background-position: 0 -224px; +} + +.icon-models { + background-position: 0 -252px; +} + +.icon-tutorial { + background-position: 0 -280px; +} + +.icon-playerpoint { + background-position: 0 0; +} + +.icon-clanpoint { + background-position: 0 -28px; +} + +.icon-leaderboard { + background-position: 0 -56px; +} + +.icon-favorite { + background-position: 0 -84px; +} + +.icon-favorite:hover { + background-position: -28px -84px; +} + +button:hover .icon-favorite, +a:hover .icon-favorite { + background-position: -28px -84px; +} + +.icon-favorite.favorited { + background-position: -28px -84px; +} + +.icon-robux { + background-position: 0 -112px; +} + +.icon-tix { + background-position: 0 -140px; +} + +.icon-message { + background-position: 0 0; +} + +.icon-addfriend { + background-position: 0 -28px; +} + +.icon-friends { + background-position: 0 -56px; +} + +.icon-group { + background-position: 0 -84px; +} + +.icon-forum { + background-position: 0 -112px; +} + +.icon-blog { + background-position: 0 -140px; +} + +.icon-trade { + background-position: 0 -168px; +} + +.icon-share { + background-position: 0 -224px; +} + +.icon-share:hover { + background-position: -28px -224px; +} + +button:hover .icon-share, +a:hover .icon-share { + background-position: -28px -224px; +} + +.icon-bc { + background-position: 0 0; +} + +.icon-tbc { + background-position: 0 -28px; +} + +.icon-obc { + background-position: 0 -56px; +} + +.icon-report.active { + background-position: -20px -40px; +} + +.icon-remove { + background-position: 0 0; +} + +.icon-remove:hover { + background-position: -20px 0; +} + +button:hover .icon-remove, +a:hover .icon-remove { + background-position: -20px 0; +} + +.icon-alert { + background-position: 0 -20px; +} + +.icon-alert:hover { + background-position: -20px -20px; +} + +button:hover .icon-alert, +a:hover .icon-alert { + background-position: -20px -20px; +} + +.icon-flag { + background-position: 0 -40px; +} + +.icon-flag:hover { + background-position: -20px -40px; +} + +button:hover .icon-flag, +a:hover .icon-flag { + background-position: -20px -40px; +} + +.icon-warning { + background-position: 0 -60px; +} + +.icon-lock { + background-position: 0 -80px; +} + +.icon-lock:hover { + background-position: -20px -80px; +} + +button:hover .icon-lock, +a:hover .icon-lock { + background-position: -20px -80px; +} + +.icon-votes-background { + background-position: 0 0; +} + +.icon-votes-foreground { + background-position: 0 -16px; +} + +.icon-votes-foreground.hover { + background-position: 0 -32px; +} + +.icon-thumbs-up { + background-position: 0 0; +} + +.icon-thumbs-up:hover, .icon-thumbs-up.colored { + background-position: -16px 0; +} + +button:hover .icon-thumbs-up, +a:hover .icon-thumbs-up { + background-position: -16px 0; +} + +.icon-thumbs-down { + background-position: 0 -16px; +} + +.icon-thumbs-down:hover, .icon-thumbs-down.colored { + background-position: -16px -16px; +} + +button:hover .icon-thumbs-down, +a:hover .icon-thumbs-down { + background-position: -16px -16px; +} + +.icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.icon-limited-unique-obc-label { + background-position: 0 -180px; +} + +.icon-inviter { + background-position: 0 0; +} + +.icon-friendship { + background-position: -140px 0; +} + +.icon-welcome-to-the-club { + background-position: -140px -140px; +} + +.icon-ambassador { + background-position: 0 -420px; +} + +.icon-combat-initiation { + background-position: -140px -420px; +} + +.icon-warrior { + background-position: 0 -560px; +} + +.icon-bloxxer { + background-position: -140px -560px; +} + +.icon-homestead { + background-position: 0 -700px; +} + +.icon-bricksmith { + background-position: -140px -700px; +} + +.icon-official-model-maker { + background-position: -140px -1260px; +} + +.icon-builders-club { + background-position: 0 -700px; +} + +@media (max-width: 767px) { + .icon-builders-club { + background-position: 0 -425px; + } +} + +.icon-turbo-builders-club { + background-position: -140px -700px; +} + +@media (max-width: 767px) { + .icon-turbo-builders-club { + background-position: -85px -425px; + } +} + +.icon-outrageous-builders-club { + background-position: 0 -840px; +} + +@media (max-width: 767px) { + .icon-outrageous-builders-club { + background-position: 0 -510px; + } +} + +.icon-administrator { + /* background-position: -140px -1540px; */ + background-position: -140px -840px; +} + +.icon-veteran { + background-position: 0 -1680px; +} + +.icon-line-chart { + background-position: 0 0; +} + +.icon-line-chart:hover { + background-position: -28px 0; +} + +button:hover .icon-line-chart, +a:hover .icon-line-chart { + background-position: -28px 0; +} + +.icon-line-chart.selected { + background-position: -28px 0; +} + +.icon-pie-chart { + background-position: 0 -28px; +} + +.icon-pie-chart:hover { + background-position: -28px -28px; +} + +button:hover .icon-pie-chart, +a:hover .icon-pie-chart { + background-position: -28px -28px; +} + +.icon-pie-chart.selected { + background-position: -28px -28px; +} + +.icon-bar-chart { + background-position: 0 -56px; +} + +.icon-bar-chart:hover { + background-position: -28px -56px; +} + +button:hover .icon-bar-chart, +a:hover .icon-bar-chart { + background-position: -28px -56px; +} + +.icon-bar-chart.selected { + background-position: -28px 0; +} + +.icon-game { + background-position: 0 0; +} + +.icon-studio { + background-position: 0 -28px; +} + +.icon-online { + background-position: 0 -56px; +} + +/* + Genre Icons +*/ + +div.GamesInfoIcon { + height: 16px; + width: 16px; + display: inline-block; + top: 0; + padding: 0; + margin-right: 3px; + background: url(/img/CategoryIcons/CategorySprite.png); +} + +div.GamesInfoIcon { + background: url(/img/GenreIcons/GenreIconsSprite.png); + height: 16px; +} + +div.GamesInfoIcon.Melee { + background-position: 48px 0; +} + +div.GamesInfoIcon.Ranged { + background-position: 64px 16px; +} + +div.GamesInfoIcon.Explosive { + background-position: -16px 0; +} + +div.GamesInfoIcon.PowerUps { + background-position: -16px -16px; +} + +div.GamesInfoIcon.Navigation { + background-position: 16px 0; + z-index: inherit; +} + +div.GamesInfoIcon.Music { + background-position: 32px 0; +} + +div.GamesInfoIcon.Social { + background-position: 48px 16px; +} + +div.GamesInfoIcon.Building { + background-position: 0 0; +} + +div.GamesInfoIcon.PersonalTransport { + background-position: 0 16px; +} + +div.GamesInfoIcon.Adventure { + background-position: 0 0; +} + +div.GamesInfoIcon.War { + background-position: 16px -3px; +} + +div.GamesInfoIcon.Funny { + background-position: 32px 0; +} + +div.GamesInfoIcon.Scary { + background-position: 49px 0; +} + +div.GamesInfoIcon.Fantasy { + background-position: -16px 0; +} +div.GamesInfoIcon.TownAndCity, +div.GamesInfoIcon.Town.City { + background-position: -32px 0; +} + +div.GamesInfoIcon.All { + background-position: -47px 1px; +} + +div.GamesInfoIcon.Ninja { + background-position: 0 16px; +} + +div.GamesInfoIcon.Wild.West { + background-position: 16px 15px; +} + +div.GamesInfoIcon.Tutorial { + background-position: 32px 16px; +} + +div.GamesInfoIcon.Sports { + background-position: 49px 16px; +} + +div.GamesInfoIcon.Pirate { + background-position: -16px 16px; +} + +div.GamesInfoIcon.Sci-Fi { + background-position: -32px 16px; +} +div.GamesInfoIcon.SkatePark, +div.GamesInfoIcon.Skate.Park { + background-position: -48px 16px; + width: 15px; +} + +div.GamesInfoIcon.FPS { + background: url(/img/GenreIcons/FPS.png) no-repeat; + height: 16px; +} + +div.GamesInfoIcon.RPG { + background: url(/img/GenreIcons/RPG.png) no-repeat; + height: 16px; +} + +.icon-default-friendstatus, +.icon-game, +.icon-online, +.icon-studio { + background-image: url(/img/FriendsStatus.svg); + background-repeat: no-repeat; + background-size: 100% auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} +.icon-game { + background-position: 0 0; +} +.icon-studio { + background-position: 0 -28px; +} +.icon-online { + background-position: 0 -56px; +} + +span.game-privacy-symbol { + padding-left: 18px; + font-size: 12px; + background-image: url("/img/ico-game_privacy.png"); + background-repeat: no-repeat; + display: inline; + height: 15px; +} + +span.game-privacy-symbol.gps-inactive { + background-position: 0 -45px; +} + +span.game-privacy-symbol.gps-active { + background-position: 0 0; +} + +.tiny-thumbs-up, .tiny-thumbs-down, .upvote.tiny, .downvote.tiny { + background: url('/img/thumbsup.png') no-repeat 0 -170px; + width: 12px; + height: 13px; + padding-right: 5px; + display: inline-block; + position: relative; + top: 2px; +} + +.tiny-thumbs-down { + background-position: 0 -224px; + margin-right: 0; + padding-right: 0; + margin-left: 5px; + top: 2px; +} \ No newline at end of file diff --git a/app/static/css/login.css b/app/static/css/login.css new file mode 100644 index 0000000..d6bff9f --- /dev/null +++ b/app/static/css/login.css @@ -0,0 +1,71 @@ +body { + background: radial-gradient(circle, var(--auth-dot) 10%, transparent 11%),radial-gradient(circle at bottom left, var(--auth-dot) 5%, transparent 6%),radial-gradient(circle at bottom right, var(--auth-dot) 5%, transparent 6%),radial-gradient(circle at top left, var(--auth-dot) 5%, transparent 6%),radial-gradient(circle at top right, var(--auth-dot) 5%, transparent 6%); + background-size: 3em 3em; + background-color: var(--auth-bg); +} +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.login-container { + min-width: 330px; + display: inline-block; + background-color: var(--auth-card-bg); + box-shadow: 0 0 15px var(--auth-card-shadow); +} + +.login-container h1 { + text-align: center; + margin-bottom: 0; + font-size: 3.5rem; + font-weight: 700; +} +.login-container p { + text-align: center; + padding: 0; + margin-bottom: 15px; + font-size: small; +} + +.login-container button { + width: 100%; + font-weight: 600; + font-size: larger; + padding: 3px; + margin-bottom: 0 !important; +} + +.login-container a { + font-size: small; + font-weight: 400 !important; +} + +.col { + padding: 0 !important; +} + +#password { + margin-top: 10px; + margin-bottom: 10px; +} + +.form-text { + /* wrap the text*/ + word-wrap: break-word; +} + +#main a { + text-decoration: none !important; + color: rgb(32, 147, 255) !important; + font-weight: 500 !important; + transition: 0.2s; +} + +#main a:hover { + text-decoration: none !important; + color: rgb(3, 133, 255) !important; + transition: 0.2s; +} \ No newline at end of file diff --git a/app/static/css/message.cs b/app/static/css/message.cs new file mode 100644 index 0000000..a9da9a6 --- /dev/null +++ b/app/static/css/message.cs @@ -0,0 +1,5 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} diff --git a/app/static/css/message.css1 b/app/static/css/message.css1 new file mode 100644 index 0000000..0ed33aa --- /dev/null +++ b/app/static/css/message.css1 @@ -0,0 +1,77 @@ +#main { + display: flex; + min-height: 100vh; + padding-top: 24px; +} + +.messagealerts { + background: rgba(255,0,0,0.15); + color: #e2e2e2; + word-wrap: break-word; +} + +.message-row { + background-color: #242424; + border: 1px solid #393b3d; + border-radius: 4px; + padding: 10px 14px; + margin-bottom: 8px; + transition: background-color 0.12s; + display: flex; + align-items: center; + gap: 12px; + text-decoration: none !important; + color: inherit !important; +} + +.message-row:hover { + background-color: #2c2c2c; +} + +.message-row-unread { + border-color: #0066ff; +} + +.message-row-unread .message-subject { + font-weight: 700; + color: #ffffff; +} + +.message-avatar { + width: 48px; + height: 48px; + border-radius: 4px; + flex-shrink: 0; + object-fit: cover; +} + +.message-meta { + flex: 1; + overflow: hidden; +} + +.message-sender { + font-weight: 600; + color: #ffffff; + font-size: 0.875rem; +} + +.message-subject { + color: #e3e3e3; + font-size: 0.875rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.message-preview { + color: #909090; + font-size: 0.825rem; +} + +.message-time { + font-size: 0.75rem; + color: #909090; + flex-shrink: 0; + white-space: nowrap; +} \ No newline at end of file diff --git a/app/static/css/profile.css b/app/static/css/profile.css new file mode 100644 index 0000000..60cb1b8 --- /dev/null +++ b/app/static/css/profile.css @@ -0,0 +1,46 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.status-icon { + position: absolute; + bottom : -8px; + right: -8px; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(0, 139, 219); + border: 2px solid var(--card-bg); +} + +.status-icon-green { + background-color: rgb(15, 211, 80) !important; +} + +.image-container { + position: relative; + display: table; + margin-right: 20px; +} + +.dark-container { + background-color: var(--card-bg) !important; + box-shadow: 0 0 10px 0 var(--card-shadow); + border-radius: 5px; + min-height: 100px; + overflow-x: scroll; + -ms-overflow-style: none; + scrollbar-width: none; +} + +.dark-container::-webkit-scrollbar { + display: none; +} + +.image-container-friend { + position: relative; + display: table; + margin: 0 auto; +} \ No newline at end of file diff --git a/app/static/css/profile.css1 b/app/static/css/profile.css1 new file mode 100644 index 0000000..ed9bb5e --- /dev/null +++ b/app/static/css/profile.css1 @@ -0,0 +1,91 @@ +#main { + display: flex; + min-height: 100vh; + padding-top: 24px; +} + +.status-icon { + position: absolute; + bottom: -6px; + right: -6px; + width: 18px; + height: 18px; + border-radius: 50%; + background-color: rgb(0,139,219); + border: 2px solid #1a1a1a; +} + +.status-icon-green { + background-color: #02b757 !important; +} + +.image-container { + position: relative; + display: table; + margin-right: 20px; +} + +.image-container-friend { + position: relative; + display: table; + margin: 0 auto; +} + +.messagealerts { + background: rgba(255,0,0,0.15); + color: #e2e2e2; + word-wrap: break-word; +} + +.dark-container { + background-color: #242424; + box-shadow: 0 0 8px rgba(0,0,0,0.3); + border-radius: 4px; + min-height: 100px; + overflow-x: scroll; + -ms-overflow-style: none; + scrollbar-width: none; +} + +.dark-container::-webkit-scrollbar { + display: none; +} + +.page-tabs { + display: flex; + border-bottom: 2px solid #393b3d; +} + +.page-tabs a { + flex: 1; + text-align: center; + padding: 10px 0; + color: #a0a0a0 !important; + text-decoration: none !important; + font-size: 0.875rem; + font-weight: 600; + border-bottom: 2px solid transparent; + margin-bottom: -2px; + transition: color 0.15s, border-color 0.15s; +} + +.page-tabs a:hover { + color: #e3e3e3 !important; +} + +.page-tabs a.active { + color: #ffffff !important; + border-bottom-color: #ffffff; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .tab-pane.show.active { + display: block; +} + +.nav-underline { + gap: 0; +} \ No newline at end of file diff --git a/app/static/css/setting.css1 b/app/static/css/setting.css1 new file mode 100644 index 0000000..1535732 --- /dev/null +++ b/app/static/css/setting.css1 @@ -0,0 +1,35 @@ +#main { + display: flex; + justify-content: center; + min-height: 100vh; + padding-top: 24px; +} + +.settings-container { + width: 100%; + max-width: 800px; + padding: 10px; +} + +.messagealerts { + background: rgba(255,0,0,0.15); + color: #e2e2e2; + word-wrap: break-word; +} + +.settings-section { + background-color: #242424; + border: 1px solid #393b3d; + border-radius: 4px; + padding: 16px; + margin-bottom: 16px; +} + +.settings-section-title { + font-size: 1rem; + font-weight: 700; + color: #ffffff; + margin: 0 0 12px; + padding-bottom: 10px; + border-bottom: 1px solid #393b3d; +} \ No newline at end of file diff --git a/app/static/css/settings.css b/app/static/css/settings.css new file mode 100644 index 0000000..3d1bdcf --- /dev/null +++ b/app/static/css/settings.css @@ -0,0 +1,12 @@ +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.settings-container { + min-width: 800px; + padding: 10px; + border-radius: 5px; +} diff --git a/app/static/css/signup.css b/app/static/css/signup.css new file mode 100644 index 0000000..e9b2a40 --- /dev/null +++ b/app/static/css/signup.css @@ -0,0 +1,81 @@ +body { + background: radial-gradient(circle, #333 10%, transparent 11%),radial-gradient(circle at bottom left, #333 5%, transparent 6%),radial-gradient(circle at bottom right, #333 5%, transparent 6%),radial-gradient(circle at top left, #333 5%, transparent 6%),radial-gradient(circle at top right, #333 5%, transparent 6%); + background-size: 3em 3em; + background-color: rgb(20,20,20); +} + +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.signup-container { + min-width: 330px; + display: inline-block; + background-color: rgba(25,25,25, 1); + box-shadow: 0 0 15px rgba(0, 0, 0, 0.7); +} + +/* only align h1 tags */ +.signup-container h1 { + text-align: center; + margin-bottom: 0; + font-size: 3.5rem; + font-weight: 700; +} +.signup-container p { + text-align: center; + padding: 0; + margin-bottom: 15px; + font-size: small; +} + +.signup-container button { + width: 100%; + font-weight: 600; + font-size: larger; + padding: 3px; + margin-bottom: 0 !important; + color: #fff; +} + +.signup-container a { + font-size: small; + font-weight: 400 !important; +} + +.col { + padding: 0 !important; +} + +#password { + min-width: 300px; + margin-top: 10px; + margin-bottom: 10px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.form-text { + /* wrap the text*/ + word-wrap: break-word; +} + +a { + text-decoration: none !important; + color: rgb(32, 147, 255) !important; + font-weight: 500 !important; + transition: 0.2s; +} + +a:hover { + text-decoration: none !important; + color: rgb(3, 133, 255) !important; + transition: 0.2s; +} \ No newline at end of file diff --git a/app/static/css/terms.css b/app/static/css/terms.css new file mode 100644 index 0000000..d329eac --- /dev/null +++ b/app/static/css/terms.css @@ -0,0 +1,15 @@ +h1 { + font-weight: 700; +} + +h5 { + color : var(--bs-body-color); + font-weight: 400; +} + + +p { + margin-left: 10px; + color: var(--bs-body-color); + font-size: large; +} \ No newline at end of file diff --git a/app/static/cssold/admin.css b/app/static/cssold/admin.css new file mode 100644 index 0000000..1964525 --- /dev/null +++ b/app/static/cssold/admin.css @@ -0,0 +1,48 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.container a { + color: #fff; + text-decoration: none; +} + +.admin-box { + transition: 0.2s; + background-color: rgb(27, 27, 27); + /* drop shadow*/ + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); +} +.admin-box p { + color: rgb(200,200,200); +} + +.admin-box:hover { + transform: scale(1.05); +} + +.gameserver-box { + transition: 0.2s; + border: 1px solid rgb(60,60,60) !important; +} +.greenborder { + border-color: rgb(0, 199, 0) !important; +} +.redborder { + border-color: rgb(199, 0, 0) !important; +} +.yellowborder { + border-color: rgb(199, 199, 0) !important; +} + +.gameserver-box:hover { + transform: scale(1.015); +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/cssold/avatar.css b/app/static/cssold/avatar.css new file mode 100644 index 0000000..71ae58c --- /dev/null +++ b/app/static/cssold/avatar.css @@ -0,0 +1,100 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 40px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.head { + width: 60px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 60px; + margin: 0 auto; + display: block; + border-radius: 5px; +} +.torso { + width: 120px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + margin-top: 10px; + border-radius: 5px; +} +.leftArm { + width: 50px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: -60px; + border-radius: 5px; +} +.rightArm { + width: 50px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: 130px; + border-radius: 5px; + margin-top: -120px; +} +.legs { + width: 120px; + height: 100%; + margin: 10px auto 0 auto; + display: block; +} +.leftLeg { + float: left; + width: calc(50% - 10px); + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin-right: 10px; + border-radius: 5px; +} +.rightLeg { + float: right; + width: calc(50% - 10px); + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin-left: 10px; + border-radius: 5px; +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgb(27, 27, 27); /* Adjust the opacity and color as needed */ + z-index: 9999; /* Make sure the overlay is above other elements */ + border-radius: 5px; + overflow-y: scroll; + overflow-x: hidden; +} + +.color-picker-item { + border-radius: 50%; + border: 1px solid rgb(60,60,60); + width: 30px; + height: 30px; + margin: 2px; + cursor: pointer; +} \ No newline at end of file diff --git a/app/static/cssold/bootstrapv3.min.css b/app/static/cssold/bootstrapv3.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/app/static/cssold/bootstrapv3.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/app/static/cssold/catalog.css b/app/static/cssold/catalog.css new file mode 100644 index 0000000..cf3753b --- /dev/null +++ b/app/static/cssold/catalog.css @@ -0,0 +1,11 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/cssold/develop.css b/app/static/cssold/develop.css new file mode 100644 index 0000000..3ce1f4d --- /dev/null +++ b/app/static/cssold/develop.css @@ -0,0 +1,15 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.text-secondary { + color: rgb(199,199,199) !important; +} \ No newline at end of file diff --git a/app/static/cssold/gameview.css b/app/static/cssold/gameview.css new file mode 100644 index 0000000..ad67c09 --- /dev/null +++ b/app/static/cssold/gameview.css @@ -0,0 +1,135 @@ +.text-secondary { + color: rgb(199, 199, 199) !important; +} +.nav-link { + color: rgb(199, 199, 199) !important; +} +.nav-link.active { + color: rgb(255, 255, 255) !important; +} +.details-container h2 { + font-size: 29px; + font-weight: 500; +} +.details-container p { + font-size: 12px; +} +.redBg { + background: #CE645B; + width: 100%; + height: 5px; +} + +.greenBg { + background: #52A846; + height: 5px; +} + +.borderLeft { + border-left: 1px solid #c3c3c3; +} + +.thumbsText { + font-size: 12px; +} + +.usersVote { + padding: 0 28px; + height: 30px; + position: relative; + max-width: 300px; + width: 70%; + display: block; + float: right; + margin-top: .5rem; + margin-right: auto; + margin-left: auto; +} + +.upvote { + left: 0; + position: absolute; + top: -3px; + right: 0; +} + +.downvote { + right: 0; + position: absolute; + top: -3px; +} + +.votedetails { + display: block; + width: 100%; +} + +.votecontainer { + width: 100%; + height: 6px; + margin: 6px 0 0 0; + position: relative; + display: block; +} + +.votenumbers { + display: block; +} + +.votebackground { + background-color: #E27676; + width: 100%; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.votepercentage { + background-color: #02b757; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.segment { + background-color: rgba(20, 20, 20, 0.3); + height: 6px; + width: 2px; + position: absolute; + top: 0; +} + +.countleft { + float: left; + color: rgb(200, 200, 200); +} + +.countright { + float: right; + color: rgb(200, 200, 200); + text-align: right; +} +.cursor-pointer { + cursor: pointer; +} +.vote-up-text { + color: #02b757; +} +.vote-down-text { + color: #E27676; +} +.text-favorite { + color: #F6B702; + font-size: 16px; + font-weight: 400; +} +.favorite-button-container { + float: left; + margin-left: 10px; + width: 15%; + cursor: pointer; +} \ No newline at end of file diff --git a/app/static/cssold/global.css b/app/static/cssold/global.css new file mode 100644 index 0000000..f401f3f --- /dev/null +++ b/app/static/cssold/global.css @@ -0,0 +1,423 @@ +body { + --bs-body-bg: rgb(9,9,9) !important; + --bs-heading-color: #fff !important; +} + +.linebreak { + width: 100%; + border-bottom: 1px solid rgb(60,60,60); + margin: 10px 0; + height: 1px; +} + +.place-card { + background-color: rgb(30,30,30); + min-height: 220px; + transition: 0.2s; + width: 150px; + border-radius: 3px; + box-shadow: 0 0 5px rgb(0,0,0); +} + +.place-card h5 { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.place-card:hover { + transform: 0.2s; + transform: scale(1.05); +} + +.place-card .votePercentageBackground { + background-color: rgb(49,49,49); + z-index: 1; + height: 10px; + border-radius: 4px; + overflow: hidden; + position: relative; + border: 1px solid rgb(27,27,27); + margin-top: 3px; +} + +.place-card .votePercentageFill { + background-color: rgb(85,85,85); + height: 10px; +} + +.place-card .segment { + background-color: rgb(27, 27, 27); + height: 10px; + width: 2px; + position: absolute; + top: 0; + z-index: 3; +} + +#websitewidemessage { + background-color: rgb(94, 0, 0); +} + +#websitewidemessage p { + margin: 0; + padding: 0; + font-weight: 500; + font-size: 1rem; + text-align: center; +} + +#websitewidemessage a { + text-decoration: underline !important; + color: rgb(0, 140, 255) !important; + font-weight: 400 !important; + transition: 0.2s; +} + +.navbar { + background-color: rgb(0, 0, 0); + border-bottom: 1px solid rgb(0, 0, 0); +} + +.navbar-brand h1 { + font-size: 2rem; + margin-bottom: 0; + font-weight: 700; + text-align: center; +} + +#footer { + border-top: 1px solid rgb(20, 20, 20); + background-color: rgb(17, 16, 16); + min-height: 100px; +} + +#footerlist a { + display: flex; + width: 100%; + text-decoration: none !important; + color: rgb(255, 255, 255) !important; + font-weight: 400 !important; + transition: 0.2s; +} + +#currencydiv span { + margin-left: 4px; + font-size: 1.25rem; + font-weight: 400; + color: rgb(255,255,255); + min-width: 28px; +} + +.text-secondary { + color: rgb(255, 255, 255) !important; +} + +.rbx-icon-default-navigation,.rbx-icon-nav-menu,.rbx-icon-nav-robux,.rbx-icon-nav-tix,.rbx-icon-nav-settings,.rbx-icon-nav-search,.rbx-icon-nav-home,.rbx-icon-nav-profile,.rbx-icon-nav-message,.rbx-icon-nav-friends,.rbx-icon-nav-charactercustomizer,.rbx-icon-nav-inventory,.rbx-icon-nav-trade,.rbx-icon-nav-group,.rbx-icon-nav-forum,.rbx-icon-nav-blog,.rbx-icon-nav-search-white,.rbx-icon-nav-shop { + background-image: url(/static/svg/navigation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; +} + +.rbx-icon-nav-menu { + background-position: 0 0; +} + +.rbx-icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .rbx-icon-nav-menu,a:hover .rbx-icon-nav-menu { + background-position: -28px 0; +} + +.rbx-icon-nav-robux { + background-position: 0 -28px; +} + +.rbx-icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .rbx-icon-nav-robux,a:hover .rbx-icon-nav-robux { + background-position: -28px -28px; +} + +.rbx-icon-nav-tix { + background-position: 0 -56px; +} + +.rbx-icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .rbx-icon-nav-tix,a:hover .rbx-icon-nav-tix { + background-position: -28px -56px; +} + +.rbx-icon-nav-settings { + background-position: 0 -84px; +} + +.rbx-icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .rbx-icon-nav-settings,a:hover .rbx-icon-nav-settings { + background-position: -28px -84px; +} + +.rbx-icon-nav-search { + background-position: 0 -112px; +} + +.rbx-icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .rbx-icon-nav-search,a:hover .rbx-icon-nav-search { + background-position: -28px -112px; +} + +.rbx-icon-nav-home { + background-position: 0 -140px; +} + +.rbx-icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .rbx-icon-nav-home,a:hover .rbx-icon-nav-home { + background-position: -28px -140px; +} + +.rbx-icon-nav-profile { + background-position: 0 -168px; +} + +.rbx-icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .rbx-icon-nav-profile,a:hover .rbx-icon-nav-profile { + background-position: -28px -168px; +} + +.rbx-icon-nav-message { + background-position: 0 -196px; +} + +.rbx-icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .rbx-icon-nav-message,a:hover .rbx-icon-nav-message { + background-position: -28px -196px; +} + +.rbx-icon-nav-friends { + background-position: 0 -224px; +} + +.rbx-icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .rbx-icon-nav-friends,a:hover .rbx-icon-nav-friends { + background-position: -28px -224px; +} + +.rbx-icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.rbx-icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +button:hover .rbx-icon-nav-charactercustomizer,a:hover .rbx-icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.rbx-icon-nav-inventory { + background-position: 0 -280px; +} + +.rbx-icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .rbx-icon-nav-inventory,a:hover .rbx-icon-nav-inventory { + background-position: -28px -280px; +} + +.rbx-icon-nav-trade { + background-position: 0 -308px; +} + +.rbx-icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .rbx-icon-nav-trade,a:hover .rbx-icon-nav-trade { + background-position: -28px -308px; +} + +.rbx-icon-nav-group { + background-position: 0 -336px; +} + +.rbx-icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .rbx-icon-nav-group,a:hover .rbx-icon-nav-group { + background-position: -28px -336px; +} + +.rbx-icon-nav-forum { + background-position: 0 -364px; +} + +.rbx-icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .rbx-icon-nav-forum,a:hover .rbx-icon-nav-forum { + background-position: -28px -364px; +} + +.rbx-icon-nav-blog { + background-position: 0 -392px; +} + +.rbx-icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .rbx-icon-nav-blog,a:hover .rbx-icon-nav-blog { + background-position: -28px -392px; +} + +.rbx-icon-nav-search-white { + background-position: 0 -420px; +} + +.rbx-icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .rbx-icon-nav-search-white,a:hover .rbx-icon-nav-search-white { + background-position: -28px -420px; +} + +.rbx-icon-nav-shop { + background-position: 0 -448px; +} + +.rbx-icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .rbx-icon-nav-shop,a:hover .rbx-icon-nav-shop { + background-position: -28px -448px; +} + +.rbx-icon-default-bc,.rbx-icon-bc,.rbx-icon-tbc,.rbx-icon-obc, .rbx-icon-negative-bc, .rbx-icon-negative-tbc, .rbx-icon-negative-obc{ + background-image: url(/static/img/Style/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; +} + +.rbx-icon-default-iconlabels,.rbx-icon-bc-label,.rbx-icon-tbc-label,.rbx-icon-obc-label,.rbx-icon-limited-label,.rbx-icon-limited-bc-label,.rbx-icon-limited-tbc-label,.rbx-icon-limited-obc-label,.rbx-icon-limited-unique-label,.rbx-icon-limited-unique-bc-label,.rbx-icon-limited-unique-tbc-label,.rbx-icon-limited-unique-obc-label { + background-image: url(/static/img/Style/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; +} + +.rbx-icon-bc { + background-position: 0 0; +} + +.rbx-icon-tbc { + background-position: 0 -28px; +} + +.rbx-icon-obc { + background-position: 0 -56px; +} + +.rbx-icon-negative-bc { + background-position: -52px 0; +} + +.rbx-icon-negative-tbc { + background-position: -52px -28px; +} + +.rbx-icon-negative-obc { + background-position: -52px -56px; +} + +.rbx-icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.rbx-icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.rbx-icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.rbx-icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.rbx-icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.rbx-icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.rbx-icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.rbx-icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.rbx-icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.rbx-icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.rbx-icon-limited-unique-obc-label { + background-position: 0 -180px; +} \ No newline at end of file diff --git a/app/static/cssold/header.css b/app/static/cssold/header.css new file mode 100644 index 0000000..880988a --- /dev/null +++ b/app/static/cssold/header.css @@ -0,0 +1,360 @@ +:root { + --sidebar-width: 250px; + --navbar-height: 60px; + --primary-color: #333333; + --sidebar-bg: #1a1a1a; + --transition-speed: 0.3s; + --transition-timing: cubic-bezier(0.4, 0, 0.2, 1); + --alert-color: #f5a9b8; + --scrollbar-color: #333333; +} + +::-webkit-scrollbar { + height: 12px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: #666; + border-radius: 8px; + background-clip: padding-box; + border: 3px solid transparent; +} + +::-webkit-scrollbar-thumb:hover { + background-color: #888; +} + +::-webkit-scrollbar-button { + width: 0; + height: 0; + display: none; +} + +/* ariez what the fuck? */ +* { + scrollbar-width: thin; + scrollbar-color: #666 transparent; +} +.modal-content { + z-index: 1060 !important; + position: relative; +} +@keyframes slideIn { + from { + opacity: 0; + transform: translateX(-20px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes scaleIn { + from { + transform: scale(0.95); + opacity: 0; + } + to { + transform: scale(1); + opacity: 1; + } +} + +body { + min-height: 100vh; + padding-top: var(--navbar-height) !important; +} + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + background: var(--sidebar-bg); + border-right: 1px solid rgba(255,255,255,0.1); + z-index: 1030; + transition: transform var(--transition-speed) var(--transition-timing); + padding-top: var(--navbar-height); + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: var(--primary-color) var(--sidebar-bg); +} + +.sidebar-nav a { + animation: slideIn 0.5s var(--transition-timing); + animation-fill-mode: both; +} + +.sidebar-nav a:nth-child(1) { animation-delay: 0.1s; } +.sidebar-nav a:nth-child(2) { animation-delay: 0.15s; } +.sidebar-nav a:nth-child(3) { animation-delay: 0.2s; } +.sidebar-nav a:nth-child(4) { animation-delay: 0.25s; } +.sidebar-nav a:nth-child(5) { animation-delay: 0.3s; } +.sidebar-nav a:nth-child(6) { animation-delay: 0.35s; } +.sidebar-nav a:nth-child(7) { animation-delay: 0.4s; } +.sidebar-nav a:nth-child(8) { animation-delay: 0.45s; } +.sidebar-nav a:nth-child(9) { animation-delay: 0.5s; } +.sidebar-nav a:nth-child(10) { animation-delay: 0.55s; } + +.sidebar-hidden .sidebar { + transform: translateX(-100%); +} + +.main-content { + margin-left: var(--sidebar-width); + transition: margin var(--transition-speed) var(--transition-timing); + animation: fadeIn 0.5s var(--transition-timing); + padding: 1rem; + min-height: calc(100vh - var(--navbar-height)); +} + +.sidebar-hidden .main-content { + margin-left: 0; +} + +.sidebar-nav { + padding: 1rem; +} + +.sidebar-nav .nav-link { + color: rgb(255, 255, 255); + padding: 0.75rem 1rem; + border-radius: 8px; + margin-bottom: 0.5rem; + transition: all var(--transition-speed) var(--transition-timing); + display: flex; + align-items: center; + gap: 0.75rem; + position: relative; +} + +.sidebar-nav .nav-link:hover { + background: rgba(255,255,255,0.1); + color: white; + transform: translateX(5px); +} + +.sidebar-nav .nav-link::before { + content: ''; + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 3px; + background: var(--primary-color); + transform: scaleY(0); + transition: transform var(--transition-speed) var(--transition-timing); +} + +.sidebar-nav .nav-link:hover::before { + transform: scaleY(1); +} + +.sidebar-nav .nav-link i { + font-size: 1.25rem; + transition: transform var(--transition-speed) var(--transition-timing); +} + +.sidebar-nav .nav-link:hover i { + transform: scale(1.1); +} + +.navbar { + position: fixed; + top: 0; + left: 0; + right: 0; + height: var(--navbar-height); + background: var(--sidebar-bg) !important; + border-bottom: 1px solid rgba(255,255,255,0.1); + animation: fadeIn 0.5s var(--transition-timing); + z-index: 1040; + padding: 0.5rem 1rem; +} + +.navbar .container-fluid { + justify-content: space-between; + padding: 0; +} + +.navbar-brand { + display: flex; + align-items: center; +} + +.navbar-brand:hover { + transform: scale(1.05); +} + +.profile-section { + padding: 1rem; + border-top: 1px solid rgba(255, 255, 255, 0.1); + margin-top: auto; + animation: scaleIn 0.5s var(--transition-timing); +} + +.profile-section img { + transition: transform var(--transition-speed) var(--transition-timing); +} + +.profile-section:hover img { + transform: scale(1.1); +} + +.toggle-sidebar { + cursor: pointer; + padding: 0.5rem; + display: none; + transition: transform var(--transition-speed) var(--transition-timing); +} + +.toggle-sidebar:hover { + transform: scale(1.1); +} + +.badge { + transition: all var(--transition-speed) var(--transition-timing); +} + +.nav-link:hover .badge { + transform: scale(1.1) translateX(2px); +} + +#footer { + margin-left: var(--sidebar-width); + transition: margin var(--transition-speed) var(--transition-timing); + animation: fadeIn 0.5s var(--transition-timing); +} + +.sidebar-hidden #footer { + margin-left: 0; +} + +.title-logo { + margin: 0; + display: inline-block; + height: 2.5rem; +} + +.title-logo img { + height: 100%; + width: auto; + display: block; +} + +.title-logo-lander { + margin: 0; + display: inline-block; + height: 2.9rem; +} + +.title-logo-lander img { + height: 100%; + width: auto; + display: block; +} + + + +#websitewidemessage { + position: fixed; + top: var(--navbar-height); + left: var(--sidebar-width); + right: 0; + z-index: 1030; + margin: 0; + border-radius: 0; + text-align: center; + background-color: var(--alert-color); + animation: slideIn 0.5s var(--transition-timing); + padding: 0.25rem; + font-size: 0.875rem; + min-height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-bottom: 1px solid rgba(255,255,255,0.1); +} + +.sidebar-hidden #websitewidemessage { + left: 0; + transition: left var(--transition-speed) var(--transition-timing); +} + +#websitewidemessage p { + margin: 0; +} + +body.has-alert .main-content { + padding-top: 0px; +} + +@media (max-width: 992px) { + .sidebar { + transform: translateX(-100%); + } + + .sidebar.show { + transform: translateX(0); + } + + .main-content { + margin-left: 0; + } + + .toggle-sidebar { + display: block; + } + + #websitewidemessage { + left: 0; + } + + body.has-alert .main-content { + padding-top: 0px; + } +} + +.subnav-bar { + display: none; +} + +.sidebar::-webkit-scrollbar { + width: 6px; +} + +.sidebar::-webkit-scrollbar-track { + background: var(--scrollbar-color); +} + +.sidebar::-webkit-scrollbar-thumb { + background-color: #4a4a4a; + border-radius: 3px; +} + +.sidebar::-webkit-scrollbar-thumb:hover { + background-color: #555555; +} + +.nav-item.settings-dropdown { + display: none !important; +} + +#currencydiv { + display: none; +} \ No newline at end of file diff --git a/app/static/cssold/home.css b/app/static/cssold/home.css new file mode 100644 index 0000000..298442b --- /dev/null +++ b/app/static/cssold/home.css @@ -0,0 +1,37 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.card-container { + background-color: rgb(30,30,30) !important; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.2); + border-radius: 5px; +} + +.status-icon { + position: absolute; + bottom : -8px; + right: -8px; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(0, 139, 219); + border: 2px solid rgb(30,30,30); +} + +.status-icon-green { + background-color: rgb(15, 211, 80) !important; +} + +.image-container { + position: relative; + display: table; + margin: 0 auto; + +} + +.text-secondary { + color: rgb(180, 180, 180) !important; +} \ No newline at end of file diff --git a/app/static/cssold/icons.css b/app/static/cssold/icons.css new file mode 100644 index 0000000..0b9581e --- /dev/null +++ b/app/static/cssold/icons.css @@ -0,0 +1,1549 @@ +/* + FILE ARCHIVED ON 20:10:15 Mar 23, 2016 AND RETRIEVED FROM THE + INTERNET ARCHIVE ON 16:20:56 Aug 07, 2021. + JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. + + ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. + SECTION 108(a)(3)). +*/ +.icon-default-navigation, +.icon-nav-menu, +.icon-nav-robux, +.icon-nav-tix, +.icon-nav-settings, +.icon-nav-search, +.icon-nav-home, +.icon-nav-profile, +.icon-nav-message, +.icon-nav-friends, +.icon-nav-charactercustomizer, +.icon-nav-inventory, +.icon-nav-trade, +.icon-nav-group, +.icon-nav-forum, +.icon-nav-blog, +.icon-nav-search-white, +.icon-nav-shop { + background-image: url('/static/img/navigation_02012016.svg'); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.dark-icon { + background-image: url('/static/img/navigation_02012016-dark.svg') !important; +} + +.icon-nav-menu { + background-position: 0 0; +} + +.icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .icon-nav-menu, +a:hover .icon-nav-menu { + background-position: -28px 0; +} + +.icon-nav-robux { + background-position: 0 -28px; +} + +.icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .icon-nav-robux, +a:hover .icon-nav-robux { + background-position: -28px -28px; +} + +.icon-nav-tix { + background-position: 0 -56px; +} + +.icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .icon-nav-tix, +a:hover .icon-nav-tix { + background-position: -28px -56px; +} + +.icon-nav-settings { + background-position: 0 -84px; +} + +.icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .icon-nav-settings, +a:hover .icon-nav-settings { + background-position: -28px -84px; +} + +.icon-nav-search { + background-position: 0 -112px; +} + +.icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .icon-nav-search, +a:hover .icon-nav-search { + background-position: -28px -112px; +} + +.icon-nav-home { + background-position: 0 -140px; +} + +.hover-icon-nav-home:hover { + color: #02b757; +} + +.icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .icon-nav-home, +a:hover .icon-nav-home { + background-position: -28px -140px; +} + +.icon-nav-profile { + background-position: 0 -168px; +} + +.hover-icon-nav-profile:hover { + color: #f68802; +} + +.icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .icon-nav-profile, +a:hover .icon-nav-profile { + background-position: -28px -168px; +} + +.icon-nav-message { + background-position: 0 -196px; +} + +.icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .icon-nav-message, +a:hover .icon-nav-message { + background-position: -28px -196px; +} + +.icon-nav-friends { + background-position: 0 -224px; +} + +.icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .icon-nav-friends, +a:hover .icon-nav-friends { + background-position: -28px -224px; +} + +.icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +.hover-icon-nav-charactercustomizer:hover { + color: #f68802; +} + +button:hover .icon-nav-charactercustomizer, +a:hover .icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.icon-nav-inventory { + background-position: 0 -280px; +} + +.hover-icon-nav-inventory:hover { + color: #02b757; +} + +.icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .icon-nav-inventory, +a:hover .icon-nav-inventory { + background-position: -28px -280px; +} + +.icon-nav-trade { + background-position: 0 -308px; +} + +.icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .icon-nav-trade, +a:hover .icon-nav-trade { + background-position: -28px -308px; +} + +.icon-nav-group { + background-position: 0 -336px; +} + +.icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .icon-nav-group, +a:hover .icon-nav-group { + background-position: -28px -336px; +} + +.icon-nav-forum { + background-position: 0 -364px; +} + +.icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .icon-nav-forum, +a:hover .icon-nav-forum { + background-position: -28px -364px; +} + +.icon-nav-blog { + background-position: 0 -392px; +} + +.icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .icon-nav-blog, +a:hover .icon-nav-blog { + background-position: -28px -392px; +} + +.icon-nav-search-white { + background-position: 0 -420px; +} + +.icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .icon-nav-search-white, +a:hover .icon-nav-search-white { + background-position: -28px -420px; +} + +.icon-nav-shop { + background-position: 0 -448px; +} + +.icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .icon-nav-shop, +a:hover .icon-nav-shop { + background-position: -28px -448px; +} + +.icon-default-generic, +.icon-home, +.icon-search, +.icon-settings, +.icon-edit, +.icon-inactive, +.icon-male, +.icon-female, +.icon-page, +.icon-brokenpage, +.icon-audio, +.icon-moreinfo, +.icon-play, +.icon-pause, +.icon-menu, +.icon-right, +.icon-left, +.icon-up, +.icon-down, +.icon-next, +.icon-back, +.icon-checkmark, +.icon-checkmark-on, +.icon-close, +.icon-more, +.icon-sorting, +.icon-additem, +.icon-carousel-right, +.icon-carousel-left, +.icon-games-carousel-right, +.icon-games-carousel-left, +.icon-games-carousel-right.hover, +.icon-games-carousel-left.hover, +.icon-clock, +.icon-grid, +.icon-slideshow, +.icon-pastname, +.btn-generic-edit-lg .icon-edit, +a.btn-generic-edit-lg .icon-edit, +.btn-generic-edit-lg:hover .icon-edit, +a.btn-generic-edit-lg:hover .icon-edit, +.btn-generic-edit-md .icon-edit, +a.btn-generic-edit-md .icon-edit, +.btn-generic-edit-md:hover .icon-edit, +a.btn-generic-edit-md:hover .icon-edit, +.btn-generic-edit-sm .icon-edit, +a.btn-generic-edit-sm .icon-edit, +.btn-generic-edit-sm:hover .icon-edit, +a.btn-generic-edit-sm:hover .icon-edit, +.btn-generic-edit-xs .icon-edit, +a.btn-generic-edit-xs .icon-edit, +.btn-generic-edit-xs:hover .icon-edit, +a.btn-generic-edit-xs:hover .icon-edit { + background-image: url(/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-generic-16x16, +.icon-edit-16x16, +.icon-right-16x16, +.icon-left-16x16, +.icon-up-16x16, +.icon-down-16x16, +.icon-checkmark-16x16, +.icon-close-16x16, +.rbx-input-group-btn .rbx-input-dropdown-btn:hover .icon-down, +.rbx-input-group-btn .rbx-input-dropdown-btn:focus .icon-down, +.rbx-select-group:hover .icon-down, +.open .rbx-input-dropdown-btn .icon-down { + background-image: url(/static/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: 32px auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-games, +.icon-inventory, +.icon-games, +.icon-catalog, +.icon-like, +.icon-like.selected, +.icon-dislike, +.icon-dislike.selected, +.icon-playaudio, +.icon-copylocked, +.icon-nocopylocked, +.icon-publicserver, +.icon-privateserver, +.icon-allgears, +.icon-partialgears, +.icon-nogear, +.icon-MeleeWeapon, +.icon-RangedWeapon, +.icon-PowerUp, +.icon-Explosive, +.icon-MusicalInstrument, +.icon-NavigationEnhancer, +.icon-BuildingTool, +.icon-SocialItem, +.icon-PersonalTransport { + background-image: url(/static/img/games.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-badges, +.icon-inviter, +.icon-friendship, +.icon-welcome-to-the-club, +.icon-ambassador, +.icon-combat-initiation, +.icon-warrior, +.icon-bloxxer, +.icon-homestead, +.icon-bricksmith, +.icon-official-model-maker, +.icon-builders-club, +.icon-turbo-builders-club, +.icon-outrageous-builders-club, +.icon-administrator, +.icon-veteran { + background-image: url(/static/img/roblox_badges.svg); + background-repeat: no-repeat; + background-size: 280px auto; + width: 140px; + height: 140px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-friendstatus, +.icon-game, +.icon-studio, +.icon-online { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Home/friendsstatus.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-creation, +.icon-profile, +.icon-develop, +.icon-charactercustomizer, +.icon-place, +.icon-personalserver, +.icon-shirt, +.icon-tshirt, +.icon-decal, +.icon-pants, +.icon-models, +.icon-tutorial { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/creation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-social, +.icon-message, +.icon-addfriend, +.icon-friends, +.icon-group, +.icon-forum, +.icon-blog, +.icon-trade, +.icon-share { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/social.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-branded, +.icon-playerpoint, +.icon-clanpoint, +.icon-leaderboard, +.icon-favorite, +.icon-favorite.favorited, +.icon-robux, +.icon-tix { + background-image: url(/static/img/branded.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-bc, +.icon-bc, +.icon-tbc, +.icon-obc { + background-image: url(/static/img/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-negative, +.icon-report.active, +.icon-remove, +.icon-alert, +.icon-flag, +.icon-warning, +.icon-lock { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/negative_08272015.svg); + background-repeat: no-repeat; + background-size: 200% auto; + width: 20px; + height: 20px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-stars { + background-image: url(/web/20160323201015im_/http://static.rbxcdn.com/images/Games/stars.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-thumbs-16x16, +.icon-thumbs-up, +.icon-thumbs-down { + background-image: url(/static/img/thumbs.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-iconlabels, +.icon-bc-label, +.icon-tbc-label, +.icon-obc-label, +.icon-limited-label, +.icon-limited-bc-label, +.icon-limited-tbc-label, +.icon-limited-obc-label, +.icon-limited-unique-label, +.icon-limited-unique-bc-label, +.icon-limited-unique-tbc-label, +.icon-limited-unique-obc-label { + background-image: url(/static/img/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-charts, +.icon-line-chart, +.icon-line-chart.selected, +.icon-pie-chart, +.icon-pie-chart.selected, +.icon-bar-chart, +.icon-bar-chart.selected { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Icons/charts.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-home { + background-position: 0 0; +} + +.icon-search { + background-position: 0 -28px; +} + +.icon-settings { + background-position: 0 -56px; +} + +.icon-edit { + background-position: 0 -84px; +} + +.icon-inactive { + background-position: 0 -112px; +} + +.icon-male { + background-position: 0 -140px; +} + +.icon-male:hover { + background-position: -28px -140px; +} + +button:hover .icon-male, +a:hover .icon-male { + background-position: -28px -140px; +} + +.icon-female { + background-position: 0 -168px; +} + +.icon-female:hover { + background-position: -28px -168px; +} + +button:hover .icon-female, +a:hover .icon-female { + background-position: -28px -168px; +} + +.icon-page { + background-position: 0 -196px; +} + +.icon-brokenpage { + background-position: 0 -224px; +} + +.icon-audio { + background-position: 0 -252px; +} + +.icon-moreinfo { + background-position: 0 -280px; +} + +.icon-moreinfo:hover { + background-position: -28px -280px; +} + +button:hover .icon-moreinfo, +a:hover .icon-moreinfo { + background-position: -28px -280px; +} + +.icon-play { + background-position: 0 -308px; +} + +.icon-pause { + background-position: 0 -336px; +} + +.icon-menu { + background-position: 0 -364px; +} + +.icon-right { + background-position: 0 -392px; +} + +.icon-right:hover { + background-position: -28px -392px; +} + +button:hover .icon-right, +a:hover .icon-right { + background-position: -28px -392px; +} + +.icon-left { + background-position: 0 -420px; +} + +.icon-left:hover { + background-position: -28px -420px; +} + +button:hover .icon-left, +a:hover .icon-left { + background-position: -28px -420px; +} + +.icon-up { + background-position: 0 -448px; +} + +.icon-down { + background-position: 0 -476px; +} + +.icon-next { + background-position: 0 -504px; +} + +.icon-back { + background-position: 0 -532px; +} + +.icon-checkmark { + background-position: 0 -560px; +} + +.icon-checkmark-on { + background-position: -28px -560px; +} + +.icon-close { + background-position: 0 -588px; +} + +.icon-more { + background-position: 0 -616px; +} + +.icon-more:hover { + background-position: -28px -616px; +} + +button:hover .icon-more, +a:hover .icon-more { + background-position: -28px -616px; +} + +.icon-sorting { + background-position: 0 -644px; +} + +.icon-additem { + background-position: 0 -672px; +} + +.icon-edit-16x16 { + background-position: 0 -48px; +} + +.icon-right-16x16 { + background-position: 0 -224px; +} + +.icon-left-16x16 { + background-position: 0 -240px; +} + +.icon-up-16x16 { + background-position: 0 -256px; +} + +.icon-down-16x16 { + background-position: 0 -272px; +} + +.icon-checkmark-16x16 { + background-position: 0 -320px; +} + +.icon-close-16x16 { + background-position: 0 -336px; +} + +.icon-carousel-right { + background-position: 0 -896px; +} + +.icon-carousel-left { + background-position: 0 -924px; +} + +.icon-games-carousel-right { + background-position: 0 -952px; +} + +.icon-games-carousel-right:hover { + background-position: -28px -952px; +} + +button:hover .icon-games-carousel-right, +a:hover .icon-games-carousel-right { + background-position: -28px -952px; +} + +.icon-games-carousel-left { + background-position: 0 -980px; +} + +.icon-games-carousel-left:hover { + background-position: -28px -980px; +} + +button:hover .icon-games-carousel-left, +a:hover .icon-games-carousel-left { + background-position: -28px -980px; +} + +.icon-games-carousel-right.hover { + background-position: -28px -952px; +} + +.icon-games-carousel-left.hover { + background-position: -28px -980px; +} + +.icon-clock { + background-position: 0 -1008px; +} + +.icon-clock:hover { + background-position: -28px -1008px; +} + +button:hover .icon-clock, +a:hover .icon-clock { + background-position: -28px -1008px; +} + +.icon-grid { + background-position: 0 -1036px; +} + +.icon-slideshow { + background-position: 0 -1064px; +} + +.icon-pastname { + background-position: 0 -1092px; +} + +.icon-inventory { + background-position: 0 0; +} + +.icon-games { + background-position: 0 -28px; +} + +.icon-catalog { + background-position: 0 -56px; +} + +.icon-like { + background-position: 0 -84px; +} + +.icon-like:hover { + background-position: -28px -84px; +} + +button:hover .icon-like, +a:hover .icon-like { + background-position: -28px -84px; +} + +.icon-like.selected { + background-position: -28px -84px; +} + +.icon-dislike { + background-position: 0 -112px; +} + +.icon-dislike:hover { + background-position: -28px -112px; +} + +button:hover .icon-dislike, +a:hover .icon-dislike { + background-position: -28px -112px; +} + +.icon-dislike.selected { + background-position: -28px -112px; +} + +.icon-playaudio { + background-position: 0 -140px; +} + +.icon-copylocked { + background-position: 0 -168px; +} + +.icon-nocopylocked { + background-position: 0 -196px; +} + +.icon-publicserver { + background-position: 0 -224px; +} + +.icon-privateserver { + background-position: 0 -252px; +} + +.icon-allgears { + background-position: 0 -280px; +} + +.icon-partialgears { + background-position: 0 -308px; +} + +.icon-nogear { + background-position: 0 -336px; +} + +.icon-MeleeWeapon { + background-position: 0 -364px; +} + +.icon-RangedWeapon { + background-position: 0 -392px; +} + +.icon-PowerUp { + background-position: 0 -420px; +} + +.icon-Explosive { + background-position: 0 -448px; +} + +.icon-MusicalInstrument { + background-position: 0 -476px; +} + +.icon-NavigationEnhancer { + background-position: 0 -504px; +} + +.icon-BuildingTool { + background-position: 0 -532px; +} + +.icon-SocialItem { + background-position: 0 -560px; +} + +.icon-PersonalTransport { + background-position: 0 -588px; +} + +.icon-profile { + background-position: 0 0; +} + +.icon-develop { + background-position: 0 -28px; +} + +.icon-charactercustomizer { + background-position: 0 -56px; +} + +.icon-place { + background-position: 0 -84px; +} + +.icon-personalserver { + background-position: 0 -112px; +} + +.icon-shirt { + background-position: 0 -140px; +} + +.icon-tshirt { + background-position: 0 -168px; +} + +.icon-decal { + background-position: 0 -196px; +} + +.icon-pants { + background-position: 0 -224px; +} + +.icon-models { + background-position: 0 -252px; +} + +.icon-tutorial { + background-position: 0 -280px; +} + +.icon-playerpoint { + background-position: 0 0; +} + +.icon-clanpoint { + background-position: 0 -28px; +} + +.icon-leaderboard { + background-position: 0 -56px; +} + +.icon-favorite { + background-position: 0 -84px; +} + +.icon-favorite:hover { + background-position: -28px -84px; +} + +button:hover .icon-favorite, +a:hover .icon-favorite { + background-position: -28px -84px; +} + +.icon-favorite.favorited { + background-position: -28px -84px; +} + +.icon-robux { + background-position: 0 -112px; +} + +.icon-tix { + background-position: 0 -140px; +} + +.icon-message { + background-position: 0 0; +} + +.icon-addfriend { + background-position: 0 -28px; +} + +.icon-friends { + background-position: 0 -56px; +} + +.icon-group { + background-position: 0 -84px; +} + +.icon-forum { + background-position: 0 -112px; +} + +.icon-blog { + background-position: 0 -140px; +} + +.icon-trade { + background-position: 0 -168px; +} + +.icon-share { + background-position: 0 -224px; +} + +.icon-share:hover { + background-position: -28px -224px; +} + +button:hover .icon-share, +a:hover .icon-share { + background-position: -28px -224px; +} + +.icon-bc { + background-position: 0 0; +} + +.icon-tbc { + background-position: 0 -28px; +} + +.icon-obc { + background-position: 0 -56px; +} + +.icon-report.active { + background-position: -20px -40px; +} + +.icon-remove { + background-position: 0 0; +} + +.icon-remove:hover { + background-position: -20px 0; +} + +button:hover .icon-remove, +a:hover .icon-remove { + background-position: -20px 0; +} + +.icon-alert { + background-position: 0 -20px; +} + +.icon-alert:hover { + background-position: -20px -20px; +} + +button:hover .icon-alert, +a:hover .icon-alert { + background-position: -20px -20px; +} + +.icon-flag { + background-position: 0 -40px; +} + +.icon-flag:hover { + background-position: -20px -40px; +} + +button:hover .icon-flag, +a:hover .icon-flag { + background-position: -20px -40px; +} + +.icon-warning { + background-position: 0 -60px; +} + +.icon-lock { + background-position: 0 -80px; +} + +.icon-lock:hover { + background-position: -20px -80px; +} + +button:hover .icon-lock, +a:hover .icon-lock { + background-position: -20px -80px; +} + +.icon-votes-background { + background-position: 0 0; +} + +.icon-votes-foreground { + background-position: 0 -16px; +} + +.icon-votes-foreground.hover { + background-position: 0 -32px; +} + +.icon-thumbs-up { + background-position: 0 0; +} + +.icon-thumbs-up:hover, .icon-thumbs-up.colored { + background-position: -16px 0; +} + +button:hover .icon-thumbs-up, +a:hover .icon-thumbs-up { + background-position: -16px 0; +} + +.icon-thumbs-down { + background-position: 0 -16px; +} + +.icon-thumbs-down:hover, .icon-thumbs-down.colored { + background-position: -16px -16px; +} + +button:hover .icon-thumbs-down, +a:hover .icon-thumbs-down { + background-position: -16px -16px; +} + +.icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.icon-limited-unique-obc-label { + background-position: 0 -180px; +} + +.icon-inviter { + background-position: 0 0; +} + +.icon-friendship { + background-position: -140px 0; +} + +.icon-welcome-to-the-club { + background-position: -140px -140px; +} + +.icon-ambassador { + background-position: 0 -420px; +} + +.icon-combat-initiation { + background-position: -140px -420px; +} + +.icon-warrior { + background-position: 0 -560px; +} + +.icon-bloxxer { + background-position: -140px -560px; +} + +.icon-homestead { + background-position: 0 -700px; +} + +.icon-bricksmith { + background-position: -140px -700px; +} + +.icon-official-model-maker { + background-position: -140px -1260px; +} + +.icon-builders-club { + background-position: 0 -700px; +} + +@media (max-width: 767px) { + .icon-builders-club { + background-position: 0 -425px; + } +} + +.icon-turbo-builders-club { + background-position: -140px -700px; +} + +@media (max-width: 767px) { + .icon-turbo-builders-club { + background-position: -85px -425px; + } +} + +.icon-outrageous-builders-club { + background-position: 0 -840px; +} + +@media (max-width: 767px) { + .icon-outrageous-builders-club { + background-position: 0 -510px; + } +} + +.icon-administrator { + /* background-position: -140px -1540px; */ + background-position: -140px -840px; +} + +.icon-veteran { + background-position: 0 -1680px; +} + +.icon-line-chart { + background-position: 0 0; +} + +.icon-line-chart:hover { + background-position: -28px 0; +} + +button:hover .icon-line-chart, +a:hover .icon-line-chart { + background-position: -28px 0; +} + +.icon-line-chart.selected { + background-position: -28px 0; +} + +.icon-pie-chart { + background-position: 0 -28px; +} + +.icon-pie-chart:hover { + background-position: -28px -28px; +} + +button:hover .icon-pie-chart, +a:hover .icon-pie-chart { + background-position: -28px -28px; +} + +.icon-pie-chart.selected { + background-position: -28px -28px; +} + +.icon-bar-chart { + background-position: 0 -56px; +} + +.icon-bar-chart:hover { + background-position: -28px -56px; +} + +button:hover .icon-bar-chart, +a:hover .icon-bar-chart { + background-position: -28px -56px; +} + +.icon-bar-chart.selected { + background-position: -28px 0; +} + +.icon-game { + background-position: 0 0; +} + +.icon-studio { + background-position: 0 -28px; +} + +.icon-online { + background-position: 0 -56px; +} + +/* + Genre Icons +*/ + +div.GamesInfoIcon { + height: 16px; + width: 16px; + display: inline-block; + top: 0; + padding: 0; + margin-right: 3px; + background: url(/img/CategoryIcons/CategorySprite.png); +} + +div.GamesInfoIcon { + background: url(/img/GenreIcons/GenreIconsSprite.png); + height: 16px; +} + +div.GamesInfoIcon.Melee { + background-position: 48px 0; +} + +div.GamesInfoIcon.Ranged { + background-position: 64px 16px; +} + +div.GamesInfoIcon.Explosive { + background-position: -16px 0; +} + +div.GamesInfoIcon.PowerUps { + background-position: -16px -16px; +} + +div.GamesInfoIcon.Navigation { + background-position: 16px 0; + z-index: inherit; +} + +div.GamesInfoIcon.Music { + background-position: 32px 0; +} + +div.GamesInfoIcon.Social { + background-position: 48px 16px; +} + +div.GamesInfoIcon.Building { + background-position: 0 0; +} + +div.GamesInfoIcon.PersonalTransport { + background-position: 0 16px; +} + +div.GamesInfoIcon.Adventure { + background-position: 0 0; +} + +div.GamesInfoIcon.War { + background-position: 16px -3px; +} + +div.GamesInfoIcon.Funny { + background-position: 32px 0; +} + +div.GamesInfoIcon.Scary { + background-position: 49px 0; +} + +div.GamesInfoIcon.Fantasy { + background-position: -16px 0; +} +div.GamesInfoIcon.TownAndCity, +div.GamesInfoIcon.Town.City { + background-position: -32px 0; +} + +div.GamesInfoIcon.All { + background-position: -47px 1px; +} + +div.GamesInfoIcon.Ninja { + background-position: 0 16px; +} + +div.GamesInfoIcon.Wild.West { + background-position: 16px 15px; +} + +div.GamesInfoIcon.Tutorial { + background-position: 32px 16px; +} + +div.GamesInfoIcon.Sports { + background-position: 49px 16px; +} + +div.GamesInfoIcon.Pirate { + background-position: -16px 16px; +} + +div.GamesInfoIcon.Sci-Fi { + background-position: -32px 16px; +} +div.GamesInfoIcon.SkatePark, +div.GamesInfoIcon.Skate.Park { + background-position: -48px 16px; + width: 15px; +} + +div.GamesInfoIcon.FPS { + background: url(/img/GenreIcons/FPS.png) no-repeat; + height: 16px; +} + +div.GamesInfoIcon.RPG { + background: url(/img/GenreIcons/RPG.png) no-repeat; + height: 16px; +} + +.icon-default-friendstatus, +.icon-game, +.icon-online, +.icon-studio { + background-image: url(/img/FriendsStatus.svg); + background-repeat: no-repeat; + background-size: 100% auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} +.icon-game { + background-position: 0 0; +} +.icon-studio { + background-position: 0 -28px; +} +.icon-online { + background-position: 0 -56px; +} + +span.game-privacy-symbol { + padding-left: 18px; + font-size: 12px; + background-image: url("/img/ico-game_privacy.png"); + background-repeat: no-repeat; + display: inline; + height: 15px; +} + +span.game-privacy-symbol.gps-inactive { + background-position: 0 -45px; +} + +span.game-privacy-symbol.gps-active { + background-position: 0 0; +} + +.tiny-thumbs-up, .tiny-thumbs-down, .upvote.tiny, .downvote.tiny { + background: url('/img/thumbsup.png') no-repeat 0 -170px; + width: 12px; + height: 13px; + padding-right: 5px; + display: inline-block; + position: relative; + top: 2px; +} + +.tiny-thumbs-down { + background-position: 0 -224px; + margin-right: 0; + padding-right: 0; + margin-left: 5px; + top: 2px; +} \ No newline at end of file diff --git a/app/static/cssold/login.css b/app/static/cssold/login.css new file mode 100644 index 0000000..b93baca --- /dev/null +++ b/app/static/cssold/login.css @@ -0,0 +1,77 @@ +body { + background: radial-gradient(circle, #333 10%, transparent 11%),radial-gradient(circle at bottom left, #333 5%, transparent 6%),radial-gradient(circle at bottom right, #333 5%, transparent 6%),radial-gradient(circle at top left, #333 5%, transparent 6%),radial-gradient(circle at top right, #333 5%, transparent 6%); + background-size: 3em 3em; + background-color: rgb(20,20,20); +} +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.login-container { + min-width: 330px; + display: inline-block; + background-color: rgba(25,25,25, 1); + box-shadow: 0 0 15px rgba(0, 0, 0, 0.7); +} + +.login-container h1 { + text-align: center; + margin-bottom: 0; + font-size: 3.5rem; + font-weight: 700; +} +.login-container p { + text-align: center; + padding: 0; + margin-bottom: 15px; + font-size: small; +} + +.login-container button { + width: 100%; + font-weight: 600; + font-size: larger; + padding: 3px; + margin-bottom: 0 !important; +} + +.login-container a { + font-size: small; + font-weight: 400 !important; +} + +.col { + padding: 0 !important; +} + +#password { + margin-top: 10px; + margin-bottom: 10px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.form-text { + /* wrap the text*/ + word-wrap: break-word; +} + +#main a { + text-decoration: none !important; + color: rgb(32, 147, 255) !important; + font-weight: 500 !important; + transition: 0.2s; +} + +#main a:hover { + text-decoration: none !important; + color: rgb(3, 133, 255) !important; + transition: 0.2s; +} \ No newline at end of file diff --git a/app/static/cssold/message.css b/app/static/cssold/message.css new file mode 100644 index 0000000..cf3753b --- /dev/null +++ b/app/static/cssold/message.css @@ -0,0 +1,11 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/cssold/profile.css b/app/static/cssold/profile.css new file mode 100644 index 0000000..1b48ae7 --- /dev/null +++ b/app/static/cssold/profile.css @@ -0,0 +1,52 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.status-icon { + position: absolute; + bottom : -8px; + right: -8px; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(0, 139, 219); + border: 2px solid rgb(30,30,30); +} + +.status-icon-green { + background-color: rgb(15, 211, 80) !important; +} + +.image-container { + position: relative; + display: table; + margin-right: 20px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.dark-container { + background-color: rgb(30,30,30) !important; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.2); + border-radius: 5px; + min-height: 100px; + overflow-x: scroll; + -ms-overflow-style: none; + scrollbar-width: none; +} + +.dark-container::-webkit-scrollbar { + display: none; +} + +.image-container-friend { + position: relative; + display: table; + margin: 0 auto; +} \ No newline at end of file diff --git a/app/static/cssold/settings.css b/app/static/cssold/settings.css new file mode 100644 index 0000000..1f1e4c5 --- /dev/null +++ b/app/static/cssold/settings.css @@ -0,0 +1,18 @@ +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.settings-container { + min-width: 800px; + padding: 10px; + border-radius: 5px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/cssold/signup.css b/app/static/cssold/signup.css new file mode 100644 index 0000000..5651446 --- /dev/null +++ b/app/static/cssold/signup.css @@ -0,0 +1,81 @@ +body { + background: radial-gradient(circle, #333 10%, transparent 11%),radial-gradient(circle at bottom left, #333 5%, transparent 6%),radial-gradient(circle at bottom right, #333 5%, transparent 6%),radial-gradient(circle at top left, #333 5%, transparent 6%),radial-gradient(circle at top right, #333 5%, transparent 6%); + background-size: 3em 3em; + background-color: rgb(20,20,20); +} + +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.signup-container { + min-width: 330px; + display: inline-block; + background-color: rgba(25,25,25, 1); + box-shadow: 0 0 15px rgba(0, 0, 0, 0.7); +} + +/* only align h1 tags */ +.signup-container h1 { + text-align: center; + margin-bottom: 0; + font-size: 3.5rem; + font-weight: 700; +} +.signup-container p { + text-align: center; + padding: 0; + margin-bottom: 15px; + font-size: small; +} + +.signup-container button { + width: 100%; + font-weight: 600; + font-size: larger; + padding: 3px; + margin-bottom: 0 !important; + color: #fff; +} + +.signup-container a { + font-size: small; + font-weight: 400 !important; +} + +.col { + padding: 0 !important; +} + +#password { + min-width: 300px; + margin-top: 10px; + margin-bottom: 10px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.form-text { + /* wrap the text*/ + word-wrap: break-word; +} + +a { + text-decoration: none !important; + color: rgb(32, 147, 255) !important; + font-weight: 500 !important; + transition: 0.2s; +} + +a:hover { + text-decoration: none !important; + color: rgb(3, 133, 255) !important; + transition: 0.2s; +} \ No newline at end of file diff --git a/app/static/cssold/terms.css b/app/static/cssold/terms.css new file mode 100644 index 0000000..a75af96 --- /dev/null +++ b/app/static/cssold/terms.css @@ -0,0 +1,15 @@ +h1 { + font-weight: 700; +} + +h5 { + color : rgb(230,230,230); + font-weight: 400; +} + + +p { + margin-left: 10px; + color: rgb(230, 230, 230); + font-size: large; +} \ No newline at end of file diff --git a/app/static/img/BC.png b/app/static/img/BC.png new file mode 100644 index 0000000000000000000000000000000000000000..9990a6148e56c83be1deb664590e6d7fafc8c1e9 GIT binary patch literal 1166 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBY!3-ojA03_tq?n7HJVQ7*IBq}me*ok@5AX?b z{r~?z!{VDnBB0{m|Nedd^Y7EIzwdwkef{Il({I0@eEt3K%kTT2f8GA{>*Bi~XW#xf z@Z#H^=U;a`{j%xtm-UZ6uYLG=^}|mqAADMR|I_mOpBCQzIQ8cH3D@8CUVGPZK?k1(9C+%t|EcHR zCoX#)JMDh#u4#LM!j^uei;%{1(fS zTR`7^)lU2c^s;YBkY6x^ppvmmXj*y4%vHP3+OLYC+fRokE^R#>CR6g~crZP3nIq29PZxdtY zm(^UJV$&}h=LOHX_dWS5NBy=He*5FT)i1rc_}@|Oi@A*d-!FUod;X;t$@kyK95xHR zG{=s&@^t2xvWlN&CvR3&M@gH(Y!?_l)AA%|HfkPT2DWwNgb)imZ9E#c-~L(X-y3n|kSe=OQ8>tZ6q0E40Y=pCf8~%t}7JbkgQ!ry@C@ zt%)xVyK7m^I!Bi8+&-VyjkA}$-{Ho;=Fp9u+()nF&pE&<$F*25Q)An`cP=rqFC*G& aztk7ZPIJ!?(ANScWCl-HKbLh*2~7aCW^u*< literal 0 HcmV?d00001 diff --git a/app/static/img/ChristmasHat.png b/app/static/img/ChristmasHat.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b0c2341a27766da28ecdfa21da851c2acd0e42 GIT binary patch literal 3424 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 literal 0 HcmV?d00001 diff --git a/app/static/img/ContentDeleted.png b/app/static/img/ContentDeleted.png new file mode 100644 index 0000000000000000000000000000000000000000..891088a61fe8e5108f60d9ed93335d5960af8b8d GIT binary patch literal 4475 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 F{{k1*LZbix literal 0 HcmV?d00001 diff --git a/app/static/img/LoginImage.png b/app/static/img/LoginImage.png new file mode 100644 index 0000000000000000000000000000000000000000..d8959a86dd0d47678f8392f896f6383865ae21d0 GIT binary patch literal 409080 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≧CstY<-D~G!_Zh%2l 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 Yo}hi?9yd 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 z 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%0D-YfCIR~DEMQ6 zI1jc$kNA*-{oMeLI#(?~)IXGwP<3u{0bah#jel3rC#>~-s-bBe`2iJJ#Sqg9aTXNb z7ofn+$C=@zfaK!%&W5;Hxh4cFXK0tIQguZz&_yhgr$|YekP@Bp1wbg-%XNHK z#)Jn`uPmSY$i}z)_P4M2_{EO@+kf|eL^W~srSRGC*Qj0?N?9fVRYy+AjNKrF1|(Hx zNyYPK_X$-ss$njXLp9ZN3y2s!$6>1J*6j@VaIM4dJza)0CHfd=W=-(E09PhRl}fp{ zmKfq5{Dz6(G7!S*4+z3+|i3ieLrTMUASKIr$nW{rH=ALShHEfnA3 zzO^JBtbw1^&)VPWhieSc{Nh?R_3?Yx`zI^oqOOAVL^WmRn+$mU4v+Gn{qB9LXnrL1 z;#+W<$F>iNaTTA)%1o{2LY;A(M*)xTbr&;$^)3DC_l!uaBa>FS#(*bRBe1$W3s{Po z)p0f;SQI>!0apx~G0|n{u;{Ey&}0b532sJOx8vk8h{q=-q)e8?C`OO>IYIfC$fb%; zL^J|Q@PRZ&hTBL;nd$Bh9Y?ZHq!e%|Fx^ZbndF2V!C~`T9x`&Ua#lg8aJEsXko=&`YcERRs!(kY?dv_vE6Z`$1i?eeQ@b#Oo(KNBy zG`x8J97Xy1?OReZpyuP3AEP<*_UavZnrOV|#f#?zCmhEUeVVB06Xx*1`T35Y{Pf3M zy*+TayXEQgmt35mlQi+$-+e{~K6?3rXBSVny1L=^^(`+y-t+vYPx<%%;n)1>Km8Gx zuWy(p<=KlfKL7L;Kl;%pTz`Es`6TH{9)wBv~w$d0Z(nbj`2#OfN#n?K9>RFfh?`R*sKeiqqfOU+e zG0}w`XS)joN8k5&gw3u69Pe%~iQ|YVQYl^nX-af{$J6IeaafthW8bsccKF7DGp8jZ zblVNjp1;6}X=F9c9h>cz&87o|+uH*-ckjr#lxkGd5O7X7yEy0B)90vUQjFZ*HthF1 z+O`FRyW0bAufIl8HXwtFb7nT%j^{6)qY0eL+#O6qVSjc(rKF#x1IlQQxq3?e28z&b zc3eDtZet%s{2kLYu|Kymo8AYG!;$G&gyzH-XVn**&9mL?ODcku&FzQGcGIxg?(BJ; zl_DRe34;mpJ=?<8y0sH2c7I9D*-Hf!E9IFTGP5(yEH6Nr6pm)Gg>UcfNMC+gDixTs zbUYsE`;&oVsvw>zB~s3hW)1!)jfOvbvyoi^P0z<4{h+YSieoH}VVZb%`HmOQU(mIU z&CO!{s~>u9Zf-aZgNcDc@#8WY)8ZV7(&F&VmTt4B-9&Oyp6y%4eqfrEr<(?b5!Hz& z?H-3R=7!=#7*OwkY#?4%Wz34tidVtw!s#>?VWr!bN`jTGh88hj7JJUnla=dPSq;DE zWH-03r44=P6l?b0hx>F5{w}tP&cFTr-YUyOi(mF#H|I>h=-b*Rtc}z6o1y{_ECF~5 zdR~sRj=cgV)@87SBF0r5f)WicNejiEFIZts>Z4F2-GV~b*QKTI@YLW`Ai%_%PIE!vw!g??9UtipZ|~lH#fJ}{8#_^zhu8{;Lh5l=D62robwd%57Vkp zk;O?V3t4UBq%cW&PbKBW<%EmYx11W=BZ)1fv6S*56eF#JZgMoqN~yTAAXesmgMk=X zOIk}ZA*JB@t1Ac|bw=mHbje`n)D6>6e?*%iKa{1C> zCFVk=P_>0=ik!VX=j`d8>tx>>f4`tCsW@yY(<*c&`wpxO=9N`AO(Vy6G?jJj&`B7_ z2}JS9(RLg9V^2fNAQSzuC;LrlQ8$}SS-@u@B(ovLlJX)612g70%VMiofTSR7`k|Ts zyKRDyQvw|4=TCWZ_5@Mk;Ey<9x7(u5F-!wfK9qhzxxUbZmR)y-cLwaoDYI!exW*!; zIa}I{_kqo33j#4l!Zgve9icIx!TbK6LtIlZz&;B_#1%E?-Z}dRmZx3?F-k@iHk;J^ zX)S40&a_-GYWG|@O}%MosV{S~MSHXa$gJ%h)g`nzoF|nCxTTD^V*7%{X)Q@gwP?p= z5OF1ZR?e?t-5iL+p(gPB4v0zP>R zbklb1H*H~imlS4%TL(=Lx+cup0X}%pKyWLjaXF_24yD*E4zF7Ls%)voS;@%&f>s?# zGd_#0CwN*l#$3*Iyx4QNYV)d=ARL8xSH{YU#!$_+;=WK*fwXp_3ZNDLOttcvzCT;* zo42(+_3hib62*5q??2EnFaslhWRNhdeSvien_2mAbqj@!4=c3N^1BvPbr#8RipxTs zqsb-qSk?*i`E_=Q%&u0WwPi!W7x1BaQD*&XF`~8Hr=atqpDQ%Gb{^zmyID`Sd($HL zx6-1>N`sQU5>c8A&my$IwG$4lQOz3XNh6GhiRq|7ut_^%=yOSfP-ppdMnM&vYr&g_ zLw$H-Bj^kwR6u6-HwweU(k3z$@>5Ckv*QXl;lvh@8eyNmD{Wc;3K7$za89_ryG7E- zC!hSBpZzGa-R;TovP^1$B6m=#LS!^Jw8c^wszWlU$$RY}EV(%1PuEE0s;*r?;a@ZvFJ zt1hAIiEK4ztd`j2`v-8vH#o*xZ+HIkF&dmaMF?=kP+?ZYYXy#-ba09Eg~?z6^!^xp0Z=vkMJRVTW)Zv_qHKAYmP z&6TyMwtunG=Zhv+^V2gb!laf?)n#QsNs`GLNIo-l2b!!ju_4MtA{Qv3lueeZ%~PX| zo(xPPBvtb9gbx-S%uT|vL9Zrm|NR$M@xVbFl}*#o-=28)7r(_P=zuUL@^Hc@K_t>j zW2puxK4)4oTPMUJ5fCQHhw%^h9dl(_ElLUXAOBv|RM zP#mI^6RA{ZsCkl_6&*3H2kf()9VuF;NXb$UKuI~5EJ0am^@r-`;^X9wz(DL@+SnS55dl$a2r zRM(@}U+N(%$xmcyklf;Oj6- z17J@59k1VlcP5;6I-NKTM_f>LXC1yRfsd4l<797Bb^hCzFnLa~%p;C$#XHRXQYEH| zG4``~S&S3YG*DTu<5Za^uB@lF&f3_D^rsV=J?cDtA3-BwIN97lVvHkAR|8i<6~uN3 zaT+pLVTk|=k_JEk!(_9v4n z5#e+?B5f+?P+Ts7CXAWo#eynATl%dO;2|*PWTksk=Jw4M8qGGmzPe&Kjv#?7p5vf2 z5=c3fG}^#^zqe>_StCxT-jwKfJJZKJ*k6r{V4B~P#_B`b|YdL5e9d;j8@U{YIRr`nvj?GVPY+$MBNySgI z6dpToDwbyTBy_%JzSsO(7_Z+4*%Wrm}R-94YTJTtE7yRFusd7t|cJM$ZyC(j8c z%ywE8xnM83IIZ@dxx3Ad$?BC@ zFs(8an62BH(NKSuJDeNjfkAJJWv0@yohn@xWU_k;0d5E7_Nph|C0sJY#=2s{RguY3 zDZ&-x!14jhPp_u8fRt1TTbv9`D4;{_&$2phncD%KD+H=z`CZEMm-e^s6kLh$7WRYG z2nU3m%P3Glx+*!-JjY3l;vG#Sxh@TNF(?l1*L!B)YK@vuKI|U6a+CAgk-Tv z#)uoHjo}1el*c7I)SFRDiRzffgh#TH^Mra&)3$hLLZ2ZuaC8iJ6XRXvbT!~ckBoMQ zzHJZ>;sY*((k@zp3Aq46#%Q3VsE8MEj=8pcdDA${Up}cR)}E5`PA7Z}Z2F!T&6a&^ z*lS>;9-l2bm1Y5xnp)y%yr283$1h@y&h#W4f-n6sm4zo2u6P}CKAD*P9O3$gP0^YQ zKwdi8{qZ3c5YQQku2Fd{V>?)_kw+)Jd5qaZtmcct5UJo~iT+d&VWw}fEH<^?Gg<_J z#Lj7o<`0z%RF23J>n@+rWm$Kqy`R{J?6qnuhLu_E=lY5e$96rg&s~Z?P9G6>JO+3u=8Y z=2CJ}1iS}vMNh-}R2F6Oi7aaR15%9_OcXK*DLZ;ih_^XrEP!&@267ibN17tw7d7I7 zXBRxpFquK-V27ifl+JnjqvDg&I*<64OP$JlEsjoI>zucAu`v--D%Em44ML-y$wi_@ zl16YQW8A8OcvP&!WzLx@b4tpQ6qP_=;{#20 zH0lg!AmCkF0HXUZ)yAorv$wamH2I9PCh+d&8okX#6#6T9phck ztFONXu|kNuP2e#0eD(Tk1c)io?RWHj&sVQs6P&|0f&^p#VZIxJ(YoKfxgzF-ddKzc zE#ov1i3P|MF0ZalY;QOqc;0+{%OQ(*8>q+Qk+y9ah5>-SKUn%(X<99JrK%hcM?%re zLNkZMffyrgYeJj-X|Q#4?I;#@+&GRLjz=_maGs$z9Rx2{l1>FuoCuAd!GxuGlo%t! zINCT+6M{@BG7VNG%Q-iv)W~Wro!4t1XPZ;JfK~XQ1iJ)>FZwN(vLVH=%aZZ9t16G-?IWNJSto1sJ z|5lr&hMlW+iXd~!sy(oyGPxED^Y`B}mO7EMjc2DASo&bUni>#uHvKroGz`iU+)FbM zVT@_6+OUj~KYUjH+umy1re%`zX+$ss#1Rhmw_A z+LGGoaF!5QUbvK~YVrG7zib6_zNq`!#Fs0aR|YJ;d@htIHl@U4F=%vIGNtx%(aLzE zmf@@~uedB0ja$|K#jVt`OXs&p;M$y)Vi2&*9W2JKMK%PF(nL6mg4~Q;y&D*hj@Iu= z6h%=+bBY2b3SAe3GO#R3xR4QKt_xjrdX}!JGhk2`jQV+HJIsJW1s{segH@MMyGUtw zabhg?qQ1T`8o-Iei4dH}gn$Nenovz-NhCFqw8|h!N7RrOoT(JWxA zssSw7G#LyXb%B447~iG+yJOw~D3bd1x4xIpV#;sAGF_w;WD@=JWdj$tT(>l#wmwQKz0q19bp1@n%GF-L?)hZtSX0h z=y4=WwnW?paOWMl&yX{lAtE>ig*#0ouSEBLq_P?r&U-==P!Zbg2Cy`ffG4;O;uP=B z3}8~FD`I=i*%>(+;Cj|{sDthKIXYUYys+)Sd%E40JWa*WF9vKbf;nny+vzm$<(IG6 z?$5ysSGU)^ySXx(!r40e=IR|TVa96PaX1WIPq!c)uRec^*A`XJ;r1OK&*#6sA|z!z z-f|ipjqdpBvn%kERXxBA;}Rew#l(`+m2_yFfo3IL5nT+d%~Z+O}c0+u?m6r9?`J-ENBu!g07QK)TYk zEf*ITvoqwJqiwB>qH_-CV7Te$v;?c#;E~|jwOgJ(e_>J3oN1bt-OkEe0vwtHJLs`HSb|WDfn|;L)5o+n<5hb;s$Bq~krmP|JU}yB#k-dWjYdp}XUOaTs{< z>^UiCd}xRaT%YbdLR!JLA;x)+5p z4oG%|D!=}=0s%rQ6nAkB-+DqYfIf(zu4T9yNJB=kb4=67@$O*hE#;wyzBe&;N)%cg zr+)ZGKjc5@Gn7qb4t^G_{J~uM&0}=2yOfwBS2tH2Pk|a{7ICDQxIG?8BD762+v(;U zPn@Qyyd(2JuCA_l{pJln|Kua4G`x59IVG(^03t}qSARG^y!U5yOtAOwou_S^5+qns z?aZfiGddy8rg1YX^!Kln@prq46H-jPdGp%XFl!t3k!KJQ`rd?N zzyA8`Z`>!``(!?G0TTek)M!Ptq#n$=xlJq{kF)cx`hEysu5Ufex4((=8P*u z<-!MkvfJ?0Fwv)sI%oGhvlen;C6oc-S7XrG%dAw;xuSt93sL=S3EVQ%lbtz{u0*n3 z{T?@qNxFKx*x%ynu`=s5%v^1U<$iT7Z{A$84IBQmKm7?!GqF3{lJwSc6e$=_1$oqH zHLd}Iwb#QarDkTviU=0bE%~Ib>TJw@qTR1kH}^5sjAUn-8xBY-QOsnhShZSwLq!B|wt{;mR)Gn2t*e8}MK-P*hHxF9Baor1$HQHo7k5P@P+L!G!sdc1F{cy|oa7>zz;BYU_=mTiVT)#UKbLQ47JU=69Cgx0h z+mpm0ZA*LR8ShSXXJ_>N2?@#+1bMRI>7V|9-X*p)T>ZtT^j8zTSGGTT#_ppXJ`3?S zar;-7NV`RSq}gp~y1?P;9s7O9A!OPgKjZ92Paz6&J#zWW&k&8I&T;W)KW6HLHZ9gciDA}vF5xbWu)>5v<@EE6_X&kJ?Y05|( z8K<69MEC040-&OdY2w%)iMf2Q%IS1R&LiSdNf~vV`U6T_xmRi_NM&8l+4{P8x%c|) z+e$kxPF-EfHGxmK#?u7Bx1hZ-C7f7V$njX1BxT;5hGF&%QdXSzOw+0Y%ftR8_viTk zC^nJ8UZE_Mb)7D@7!)=CrP5yYm1cwd-U?gScO^K-Zo6T(+sx_dHfJWLDRFUj&Suli zj;;63qRekD5gDk#)EHwa9sBKbgU;^P0v<3ka~?aOe!i@+PJ|#1mAtANVRN)GQ;R=P zgRo?Tq5+4qpqEX|^SZ3_NGPLn4m^Fot-g~G0%vDu<&%7$v;i~FV3im$7Z(?_O>@t# zoGUk$$Dd+mIGxC;pU*KzHvYbD%G`HD2>kdbKjGqRKeJ~Z+p1R6mtTI#@p$CtKmR!) zghy?=u(rt7#Jd^4QdXbdyRXHXQ<&2zMCY73GZ0w~v-SQgUB{J4sYJOQd6^gQb@=K? z>r63IRjQVQU^SBKLgTP152BT-Ez7kQbYvc!vn8IF)^KX64N*)Wk_eKO^Tu)NV7%)| z(i*kC+-G*KL{iGID8Pb9O_MOEEsHrIOUcQy-z+j!ADH>LYDLQmpa64XrKD=u`DHeW ztc^>%74EVKb3NNMjr{1xKjMpDf68zE-T%tJ`d5F>&EWEJAY^#7)75P+!;>a%VNsNt}&4BRgOjOc4#I@wnvD@wGL&PPI z6HoTWSkNXzC`4bewv@{52pIU{)r>?j-3I5aKDyO??{Lm)ulF|tc}kqFZ^)w~of08; zNN#ZAaa}?}$>Z_`T<~J&FKX7g=wet3gPVaPj}#!uN>klv?`+SM#CRs56!7T zb92A%&71RXPKxC$T3^VT=3O;g|C|Yn5AA-Xl1ws@RLTH{t7p(>=D$ z^Ypi&3BN~MiQGS-83^CpKV1Qy>Kc@l@*V{jJfjHLr-9d3m)xFCoK6#CyTd1*8$ekO`V;vm=w)>;kmH zw(XdjK+co3LF;LEf$ZU;X&Ar0gXEjftI&ryeK5aO`QlRl?8;GE@;V z6tc42HoW}!BZeNv@x;^fJ-f}0q>eZ5-k}q|a* z`GnyvF{RA*e9!H>6BkcB)2$MkKp=DTWzYGu9aBmS$5etI6(AL2ii~M2ni&DfFpLpJ z37yBcj-elMQHayPI8ERq`|KGM3r=ADRI)GxPi)~Bl;q3IoCTLXO-@Y7u~BofO<3C_ zNoltYZl}cS5}EmZHd)q>oHB>Q5lyBIGz=#IE8(b))A5AgmOh~i!F(JCZm(}=Mniu( zkx8bjwDtI6LmW;AKL6r(RG@l_5$~Lpw?rAH5ea6`q&dyZ0Ep|mE8;X7J0dI76uG|h z1ZU;&`e6j0EqJh+x5NwmbmDhkeg;}JMDhrlxxRS^IFiCJp163nFBnSAS%=U#Zmw_n z?dQKKK4La@jw-jOYjYsQ(@z7NeXuftl=(QDUEv$Yt2bXQ`QEDJ9J%Y^-HkvI6ptx# z_H;v)!dqUE(sT`!$|hL~Oe~d&SoSV9i~-vY$t81KluSaz^srpvC#pi%ZF&Cu899~p zGn;+3*=*VEcBS8YPQ!rrU!lW*c+dCU{ys-~AESR$>%o0wGy-l)Ig39ey0B#!-w+shMrQ*t)5 z)qrpO1|J$L$rA+i3c*AfahArCywUu{C8JP#$g}=~8dY1C4E%}@$vl2CQ_f6zK%H`o zBOS2qJs&rFUUuhfvPWXFG!|L6{^MKiLiOEc#O_xDE;N?^FYB|^Jo!vc8S*p>0@*z8 zN-B^mAeWl~Db-|Tp;Yrw6DArIcyG;;MNrl`A*q{1X28Dl-j&?CqH&^HQ0K&4=BwQE zciA2qJKsMNBQrBc%e;8+luk{^2`P3*?f-6`ovQA~%=6OwYm);@!6~_mnrp*()9L`5 z4|K_Md~d=0z+)-kADbe-$M)DY9_xwU);k?)RUur_Rd5asR)yg5`i3uWuQ*K;r*R-D zcxfypO0Akr1+Hq_`aDnDq)H?z_6Ad8gQrdAJjX0F2)>`lL!@at`V{GWfD-Xb!J(T# z(1aw97rSTYtwdxl+z{s+z6l0~dS@wv!6?key(?vMMGOFO6_BfGL28ugLZ=sIvKmgD zm71&js}fZ4Bvb;5$y(-Y&POfBE1C+}SJK)_+dwu^FlWC*Ds#3W#1G$>!{*?Oa(;eB z=RwlQ^QTYQ?mG_S$j#-693yAj9s7$tj+V<;*XW?^HybWqoFl;7SMQLdbfMt~&tIY_ zZ{J;#r%2bdynOnM;5~QafnypG@pDC^tjcb;;ggR);?<1E2otwWZIY^JJ|>d^g2J8cnn>MXNY9jS1%(@{|d# zAx+9~8c4n++(hDT4^4@js}#nZ5|Xf2N1p5&S%f5xj3X6rM>43l)gn(5yN~xY&pO^- z-`acqeeB!ncwlp5+qUdBTPV>+1-6?lUOdO)mL$`BU^P#I_w4sO6AdiYw|2WNu7Sja zGSO{XxbSls#l|@T-8?@iux(q~%@QT6jIp!x-CX9{7s_ZuGdl$$!mi!WcFnv-fc2Ml z)AIbIr=^{(Z5^RLxb<%5*-J;$1p|b|0Am&5>}*HZZHp~iL>g-VMY93M;@PvK?L1nH zVsVZ{!UxAkAH5(~`XObE&CVIt57gFD-vLSYwke!bcx;k={iHpa#%lc@^<9|BF+lBbCC4I!mP^XortWhYpp* zTv?z6ps4ubIXH5d#$t zx3@)f*6#guI-z4`?0eq3=n8!NeYTWRDb2_?0u5DnzyxPa^zhq&hMW@b8@B&|HZ{g# zwXwfxTc_o!8gtEi|ET>On3g{(Ek);!Sw1fUeui)@llCn5mlubBrr;^2N}HjoiY^WS zrQ^!%Fd91{n{Z@Z=*rEg)*R6lm{9I>K89?f>oX`JkQeqsJ%`>qPZ{{wWH8^C)D#Re z0OyFU`B~)hOl{FyP%MW?$^?N(VcO=IUQ#T`Ic1`P3+9yA0%lAFT|^)&2tfr7igPLy z_JZY4S=xlGz=*nU0W-`WvGe+Rj(S}a{)u@a#e_!~P6y&Jp(&$f%;X5uFagRmS{|== ze$j(i_tN@u%AaP~OTlim(8nyQpL1F!3$5UXKr$e}elPE=w#nREnN?A1O#DkfexCgJk!6`y_iikri6c4jnXHk+28{rD4}TP@L1^an-uq$< ztC)eR*?^r@3dNk;QZJEni3(HLOco)gfES_}G|u2pHMYOc_FXWB4}lfmWqa5+*Y{~) zK*Bkz{(y7zz}3w)UtYfDW*keYT+qI%>|milq=$W{eakJA;WRidASSOAQXo zAuIvMGGAG>A)m48NoDTVoM^L}Fr)KW$xL(DRRx^4sI*30VNVbv(=ZSa;xIu@xSUV| zIkY$e4GE_n^_~$J#nVYglUf?}jA_DYM%9G$G)Cg&NX|1VwAgh$p6DDnN5mN@=RM#F z6auOXMCZ{YcpP2=L4>M8FXB<3hS(~XH(N73f@2? zP*f7zeV}QBId2Fdc-k%?Ug>rnq47jKXZt8 zTGD?^KsuEgmqxud$JUm4MI@6Yt&p_uI40M#<;r(-;s`#_b{j+!(=;F=bZv(dM-v*W z`c(RZDrD-j8WS+(L=zgCrolB>-&IUl^&&8*jMcT@5DpvTV$YS;(oya9jP}33*e}oc z-kehAVjOv;;ICrZOZ&4;u}x&YoWtnRf}eF%RB}<-cV#_`NCcDpnUn{!_Wfn3!)~KJ}Dw>F(d9t7gHRn4Q8^#WH&Jj~A=SgK9jK#JK z3nN1+Q`n*2AwDo>VJxW-noWD@-OUZ@x1ZYIWelGB6Ty4BH_d$gl$1EdN7tGE=+Y(t z$R*9Z%sYzBH(Jvsiw~8H9##R(k|?>PO+2(&EPmk_rp&K@_Zi;J>IoF1m1!J#{q`F1 z3jk}Ia(5ieF{a`T58ss*#)|oJ;#>jDmh;RE@B-r1GSK(#(^Wuxu@R(<-D7_QNdz&0 z)zjf%x;vT~hk>XRP5U z|E=?}RJ?(lN;4NQ0Vp+C%K|gghL!=j1{rE+&{8fh&-<0Tv(?QOxf!_76|g`78dl7R za&uaox8=Guzt8rUtaC1v(VH?ZSw9b9L)UpuQ*pLSs)WqwbaDRY^rX^YYdwbQXU)t7 zSvqwEJ8CtG+G)iMU#TGrv1Q7@2sbk)X7$!`-g*yGkF8N+&Fs$3*j;S-{O;Erj(cJ> z^gqXCf|*VeC`^+Hc6o0U#rM6B8dYA(_01?fmQpgmbBefQ07>5bel^fYN~AA)s45V1 z*;AIh$LfGvEK<05a)wvO)w^plkw!X1E%ila0LCUPCzv2)0U(0&NDSOw_1wHZ!Wd|D zi!Uof+>D5W;EehvzEJjEeVw%oq|WW)idKd%RB0!r+Q$qw7(n65&$+Z^dFNS+aHA?D zXeUJ-#MW`x3dbRH+h1|36VGMKh1=4m>bXC@&Dah?7KaO--+uX;zx?IrT;JY(DzPu#n%rFZOE!*#2y=B)n{OQkr$UprjKgRja zRJrFH(j^*Iz>Rk|2Y&n26>r|W<@&bNYR4Ae;2qD;_x$k16Mp*RPfC7bo>M18OM1*V zwn3fv-{0Xe@yz#+U4Lzew|9YY8fRfLFi>HNaD8{edB>|aZ@Ij_<@vJ*K!s0yFIzU1!qjvxHsV=m6N>^F|435A+zlzB^A(4|ct zJmj9yK#ugs1MxWEve4h0coEN--rR7VN1}MbQE8K-p`kxT z?mmA<3g%=D?~ZJ8K(b?aH*ovw*PN!zX%omdBm3;}B*wRQ4B1)P%*Q}0wRyQ8C!E^s zo2ouV$|OS>NLkS-!#FYAjmQhN;6MeOi@1;~Ofi;-n$3k-P5Ys)UrvOSGeJrrKM_(Y z6&wm1Gihds15>h8ExeMLY@aAN0*AYvtG733g148~+#Lr}%DjF34o!(SukT1>=5T$Y zKMIX_-o3ry_V$ht#8@i|>Wt;$#G5#<<^n|6dZT25v!o~qCNdbL#U)Qr*u_k*5z7w_ zhtQ|r@Xs*$LTPDCgL=p zB3$3xA_%A9KzH7hbJ%%;4_u#a`235{O*k`WhH>Kh&MJrOFE)gY2|HFtzJgYot8G>y z?o`vk=62_d5wrlQOKChe8}}3&skFy~)J{RkL<`UqyVC551f^S|ik0ar)aR8b&^qOf z@(fyft(IV%vGv6Eb;XV>&tl9wpt^shte%t#6ElET4S4J6)rc;3aV`%3^2Vfic}w*& zXAHH%khOB=#)?r9PGe$_CB4Ib+BtHrgSyVgm5x{rXBp&kG57Lp zYif{1wye(e(hgcCi`BDcW#@z=(P~@=EA;5GdfRy>LzniQ!G|&E^7qUZSL#Ld+^;xQAX zLvkc$XU+);)reD1PR2?=1(}2BQlgG_4Y2^5O=ix`3<`DG3`GO6?^Pm^st!h3+^KX& zD~SdcVKt2dizeho7!W=`UGi#zpZMqeP@Yy*C%aHCR)@h^T}-lZ9euDnwlqr&H(zu|xR_rH2HnhG$*#H)8Vyn1)TuRnXkzxr2yj>tsg zJ)5or%{G2j@7b9(r&_2&lMhkbno6~_me#4UP8qp=SNmd}QYPNrUNKD*&tH6uNZ|U- z9e@3+PkD89bMOAY{Q8oA_m{r`;Gg{D$Nb{wpU`arhjBy$Jb&_n)A7i3GDj2FaCv>? z)8Bo`+siAPKg<2RzWx=PuHoa4&Ux|TDL?w*3lr~3CL$+g?3rNg(xPUVmw7~)f#ZcX zZO@;n!&@!=qfS78jn!q2rGB$sZ`RE#)s3v@P?TJpHFF-b3OP7lU0?C5FTdiLGun6q zVX`7IS~*8&u-=5jr_4wudvG}s8423aq%-b9#K(yyE0cPZ9@3GNFGy|RPL9OTqM8}q zk*z#~%?0Va<#hatrrXmaG;ySfPl$(!{+C}C)`a6+8hqoCyPo4OKSQ$8h~q46(0GTA zBU5Z?q#=$6U@DpnXT-Y`$Ln|ISOSfByldDf99~~Byq*}6()xyryx}+F-mSo zq%pD43l6VO4DYV3jARa+xfU;p^9;jhuTae-G6BcNHzr_ldm>&RL4>0yTM2AM=v27< z@{Z#$nnDAX<*|Wr^CRP@BW(GcLExC^~I65Hz(pK{Kdcff)v5$#O-a* zG){c_7r!R<4ab{nvb;ki@cFMU>En@MwCX?E3500Xx*Cf_`^LZ=mjjTCY)}GmpHOIAUvQou3RqsrEy0-e9F&!?HisZk0K0YE7J6B91!GNoFlt6)t10)|{*2 zB-YYxQlVHWzZ-P1Oo9%I9Z=J0mt!dQN0~?KvjJ6(mqYZVdmawnlNv2xUDiPV@uE>>u;C zcu4jAty9YCB5I$wTx`9$zZ6@z1l!0uYc`-wA+nf0j~(b&HvTGDTgvLz{w!b=>$zuG zPp;;872$=YcUG4IAg4q>p6nVZlXpzs*rL;i>+U`QladULQ$^EYRojfh zfu?9~t#g((m8Qa^Fi}{SCrcd*B~UtLoJ@E%Z8p(ba(3k!&$siIpAZ4-gs41gqWr08F0}6O&%*U9l8kh4A#30L^gfyQ>R_Dp9{}yII znLMEk9;(w_94ksLcA=TV8o{d|fK?KxOop{6}DBN)Hhc1>QFWCLv7HjFstWRc1JD~z9U19oHv2P6iJeaVj__9ke?&x z-0K_<5w5x7MrAdWZdnce#iU=-Bi8&RkuoodEr$2l65{IF%6hi~B1)P@O7QGr&(+}_ zzkc-v?c_Ke70nHjCnhqI64OzT2vL>nqvi8u$d00Xt;=)FvzqlQUo41RatX>>1!C0P zkevywiJH+x&1biH)aQ)LN=kOmIcK91mjB@#qX3f700c+lJ9aAc??zN0<D{iK*)v-1&AgY$@Ujeyj6M^Pp812kyJ|0J|)6vRfu7QTS%7__})}KAn2&Z>F zFMjm2U=XtQN9RND{hgI}@yJhMh(wup>dk2;oVDc1(aXf~bmUi`eZdLk>5Hf34$6t#0&u*( zy~4jz{`40=V%jJ}jvQ~kMpMG&Oi)3yXWC>w`Na!<`pvPP1!w@%M$zoiP^`Q zATG1f9d5fJoNw8WEwzH63XH(6J!4m%(uqe>Lw>3((VPy}+*0dZ=HQ(b*!^I#gD-$M0 zN8dOP8Cvl)D8Xf7igFiFJYkqB8zNxj^F zOJo_DVx+%4u-SWD3zpuSP^UBnbQF}E!^quTi|ai7DZ)76CD9*_IB5vL=^!-TbG#dI zvLgnV;t65HI0!0%);CD@B*{#9L~~>qPaKjb=S1=jNuC&QnPean5EpT=up>j}S@;Q4 zhJ?+3L}9o+arfp8)8Up7l@J?J*cO%c$RLUAV4JMuYbRZm?lzMrA_$fnkZ z+RmF;X?5_+iOpd(SIZ*)QtHqvF2Lq|Gt;Q6Q$$Gv%`sW}kd*WgSJDP%Kdm@NHDFaW zL#pGYil|3$1o4YwRqQkaE-MARq@*oAAQZsNz~P3l$V!0%B#2F7{lFj3SnziDpYIg`^qm}I~6-B7ybhcTra?C7@9e`NaU^!SSP!b{elD1oz+%;G@8xiHY>)*?2y!zWf z5lf-7U;+}X6mTk9LxnA1_bH`cXM)rUb7mZSr-Tx;w13|sNcn+&q-DGa4u|LN=7zui z>t7nEHv4v^4NIz0)s7fr&u@Nn#Q6to)4F@Pe#**lI?x2`ADMFBve>y&)21G~N0=e3 z#+QIffPr6_uJp_>LIK40nkuK!8jUQ@K?Y3 zoA)#t>g|OpNF%U{)UBVocK>Rr<}xv_*#t79$JJ4XWx&=n2LlhRoa6#DtU!Yb08~%_ zoj)_D2JuFeOmdk`#VYH7b((#jTAS(pv5l=jf#80$J6LuNH}qefEn z3Zz8I3;%IlO`@G#aGzUt#o#!u}(rrw0A*RIHcF)Cjk5@lWJY{8PVVAfv(U)Ac>VVZj zCBDpcr4QGERnup*_`lWnFX=W~jg5$D z6^WE^F5@LYwo;eA2+LVH)xdxK(|>6w^X%*|_p+3~6|BCv)tT->S*(>(6WPXUuHImo zr!<2kdl8z=XwUcNi&eC1_2l(E6r$LwMQki(ml4UFIZsldWzWC*Ae9NUSqBW&1=)$XTFiJUNeSp0;eYfdoO#FwU-6 zpalr1WtlW9XX6thT2eG}N%aw&Q_KC7G8ShySc)NQ6mh?p!OH?SH{81K=-ltD4+~!G zJxoJlIzc|c+2Hxle*R}Al3q(r8rYEBgi4|c!J24VAWIRC6+xXx{RCHE@zGD8<8w!o zgwX}2W^`zjfyp54V$cE7M{L4x8- zWHGjhM2BLJP8NVAztVjG4=mxg64|tOV4oql;+HH z@sZ~=DtQpvQAv6#;EF@k07EM(pafs$_IaJLD7biNcP+j+gWaYf6upCf8i@j5eR<^E zKV$Pek{ZYU+=O#|-Z8lzVgt!BDYU&~@R@-T^`l*9h{Wy5z>NstiP@Ca56kt|0P$8k(VpKwJ0b*VN}9HQ@-E^)uV-H)+Z|1H7NntxlJ7>YeL*B%BWmHBby zfM{NF!|PIB(iO6^3!H9yYpZIv6h^{4kjS)~mZo(?E#(x|MDV6z0E0k$zhp5Qi!GH| zo?jeo8}QAFWL@T>p*O}?U9)ZfjK`7E1mbXBX<8|{k%dnn7Tt_fEGcTtfhy;U-62xu zP)n8ZLGGnqNEUL+3@H{HO6Qb8SKpt4s)2^Sl^L+fs&gR8f`n%CYMDb_SXG`XtuK_a zfjFyNqR^1(oLbPRMA2Qgl+3*D2oJX6s?NRU8~f8^liEM4Qczwh%Z9^2e%K3ESeRnz9!Y`18F zq4cNw)5qdt)f-sbMs}}e_gPcOY&UArLG#{&vlI`=re_C;6xZHcO0xwxlq!8(=Oo`4 z^;b)PqdL(d3txP>+i&l8QnXLJ1om6cm@@s{v9O{PBvLD|R7QPelD9#K{qey}$vtOW zF(1WyN86Zgi-_78i+|^e5BkkFsdLHVCEm9{54r5)^!`|Nt10ebn(V{vo>!qYaxZK* z9v_5pyyMvCl}GoU2VlN#sc_N-VLV>j{5>DxEWJDnAy11jJzuXjWpS$K2zxQu&46Du zZUGI1LJiU7^Yub#b7;BUtgH7^9DwSW=IV{HlzpK@(kcQoA6$hd3owvnHiqi>%z2IK z7C%l`0EH#M&s}s4xKxb@yQVo!s?J2`3VPCofR9rV4=QctjM67FqOhFP7PksOtY2L9 zhjczprIczbZ=9Pm!#A_Q@+_&PW6a>~<3|Sl}~L@GNfa zw%^s6pQ1P@o4jg}%R=e}D?eatcC>Ebs*ETw4Jq`gBjCjX-*8~9+A`&sSgSbU3Ux*K z!KS2uWj1M5H{MS$;+LB>La=n6gP8D{TuCE-pq&v#7pyEYt*yx^6dz6)V{kz~`@Sjj zIfzc*3S?FyD*uM-Uo*DwGdp0EQegqiRdvu zZ2fy`w%{nSkjcTUdo^um$d0IiIUkuHjjgB^krZe1k(b0IvmwBe60;D-K;V|7N*dthqAcGh_Azk!U}TP&9E2HL zKT$_g0A*~_p#nD$K9FMK&?PRB_}ssaYYyix&s};Ez7% z^*49i-QDuR#~<_Z8M{})n@8brePgbG3g5o|mN_q^1*WWwI)F^<9}@Aqdpiw`Mj&4UCUA5MJr#aBcILq&>sK)i(^81y#-OFr@8Cog&R;R}*m zR0G1>y9d7e`mG67K0YadvUC>O$SEz{yx8%{rym$nQyev*%2!{0&FL{$q^Bb0hpx%c zhVHMHa^ls;SA6i{OYG_F?@Qd@AIV8A&A2nWMFx~IdELC4;2J?KP3MclM9L$_w{HyH zSKK0=6V_CHUf*$#^gQ~1C`Ic&TLm!A7JI7&40N7RA*bvyXl#zNs>K<|mH~-?xPH6KefDT|YHJ7sRM+p; zwg8Lu)vi19T(u5fuP>_XJ4LHTx<%AAs8L(tS`MhvxatPsf{fRnF(Ix*%QS^Uu~h0R z(2z;2wrjIDL7l*_Ca{i4w)Uo6We{~CX%Jz;f>b4E;EMsf3XMfzl`=Vg2p6H>|JKdq zOJU`D5qtvaHe=Dq$hy&`&!(_&c$e273gk_2p-4d@dA0*ArHJOpq9)QxhSPCjd>lbD zb6k*}fV*h~JpP6>flE<~e(lU{aJ-Ztrn&GnQpz0N`#V~I#$-Ve%+&(8nkV8M9J(Nc z9GK!r90EDPRT#P2?<ifpL4ZvHlKL{VPkPP3_w0O}A&9gkPGktrn_ z8Ot+BP*S!)pG!EWrH zwys%p^VX)yPX(tFRd%)!kJ;7Y%kjt#e0;hUVF@p=51JXn~NvB)qks4O<#xhan&1Wu2~ss!ojdu5(-vIfaOrMbTLv?vUG?H3DwMbaRv zJ(H!LF#aoO3gp=qUe1f9YE#cZp+%`u?zZp26=I20&lfQGXLgz#(!?B;B_vX?m=%!8 zB=*k09P^BX6In7d1G~KECK*cPHXf}nb0CYO;TTPDC`dOh6a^Nux-7m|${w`#`~QV_ zbkEg8Tk-bVGd8S=O!hUMNx=fisjnp|5NS0<(}JMGWHjH~J01=d9TFrnN3k@FVdCnO zPZ>Xb#W&x42_Fvxi9Cb{mKkE48D(OS9pr(KBO?O?qoE2!h`Vd{yB#TKUVr}@mWAE8 zHWOudaFf-5p3~zZT>tFAi{WGb{=fYjKK;dqjISU0@{8|? zgA#}g8j0Byiic?;rJ3XWKnN4a39|6TU(S5;;hrE1FJ8>tEXudvKd}Gsibst+E^wL` zcGJl8;sx`3Z<}Zk27Swo+_B`qU3|qcjJ!PE!{Z56ha5Yf@UFmJmx_qT5D3O61xG~W zj@TPdW^s~?))u}b60*_s6uPVq7?T?d>^PWvr70D~QE$diEh%#~Uh~<{es0%O=I;KU zaT?i86C#1zyEnYKeQjvS5b+dLXo8p5FZtOgKeGUJS$X~THHX6$(>Nj$xVyjQ+t=Ta zvZY-sizY9LY25QiKmQ|BJcr1`;{)^Q#Ea`|cY_T4=9^!W=EbeijpwtHQ07D z>TTDI&2lUTi7Hi>^ZRK?_`AvqZrus-|Cr^y6eCWbtw{UV?P_-ZJFi!SJ&)HR>P9lf zW0ZkJduO@k?XDSH(5e70$_2ZjGXfX>zj8ZnZ5MGKg%#sj z&Lq9CDwO7SAjK62Kk||ilF@;RgwXZF#efq<(Bv6j3Y(>_WB_|hL3*pM`07?dv%>dG zX&r*uQ6(OP*auNOg{`73wuZZlIc&)xD0*Riw(p9uW`m>JgYQ+mkJ%L_8niXALpz(e z76>`CIVE>U0e@q9dXKF6x9wFowqr73;lymdEMrrME;E<)B($|wYH=cC>r$NVcl@~X z;-*4YhWVjuph$&you{HKtoy3Fh6d<5&?dQTwz6Q_22pQKORM4&TwNi`MB9CZSW*{r zX`i*L)K`6vTuHHw0a5C%Q&#E`YPOV0YqYhg_M!Zg%d-~YHHbyrJ~@{#q8FOSeB^I60tc(Os zr~CRMdSow z36KL}fx{A++%K~-%sQBx1D@%j%A{^NKAEspnEJ(qvjW+wf@5X>V-+S6sYZ0R4Q6m< zb!3dVU>ux*GHs{{Z`+x$H-w5NC;_JA?52*|P!8^PUtLkYzT3ukWtqns2-%qq?JAe< zfD(($F0^ZvushKh(A5$ugrs~iD{Xs6A<~6MHHA#kpqF+Rf6}tGQ)^Qw>$|O5gNQ}m zRci7*Py113va~tS;9ofh(qf9t9I@a_z6P=uyS+zs_XF|Lk)qwWwRUvKNn?$1a?OXNBs8a!a6dX^Ij1R2X)tvzD< zCK`6&43SV*U#v&HUGGRxJIkakW06kLfS;#j?wy%3LSBPX8tflbM`Hri+_MTqI|ow? z1q?Z7G;PiN7+6RMBqU{X`v^WpQ3=6aE+i5>-HZ-qd5MzAG7@z{LMDX;Bs1j9q_`4# zFxM}EDCq*D(~7#K*2b=_q&kCQXUM8ZyH{|RtGX);ifaL;5=bIQa+HeEFLA4Fp@BlM zDD(ZCYNLNhB%cgn@%{ZBAAEGhN1uJf{_|_{7#L;ZKmK2R#_d=4TeEl_9 zcW9VdG&1MNG7HOMaGb^IkGO?SlCt0L$SKtrLLx$#MyJdHg01_*VMk8cgZ*Wq1a{+K zO0?6_EQHbalrf8bM*Fx*c4e5BRB?WIYXA*K4}y{wI6ce+g;^5E=^KktGATzMnequu zkWRuWB{G5gJLTc=1VLCdnW8X9h8#$zBM-A8Lq_9?d6@|;eDc9Z{B_QRqY}C0`h!Ql z{_c@eykdBH%|hT_gj<1O7kPNK+ip3Sr%l7l^+v{ zD2Zt|a{cl^5Fy5qAzCoP7+@R>RWJ^gK64s&wpA1|iKN-HHhB{2@!$e4Opiy#Ve+(^ zfq72EFszw3@AouL9QId+fDIE9d^}^REOyiDuDKKiO0~J)5#*v%rSM5BIi6D`e zS1+q#_&Cqpo!(R$)iZhHIP&V|75m+lqvZmcg=reNxw$ePGr*iqyt(_j&Ue=f+e3vO zlsFWMSyQvY*wd02#)+37e29dIOeUm_<470=OY?d-aatBTZ$!vx>4a|UcZHU_9FXdD zI}x%zO$Yx&EM~|oXcXsvirbE_SAruIoR?6Qnp~o=LKHOh0@aPWXcYv%xty0Cth4Y1 zzNCu3eJ{L-mX#@$r|WsO74H`=S-%@ER_&fW@39&TYqNx6sW)a)JBBfL_?vo3s8zrk{rpsA5%}X^OR_lFvz6?%(K3A#zU3AuY zt(=KL7>C#lhq;VT!G)H=Yah#pwOkBl9NF~sLMgfd4|TYzv;JP|E^}OXT_w++Evl># zuh4k7!d=U1Jo?phP6aHk)36-drBDFM4tZ~#-VShAaW?H);U;sZL2Jr}PFgALRTDg_ z%S3&b)zj$+I>iF5)74^Ik6d5C-j?E%T{n5FSGtYZ+9{nfq7m73d%RBd4dK3vLxfQ* z)K;qFzvkGbm(u7Vhpm+FjS1|26ddh<3l*i_HYbA8E0h}=BGme-a4Oa&b>Ff5utyhR zk%havBc~LYLdyZ1Q)ZbHEQvX1*SOpA*U@sqiwoX%XbUiS(8fJ11EZQ>e?Dc>F_BLu z^v4Cphd`JOsSq_1QXpmv3@2G|>Dh^^_dg5j+Ru~>T~aJNuBNd=(FwM}xuhaVisGdN zjhsAoFqZPhKtzFiBO1E)ApSaV8j z60fBr>a|y)QGh;`ZTX!tF1~jSFW^DE{D2J}fTN6~hFmR?B4zKlIn-DnDrT)S5bkE; zLdpDanVC>gaxme#!X2g5(`ow4JJ-``tHJl2?F+%K`e7C!2eTBT(V@PfyxyCr6yM`g z@7DcHvJ$bha+(7Y5<|vaEfz#0Ax(yq5VO{XJo#D-1j$A-M9gCCdp7zxl1+Z5W*63V z8_EG~`O(|DuR|$Dhl*pwd1(WedPRe}k4!=21ylGM5jTWGun1$T0ST39pjo)OTcSqL zK*G}1JxW5ae9h;XU;NoC!oT={K;Y-MGs}G>=$_Yi-?B^(>~?`yk2j1{fCS58E$wWwe*c<>`y z9`7DWC%D>QfxTe*z@Vn4?Lbuq^Jx!FrQ}938uIwGNCL^QZm>3 zJ%_6+GtwyF`xh)wYEk!Qh1O9aBk-CvoFc&K_?;0;y;d>yhb7Xk!%WdB5Ew;&iD5 z!|YQTc6V03wuxTGf93$QDv!zB045nwlw~pWKqR_sp-4!KaUkhJUKTrV!(e4oM2w49I3l~Oyg)Ynzn}PnD!*8yw3SBTemPQ$F!Ot`%(f_bpo;W9v$7} zsl#&XrEatN+pAVai?HXG`EU22~Fs4!dWZQEWKVw)-ov0*i_$hs2Mc+ z?sQ5IacgaBd+~!TLoH^x%!;Oj3`!hAwfNBsa?h0F4q+ouG^DQm^3eFj?V(o98jkGJ zg^h9S$VO0V=-D%&(EJk_B5%Kc!(qDS@FFtB9mi?l?)9x}-ge|9Il9+8s~pN3>nBm`oJ&6r;4XCY`s5Nm!) zMPv!?8`cdB8np8sFaj=aoKY~ipgWXGhL9YJ9&H@8T9Jbj{X)RK&1FoBm2So4cY;Q3 zdI>yLL=Oc`)m=zpvBWvCEPX6Kufbsc1x8-hNpm%_^^!e6XK~dK>N)7QNcl+fGuJxk z8eHkO?vAaRP#$bI7&C|;@?uiD%$9c+zXP>5=^Jmk72YPOgPGxo`r%og@t)^x~z zP&-4psG%)Nj0(igj-nv4^t;81Ks`uo8p_xz60*%hO&u3~v`V|%5E`V@t@IsJQs=2I z5!(xePM3w1aiv{uThOXkiwWX=RV{g_a~)R8>|qM-B$+fAgD!6RDd5SfKJ17?5dcD_ zs@k$-<{$(H5{XF_$j)2{|%kI7OI)Fo?}zc6(mI1m$ih zy;n9z?xuo<>LO8M(o}5PmS>L$JbxJ z=I+ZK`5EyO(x}P+#Fz(2Ua(8>nem^lCCQkXDQ+go8$o2I#AAR_7O;LGwcgrvg>~=d8xVxKp zd;eWa0qs1Q3hefKUcPu)<7KJBZa2B2!RGz#{Y+6pTgNPRP#6OHs{?^(e4zwVg56;P zwIFWcWPeM{lxjo}TUQbXVvJ<9bbMjSZ7!TH8_Lt%6^g>oST$uyi6tjT`anuHsi!%h z*&xoYKrkAAZ88pZp<$A3)LT!S#be)F0bBQIXOU|EtOMpEM6{rR8s=Jngk-<0Fv zw~5hk>AC0E_4fC59hcj(edeim$m&u#<^?|`vqc*{NfkC;OcPjI9F8J?CtFv#$jN;-&;I7sO#^`FTdiO*KZ&Uj_AdN zbSy1(7Bf1ChK2~wiq07pGbpB%oktE9gk7>LicPr(hyZEI>an?sJWk`NA0oS9a`)($$iAiVl{Z z^Pfqgpo!__M9zsNEM!>__GUHJOx8rwWGO;bVTnv%@7cdqCfPII?Kr(&7(At0oCUdG z2+3k31j+0qR5t_BKnT$-mp}}hWJY7I0iR0ZN*g<~a!PW6O^tBd!tV}ucWDqx9c3Ja zl8%W`;ABt(a`>1A5%ZOIrKN4C3qCb%CDeaS+w6*odROt`$M;6)S4FGIUn7DcMM9xi z-7Cx2V#!mRL_60?irKP;3-X0Z()x2ZRLzHtPRTQF0+FxX74CgqQdxp!4Cyubn$nHZt}+Rs!Rbk61y*k#t-7+> zj8O{49QbM2#$jWzr_c@jzM>fM-;D8Z3JsB1`7 zbXB`WFE5IEJg>NV>bmSmiV_sBMA0q?q3k|pO0qa95evY(SQyPvf-x(utXljm5mH*n z;b_ch5~7+lblgMu*5ZVyBs2yOWE!|S94sHVD*LNz#?eCHak3P})76eJj_8c}zy=t0 z12P15SO$$42e%ZJ6x2$Lf%%wOP8Qi;1~DsGN)^Ra<~2GR06<11L~E=0r3;^Yuw#iz zdU3<`$HL?Ez|2g@6X=mN%*eQdMH!cc31P-!WJFmo*qtUh?7Fm86b{zA<+qd^jg9T}Pd^n=2oR%XDiMSt#!@_QgynK0MbColy ziD{bH@AiI47-7w7YC9_D$MhdtE+1chaCXpAlw~a1BvLF&O||S zWQRO5v;`3cB>1JC%vhf<6mabb1qzO1`s8G_z4VS$$t}ax1;@+bgoE zTN+t-ji*c2Y_UC7MK<4>(a#w;6yrN%DCf`W{FdP8r;I7gae8GvAzEvn(f9 zn$DzsV7eNNf1M`ciz}9^3CWS^Q6L7wFmN~pBt&u)NUr^J#X*Pw0iqcOGVpQ!88`VO zpSM7Xd(h%}xI7h6cp_?V@PFhH$srTRf|tcXyu2 zR5fnCa30iVCZQ}G_B*DX1qg0rQY$I#&*}ciw)dN)gUd|8d2))3AO-EGbsg08r_QwM zP?ZK%?(NaPHM^s%-dzj|(g)06wbK#m&YWep^chVl{GQdCJ#GcSk{8dm|5E#G##k4k3)HlZufxsCSQm{-6{+mTa@7LN1+z}(f(&R2 zSUjSAITMRe*Grkwt(TJ8vj~#TzO7fOpET$GjHW;mkxDEI{Oi(|6m6*^ZGCQ*ZV@WV z@7Z>JWvvHcK@Sv*kNqD|2`-r7eeOF^1XrqNT6|wsB!d>cZ-Gqv z{>2a#r5~0a%q(vyr|O?xOe?t`7`4MLsDsu8OlVsukTg+CF=p;5F4PqTS#IOdPfH0< zS*{lnWJg)_9ux*l91-I6XGJ7I7;K*w#e%n6L#S;jqPx~4+`ht!0)_-U61W0MXgDFd ztB9K1QD5oTa%hK(1B+(P(d_; zEY@d%r~@I4*8d#rchp=%LWa2TxSTkBf3zTYIkK0DFZ@DAJQ0_Ss6Qt&%j0Ycg&+*O5g7-@X@FCPc|pnSUmcLR=euw27#WC@FyxUO z)f5{92)<6zOv)wWM&|bWg|sLyK6*ilkah!yamW5XBPsCh>47Yn>uF$0fg}TIn7O{$ zlMznKk>P5`PEUM0&&V*a|8!!R9(gNwkVnEPz%HR5>=<(9@b%1?M!pRT#{s4Z!V=NA zhv601`y1YT`5ixd^)bKr4F2Iazd}-CFCQ{ZJ2brI_{|$`-+n>7J8_l&o*ggwUK3yc zUE&u@WE^KsNr<8xriri%?3cHEA3o%si6y|O5SJt0Jq}COL>bV<;~>i{lU(qHWB8rF1k@Wg_L-3>0Ki z^2}0E*o_m@IPw@4*PAPqRQL)n7U5wSi82s_I2tK1guxYo&L60PhN|o@w5Y()D;iWS z7DE)z2H>tz;xTqY$?heYD9Hl3x`sk1XD?Xl$;A;$g`S4W2Z)**lcZ#>NqE|BcQ-6S z&5s<~n$#odYfUi^ zjn^(~4NT#ZnG+^yuSOjm*3)vyx8wp6^V z{l>MJkapM~c=__B3zJ%Z1DyYGUS{?5d25u!bQ8ILab-vb?F2n(XGZyWI2@QJi*sQ6 z#Mb=FKl-d|LFtC=-dBJ0NBk>(>Fu!|rJQ)sM{iGN4o7xZk=;(v92vq(cJhKnl~LdW zAB#a@7fi9Gs_a&MDbo15moEc|ba4v0pNqA1E^dBh@Hxu0MHm zk16~jwl3A7dj+R%4IEg~%;|Wf3^N%26QmBW|MiABLu;9Br1FJjCFJb%R~!F!F|J9u zlpB&l>$)g?>tx})e$4iVR^U}rW*9B+lQV1;5#Slh==xX`7l_NL<-LU-`UI7UQYaH3 z2+?E540@*3Yt62f*Unmcu~b2)XsOmew%`*N9<2+oz&v^j>}5jHN=JS^Yy3GF(^+K5j*rwx4X`g8QW!T-gpG%gI~ZNg%~U4whfJ z!ltWpu%f}-7&LlXI=9HH=cKi$(x#P+n155uf}S!tCqx2=v}bq>$m>WP_8d8J^YVt% zn}mFm*v|*%V3F4iT4W0+I;^+|M^&a4t&6kdeAZ?%@1!tYEy`wXX+*YJ{)_8KAq7(S ze89BRzg48-CmyZd8b7eSgBCvd{wH*N@4EP-OW(d9UvqVCu{yO_&dpQYJ{{{l7Tc}t zO=H-QL=Fqh9idFB-D8o^2anL4TnKk)q3?m5Ex;VXU}{FIjIpzK83P!=;uw%gidi!> zn^G@FG>fB28VxEaqG}~CV|F2UlJ?ea|FK5n6=gsff*J#?w((<#ez3;&PKl@(Gb#wW z_}Gz1B}Hbj=!m$5&dCBGM22u}6hsDsdN4JzE3=9qVGLx-76{SEW&nwHpoT)JjNaK; z6ckZGpu~m@aTs2DOnmp7H;_$0(j}qERz%3=x0(DrvLRh;EhHh$iPMs~dpHroXv$l) zKE`2ScV!XU^RSSHWL7@hL10;6$wZHwZmff?Nprgk#?Yrg5Jkfy?EtVfQez4bKo-+z ztR}j!4Nw@jA6(9e!-l!-3C^>GM1B7hB~F7_2OSu7;P&ei_pd#!NLI2gsANtYdGYZL zr#bQE-+s&Kqr~om$dPXdFFzn05(^NAk--DxifhPs>=-1%qwqiezyCd_FX7`q{uyt+ z{EnRLjF{!f&Br&S#}jeM40}6&QgRj5Lt=k2Yh8Fek(o%}+kV$kN%skzfN>zp!s9X% zM??8!&BR^g@wo8S7q{fciQzE8?veOGV)trC{LPX1>zOc)#4wmZxD#X-P)+DA5b}@sxj&qEb@MT=UoSk|E$rnAB@@OY{kf|rmFk=N5g znjbih0i7cI!`>{$8W~V_64~pXc)M_W`kEM&y(Tox#GH5x_bi9Nx5GfpN2Zjydy_bg z!W{R=kQg*EEdf~~Z@#xqv(e8m_Ks4BN_ zZ#i7;7SQd*3pz!$kK+Xo;MZ}e^5s}C|&)nWUxZ4#x zJ|=Q{JHCJX znw$92f@>1FpYIr^i7`cznxbV1nXr$XSjcMOiWh<*_5;#Rng~BJNM*+y#e29Ia@dx4gP$W!mkyzPjoJ(w=5+>1oFtUZR>= z8TP{Ns-#!mJX-3#Br>=l8KOmG>jlx$*ZzyiS5LPkOCZG1j7+r=#VV|x_BE5zMmQB$ zd|~d#wJ)8_Uz7BNG$UDdwHd%eqR*XdfRX? zt4_DdyZejBPBFn*>i3PdL7~MUlmfP`${Tfoqav~^8X>oL(1~<~KgW5&UeNW>2`%%S z^V~&2;qM#Hr=st+Pql0Zq%Unoixu|lj?NPLl<(F`A@BnwwLU|IUs%^!T3Izrm+IKM zXYlUNxg!DsvnY!gtj>gdI>>5kk9g$f0wFg@ae<2`)D;B?Nv|O;&opMDKv7!Yo~Ee4Q3_^Rf8=;PvD@vC5E*nt zaATDWgcyloX-nw7Lz(5y5=nj_01B#VJlTcKKxxpmpn zxPn;d6%6)QOC?B3NSF~x3}axLChi`Nym@m6?n@t|AaU>m)nV8YkPN#QLVW2crC_Kb z8%8@lguoCoDJ{JI%~$5b7f)`*&WI#}48EUzJk)|n?Wdh7B_kM8!q5{2yhtpklhH>3 z7)Yr=^X)F1@j#3N`9AaZo3{wc%a<=XJsdeb&KAJR=iXr1P)rqOg@{NN7U1vRe#e|M zV;GGojFFcwZa7@+P%=!3S07z-I2deN1+ETPNCZs@0xXi8nKl8#0Mf~P;Q?~&)@FY~ zXCH%T(9r%jy7gP{{cShnc71KXZ{J}`k$PV?yRH@#3PRApE?;y1&CKl=Gcr#k1l0u< z%a|~0;`ZT=tD6Idc;Ncxn(38rCl4f1M%ghfJ08ECxqWyf29Gb{w0&Sg?*q4gk$Ctr z^J*s?zcRYMkVs_i@9#P6g#8YNMG4>CgDP_nb}GDZUf}NQJ04H7WrGZRG)F>$ut3-c z;(j#C_`D#4B02MT%KYYwTkgLL=v^S?k?~5o`V6i<-65jfe*2mbUJzwsSx!6-Gie7h zWZtF|)3QVJfhC`~dXc#KK=?XE?!Q|2)nC14$S)x8Neqm`!1as3^=Erzfv>;)o)AWc zup@^Pr(tG3%p8ZrV>+_C+H;CCw-2|dXJa^}2TtEVaR26konA8x1MtWYh5b(W>=nGp z5B$w1A9Lb{{g;2oahbV2z2r9kjN9EcD#9+^Gpca^@W|b1W;jgTtCC2}0aRv&>({Wm zA>2k{itN%vOk<_h`82bf0L?~yvbjtpHK8$`lsH*n&opPUnjo38tusSl2C@cH4rH}; zIA`UwB#voe))_Fx(9DAc7}kkJPb~R_hRkpP9T#F8DDF`r8I2a-M6ww*vRbr#Qx0b& zDq(~yM{6&N>=tI3$r5?-!8PN{1JlF8^+$V#!Gfj=!f+kXabbL+3}TAPDIc1$)fIQ2 zUVlc6f!%&|cOw%V#+#9Owl)iaLEt(J?2-_IA*D3Hi>p0<_%Hs97a!b^^$|iz2MxdY z<;M)epNgYP44r2JWq@!*f|4bYD)c@RUuJHu z_rxg8C9*@b{WE!CLXdDZQqYTQ0J`f`p#CPHcqJE!wQ0Ru;{mv&Sg7P)B{~8cljp z@XZ;Wi|~1w-)uoA{RN!@$Are2KK8Km72scRi=)vS=<^f%8>kpPCoCBRjg^-1wGOvSQZ@t)f3A=G@lM zul|tqQzl(SRhZ3nT6!L}Ar87{JC}$)`NCSURpwj4lQd+S0avr_eH$b3?Oyom!WYyI z)Fu}+#_*KY{{74I&-C@?;v7QRK$jH{{XOTuZ&4GQdpC8~Yh7D@h;VvI;jlzyQmPES0>zhh2k}TyNzD1;I<$k)N=Ux0M>iiLkhTq>JR9rq7j9Z#O7qkIy^ypUhc0dL!WnTybk}YV>PF`~N_QY~j6C6&Nzxk_Qla2?*;hNWP-thXnw-}nC zz1Ij{fyVll1XL|hsX=UOfRhH*SKOWF`C{xwf&HDIe7lT8!KjE2s~RkH~h zQ8?_3-i-Ogq$gfn9~i`PY6pQR6Juq$k2|U^)!sA#!?rv=|d9Fns_w zA56@zGhh7bk;ku3gn36=j;7d4BYTP53~r=8C!U%n*Y4RcCUI@v!K^%MV^M zO@SpZoR|?3IVV$?=Hj*#OxTp!jhw-=aD`6jHcN8ldz@5M;YZ!mI|(raaxwuVi=o%z zXmL#>OlC>;bce6P!RFfgTY~nM!0LsxSP~;wyz5AbMP)R9SY<#G8N6{3RY%DM#S%Bq zXjG@rxDr{M-4bGme$6DQ?EIdwrk2hZ%^vg1c|ipUsR~eqH!kPliZ%u_P%SB;%egtS z2|Yz{+6bFPVK0WL=#}^ty1se=FbvdQHv)-9=m1&yGEPe!;J9GgE_r`im>~N*}(__)#_%45(ap;iWgB6nQ-P@tL zgbvx3XUFrRcIxb=?)FY5St*^m`PjJOH>}KMxwyC_^z(Yg?{%mUV9gUMRXI@vajDIb z`i`@9>3aPr{hleVV^ED=9^0wkSJu|x^%W&TNBeWRziBCQRq$!`3tt)VH%9)}&ftc1 z`(=1e$bYV=u7&n9*waNtLD$%g5HA-dc;y@ZR6Cxjd!^tg4cDjdzto>?U(^ZmjBtw4 z3}6l%vwuD1AqB}$6d+=;U&d(ZvDADK1Hw3%>Og>~fl&s=IGAEV%~~}SsC5=%jb`Qm zafb-w%)LtXfRC7aMR04RFYus&ArHh6W<7HEaL@JOnkq9Z0pVR<4b8{IbgTe?51^o|8}nLD+1;F-23!9 zp4xAh?tg9%KdE?=e0HDBkKfxV7)qQ5vraG0GzGwY^+gC`f~~40GUF(Wdt*54d@w~r*>*xE3^1w?#*uW|nTu5(Oo3TXG~-}`dXxZF9v(}~ge!y_ zzWKhedWoQk!+ys&jYv9ikRvaz_l!eC^Fk2iYT7Zl3O*n(1eRqcxqDVpTN|g-iR?_U zZP{eMg-*i{d?*pw@0+$>iimBDxMVxvv?z82zW)Au?ouX?1BcryzWPn%aI;6Ekmt8t z?M6aAas6V?;l(uxQ)rDtba#sd5s#i6EGQyLUCH2)=R;x9yZ9u(W!dh#>ML59LK7^6UTZSM29k48x8rmPI0ophITPGl6?XIk1b$oEL_q?)y4o0rf^i9#Dk4#|Lzp z&21*beo;ak$r+CM$T3ey*fHdZ0=3Nwcc(}4aOATOK14L~@DSOB19Gig|KdZ-E1w25 zkAy22ha=N%B!rP){^`UqD4+kqFZlGMmmKrVG>*umEG(S9%^Yu)MHlq?fxN(rNzoU= zi$8UXWgf^n60czzAKBdw#4s`a>7HX${_qd~fX_a9#VIdL<4D+n?v(=vc6o;$GmB#9 zG6NwigC;}=vJQq`3^N)nenA%DKTkUb1>s-#nix2VrEDBDvxJ0%g)w>T1Ic{;hoAGw z#~<=AKQhORO7i$i!Lnkgc!r(KEScaUXYsc#hjlsO$~kDlXXsqV${8tyJlL8F=Bl8Y zAV!O&pmv0m@G0Pd0Hqi$%6e~b=^8(%wyB-DS(9Z!D1ndFtbz7@CSyFFDIF4Xnwj%r z@dUC#e~teyuAFAE)1V|t&O;aHcaL9Dc!4f(eRT^JFW9cbA6^l%L`f-d>XYV0Q?bkrF1=yd@NT&pl)A7iN$7`fnK?816+gDa*hbE zv8^i4#p)e`1z?tTq21!^Lf!q4?c?5tT(R|j{>TQ2Q5*bB@mqS=fcp6JPrrw}x#h>t ze_bWA)$Om{5a{~)w$jzPTo3_Xr*^ll6hB3Q(DkM2j@mLemd$QDTcJW5zx8;?s@(z& zwLp)?7nh}+gI)3IUbkPfg}4ZZX=DfyQ6Xwz z7e~erjDY6|VX)M64%xAwUf3jxFo(qseV+%5+@7ljG5dWcHfU2mxwJHhF(XT!(X3nz zH*gf>aUh;XBp8#csQcmc%(auom7s5p`=M#Jlq##%YiBoksUaVv($k;5=vHy^KkssR zJ}YGcQOlshNCs1e4Qc^KC7@|A=)R2H-QJTH7{b7EO#J%SUqRk6h8w>6%`M-3`#=y& ziU$+$H*{GA_Xm(XBeYXxeHY#`CWA2T{Sx_18CwhIg0X zj7B+F%$GSQa~ZIZ5|(kn&HzIPlz@&yNKDhfba3Kbn7>#oPX3lrNXvjkL1ILrM|gH7 zrMO!G7S}>CWP_I^<_5MnLlq<<8aN(L$nj_a48zEH0@0H**omwC#BLZMF9eynI!qkK zD@tsN{WKC44jw}whXoNx=}1Zj+0ITkmz*qS#$uEviTZ)qlnvsV&wZRY-97N|<_-I4 z&*TB{^6hIL^nu~@io^8_zWdF0yqPU8_q1CWb~E#0Q05O_Ub7zult-q05PHDA3B&?ycKL!zacE)xVN}DHR9QL~%Sraju(De9tBF&1hvoiq~9s(@P zWEmN6CR^s=>-5-6nLnVoAbZ{rU~JZ-k%y$)7Q%g9%h}VweU# z`RoI9%A~NMIj|qExp{fb7r*(Im?jUb7hxG#bYZx@W;iGsP8>cptL}@#HQ)T^SKL3` zArU_K@H0le=FR{D#yySZKl5yH0oG>-t6)KrI z+#$=vA)AuvaZK!Xk*m?t+zv}bNu0uwAqON+ATaZQ9{0pB6T{A281=E%ZE+`VS9L!O z3%gz9Fj{cgVHr>s9^)f1dpwY6h^#E)$&E50JdlZGHA`c2Jr>Zwpo<5)6jHFb1VPn; z(x+f4NJX3QFNyhd;&i%Yh$et8C>A@)r9KyYO_(xaeeQ+%vJSgc*rI{Om4uD%X=PSb z7GUv!q=k2$Jp+a|0j^`5O>fW`;|AmPzga7!f}*IWmDbcL?6f(3R-<``#Pnl@C`OH<_bE$p?Vz@~P^=Pl%i3XXW7+4Y zRICJY4!)ONk>F7MpsrM=rMROCytZbH(~rjRRhO>99T{>2aQ7#w03p7@gGlW&VixSJ z*lPlF$#B)3dL0eRwNJ%A+p}zyxz?`zXMa0s%*U`PE}9T!3X9*8>r*i$yifMIz*p7- zPg?5F<^Hvyv~*>~EEE?9DQEAze(&Zy2!&Z+wNbl2LeS;`-_Qx|ySO2x7g9^xe0Zq{ zK3z>`*N@G`3&Xz(On4?cKF=jxHtaq9$}^T!eP4CoFMV0nE9*%usXtdMU!Z7)dRGb6 zUK!93BgQTkI;t!0NBi0`Z&Z}Zs^6H*ccJ;^R@cAwz3P-1{`TITrlKsmeO8qQg)SGR zLZM&Xy3IY>r3{y^rsV(XcJgS^WR0%2|vCe)sKCRU})$$CR??s1**u z;DT9TAad9ph%p$cm%w4aXOQ3lfP^uckW+%5X;PTYmoNDO&whA?>^40uI&Wb}p{}2- zN)AfNd?E-j4TKb2IBEIUHMB(`n57{PnL$T`ilW3cR$`h`a$ih?<-GUst^~T@)AD=V zwBMIf6}Ls>8`M(Db@LmU5Zxhi;PK(e@pMa!BX_S)eEaoV#_$4`z;Awi$K%6-gaJ)( zdz%m*5j`@59U;5|gaKiit_dO)ifUB57w`M-X^aqbv299B{Xxw((W+a;1l4u|iJukL^W@Z9+#|4f{J+p_$ zg)wF%EsVg+gEGcIP#DsY53gW|7NLDNTKXyVaL!AP5O$2ygi7H4bYe~x@UZkfi;@DU z1g8DS2UmMg7cNw7eT2#A=lv~z_`yp9cVq~`vg$mL$Z2Nz{={ukVhDtrYwqqW<=4GD zvU@f0v!8!T2+HaB$Z|T`dMk>lEN$#c3#F)%xWEaWtLnF8v~4E=Nv2#F;ME5oR2L%= zVLo{-a}V%osqT~<%%vqVGO=?xWOl~Zg(flKB}lOhj+W|kSum^W3;y}P{9{xjgBU7F zQKm359VTQ{Qm~9cF;Aev=YRHj2Q9Y!Rnkz_PJ8DB;lo#dLe2;|d=+sDK*2vZ)2IgUENQ1L-i--jURAIjeHT9%tFfgQ}A(T9ZA`Av;&k{%kM**3DHZHc83XZ8*a|Kf_ zH0ZSS(Z_tvQw2aRu5pfds78lsoi6EJm68$4mVjAdwN_Vrl8bL|u1stn$S&mQ%z3VB zQXQHp!I^UvqMA}C`#K~C*WDW0A$ywctnLCvE=EC$K-|D({*JDl+HSQyub|R08030i zsLxqcfbzNUtFexm5ExeOT2ixW1drE)s%Kns<5fN24C&fvdP^ByvT2Zm(f4X7D!s5z zSv@IV=v*df(_X$5>ej|cDe;8F`;@ouC{htxwp2SWwYyczny_8i>%Z`^E;A9f{`#Bp zJbPNuGwUX-I$L_*t%Y9p>hCN9+nSTGO>U%b_du`TPE1ppnowquzzi!z!-$zeZ=u}Rd8sXe^ zUslS5QgKxn6&eLbhl?vhp;OBG+^=YewiiT9IcjuQR&FUP!);;9I)1e%bEK=XR~p)* zElfba_6jbJ266n3Wtn3G;r>htZSuZf$zvEKJ z>e6>v@9lNzlnOLWVqFI3JNPGPW%u3D;=?fV@dr2TcjglC;r_}Z^P&We?1qUDJT*x2 z&}l_sfS?P`AeRLxXc+tz2}qT}${|pq%c@hipvA{An59omYi>+KW{Hn==L;4qHn<3mu^0!XAGigrvRv!oIRi>uE}KL6!j(4X_BX4$laQHq6Z>gEL@B`) z4ccsR8b;vs0B^pY-NIJpx12MIN+L!`$IORUugGy^7>?C-r1|z&k)jTx6y-*kdHM2& z{nep6=StwmfQdG#4L2CQ35`K6Fg%0$Crh;}*=bTn@}7rbS1qqqkPv}jLEna9VS2d( z5q3H-1@RFqw!Wq;3DIL#I3pi|(^s)jyjimeuDKigpdgo^jExu5jK5PUpaVw~#d;pzgi===#-U@ma?V0%82ER|MLmhsWn#Nrv36bR<7 zGkYq-5-TEL>r*l$xg&?6jC_SPN0O)3%q&BxdxRVB(r2j5y;VD`BbH*fnO{z zo5;>%=$VjP*N1a~g9lcOEUs`6vP>TEGn*S_7E3AEAz)M@*;84LClBN&U`a&P1x>AP zM>WfefCqdj{GpAh+If{5F`%Bd8M0)gj+P7S#qx((%4~w6%AA`vrAqNBZz5B5OZDpo zWnrn$?b+;WP&N8rrKEEe6+c~#H&R!unEPllq0YzJ;zqd8ElNsFts$~SXj+{$82ttj zP-tsGS>?*G2GGUN0;!SQn@He7N7FW0CM7kxqJ*Z~mSEBFEwB*lnU=#|7pKJ$ENA|4`+t|jyGxiqxWCM+^2fW^Aqo@;9jy8tf8du|TI(B8Hw`d9nQwUYG zP`O^+APSG{G*#O>t)1ESd}{P(8$zHe`qcMt2=!W_liAV1iWEPeI<|Gat1zr4DwmP& z2YMyxts2sPUzd({THqGH*6314b=8CWlzY_u!YVOhm0xy6+-eE#bLRJ#HdUO7Kkr=$ z+s9kWy?^a{VH{I3uinz|Ai^;(eE9O34?g>ZSzL%gkepE|e#nY0xh@=YSu6*AYo?a> zYTpK}!_>>^g{b3<2Z0(lLAvKwem9hvQahjogBE5bOo1SgNk)dlV6pKQCB=n-k!pKT zK{=V9ZpdizP3KuM$^e&?m+Fj)2|K2=2$U%GHn!R4rKBsYu<)+oA_9R6+}|!93&m0vO5Sr)CCb3d-AC+p(U*$B<%280+TQLCWB*># zX0^aIKH!zX=@xh)Jk! zr4V}&AqlP$)|VVLZmy+2giAt++BIcN9ltBhBfzOv#H3k8u9yMwmv zf)Z_gwI|ChYHD1Id();xuxCPPdsRl;v*rE)uoM1z>TM`=M+nG$vo5M67KLdV`0BfF`QjhGB=A7} zTw2{aTKR-*=SIOY*aMDOb($>Ye9!=$A;A<6KJxV}HTo6`9Efu6wE1jCBiVevT(pdT zIrD10{<}l0jYbzr*5=)gnN;_U_+BXY7eOWyDPNip)i=H4kuDe%b#u=-mn4>F`CWZ| zW-Qh>OP$xgg+-1jsRN~+S*=;Us(C${QrFq4rP}V*^`LA%_xGzptgClC zzl9fUvngC^*7F0rZFAWCx@i;ZwQyd$u+3<)w!~BCY5QDXXw@Gvh_U_D~DCQW|mvW3X#xf*M`uDRZrTg;9MfCmwsy_-jzx7V1|Wg zntz^F0^h^w%7G}Wi9T;v6=nc>!mFi@UW00uYL^vV1~h1zdV5mNglS@bePeJVT@VS5 zWH3gz_ZKqS-;t4SEZ3VuyKyUvO;OBWx}9>3AhgGeAmqOVkQ~Yz9kQd9CBqNqVH~-- zehEwB@!^5##f~w=+C~$Q&AKCbu#`N>a-P?~Je8O=Mx*qjS_`oGEr;uRU3S8=3;%Vc zIA;?}yZw8q4@{XOu_+aL)P*Ez3sdOoFoJ zBX8b5QXs!zZ8ByyogIp0EwmyAS?Ye@(&)U>U^lj|e#?Q09S^sUym|9LbSs?zA&N7< zD{r>*mx!ZgoKYexr_;#kL0H%!C^y3n9rmUi4S|oZUsVRjVBXU8O&P|*1S!+#5wo8m zD0(KxTwoZw-_{BVQ>umTyRFAu?+tN%&|j$1EX2a5?oFFI4y|OkCt#DKAL!`E9lwf9$yomsuhwc2Oj7o}HOPp0MWhs^g(rU68H zMMaNjJa-N_AFCoTY>)IZgl1_yXL$P0>HO(#OtdO4`;x1|>T+5ACQEBCc3!NWlz^}! z6MW7*P@RA!=>*Xcqy&zn&ZVuF4t?XA=JNh5%5FFD{g=1=H~;0oVSZeQQNYnDF^n7^ zXYTIr5zW<-i@2g&oa#D_3PD`StA9-}zKH#;Js=U!G;M@LQ;etBgSs$ABZpIhab zlRDOwSr@7zppB1lJH^spl?Rm>i1cnsrEVdv=tw`WRUy%jb-8Uj&0X0Z&*J=yRiDo) zk5-E7O%`->wB}ZWy8+L=3LNR*CE}Rez~2`m7LQ% ze>X(KhIX%RD08r`XN6dx(XZ}~zKZU?e*Zgx_L8*i!MsvP^b}vt=T_StMIm8tTJwvJ zYpPxBT4R5+@jJczQ0Z2Ax4U%+Hpf-wtuJzyD1Yb0{oo2xI=-VmUKz%-V35i=`&WuV z)}CW1dbEJSrFufNX4c9c>&Yd#O-LiidGln!Y5Fjp4Zyn>Bz{1)zL&*SYAur>EK50D z#1A~Xo^oc26Vv|6;m*ZJub9L2tX=2xbUv2Fx&mTEN((fPZh1P0wl^*CG|a&11h zd%6(+KtPww>EXogFft931y`DL7vLk3b3n7Xbm*K|P6<&5?8=%YL0dlNiX@T3D0C3Y z)u{(1Z?jahfwM0n9(b)Ol#HnX3Cihs4{|0>Bw?i8gr@;V;~NLlcId)n%2YNdgieoo3nFaML`M|VkPR#m`_0D ziYqjkf4m`Hq`LO7YP)Qz4~;4IgMSwzH`hCaV2GAzD2?~0Z2U=3~>m=5Q$?%MvHbI zqAA`&Xl|6p(<7Q7Ew-*6ACbiqhXnDT?AkYRdVhes+X} z5FEj&loZIC1cJk5rJT`~x&i9+Q7$dtO&k2LZvLL#(0+e+m6!HQzZUhW+b*7US zpcnSsFd)S*AY*&ieDNCpX{fQvboaEQYwuYK?Sh(Hbwk_V)p^+JDN2H34Q$=-;th$k zarOH{pMUi)`_cD(zXtZk_0THy&h#b`Gt>+jw8*5{;K3;p*?FAsHGq^`}TkP)?v zC}qu7C0bWs?u?>O>jU1sY0i$BC(fn!ex3_`UaiL`+Vn&-OE!zk{gb-1&XfRKmxK%Z z_`>P8{??y`bm#p$%DX)8FCOVz)Wb97IU~l|-rbhU7Cc?g(~7H7#W_JgGalx)J6mac zr5VP{HfZ-+{bf%#dL#W_E5CIyqS|gS)P`j+I&b6J=xb%W&Wf_NPbyFp4(rkk?*&P} zo})s;grQ%A=X$I4GuDa56q*7cbSIkm1GWj5#t`WF;Fk!)>!J{r2E7q#Fdq9^u*0Ij z<8xO>@!4_9oe#fFt~W=;g{VGooFN8Q-xWk6yTgtUL-RlJfgJ@7*EeJhq&cBM+y%rI zq6w7m%e8Dqz-PQ!9SZzYyN%)~jC!CLaUaIGIk!9L_}S~F`X?`^nF929xIaRMtHS{p z$ZA2m-n=>5L7oGe%#x5b7YFE7J3?@+I~d&48NzlD%c|{K)ZJyN^!@g2S^Xci35Gc@ z1R1y*Ci7!#UBj$@4hde#!EJ5TRiXvl-tC7KA-sH`wcTJf4Wb+lQ|+dzIuzMArRbXK z>IEWxVXjtkpGdu@kfgfSR3Ii6Oc*H^hUSxEYcp3X>Sf|u4Z>!Y!z}U(HAVtre!7~? z!c+pk^?fM&p^!kaJ(a;-I@Vo1gXcko3AcOJ@7M}8TTOkI3{rxU6)muJyl95QiYXG- zJX-0$9}v>kL9f(W3&&-@wtIBNpi!+t+tQfwwdLeb>>ELv4NXDJ}Zbm&w#v>k=7pey{%KaHGfuV|HTxXwVn?7=Y&JT zLUBzg4*4Zurm+&U2|5K0A)EEPBGkS|)Y?(f)=h&#v}_aB#6U`mZ`_1R1X}d;rr`Fh zAsBW^Bsf~Z1uAg}c2GMmV@9H9KoGU8Bq&3OC=ppKYeSSHgN#H5205Y%OAag{!Lqn8 z6o?g!Odg9yh=D_Ig*vug;;0v?}Mp6U^|YwHL0r zFsWt!dK%a0P!q(Z(XZSo1KP5uJK8CvQhYs|aBWKM>`LF_3Wx^818XbpN`vv0*%{#A ze5$RcOx93MRW{b%0FQT&b6WEwg>mTk+&a|Cdd78oT{br~Uc@0E*xUwpR}5=<>pW|j zf1s{^`)oW*L1$FjteZ2W%t_^O#k?=NIXA`4dcH5MZms{ccj4d4n3wM+7?rcOp{!6{ zJ!j`}L0LM&q_Py!#;x$cS~f8J*bEeB0^-@;e)nFk*yHU2=!*CaPuBDfdZNBxF3m}O zN_C4(ef|}j_tXt{@frK@w7dDG`p&B367u3qC$p{M2P%FFoqK01H*4jh;^4xyu2HQW z+FxqdwEqz>qjrZ>)$_KVE2Fk+Yx8@~n-SIZZO)IBnks!PPvp(sDn0jWLf@al`<7>V zB4|94Wdv%MZH+4BEFQ8BM%;q=q^in#Rpq`b8Qh<_GWh*rA>OFfkZ3nr<~ZtyyugY3|?X`C$8Ru$ADC3uW62Afbh@tX8|P;9DO7X zS!+AQS;H=Bvp{jot|c|j#TrhqKd!Bfg1HO{OD3~S+yo;?7=)G0F z+SNur$6u{ZD@A0cqH1a#g>h@Nr2JlivAqJ1#?0A{>-~}OfjxJLfKF*IMNpLWbyW*! z*K3S@9TX;|^0{XcMt>NYyH;zuDt;Xphu5cb2K|r%o7EipW*egVz2Kg0(q_TQ=2ce|F*9 zlo?VKh@R}lG8Zh!5(x8-uq=o~7$@GmzGD~$cDo5s3tp}YqD<3R7PIwNOhLJ%#oGd+ z7IZVG#Q`IMD5LK;1x*lyK}*Do07M@X?*|JxC)?M4Hi^4YgwW_&*>w zy=OPiVKlb57nb1El}1&fT{4sS(W2`5&(aTzE#c9w%=M`{NffYMniR&z_PU*tx)U!|4YtI!qeW~sabs-s_P_Bs@|D&6M zF(pK9eXi+Az1E@yEXwb?_UuJL#MTN*A7iQ*gU(KXo>?pH*_Mq({Tz)TtBE|{w-+}5 z>Y7=Wdq4PXDN3|=wc$)SUfqAG&a+0H-}Ky5z0Afr_+WLM*8cT3T{zRv`u4;t`)A&9 z;UXKcTE6G~K6}OH9&x@_pIAFZ>DO%lD=k_q6?s@+*kUpiM8j&IYB{%^Hj11L_?dA; zw|ljm8&bbpCK_!2g))z2f6=*46k61%L*XV>*tnFnQB>`My_P_WUPtM1ax~g-xcSfo z>0%kFVn8W9;$cDDY_OYlgc#S0UM{Q+HjD2PPuPFe4z2KHF@h69U>rxc+FsxS-dRKE z2gqiR00ly?Ik&YE{DFqHN7c0C;`z->r3H%j&Ne*LTp?8edu!}^0Q-103TWQ?W1T;< zdR~)np8nJ;{*T67D@6c@YTYG~li+!y&R(gjLxsyz)9;h~bQ`;E{&WT2rv6ZGheTnr z^up8Ih82iA8--hFcL!e#xy*5}YdN$)F14w0{^yKnck8`O#ZyFAFe`m`{~2&q)tS7) z8HF0eP(03s=voghoAD3QH^Sdg%&Z=RB$Yg;HClFSWL>w~jT_WCGM06%pt@Leoq_l1 zRZ{L>uL#3;CEpxA{{m{C#JrFMmR_~tU^GBYYxh z4oo5PtABsX>tFqfoCVQ=A&$Ix^DQw3uCK1WlbN(6_WK>b{EvT0xSpBw36YtsM|Rf( zpM3fX88WE3RK+1O?kBP)U=K18LgX|*kkX?czn+3d5~$^1sDcQ-U!@3`ZebNqm4{F* zxYf$L;em_b5{d#xD^0$LgbCaETl0u=$>?zocHVrwKqJ;X<;Bu0RG1~yX@7BoLP!w5Dmo|1So)z_7_057SB+LEE+SN5SL%y%YGK4)FYyZoNFOw>W+WLa%VNhL} zk6G3Nk(@KpV-_UO#wG6ZR2XvA;9IDvlWN8;37}2cupRY_N*~qrZ>8OBkn2cF9fW!X zAy!m@rKB{4LPInZ_fc=RE6+S7Q$@g51cT5}EVV6cimceTl>pf*zt_D#JFm+1(y!hq z{adH=l1qc5Qg6}= zbzB^oRXYszS+87lEl|3l+BBij<)>eG;kRWhWo>Zr$Iseu;kD1P zeovwjpZLCECojhoh?|?XRR|t6`|>>@AgWF2)ec{;AERs1uS-V{qE#Rlq$$b#V5trj z8MY(X!0TRb8dmqzv#K;glOZ4d$F1yRnU}J=NZM|a?o0$K0x$+MmROIq##pg9ZW(fB z8b>p>m-dO#RSo9iHoW@Tr&d8$q(VO1+p0BLprl7i*&ylVWvc<4l=MuXl6SuA$=fd|E6$+e z+h@)$yt7DmQzh%_aNtf8=M;~UBFVOxo4L+VDx7W9HPN`h;=hxIUz*JAE0q?T;{u~r z*WNqEr!oXZ2ts3y5#h9b|s?D^#hd2o=Z9Q%G@}}8mheK_eY#!=wD;!y= zuRw4cRP}ryYCpaZc^9Eg?|3L@_;FqHi(Yx zUaoSK7(-f=Tu&hxo@Z*#pFMwM&5?x*c@m$8NcPL6vt--TmyzRTpD2VJ*o6Z_{)pQz z6U<=24HCF`Ls(p@96%#O-0|l72fqLAmLQXXAPV}fHwJf&JiFv=ibLY@er8EZ7-rO! znJcU0S0uZOh0*n_CeUORmNcL_L55KVzWa6J*WW)9 z7!W-oIWq-AA%3Ng-accbhN%4gzxhkjbo3Z4iIit*gRN%mb4I#u zCkxj(%5}#ZzY)avOk107XVXGE)$6RMng!x6s365tvMK7R zO3{Sm;OLx2i_0!DAdJ;nP#=bnIG>d2_k1SgmiQpzB&D1qp|q0XE>OqMx%#3^mJljG z(dxnLHDO*nRUc9iJvOg3h;UI9NLz;&RR`Ur(5=@?kbGBNTc3+{RC+^ShdC)chpGu@ zVv5odxnFfdFD|dIvlcwv&HA2qmkVR}ObzQ84&qbP?mCn6F0kJ3 ze#@nsFY)#3N19SlxD@M2H$wawpVh7Fi!IE_>}pj8Y65z>A_Y6-ofZwNput6<&^OP5 zEjyAbpBvzM&N`)pSphmDSYuuMu9*-pWct}4U{2bOq!m7#62pja&AY3JlnmuH}&Mv=aJ=a_7;rSdt7tX?H{=3(P zRLiwo_^ULN^iyw;%_Dx8^*gw)wqNT4WF>Bu0B7T!S#8Gt^?vQCR~07BEEm$cwH16< zOpI$+YlS9x=qiZa=A8;j0?TTPl=W&vFcOH>{UWX=P}Bm^q-srZMlP4JQl~SW1VqP> ztxD_pY9cPJmuL4vxxQWpg|68ny7~*SjlZxe;&)d|O})5jiqXF{Gtro{zHen(&V&>{ z%$^qV3ld_>xZ4^Dm8BENu8iuKDbTaHGOH!tS#SGT5r0x3bx z6Pgl1PoPJ3$;|nI{msaq{mWkxC&+R{L*}I4a`WoIM<0Jk z2q$XB2?^ws%@`1h+o!o2E-85m?!q<}fzEfQ()1XsFShYe$5)RR@h0M?#l0q4? z#`Fg@0k=g|%nTbR(Buv3iGY8+PIT=f~pd`pa9MuEUTeVbzY+ zZ0NZJaQVH39|Dk-(hC~we_hs0bfp8U&)x_O$-Cxx@`|-=w5_YYgQyh_xIB<^d2h=o zC&e8d!1sa0eUW-}_k2~Mmx_>6Vw{Fe+`GPqc79EVK#0;0*Ji9n;xI4_ohyAe6j>D2 zg%E@gW7}_a7yBHlxgRfihS;kfiz3Bh6DG1{_w$EcWVF6(W}t&mTX05dtsi^_4T%3~dvk7w-Ql`l*}E`+ntz zG5$?i)Qb5@c0Q|WS8E(Yg^E*Zr^q|o^25cEOO1W^Zyf;gVjG@oMe{w}jLG)Bm)4SV zZ5iCZ&@Z38Qfusv6^Njrkya&l*K;|*`x`GTyUofqA*0+bP?aaE`PmRxd3T7Rm5#Ce z?U`|HVI$A1D4W1#t)-WRzy8k;7i^#EMccKaC0Nzw9lrjX{~0S-YP+W}pj&~jJhOT8 zh8bD4=Yjw&vVjm^s7$2~9xI!=vfm?J1+p3%J7Q85PWsej^;Mgk)0g}D9KqV22iu}& zjM3#eKOd)3QW;Av7Q{sKgnx$MFeW`qMjawAS&1RA?TJLP zMht#!u>*2=B#Sal13_S!7j`jnHAYm0%|`%VNo@HhXTI}jyT==*{U zcl_ml^Z$jAvCIR?DZk~zk6!SLUwn?lASXM`B)B2p9_9w*Bc zvE|-1CRjoJ9R-qtHri9q9*bX56dp*4zah0(lsWb_xI$xzqeaTu&pPm~sx&<+={41>TXH&6T33kFusgVlGdO&U(Ey&2{MJqPs`cg%q*aB}Kq4iU=uv z2{iXVt#y{b-hBz4;bBd8&P%1H9mCSr?q?h8S_z38(i( z`KMV;XsK+xuh(+UsT%!;7Jxbzp0(Up_QSi*nHJ}vo=IEYtL{5FGsHoU&hGiZ?R&bt zQ3tBO-D&k|zqfagY`)KDtqi_U&-cpHoN<6$3@}#C9B-%8IouYdSF~+W@Aa1c>x!26 z9Oi=b(H1zL!uP46<~k%$>iH?}W>o2rcOLgc%JM5TwnvfpZ&DCV0dhay&E>tgFo3PC zB^jEwWQS2db3O788F$Ic3B)ov_48B59RV@-`u%QCh~j6iuI{yc6&c5I>yft_Zvitt zNUK6C^MEg9>sQuP(N1NwtBm0EHKn}be@n?V+fO59n<=-w?0qaTp$b@`kV(k_`9J=j z|93x7-}UZtz9E15BJcDiJZC(AOgYmU{u30vaB%$aI^JEubL9A<57KS1H_-HCrWEW%T99sytq&!+f#1)jvvvF?hc;HxY5cFTYKm2$%eMlk&q`; zGNERGh$sWazfeOWN@5BJxPQsFf2Vx$?{9hdZXzrPvl>u@p~jGA5^`8L9QN#YJ4>Y(v9=h8Z)DyU@qHw1R=|j6W_Zaok+`xMNcTR&!bxG1`SQ%6k}cm%%8Nl za=PFY#1ID(12KpNB9$Vr*g6g&*f?n*Es*mFDH3#mG!fDc$vY$uKY$iJGv}2Pa?#KQ zQ*U-G6fSS!l?YS|Kv}2`Ra;OK4EAvW!eS) zv;X{m0pSE;Cc6S|nnn&UGswx-kecwAQYPu*u=@ZqfG)t|N{P~VV}zThxd|DePLMOo zk~<@soc*;qS0pTWAPp=9wGEaj7NV~$Arx01u)SA=6Illc6z!~tQUonmLd)bHiD9?jGOG-|!Bn#ehkGZZU(`CZjqT650itmc#Kag}l^ z*E0)=q`CcGEs%zG$vIh0`mDA7+M}YFt8_JV$dRJFkcuwqQ6=TK5*#uRD}4>2jZbhl z{4G>zxC+rG6vn=y%aa4tp8OV+xL|{?Mj7<`?^!EZ_niJnWEt8 z=d-xd+3&6hIJ0bAP*gm{x308D{ry|z#rCnhqSKmO8Bl^q`$JmV*L^N=qRhpqpm0iE zrXVoHk$P9#+*ZXrkTRsy;SDbIQOa5>$OaK&hx{oqyUJTsGciPV`<=OAQQVKIf;wb^ z2-9To0`rD^|<}Ljf*}}=h-_psQclBeQ{|~tQRQ>$H_524ryxW82ncLrESw5@e`U#W- z?`Qq~;dO421#5SQ!h~IB;8q&))idu_HoU7X%{61)u2m^QYZYL%&SOAyc-qnvwQ+|%<_@V3Khiy6mVir>*U@2J_c2)MWr;9_f82hNCU=Nm7;;+Yww_=FetiHxaG z0FN~zDG>BvzTz&fR-}j~L>5C)^noCLOlgwaYTaHs0?YC#DL-3r__e#xm3U4X5=tW7 zPbgCr{u9do@c(*4&fi*qPZork7&HI<|MLq7uAB3W^5Ynj5Wsc{U4_r|neV?{&Yp4}T^( znxI3bsZi3!T42%{s^Y-iXpD1qMPFkS?SI+q)4>!=xB_QI6I>uG@0Jpup`(Xtmdifa zY){L8j;{6e4OXe(HqZ9gtsb+)hF~z}BFsq%bX!II>@kB39hRjN#8o`hV8K5WSGquu z;#OpJD~*1gG3NBKLHn~oR{vVKuc91lUi|AUWxYUYeGiUmXye;Wf%MS;Sk=?FjFA?Fnfgp^&iA$td-&;Az*E|I_ez(tKg#_^FIA$SyM<0~1^SGTR?jxHhP3xp z%lYOEE=ZZPk=cGLd;HSb9?%?X+j1w2m+=WDK{R zig=?3X-TH|tjH)a*Pvcpl5FS#8zkZw+3)t7vt>buh{UR7*zI;kFEA9>b}y)Ejdf5} z5M|hDXRD%UG6bDB!RiUEKUu_;p1iwkY0D3lJG3>kzx2*`T&$$O{Zb>IIGi`X59@n= z0_ozXC}%Ry_QDUB_I@7)@XJkl_Za`w{V0OTyKngYD8Fsr-|zWn*7){--2VKJutnbI z9ltf|;eBYqZ`s%PnU5bMnEy7Mt_4Uq)g+a1{rFSZ);6;DVi+_&v;w2W8wPX70GZ|JE1_21o&PK=O!$ zkwFF|2V#hb1d9)lBV!y<3FPFd?n10V_Ed!!%4z3e*JQ3~{g4sWk&qN5SmFhiHl9+L zWwW%~R2jD+nq6T5E$f62tqy)~c6KRyJRU=5h%A^Dzc9jsGvg+tNoCr9x8=R}vXnn9 z7K0*4$f!PcE&zckjA$G!sQHSO37( z)qu(jK{%$FVN(9pzxp#i{P2b)J%VIXQg(;HFaO17gu#_gSPHNZg{$iW<7CXRxvrVA zFl(`#xgbFxFUpc!knuTJ4X%6=M5ivGtl(*R$y)i19oiKLBlfgy`2R0967pcH(3 zd%9MHbC-PUd$l7LO^~m767XydLM148Q3&KS=)RAO0-IPFMFAihsve=B(Hbft z)R-4Vh^ww31ry`*xDo-SD3I1li~jv9p?bB&&Xo=oNl_%3dS4T;OQ7~L*SQGMQlwz* zg!DG=R=?eAX-}oSx}bX%q`G)}+qJ;rOV#$-EaaEZ8WANEvFiCNQ+LupU1 zc<2#JO7Adg_q5;3=+rnO3L;AZFvOfc81rqi(&W>pVl zoY$`U<=nQ3Zq0CQPa}K2_61T(Y!RLBB?q2~z?%za^1hrsv#sw86>-L!Ro z{utJE{S?f?b9HP-?9wgkIxcH!-|>cjG^N5hAznA+onO!T`8zBBSi|uXmVXk((6fGh z@Y4+Db6UXX9{G_9V)5~B{-*L>XpGVN`Oa`;$N$AXScA^uc|2Ess25Jy9&i_4@{Tz) z%Y+3)N@S23PzV?@U|ANBft~D4d6AV}JTP!@_B6OP(4p#X ztwjc6x2}k7uIyh+DTPY&T^EJCG{#<`1Yqqqtx#@nt{sh)%N|D{U}=t*iUcviD6WEH z{kG+&b%AO^4~V<5L@aBTp*Bhh;_4GmWvbcWuR#}gE6L_Mkr#G5VZR$`fg=Uv1)XX)!aFiAKobA@um8>zRO*(vtc*MO><|CiVp*uoY-WM5@Gt+>f5giVuUMA15E5CH zX*crE{-ZyEP!K1OIWirTm)AES$!LKFB*2m$$vGo>0Ad~2Wm(9{E$#v}z;#tHwvh|2 zTp%pi?sMTwLB&#?6)cPemF-0}kA_|XGmEr!=vKpiu7jT=Dn(Fo%lHZ9xEbc4+Jhn;by%N zkC_tG1^=Ru^Fiw4T&z(DC7wmsKB&r~s%)r=iMD5?{?|Lgw5?FzUnY1{R!9+T&u!V; z{=6=+73%i}V=%!nJ6+J=bOa>#82aviaAi+xLHtr}nf3XH^X~y?k*|S)cIna5#89uu82h3bLS@32|T?J;Rc=_!C-Oi!c`l&5vDY-Bqi`!LfO=bGJ>L z`uO!m8{3!wnVghH(As8bi6ETT)L+&{7YV_YTcI1HHeV3kC81Z;Y>LzK)uojpgVYlnp<4KfH&)@-F4WQ%HeJ_f}zFJDSw1jQ(6wD*Qn5avpj6LIv+w7g-jTkS+5=3Jf8zi!aEx z6W{#3^3~rz^7_jGS$13v1H)hfl9EY5Nti`73@3K`0CYf$zf9QAEPBVoe8(}(NQh?r zkinQ6F$IC5NbrD~;#Sxoq?B1gB7~8okCurcWfna!GNA;b1dE-3ATki5AWTR;)G;hd zfDkfSlUeHXfGH#tax%e9l#~`ibmk$rP+S9g6{gxh8Z-jW8)x@Ou{SA__Gr3-uwd~b zI+cWE)|oG!n9~c2tDjc60FCK)hDt))m+BU5`aJ4Nk|G=f#mXsA7jm(XiCu|#MBL|D z#Tf25j6`A=#LDY&Mm2%L5#nvy^yRt17c$q`ici6b5e-WTc_ zEZzqx=T9B;cBZvEY5TsEj+CxMkD>=C!d;b?8YCXf;#-y31py*bt=_@+VO5~I0-*j6 z)xiZ{118utWrSp^09T|w@wgn4i;!7(j?&v)x3UE}w)a^zYCmK(d7tQO(%anCvo1xU zAwF8?=#++H2sA#aAA1)(b9N;{v+`GARxAU7dTf!BIjqcO_O@Hhkz6OLR{#k@h{5)6 zUg#2gxI#MJe+M96gP+-LTt_4CCl?tef96DhtyTP0-dAP~M*zYWvn{=u41V zZ@&aICyw*ng#9v!xx}5h#KW1wWF0R?&-hdot%}LjeWiG~txk79bv5%bt8FR@$+{24 z+CNaisG=k4`_C)i&>y^Fe_1##S!Y}Ynn8(#6 zo(k889YrW9Z51L}Jw>SOO%b38O$)#Ni`Qgr3WcmAU;o9zpZ`~XMb1kJkwDfHAAkHE z*Dv?X!y_t&#E298*`NJ0KKS5`69TYjE#w;oS2dW#x3Z+m4 z8EU)ge^T)a{y9`dPO}6{4KP_y7Y!!g1fWt@Xc8%DXx~+|Jy+>}siz3Exl=H^zz>v# znLYKSNYxQknYz3^tGl|?-#x2JCo~I&TFKZt&F=DI=|J5wU(U%~G7fpHj!wCSnvZ;N ztGnr@!iHY-2j6NWI(pf~rEw)=)=bJR+su-sRp+!fB@1ARuSuh&cE2fP@a#RHI(KjO zDb30_MW)?^O03GY-fu!R6Nv1uc9lL9RE=fpunI+lVHAo2dE47sLW?C4DvGH7Xb8Zp z=wiX7i}GpB*KBBRWmgIhRRSBA`M}ozSj-r6^XSL2Rc0}E;Pg}v>>arT#`Vr_c+z@~ z_amYBx}%{0>SPp}Q=WD(&#Hp<$g1P@=l75;w`(!Kd*?pIGpR~NE<6{w`;2~Hs8r87 zyZPN)`GXV%XL%3hk_%=XOLBfsKVQw8g#yjq%L_Q}`1T(bzWVD&?!Oyhz9!0G z0=b;X1e8c}czlq^)jl%p?s=43?$aZh7T-&5aSX2LlZ1#dU4cNcjY9Ak3Lr9)mrP1n z+z2&mWDp^#Ma0)wfYOkHdK{_b%)kkawxuR$fX#$P~F06z$@?{-Y@w;PN_?HFHs&abtZ% zatjexo)Mbzh{}jI0mB|FQdl74xyw7`(|UcT&i}hL*8(;M^F`K~7>u#LIb2cF;Fb2K z9LRZL2&4H}hXG{A_g@|P_RCvqqsvM`0$={SzcNHwu|mro(;oiopZ%H;AgMvPlP-Mv z*(dy`|I2^Hyxf^3IAl^j@yEaX13v!b=gjlb7Hl-vkCY!NX+&E`96;59Xzv*P*Y5|j25kf+WvT+x~3%b_3KEJ z()OU@!2nF~C^0hnbE&Yh^%&V6kx~R3_0fV7AE)anMa5_9x(I-gAeoet^-#g1MIyeh zOt5e31Xu8?nuR;(ydE#@An~qTSd#6*rf4W@!}h;@%AE@vxb~MqSK|;YJAuS%q|mCw zv3Cx`z}4a4gOxUdsJTN7Lm&>(Wuf9mQd(Q;a<`@iOQ~&du}3nCw@>OD&P(cO>VYla>-nk{q*|rWyyT0T6jH>l3 z?uaE_Xb!DytM7OsE=Vb7$bt7TVxQfk@9yk-h>lww%X!bY3XzLr|L%8`XEut4CsZ-N zRrz6c^oPYyQ{(%U-&R)sal-b6o~~y9_fvrX|0@>$Y0GmE`fd5avLKg*(4V@Le7oiE z>Ne=?zyRYADhl7=eIp~N?tku*K46L?~R!|XWUmu zV)y&XUE)G_i!x@LwcVR3BmdvWgsxZ zY2@4AEPVCXcRYSOF)S~cM3AT?Ra6FqnZ!cY5s86umzWMmlD_5k;ek^)lH$n(xEv6% zqcSIFxU~5CE0ry-5~V}VRg5cJAjn{%LKZ3nGX-NrgNacM4yjFOlV&}VkjZ*N^i+`q zb26qUCx`?_-9eZvm}AO>FfhfvxmgsSacP2=2!!Mo)gp{^SqT7-3pjx;mi7-5%%J!k zXIKen+ahN)>xUQV#=Cr9xAVC@BseOdx)=$?61}xbt=Y#eFq~)O0ChOFBF?JYW$}B& zMPi4Q7XeNJs*`Us?@ulYzQO9{(bAu(AR&-c2{KSn6sif8g)kTl)}pT`1YsB_(CF(` z5HSXS$q8NB_yw*w-3ovE_O->42rkx1=F4B5_;>&2OA{zU!W3U8e*XEVeDL87InOAW znMY)p`7i#9|2;20JfON13Dw$!rG~U&EsVVhqkVjVy1uJ0Tm-Wcz_FY^9`LaUR+UCH zp`}ERm-37#8lssQL$Qdu&{YI}X*uny0z-U4ie>9BbyoYe3P4?nmzWVhVg%?@SKEO59F}@=y@-fMeNa#hl#Detycg!K2++Oq zw11JNrpVaJ#5O=s_p&`xR1u-99a-vtb*r}ZUM};Y4aq5>W97HbP!E795}Oph<&jqI zUYFi=K|$=3+r6VOwth<)Pbs&0p9&LO>$2~f&y|>G=sd!E1Y%tGp~mkj^x+wnzPN^! zw%hxuicY<2Qdv2k3p&GXCNf#bowX3hD`V`i* zg~rUb~RZmBTT!Q z;aXY318?THoKE+KS_oRx`w?820b>NpU|{KlO`aUke#!bVNMfCj+Q!0j=+GDS>yys*m1=W_XZoyfiaAP zVDTlQ42;oy?~P}2MT0g0r}9i9#5i_S8H~U5Kwc@STg}(ATJ$gH7ESFwpDQD(pe`1; zPd$*Mk)Glo-MK;(LF$QOVr$9S?u?TwUCb@Q9duoZW3p6_+>zR@vVTpk>6kXLc{e6a zo19SjGkdW$)B6*OIAeavCXj`y$ncd^RvB>|n8u-ohbtCBsV_5>Ny-Z`2Ci=o3}Xo} z>K4P$M~SfOW!+v~9grv_>0sMp5!1hW^O}0Tq(}}Y?%p2x_;h9uI9byl);6o7imEq$Q$2|(FieOk6`9X)P!}jOb=|AvI?u%? zTciZKR76Jt2@R&)$Q~1-Sdt|}5JMS-x~ANvfuhI~Bufp3w?;0k|L;);B7qQ!dW9Mw zvM5T_6_wWQc8;C7E4kntq(%oh<4=r+P!R?qp5Y@mWJifhL>21I`9FwSz)_Vpf7;Ke zBZIPK-Kp=)xhnEf&ghbSf0{y|pbk`nxh1H(N+hN7g{cH{&5pLuXomf`Cj?GmepI9MLWq>8iNZLpKW7)m`elT#t39J|%yx z18tt4sa5Y;XQj<$E^a=R9`<+Hoq21}Tz$R3@F-LWT>ZYTvv1S6HT*0R!TBpLjzzyt zwlOg-wKKQwXm?*dgVwz9N^!B}OD;C}LK}5m&zam;-q~5kY805Wsg<*LH=5L4+lb7eprl#3*}tsc@Jsre}d&F@$dhi zF%sYh_x+jMx0=oOi5c*WJJIiL`Jsx4pX|NQ9u2>J`R(UqtN2;}dZ`EN@oL2PDP_Zt zajoc|-69+=*VjoS7fU-Jw@8Lo3S{-&?ftR+QFElNV|)od{M#-?3)q%G%?Dh`<~NTb zc>>)-P;xjjj5C42a=+uvmjhq@%>#E|!N`G~4E3-DShB@5P|f6^Ob21y2a+7Qo8NL; zZb>fa^}#N?-d}93{p5k&l6$^C!-mXoGNjIJq z!lLmDA$Z<(EMO!83r9mDXh3pg$p*q!0t1m#Fe|-?5Qo97B}xc`SzA>M)u97OYyvn+ zbohBDG7Qe>=C#4WEU@CplOiDYYuTheDFS%6z6%<_{*F`>fCg{`KoOu-wtmLj5=nHB z<<9Tk>XFU!Md_kcv_V*^Wft7+MC#qBCc-3)L$R!Fm@nM*q9|%LGmIlwS9|}}BE)YQ z%ldrIjEBJfI&j7p)|-m50aIXw?tLx*iWY=Kt+=gwP3G3q9jdAzL5N|f^AbilEd&4e z|J#4X|6%&y@cEy7#KXh)KqkoKf@rd_^T3%UGlVzJxWt!RgPkqk+8Ik57`8woXweSm;!?f^DFwRU$fy3byyJ;e&#gJ;Mc5lvPT}UajKkOLB!R|?!oQ>w%ipsv%3N28ZYt61B zESX9M&&Du2?R#38e#V#f6kYS`*Ndmj8L#&~E;<`pQ8Yz9z?WjBoL9LP5YHc2-*c%n zW5xNMErZ9!SJLSCrJKrG@jjXW-@_|KinKn;>IB# zLtXv7+=ik&uFcuTH#-~7Lc2=co7L5wQ+9`J3}|vboTVRy&B=P!`4xhtTLS*W%TEEb|9uE*`9t6FqlC(5+kN5p zANZP|Vm{tS!F2ZCRo}LP&jq623DiF%t3_XD6F4uwM|gsWZ`$$HZ(hmj_j4o+G{nJW zL1x>%OMQ7)dB63(e#!csfsia2l7{S}_hh-iQG{C%B@TPi{hrrf2;coZ+<&cv`HGt` zLKXPU0+I!iW;A4ERHi8)(<67wEvMy?MURA-O`z#x1wON&>$)g>UA0&g;bTT~GJ(Al z4HSrCaUD`l1dSE4O>Z5q4SAQ+$e_WthR=Q^OD4+<;#LvKSV}-^%L1ILzo`)B60blA z(V~3E92vrnAbSt?7c72&xGRT@NVdRwDJ7QF{GrP@1rI3bS85)|Q?`rH2U*jFH465`3Pu?CRFn zOeP+p`BFZmN)9JZM@4D4B&mXyt~Ms?DsT4##T3dwI2J zGRuBxg=db)ITK>6!uwMtlTZ@FIPvXQ_xxY~FaMhV;{Wu&RV9F*6^pkb?s_5` ze9Z>eH`@9cqR|_Bv>_i*chL|bhG^+@%Y5cy1@}OPYR?5n_b}|B2<3q0mcd5V0vzt9 z9n&TGsa?t+912ZKR~S&(`hIOIiXrQ&#kd2qV#op1qiMHy>NwDpAd1vX% zxhv9Bd~X>drJPUwsH{uLy3^Hqp|bYZ6nUFl>IG>xuaqiweON#AyBCVi%cUWBj+xy) z^CJYQ-}3&SKt}qVl-~!z_HtQk&d=-o?dSBjEwbH27gx#e>&!o0o)VsayGrXnn`=*( zv$zkxN8qP6Mi(I59b@`K&;aGR&Q*72fqPn+2*tj0_k zK)_%muqYDu=#qeNf!9B{z<2&uk5}L8(Cn|UAp)lX#Cy-)B-h#P=XtB(jY3n8-Ef2b z?iBF(r&e?DXQB7pGq*c{D^*EO9DtEA7;~bgI;;YaG$7f5 zac$1kh|LM1t73P=NZKOzgQ@L8N00nokPOq!H5|qIpofh1@e zGRdY|m`}qQ1eaGEaFa~6x-PmR7=<#z^yTuRLu!&mc7XX{2+3102TW$i%w)g{Ga%Sb z+O;&*vIrwt_BO^VQsX(ruK;$kv-RrcCsIk`S*x{8fcb!EF-bw(ku|!6^CN$E#TB|x zZMSYr53wq#@BT>4bIH{6zXGGbO;~@Mskmv~WUy<*xa&qTW>&HMYQXt`Y_CW9zGJJC9y5_?mL& zNC~1Di4z_@dTjm^d|xvL%AU+aM%%R5UUm=+uEpRc4Q9 zM;@fiXRx?5+16@eV8}f*E3%4*g0y^8&3}WanD&BXjD8c`grod(W{E}`G^`x$J)3w^ z93fz2pxdh8NHznlCHkF;mx=^q-p>&Ve&GZHoQ8 zXfj0>4ze^4&zPQAI68f1m6>}>QRl<7X}(Zan6-!Qx--(p2qet?7Odu3kMl!&@H;y# z>v_DbZvbGu!T5X#(}=e(b51~?QRbo!_bv0RT<`h*vK`BM%}O}XcL(dQYxSD{Ua3cQ zCZ6M`gBJ69jX|yU-nFgwLAtV?m>^RK}erg%CQApZjudlJ|Um@!rAa?1oACcwoccyHmAqyf( zMp;DZRsz)HYj>%IpfSeK3GQgDk}(JwE=`7wp9V^xK=C8LPWySK1SWO&;!S*M;rd+X zTHTj}fQkT0|;ghdEfwE~YgjoZVqDf(^j>-9=a5Dr|C}n>|Vdf=+6X9yt zMF1XEN{L4QEQ5o9il*dWc%aFea&3zsyJk3%k$~&{6ND@&Py7i@o-XrXSiGy%XBlIS zn#{p7fv%j}MogZzs8ui`grI7Vi;FFu|8R%@^Pl~5_&q=O+wh0}@!yB-#Rc~L4q=L8 z96n%LI}S*}%yF!2MWTe_qahlb+(Ba&XRP5W?;eRlsf0S@(pnn_ao;zb5+rAsQxP*a z3RFP^X10@U4H|Q5jI@XtpsH*x48^3~%q_aq0dRGG1W}Cw;HIX*)zt;sW&;9)sR1V{ zOe?!%M-bui^0MsSoDy=*WgW3S?4~ObK2(vK1{d3l!dOOL0aU6gE-x=|b@iw){z!0b z1RHD-K}rdimsh?9+^L@f3B}$YK-08^K{o(l1RO$ZVNlba3JWKh*`DoJlC$?! z1{Hq{s>V=3f$;B9vFP)aF%_iOd&3$Jv9_^KuN@V_oqm0JRO|GbPF~Wgu5~#x`eRbR zFmpmVsMc@^D*ZMii4M_I2Y!W?$!LyH)k*96FLNCGvfeT4dQz#N87y@1kJr{h0!C=$K=zkWf1y1$_RGkCv&p04{uw$-Y0=JgrntPvdO1 zyu&oo&KLH5Czc981@MfzytR*pc{=3_@}&CjIc2;hvrVW7=7V`of4?u*_~A`B9yY&^ zz1(BzV>KJOZyE0+Ox(u^eyqPV{dvf?`FIBBm3zv3;?VuI{br%vQ9*GFQw_z+S-kE% zullj9=V|P86;xUC#c(*Co)^bK69$N(YEr~4ZII*=ch4Jq_g4qJ_*}rZS7@ZcmhV8# zEiBw$gG>pT6^b5h%ILO?fp@sguhH*sAhd&0Z(u)#V=I?%ss$2@4p2R3Uet%3d)bE; z4wT#<13*P>*u1*CMAub)1qyLHYi23}34uADGoorfuZ;=Fc>uxewwaCjLwI#33yWz^ z+SRlsBKCXbplWKWu`GvJ0LmcE2q#j6goYb1wqR*dgdwyxrUw#@U)aOVAqXrIsAlYC zz-Gg^da?z&jMNQ~G(eCc7(szvvy*4V9boxO;fO380b+FeS3a|wG}nF_YLGyqyL23P zXX4U}Okb#T;Me0V$d3&!elS=r%1R3$h9* zo5_LX02KtO>2P&<?%Pre;1J;$3xlm%w1U*nje@4sOJcH@MgcSCu1c~15vI)V z$#baGrLMzTp0g_x2K~_e@jC1D87g%fzw4sjE7h&8pQ3AH9ZyR|0Rd(>gFT_+vvaJ( zUaoWtbfsr>N<-Plq_b9>Jubd1Qq^kIN66%SseT5NKfwd4X+*V}EW(VWI=j@N+PVV+ zXmEOx0_gNiRZ-SAfQiOyX!)fkp-llW+p~rCs2VFeYRo1)fHTN9O~(k4_ref9d=Vc- z`XCw)4^ZaYDmk2^U2=PBLLp6>W zgY?M5V9pCUgOnl20Gbl|uXwHpBO+PMI?V|9@N0ksH4ARbgA*9y%vppT6cAFi+0vBo znkNd1s5fb`Y{1eYp#!S{46Kdi`Id>8fh?w#AOi#gnr*_><1H>O8-N76UeFI2#DYPx z+rT?>K>&r+ydr>oB>cO#w-DzcA|fZeoQWv}ZDkr%h`d~gtjT-FTUWj*PMviz`3{E* zHN}7_>1I`kIx&QTp`7+bnb>8+i9O-IdyHv_STu*^(&LOx$LQq}f9Ws$BA^}q@jv_z zqiZwv!;JwF0K!(LI7F=K8PR#-bF8=f98fr*Y8o0@1dN1>b_;6FSAc;(Mg(UOWL1ke z072JvrlsSIugwKmX1nav`_|G^*Ybu$U zl~&(_?H}3yV18<@E`Ue}m?Z!$spg^gOlf0)4{IRwA<(?OKI0~*ZybDNRLMWQHqQaX z*ZO!uV=TaudXI=}^BiK&IG?6i(mY|FW2<@QLvgY{D13j9(#n2a=Q-|U654|^(n7;u zFa@YRt<##(WMRA=n6B50@%FPhu!_&dJMrD;(u(#&eMpSBK_!Y(RG?1eJ3XgFMzg(1 zeSxyBBJ?o1ual-RbGZNrW3MdbJE#!*XLSEO|EP#mzANqpG@M67K0G0M-!e`uypJV) zj8gv})ugjcWi6cwZ#e@Ae>1&hD(Y3fu`VS2TCe09pPnBchtu5jc$I-akNEu3uUOOBAltJkZO_#x(u^Vo2H{60=vGbyJ#wNtgI5b8uZtJ`nu1_Uj(+QA?y)EEdD6Eq27N6871 zT)g0m3RunlnJA%lkTM6mPs08`mkWB9lM zHrp1LPd8{TfL`yQ+3e^O8n?q{a2|b4u)uBgY0>8a*?=8%Da5^xG1Yt2k+rMqWKrDWIy}#v5zNm)Hqw^*q$Hfuf8-Gd_9xb+m13?aty%xlz(W z8QNrg^PAs9>*fPy!!2RGW4$GU&1Qq`W?LK$j(s_X6bx+vi{_$8?ikgW0|sj{6NK24 zf|(3^Xm10m`Ki86QQAH-u*LS;{aciNwugN$Q9qA86sP|VCJ>${Bl+`E`k8${QdO{+ zCYo0NQOqWi!YoP&AzIT30R))Y8%WH-rbzki=z#B1QI469m38Bx0hC4#>Uw;HP80WO55hnsGcxpco&pWBl$S$%lR`L&pPDK*8(FJOCk(=c-i@HBGN zNWTY23pZOE>$jZis)C&J3}`rFhqHd+{;8hy2anQ|;_W#>H+z5W^+Ps~50uVfEevUzkLrWhFCEc> zSUO7@qp8>RI`(r7jX#;{cUB%hif8EB8k*0G>fw301h-jtih|5$k|}|y0fcaO-Q(t0 z8$ADfz;Kh$;xQU(%!B{~hy)oHqET7En*qGpL(>ko{cH67&hlp|9_pd)7){BE;OzNL z`yz;+(G}D2BuD&Rl#prFs790o)$C3l)$$-fbpSgUCy`$!0DJE)0}}`gW()h7X#i2< zwvaT2AI*ai4rr}SEFOQpw|6Pb2FzT+q{OCvUVIoh-3MW``3kLEg3&>>1&K>qiOdA0 zjJH0mAdO}8~0on?-mkF1TwrDm4L65<;Gl&Vf&qXSmh)X^e0@d=?sw~Aw zHQDuu&00%KN4wqn+Bl}OGn^{I(23)^wVr!Sf&=vIl!+itg|V=)uJ@aGV=QwmPoi;8 z8G#Tj)hz9BfQhJ{|2p|T&eyqmcziM}JX+%s7_9Efw$@YuX5b=S;y?XMe*?etxBf2v zJOA82iJ$q_PvPd~WpVgO#7NwEzIn`FO^XLaX6i&W;p#-cJA1s?UbyLzOqh!Buh4E1 zo__jd-uqQs%*Er?)fJl7RQ@RjwP1H<9x}M!gz!zU1eLAKyZ!B?Cskt~a@FK=-5eVR zP*H#c1yB+23Ka9Mal(=Nh~dJNO&KWiX;zIVr~)Hg69@)!L^M#X-=R^N{n!_n9Vh~2)XtI^6X(1luv3zeZU=x0ZhK7$j6UMZu zletiSk8@-yj2QbR_RuNlZNE*cfQx1UU}jp(BM5F92UM;{Ib+-WjQ2W)16_M}9KZP< zSMR?fL#c1nWf=N0F0~ol#2F;%bTTaohWj%~s|@%(b34UcFY;MCh|etR*JnD?`pMz6 z^5*KTdS^PG{rTw}Ch6dhv)*58%JG?XIxSWErZriw)w`aJ%R1dVov7kDfY(UkYuPAK zT~i+XDfX~=38n|y_`J$k#9y8R9w%#YMygM?)eLK@bLIAdO58^iVVytMm2XG#xVL|b zdEJ&$7h3!{t|lKg%taigUN2=ITR_pnB(E7=+kpng-HU`TzYDzhK?}S}Xla8k5t#OX z_Q>L)%#bi318t9X3-G4LE??vB?izyL!py-m0&FdMpA=ETR8@QWZG|8_n(Ca^q+V3a zO|%dxarnZ+Ck7wr{sJP$B4y7`eh#BY>{=TEitLWlh!U98hbVbyK1Fi#2z5>Ok!Uwc z!+Zkd;$)F1fuse=1`Rf7^Cei@ih+)L5iI(}*cbD@8Gns+CZ`+)YEn)ez#GQ)QH!fb z=3G)R7(+@4By3V{4pLl8H3&|}QZ|+B+Q-6dJi@`&NVK6^pRqq3AAddat6V*~Sm%8c zqdp}n&nW6(o{NKMQAgW%$9LzQ=JNyYhhb6y_oq?#Kd*VE)O>fCFf7KOj!9cHI`+iwmd>w`sf^e8E#XhB@2F|E9 zKURSp6fC)pJVO!GEXX+>=RJa%^Or~Mm$9;i)%CX5yr_+}t>hAxvFuq@9u;FZ^2#w; z5}*U>uC2iUbM#p=$i64qgXIn7%q^ z$g6xNW9sd%r4SR7fEcH-akYlS2s%vtBNQMDNH|ngbx@%3XKZkqhS4<5WbTDlLe2EoDIB~; z%K5MvUTCC@W7}C zI=zdwzY|l5H5;G0%rofbV~@xgyvsw_+P{mwdD}dH)3jwwZ`K!~rcBTxwUBbMu~@wC z(H1;T1}+nK8I^5*Xg*Lnz?=XJY-5?UmI%%>ee)VlL5kDroAU!_nIEQ>4XYVW8@r%| zPV~h{ynEY6J`Q6W5}K4il5qDW;l+0{UVRSa+Y2=L0x21z5~|ojfG}C8OWvT_3_yE} z0X_D&uQABZ%qQ68b8E!c1Eyo@inFWJ`-Mpkirk|i_%jg^VmWUrf|~%q9nLW$YY&mV z6VHr>%m)KeV?=>65}~Mqs}K?!@S{OYyQT;!1CqenBIy-au8^?t{XL_W4aRuddIqKw z%hzy~*roL9Ykfe5phwdXE+1WBd(|Pegq-_wpqTX7qDEBC@5jE?T0y&X^kQt@CY=;= zyn#v6Jk{&=q>A;K>9hvbY`n%B-v0yx1}i3Dl7&t`RLvv@fT^Pc=Fv2v>z?5GmoM>W z|M&k_{PBP3zl%Tc5BzTIb}upH9wTt6<3BP-s-^+78Ntrz$WP_?JkTUuGyRp@2%HWA8rtvOj- zHu}IL(Pcs)Q8(2fkk|&o>W=di)-I7TDusmkgp{$5#!417GSLa11D=(UK#o=pPFxa8IkBcb7hjVGnA@oHfPiYd8Z# zwRL`U0Jt|b#-K`k!=C#LcvlfO=9}{U(xG>1o41c)e$tdCS*!Lb)bK#~%lftvk|P7b zWabLME!wm}%1?3gCE@w^1h0Oe$gj6(rNfp9-1H_rA_7qh5tm3ddo&%;w71yd74GsY zNZv!Cpro!XIYyFrmuc+)Kb)qTJj`7D8z=}_EnHl1((~}5bv`vCW^|otj%c;cdYGqm zA~uifU?ghXTR&qEfuJ$s2SK=GKwFSpqLE7^T!5uKEi?&Ru{leKC-UJB% z2{Hyy%DA{_aPeq^c9Vc`@R-#6HMmqpopZBT9lt))Tq<-QO{h0bRQ+8tpSrwS?cc#9 zM*!C4{C7}*$ZeV#7n>(|@#QuCSO3PJ#xMPyKZt+opZX`T*|fObzw~;{9QUa><0pXd zgvd5ke^+Ce^pzGr2OHMnC3N%GR*VaEzPH_P|6Xc3#@d+huT{3esQEf7j_=%| zWc+e<_|_;`;KUtHg*l}^fe;?G}v*xPJyCN(>%{*9+S4}N)Gp}$KuMeua>3*v)^=FdIFeQt*N!f`w0!T zVA^8;qQMWpqj>ejfZc6}q+4t_Atmu>0}5q^sQD^Dqu>_c4WrjrxE-#Mu|p;SB_koM z1`LrB)QOrBiNvT`-)Ly1$x>Q#W$t|MvE*7q(H+Rbl8A(gO(m4;W2n<3v59Uh?_J~ zaZ*^X{ko&4`;N6c9J5)tO3{q=s>P#6SKtkxjfKrKTGj2W8HMO4jD4{Q8jFN# zpBGNNPw1>A+gh8itkQO~-x}o=2ES$^0tAR-vvyt?f5O?CdS5K1nh+nK(!XQrVNRg6 zv^ALK86!IG6)0s!cJ(pjJ8)sJ?8#gh#8FGD>WAvAQllhx5Nx5mCM7|N4 zHGG5^lM?`owTFWyWkB*6_EWOD=0;_zRea+JXyQ|5nu1BQ2qi!;r8S5WZH#p?og2}Y zKHq$-OYeH$lxewI51n1A>B#^>#=Y0R3zl=VV$v5Lv#YsXhQHD}7$4X1OTfHd<_o7b*aL|MnBYA2#0(F21u|5RMek! z3ay1hXW=BQ<&iWooj4pHbXwubJ7*R1;nT;bu`t@j{HUdQyWd4CKECmaOpdqqem35b z=ZSi~W9imfI@wdFy?dhA@*+4bMMEw2uNkktyusy@7VWl0({xbIP#wTT$dzBO`#Q3G zlQCY~n2! zaEDjl7vQc%q7EAh{>{YxMaJL%uT(ip+VL7Q4^!-#qNo zebce|^DtUe;b4!E+@V^_jI0@(iwit@a_MU0ggj&n`@TryfEWWOb^+u{a#?Cqhz+uC z@z9>#rorvqEx!M~FQIopLW?AXN9k+Wv`^iXNkG&We@%+UC2CV9^PD7_jmRgpaFq?? z(c?=rn*?rQnkr&`A>afh6h+#WHSEZ%i&2G9H~j4M(Vi(EBB^N$7=hftJn)<2FcIr_ z(;*oFAEGh3fV=b@8A~6Inz;sNC;S^2tHRiJPtc?e|M!3YFF-`_$Nu<#3thLtet+jL zg%1*E!zfR<-%;vXt{fkO$=r=JGS>i>Rw40-XK>CoJaKZaI{eqbniFIxJq&eps!2v3ukuyhN5IGp30wM=OwAO#B90nE;B)(JiOm&XLG}DT~ z)^(NnH7$fva_#$}w6}V4ai+|&DxjWD0Dv;4AP+4&qhT;=u`J9U$e&i7gjX!tugq1^ z(FDl$jM3C0J}1D7R{aCTXbxLC!a$+8@AU~2ze-8T{XbyZ{&H;`TS6?esK?YdSP2&^ z847sxh0#<&0VHNHnd@*IyH~)o z&v$tB{T+teD>T%gZ3alMNVG9ffz4`vKn5p5Y6aA0^mL88{sjbg01-GffQAIMCLHTZ z93uWcret*%Auubl?9p{Ct{z>Kc8MxDF|MwzMk1o}P##jX&}az8A=V2g27#fZ;D(Up z4%fHWc=hrnWIurVOI&nc#YOiSuJ{|y1nfaH_@E|08;G$MIBYi^>wHEq!@Rkx3c!NR zWx~~yD=-5nrZi#nQ8{TWj3YT<0uMttONEdfy)^L3{QS){CYo-=AR;glELcD{N}7#B zw9us>BqU=Bh`>ZBoOv)C6Una62Ld4E$3U$KLuk?lm)jQq&;Q$B1Q__EfAqhJC!ah< zFE>yf987Ca0BTw?(2=w*v$`^A_wf@MYjb9@_ntAW6v0$FQ-A;)$fc*j;EwgInb`nq zMh19Vs1HeX&GU|TBft4sSw0BGz8tVI6Pe^)N+SZR1Rqxzy0OB+bd4ZG)WfDwI4-2> zH3m_XU-yBX7vnz*Z>d#Zn6?9X9WZ{*0He{DM&uQhv)?9l$B0>mR)yp;MMvPQ1{G{v zr@yrtl(~xkI6g7HQ%QCu&7Yl9tG*B<7~Qe|<2PYVi+rB9&To{wOk1Vq`Jzqp%x1ts zc{hIZSg*;v_8nSe1dS(!RrRa{8B&2AlEwTN&DtfRU>=!j^|_H!0&@b<$jFG)TfWh>mf#?|_0PbO0xe(LEIb!j2 zJu=+mcx0DEC+u(U@ZE2J8@rvL)2DdSegmI$KMj@(AP1A)xIH*~40?sq0FtmIUfbz; zc0J~bMU1(+>~Qg@gI*|<2Ml5+R1p%RK&hs%Jj|(})XzJHc}XlE&|m7;I5Uk~s|RciD+=n*(jbrU?VW zt{-rBvoDfGX2NFMy6KYTX8kzvGz$Z(2<8G_Kw(Cq03+e*@-zIo|HprZzxMNg3xE87 z_|M|!{=o0V>)S7pbMNypIiq`oIL37EJqJCtA+H$rwd~jU#-nLu`c>xrT`@uvZ~)c! z(B!DbZI-`X4~{sVq{8q;sLM$+Dn_X^-W$Z6R%w1aV|nE~0YuqV%tIC3-d7?JQwcLU z@2*&8;&mN?00#!#c_)*arbOThs<8dVKmjx3vCq1`^(Xx402sV?3*b~DS7 zhcY@(xD~XWZRT z31>o@&@e;MV%TN8y4!f$P9?4ue>g4ikCi&;{KELt`8iNB0D%Rjf*O5G zAmPI3nS*pT5-=$^0r}SQgApoq!z737FbdOD35XA`mGuGMGlD{^rFFxOs$6(x+(YDL(Cf94S9?D-I9q zCjcSAB2u_d6@+*G+F4&E2}L#rN6q$CsE23^Qm(`5Os)YTM7Hk-K%fkE^9l0>qLnkqu@7sF zf${rct%1@tUSBioaE4xBdzofHLZ#kq_@Rq&osQ*Nc`^56yec|Dd|ZzvMQD?$PFRi# z0HevYofI$Q0L~fTah_n(pJTo4rZ`wN0u3W5FxS?IcP5~NKVyKvX!;U>R@XHXFeX5S z+6Tj&!H)Svlex8AcZW1V*Y3v9=-$@xK?VaPfm3wDa=d_voxS$Vba`fk0Cj*}6g}i?t=#YBY zn9k^{cahc(v7^tgZG7|h=Q+$aoYS3g@3fF!yg?q*&5Zm2i=&ajiEw)>*zXb&2{Ht= z6EQ|(9`dt72gThkL(m{KKzl)GE)?6xTks~MX%s>ktQmxCeMUiy8WW(JK-9y$>NiF} zR0k-LIg!%Yf(^B{^>(eK84cXTUVj(3doh5d!DGGvWpRlM0NOy50nJcSP|D!# z9s}LrCf}mhomaWB?vb(GV<<7I2&}bs5N5aE=zMsXGi4mJTD>y>A7({&K>%muV3>j5u**yB<9DSYMfx1iCjgEwaXUYMZZ z5lrxlB$=7)h=!R2L#?NtNn2)!6X&FbMZ38o>z?vx9rs;X2oS5wDU zAzdOOm+V_O&Ky0ZY>sCguqa)B&Inb6e)PkHX+TJX0jPjD0DxqgHsbqrNEe(PS2$rG zb3mhRMsTNQ1GDK(AOQXD7I5DP2HFs~s1Xxhyt;)B8N>hdvOeDNIr`oH>b;a|bOh(Gub|9yD=^4GB2Ujvjd#$51q8D%j_`;R4I6iF;asLXl} zRLpzTg2@x73Rz<`>(7|`p*C;VP_B)P*Wo-kfF>E8qL$hcjkHDSasni5-hKZGGmgm| zk3W{{VNJQHI||@2hC+3QOcfvo<%|HQ!z3r15E>|A&K*Tzb4+Yq6^#M_OfK;!FO4cz z-REYQKcIk+9x_kPHx)6uD9!gg zw&(!U#1OO~aR*&2U{!3>1!Ujg=)f z!JVLM8e}!k>%sJfR9nGNRsaKtdk_OjH(+eReT#lac=^RGn&IpC>L=d>OXu}5iL_d1 zm?L|V0@OQ?Y~>LwTqelYaF!lOJ9L`{mrpimyT&w*WN-3fXBL784_^#5!LF)h-Ou|p z2EklqPKa@|{Br zV$I}XWKa}ZTwBz27(-VowBrBQwB~9FIMr$ihf)C##^!`c1XTckaFF#F9+n6PAy&;1 z)pDJP%^V?2FEp5~I3vR^L!H;ig!`rfXr3^awU_>(%K5 zseCU?%G2gw0G zDB{B+Sr3&2Q)X_F-hjDVWbq(Kw@^g`U=lt%Y>v8x}~{qunwtE*f-OLfQzJdr01aCg^T1W)u6&gJzuf9&%)ze!#rGgYo#772+d62sV%JK+P`Vk3VzNqO9b1`jg1fS*rBStfElD<}h~WT6 z5iJ`iV#K|GkZd2~o%xS($F<|wDMBNJC`>uDfE8fH<^uTgJ3Bo4GNa=bj6Fy@2n?uT z-=lKuKnirJMHrljx}I2ZxI5t0^Bp)bo_=!S4Kgz$V;-FN_V;TB??WbI46I+78IP|% z!^>wk_|yO9pT)2K%6IW6{^b7vO`{m{ZIPr`Uocn0_FSiBz-Z3HjB|kiE2bIK1F&4H zUW#Q@y3*!Jacl~o-xFM=0w4@;HvzIi4Ui+xz^-e_Z}p#G)PM+|1TvmVqejnhpkb7Z z$M6N5LKWCBnIL6eOy)DW17zQu0+fx{*_~&`T8Jew(kXW4_ih?s(HEv`A|+moe{H@{ zk6k^6!MxAs&74M>k9YlE4MH4yr*^0~*G^a~d!BF2{72i?=Hgm=4)sA@&Y|ayrC%@n z*{Sr_8V#q?n|0)DfYykP=>x~#e`o2w<;$+(=x8qLS`ZCTWKa^20*N-reFLQg^cnk`J@(uqbv@dx;Nmf( z+iuacYFZB1Io;w1w)+*R8JDO@>{nA|@x#cq)$;_=bXGbEgRML}J0J_;y>>V1c}O%# zAT%x|9AJ?FsHl{J_h^WL{Uf}7&Up6SjNLUO4HsarF>y*z%1FczB!~b)8QLhCE(6UD zclkAj;SNfI@B?7~32OHw`FXpp^}P79cV61+JaZ1;}vBPB<7kLa6lH*!AF~c=WVG zdyznmV$i{ef5|4%0vqG+YkiEw>4e#w;lbf?8>N`$7!jiG-99pPFvp)6O;GH2&Za)B z-r0pn1fU|wk_~9kk$J6|*rM$~Y(6Nu0Zp?9@f|4j0LQxG!VDFaM&ApKF=cEnAK@o| z<|)3LU*Ya~kA^Qn+5kz+7YT>90{a*VR0Wh=8Vy2<_JRSl5K+8-af{8i#b(=Lz}`bu zI)FvSL1{6|IcI&`XHPmeO~E`P_SrGggtomxN-h4w|KL9Xw85YFlm86bZi9Z<`P<_2 zD8}}9J>0VXL^I079P77uWwJuPIESfn{(R?bv zg)V@M5zsL0gYZofbqc={OQw1KyLf#GF^=J9r+$8PrZ~-$#x8IKB&K=+Y!wddk1SCz z*|DxtB8V7>z^ty7(D>RL=NB+#uxkyDu}&i>Py-2JhA{7&IYT}Nuj*&#S_l9z48y`d z!`!5GZk}N6Jg!Yp*JJJ3V?fy&0C5aZSeyT+0E%Casd-z1?A}tNlaG&^%UH&&%#Q$# zU)FO8jx77;;V0F*CaB*V!Tt_FmjxX45N$b8&yR({dE4~%%?JX|OeI(e`x`;tHy}#p zVCcjqs~7<8Js&61V%;SLsURr<*qHBt+XlP40kc7grW)_zg=QgA4-P~o6^>k9bO+!(`(}+a{`vivsxI+L*=Le1!`f) zpaT-b!jWPN*+0hXXNs5KA>3RKNNCU^6=|Trcs)XLhOUP;g0#tyw8LIrqwjB#(R-Z~ zAocMKX$q_kGsgE_*dLyD!nL06M;LgU!pkO`{{jOU_R;d=c~T3g`N%N885xN)#F>qj zI%rP7egnDd(7$e>{RWM6AT-9HQ1%HR({&xh_e_$tATVJL`79De53r!y5-uNiCUK_0 z?|c7nLRLirfhZY+z5pNv*`Oa@ zLp&0Vd*m<^ms87s!q^=KvJTgCWOm1A>vlWnFg-S=&)5F87NCUdnK&aqDY?2v6-Y4! z<)(dlY(H6!QB;VkYioTGV_lo6lw4{*y#0@Hm!)z*5LU=)+U@l%Dz zaF)TxE5RH;&cT7H*~HkUsoBPoLFSUtVo2kQhQAiKoAG{@67qCppqCnTRKg(FPt&`!dS5{u}{<&IP)K#!j!%54R9?>AYG53Da}|>iFEH-oH*j{vgny z1B3;eO@qw_-hL+@XN<)psc8j(O}hbPkz34nKm$ex>RSxAjQ({C*>A!55{yXT_alDBz#jfPW%%JF?}CB6Niz6nn|Z^x-D2sHIAxAMZG>FwyVe?o2ZPZUUecvkO!koilNy?)cA$d&4L?uwG!;cNku@$Tta)gqAjd zCXkz@2#=vCh1@%PRS=Q*dO6hJCjA%A;EiH?+2HbV=MhH+bFzlkB7#)f*o8a z^Ef1o;e6~o0@sLKz`|}Sh)p=wjoLB)*rgCRjkx*ZOC)T8%@#Ur!MQQZCL+L{ zOhPMZcIia}M(t5|az^Yv9TNI|kC!iB!vDrz8I0kn`Mw!NKl@dD_d9zxpAvW+0+(tTJ08$Vxob zMem_U8N40+60^uAv|+AcG4IPTnVR2=eYl=y_UsfS zTr*<`{|I$GY7K~`#>v>G&`da_ZEy@2n1e6pY8u>EQ{gw$yX~81lKBbZP0Qh3UmO*i z*WP|3+N7EH%}G$~W7ve=R~-%$*7c!rI?cy6zK|1F3MK_|gS=}j))EGpnRWsx zfB_@WK!7$dMoi#7=Kv^(;~7(_4mpoF~N;`#;S^|OTiHG^`CmK!uaR-(znW$nRaj0-15(-8!BxYIAu4>u*! z0EN;VNvZ#&QBXG|9hcV%xq(e-oUbv?`ZURp^=R_3M7ZcrV;W6~s-@Q^^HN4Ftd zJnEoq;RKD?=0ZpoMux~G&=t|gKtqC@Gg@Y_w#d5;_OG|t-!$O;1(LQFk6r|d>^>9> zm;eZ*$wR|YStlTM%?h7qh4By51393S%3>H3dbedNas{qVoL2ba8gIG<48ws~?X1C)YVK9Q?gsNA`B(pS{O-%MU zA2T<)50HY&*a~tU@Z$M%sAf>{@@Jp`soK^Cpz%F~h|K3ERYfR4(16fDMUg3kd1u-_ zl0a%EDyjnZQKSf)Nw$}fuUqvn2BuY^C5lg?7Pqf=c-7wE@smr_I1(w$ZpG;>C;5@Y zvo#bBIZ=I1(i-D1mTup4c16ce1%tH1XP^8yUOxXm{?xzrZ$Yx+5B|fyAFpqpVL#ki zos=w_SWhq-Lt~zMbc!*$1dWp(81L7&t2%4-H%w5%v8Xw|mFd$yUke|uzE=d;fO*$b zd2QN#D`)HEd_6pVb;#zJ|MtT{rgHX}W7P;BNmVVzW6x_%w!TFpJf(x)lXe6*Ku+gT zse5!etNWWE3nxh)>T(1T%zNUBlpK^904IH7%!OzSO)K>ob0b z=Rr_4y2!3G`hM?aj?8|52vZt`R`R8ZnM7z_)M;+kP-`g6HH;21x@#IA^XKOpa32$( z@ID00=cIShC+D_pqR}uXuI72H5nt}7*}uOpUhTLd{aOg4Q;AOGxhMnEw!V|Oq|25r z%9;IMZ^ixE_O8>Lbk!S8s}p_on`u4WZ)2Pi>SG=RVQ19Qqrcq(yDKDO02xH#`0rR* zQkbD>8HHQ}&)0ehcNbwTQJvf7cRg_`YJ`YJ+N zM?FNq8Eo%IXYkhSPDd${Q!iRc1jw#Wr4e;gxMI@D8F`7^ph&(!u?z2mnac%uh#VX4 zfZX8bMTgrjI_z&VkQ26OEQ}!3^LJ-?st{HTY)v1QqG3X5hdyu-%1+o6N=5eY2 zTtlQDJ2;v7_NgM6CxqMb{<+DgP<4UJg;GXn*1-H3q>W&6wEO})fan^5*|I>fXhB$njI5|isz=;Udv!W4u^89`Qq{7l%p;TXtk9Vtq4*mc7PI| zTz-PrFJ9n(`LF*Oym)qvfAkOieq6MQ+x-ndw%4(TMJ(D|p|KVIA7s?tAtsmP&cKg? z!HkvUYCdb(hy%onhtHD5{(=oCyNRb z<1%F~r**YS7JG?-VXnbZc0F~|$nm@SsRP)UWC?8@Zr250W2(h!h}c}~bVBPE_hWGHinXu&kk$1AiC;(Hl_RgHvk zfMRc)kHg#qVGaTe!!Ws*bH*?X6GlGgVWPn>$E%`Eqr=E42yh4#m6n&6 z{qDKfKPG@7(xLtFU8WBOZmg{VU~W30Cm8q-G=_^#dk>xXp$2L?9v`F%_f8)JVmGz( z{!vaJZr&Z*B-Rp5s577tKoyb5V36BV4g+E673p4k?!0_Da&J+?@f+7|2`QodYEz5; zRFeR5-p=x=C z@GX!ODFH|Wdb+{T-yzcuNZBQKRB2X?#QnS4CywP?kNexEB@yFh35AO`1|Xj6niiK= z8>9rN3~0FVF=c3W@JZPjC6lDHGpzkCW4F7-(i7w5JEP+o0u=~mVZg&=i`%~gZ#RSV?|k-?e&AZo{)4w*lVKtlZ1#qTuv6zXV)MC z9zEG&kioRetTUF_+gqfwH99A2NPTY|L0c_ASUk6f!Ay+H%g4CAd5wSbfAeSX*Z$gn zjz9T7`WLXdc#OOLCCrQ>%;(sEO?A+c_lWJ2V{Z}%`v}ek&*yP9$Lbmf*is|EhWJ)< z4wKJgeKfy+j8S^~{d1k!3$2CFHX7IXa?Q@y>%2~d4t;3{(33nL!^%agjwAD(b!Z*i@;+Ky@$5U7b;pcbe{u*;`Y_fC1u$|O9BMOzRwu;11Ov_Qm(*;1j#K_H_-G5eeSTkX_4|HH0WH0 zxU)H_OLf(0qRD=;HWLLFnliP7Zkw>ZYCw%bXb;I!oG8}J#To+=pL6NsT*Y>(Iy`f- zc7Vt&nm)5GW@)b1sDH1LXEFgx+ z9TWouJu(`z@rF9cs&2{>rGzg6XPgRRYZ?m50PA3y9L_AO?=8e3bv3PsgGsFn^NquJ z{pt?e?FCZTVaPi$hmOSCN!m^l`YX5RP_g>B#RbDusEmWv(ADaNuxT&R=Y+rb|M~04 z`QOIB{IC4?aPjyGySrNm%%sO0lM;Xyrp2~1?FN_T8xX8e%?{{PXzEJa)|j?aeJ};F z#&r?DkG(en6)R`VkuulPave?Y&!Zj0I<4z?2-ut7I}I|dry4}4zpqL3<9aaQYjxOc zHU$WX=j!(YG>G3d5D@Rp%L>3@Ugtyovev%276O0?SP;L5VVJaM4wyvUYG5Sx*jnSE z&LckS@=pN*$211+t4;7O7~eP5gm~ZSW8nioM1Mq?&4*U2UnTxOKs`RjH21{)W|Ti& z4{L;wF^UPduYm3mBVC##(#$)Ys4oVdkd4=?Zdv1rkcpwfaD=Eg^UUA^%l?XK1bhPgIJLFcTi=pY(eNjXrZZbkVqgjAX5e;LsTFb zAhHkL7XuVs8%oF}kOT)RvaK^!Ks%Tms4ZZUqWI81+y|Z?c^@)0814kmzPQHIuUw&N z8w;Zu=3mFMd1r*FInU(To=HDF5n$BUJosV;%-}dbhz<(EX z`SCThCaIpQz|Wt38(Q&LzH8F-wrva39gK85A0ZQKZ37WON~zpi)0C(`*S^oS6xK{2 z>pDi>YhcZ8w_5<8`~7|a4AkIH-Ojicejnzb!o1(+d*-1C4s-BfEuS?|=U94(z2j{) z8h#_E_XR4PTh6^S8qVAN=7jvI=O4a9-o*rb_&leQriaY-Sb8Um^PF}}5dPH%9;`a= zGObD4j{RO{aGs>(K6##8?D75t*`DPQ6888z2N^=j5;5I{ib{NO?nx;2nHDBdp?N@m z-C?+ETr%oRyU@E>`X|$zm@=zZf#e3e8{qL3BPD`GQegKDIqj^JXyjNzf=a%gX#{NS zk@ZFz|7m~*VA>1wM^yo#JlZg?WmQ!JN+1$|dYI!b0%-%1M}Q>AYsHHnCcOHh!Ekqh z4Vyzv0+~ZOA5$fBvI)-6rU!RD1UDG+4f>n`wmN5bDoG#^B`1_~*$&jDlB!x}#n}4u z)9U=E^Y^m%cjyADf+6=%%>{6>lw9JJjG>z^q-w=)88KeUQ13&^ohLA$BhtdGh4xkMn z7Y;fwAQr~bdhU;G>R<-hws!$1GW{wV&@ z|LV`7mshyHeGXu6T0h(%OACO&U^A~F2gxY`WDfES2spnV*1)#4d2d=8wS(7qCYZzW z5U9%Y*p_veZm1c_aovSYe*CMM=lOb>Gnz7~)084_jy{|C-3WL;C-CAA3{swW6ASJEzN+2h3mm1zYe7Lz%Tx200~$!Yxhit zc#BC9^9zSf4cC6Yv*G&niZ&iYw9iVlr~1-Gb1DCvn7)5sPG51t#H&6s&P!CgJX?#) z0Vn(bAiSaj;epKLFEUEeyf8&Zq6X5pfLu5;{jtppQ*kB`_BRO~H_&!~5JA;cZ*@K< zMd~!>QADEEotbjwJj)w`t9K@g%jewePK=S(T0qsFFpi7rPe}%i(8@zl5 z+DLm^Yp$n7ny<# z%XF5ez>y~&N@HP?=yXgGbxCOWNmmu@c6Z3K1CWcP)PNX9q85o2oLVF%s3rg{B)6cv zMN1tR9SAK*wqR*N2sL{Kqya+how9*`^QpLOi2qe*WCdA!q%NV`cDT4`L0yLE-Wd{g zKNGDxLxjye_wy09%)rRJ*HX7R16C8?wUn=BWY(mn_49LrJ?_sF*O-A!iEh? zV7|aF|KgYUH~trY20S$Q*}v~+@c8LB&}|5+18(~}?1tB1O6Z3HL!TjN3T>up0L19@ zxAfrnZMAFs?DKnLa3c4)q2&>KdVbcIN5;MKw9eO*o}5pC=@^dlz6J#By{UOqTmxcF zSM{v&t(o+isgF5S0||2}d;K|Q`c*AD!<^}#w`sl~%*`SWX(P;m0bmJw)O*_8Y@+Y` ziOEHLuh-z*1Y-UfW!3<~9Mm}k1RMib>+w94PUU~-`HwAqto8cMbUICdhLdN_Daq>U zEAOANIJ?a1Ab9xnjuypz`}4%(r-|t^%KO-O$2UyxVy-SFbjuz;UhbQzC$5I)t0jk6 z5uxK4v`9rdLt=~v1(%}$shER0Rre527XDBM>~9r}7DW9_)%(LA9081wF!J37x7T}I zewLBNJzG=1fCy-@am=NpD=nK7h4E*WmDYb1<3P$9NLUkL=4~AUbmk_dR=yo5LXK($RNrf9T+QUv_l~8SVW}mfhqNiIz6fs5 zw64}ha5k=!{8XT<0A<__xA@_+Zv&5Rk+_3^kigKUM`m%52&R=nKzNH+FvehUv3xz; zrNKQQG-!}KPlf0J(`+(rhfI5bGDJ*zuj(c^z6VFtjylczMGzpD0%D-y z1q6cq{tmBRzp|()nk)i=o0FW=ACs=oaYs`{3E&WpVUI;Y`;Y>e`MMoJxiFhs_QM=l zoSQJzP7>!D33H7HBAPJphcp=G*J|KkzPHSQjwo-H7`(2jGErPe?>1~kn3dF}gJIyHyp+6Zp~EYA1!we-G$fOk>eo2gHC~luAhP#A> z799v^_ZU<_+JdMBsha9G3z`-{J0R<8404M>cM#q?6ipCKAP|^x0m}&PI4oLC=25=} z)1NK`xqmi zC1bx+02kQu6wELu18^Xs zl`(~fn_N5BY~2cF^ts2g7vIC6ud!`1n9SDZY_zDF zZQ`021Qv!WA(3fL+0z-s1B3>vC#yS`^pJoE05bWUT8S1E+eT@oX;QGS;}_3g14*!b z+>A`vM1yBOuE*2rc+m0TKD!0bc%h70Gix0FmBE?TRzQXEl;!>#GRd14D?ici6`0ybv^29wYfo^ z$D#dWu8C3qt{o)yeUII4Hvv8F?(T{|ga9_;cU-IYncCbVd_$ZImd>3%9s?520s4;J zpMw|Y=JBRX`a?4JAESoCZ-NHzCN*>q^?q5K7d0w+Mjo!2cr=}2{@#9i`lha9T;i#p z0VfdOwuHHZ!^N*RFNt8N+T#v@3$f0@p{aj z4?@EZV4J;l&7=F6Jk~fApe4c&s7YHB8=*I2paHY{WeR6YxufgtO@Uo zcfHR@9|8r&{KzH9&RxzPXN&Ld_Y@-lZcHeTD@3Y%?A5aNC;PYCw3o$Bv4+_9jf4gl zAl^WAW6l%@1yK*-J80?wA+TJalTUHMU%>@G1!D^g>@D;)!2s##1e8njw0s)7Z1Lu` zY(V3@v#nbow1;*Xmya*ewhT%Ng{cB_;)-dQ?ie;+j8VhEdXId-Cjttp?agC9TO)p_ zz=G{t>>x&+2V81jGfrc9wc2y!HP+>@H+6CFD3zVZpHtJ$p(Y{I9iCr*A78%wu4@`3 zC|Uq!dcwH@@g0P3AwvfsyZH*iAqSAAa-320XVnMdXN0;b3lml0YmJ#EWwY5Q1+!qt zuEoL%&8{gF?IS;zd~7H{NDm!Zv#k*_^ZMl;-FAznWenOI!%6PWRl{@5?EG5*J<&p{ ze%HwyK2ibm4A9LaruRYWb9>H=$GNC+!YuH@L;ys5|Fs*Jn+sfSFDDTKe(>#A`23e& z0+jJez(2ePG*h%k3@g`Ohim z0s3$BcE5rGkxnnoIaugfT^Enc9oLM-R1)7+K#L~egT^TcIH47q7}YCrAUdPZD;bZ~ zm@$TH&z2X0(694%;!*2Z?vnyae;I*kZCNs5UUqdU5d(?G`?Q=_oD!Op3eX_4K`|g= zl&#IZ)tB&$1xNDw&52EQ!ci0~S`08)-A{wUO%XDf8{~ZlXaZ6=4jlh}z?DBuPFN>q z412-NivgPrp`4nEyYa0V)>ukcixwVZ1u-2Ng?SF&)7; zU=`>rZ}9leA)@?TDctm(vD~$BjdG4jL~TEdxr(A8B8bqV8Q=TCui=a5-v@Wb2=8_o zn_fW;05^7^vT3f+95vY5BAP6V!)r7 zERNVK6-^rVp{}v{s5~HNV?LX7f!k}v-~5Gd`&!xKfA=f@Cu}bnO1JolpZqF*>ZiVi zPab^(KlgM0C0speF~|+R`OP0gyJ0Bywud(2zKa-xxMUsTXGOL#@^%nfsIWyAag(HQ z1RPHUus62H_LwZ@ELhbv0-L4c4+0TH~CWwrCu4wo~ zXv*Gc8cq(>`h8*`X)b{BNIu2>e|TJDeuO`UxrRdRkWoa?_kA&22rYyF6lx8FxhVw^ zq3gPX<`=a;i2AeE!U)hHB3#6~YanL*`I-g!ODsN#EZAccv?hYjyKM#>)`=I1pBt_>tlT0GIGgo|vJ- zv;L>)`|*&K78L4QOKAGFXa(r}E)1;@51LTf1=kO99Lj{0ssLUZ*{iGXIvK&?Xe|0= z2{e#Xm)Nvh4Cukh!`%T;B#3Jn zSZG3kxdSAFV0QFFFWB!g5O&haAh`g*AWg`U@chdc#vo`iwty5+b9grF1=rU-Mn4+v zSWp;D15_I*9u>wS2)l%YhFgymU>@#AwO^AhQX`;d52PFH^adh3_cuu>;`}O2n1}$% z$|rjWPmIs3q>1Fpu1xM{wRt&r;1_9?dDH_o_=vp*2itOvn(4^8&x)M@hY2IYGe&f< z^#y;M2~3^fC+NDc7i z%OB#|tIt8~CShnH{QwLEO*T)-{bQ&zY@sh;nwq{=Fm3BvB93(g%>7A>s@s(WmW|nz zj56OwO%rv%S}M(uIzKGVJ_2KZm+|t;S9tQ-BQ$LbaYlA@fO|Ym=g<0m|5p8bze$mi zDdXa@!)CjI(g3Cg?PhCqkJ>&7>Hr-8y22Nq_jvu~7kGNL!7u*&e}sk!sR6$At>1!+ zM}&QUjjw*=34Z7A`WX;0xaslf*Ds)yktm^Q8YmQ56)G87#F=+1FH_7Flk=$Sx3yhseeJkJmU0;WiQ6nI>!Ng*tW zIyfUdDbe|`@vWKqdOdiG!jPqgLy*0Y-U%s)84ahJqbYfegqJ%AqFGs7`(}_41gSok z!=6W}7r|}7>xOD6!fd;jQl!bSvMa?-%%%bXG~y-jAT8OeYb{v)6987f7M~Cgsi+`j z^h1aJP7wCQK=@%d#^_@UKtZs$^XNOg_`x1epKJl@kk!cnI1h0|hHH3B`28bId5;QC7L74&sG)hwgJ5wj7t$Id~ zuFPI_QyGXBfNgqzx*we0PeLPPT%Yqjt@y8)kMSDVFk^zpT$X8KA_WFYR0wA{DYl^m z&RaCJL8njA;wh4Dkb3|;fQz=wsZ_V)&>n0K8#863PO-gc(OtAqQe^BP*|l#xT8yfK zQ-Wr9Y{~{monqXJwpR7~kl%!34Crbr=hE;MB4`b?uxEkjn`098GNJ?kX5TMRa8kUy zd5+J2_-%l9fSYX)F^F1-5GV_X1cUTwX=LC4E&3%%;Q*mPUcY@lD|dO6o$QMkt7w}^ zq-*w_A+7cP95|P zs@Wy{49RL?jU}T?EiT$EI_kj4XsAU)8~oj0{63U=q?YjQzx@Kg@Rz>}MaIRW4!`AF z-+*$D%|(Ns`I&E`-7Ua;>6?Dsuhy}E`<3+4@o%#mx;5>jLSmfEgC+n6Q{fk5o^iJEVn02@UK znnUB#!8A6a(N}iSmN4c!_9p|!hM9B6aIzTJ06#ZorU}f9uInbx)uAf^Oh5r(^zqO% z%|s(%%?V}wZVhl810&{|4=JUIFNgVhSX&=!0PFnzsde?6fX0VS@47#KBaGKkpy6E{ zEV?FnzIU3vzo_RCDZFz|%LPBn;iS}yCyeIW(Lkly)W+`PN zp;f11(XxehfuAjeQNeFn_9$Jk-<7JYqA`5Eh;# z&qPRJx-njzK2LT4hY)BI101HwU=q*h*m>KjJgYjOKmh(2dE3?7yCykWFl!TZXoj%N zS~1SXBg|Y;ajg4L%;pp^G$#2V4ZjLT^dtus8WALk+|0*8a=?MqoGHG%BS2aZC1^N~ zj5la>B>CY}*q1U`TWG(*&9gmrFN}%oGay+o^cfk9ArtmP2SEdM&*%m0(H=|*O?m=b zYXFczWDWwuH5^r8A_)r9Y)GcU9q3r;n~)q#y!-1%X961^G6lOns32=-{sDmd)gadvp={>> zGMM&Y+JUJD@eWycXtxQ8TX2)WoFExUiLtw3{O5n=J4gvg9pjgN;Tf7vK}qo2zV*|% zyxah($4~v_*YW9RpWyY)4L<$s3Xh(2uyCfv&}Rs;2y)(;Ne0X$k|{yOK>C|kcNhl2 zi)XKJd$Y&u*LyH`=C>o=AT>7t5fYn}pO|p5y+C@jK^_3`fW(BRYfKA=)qFCsg8=5n zx$N)#ka2srgJuI`41}Oat=ta!&Y&Ol9VA4}cWo_2LLi`3sP@#SRurfaRQh=2V`COkUn5&r@Z5tm)%5ow%2p=X!cLMf@tQNG=vv;y`p-_jD&O ziJ8R(8lRmr8ZnHQRze+{U?o}HwRduKOnPaJ*YYNjRIF<;T$Ou&cG$GUIBW6+#Ar4 zs7G@3>YRbLN$48F&^yxz0u`o7s{FL9J<$ycfL2uP6+m_=d4ti(BF)Czi4SKQj0UV1 zlYs<;I{?YFCOi}(CtyEZqsL1q-H8Q2^Tm1-n)Xa0aJ8oTL3eyh%BjldWiNV>3bV7%gwn)51(oev7V}Jw( z+dF*CvlHv*0&SHZlru+wXb&O9<>dxl*P8Y>39|O?2ZjO#@{jNzQ!(TUcL*sH@AJ_g z^D}84x-E$CHDYxQG*~meh~I|@-f3RzV8)o$vAIKKuBr5(1SswCgJ<8t?fw-~Q|aWW zIY-RHfc+g~+cf4(63(c|xKBpk29$PeOdX;c|5oSuR2u})0J8k~@%)T&vFj2JUj@}h zAGYuAu(T?jh+S*V06S6O<+E1+DK4&BTcNtHopdZM#(F`g#W)49gyX~YAc+7sbrUy} zvuW=hb&Au~@Oc5KF#5gXP6i}obX!4t0n<23jR6x0;KTq8NSyFwdx@4CfDXi z>sPO_ySu>;fA9>N8@zb-%GO*KTwGk@qP+xjgS2hXv;#J60;dMd2}BJx?FKJiyvDEo z(hu!CXGYgv;`y^@`1zmz1xQZl+6xdGWEs$2+~N2ASAI91Jifrq-3vT^y1|cq^D~$O z*&Xh7J+j0a9MI<;Py?=s2H#&A#Qs``ikyQ7HGmN2LUZ2<^}F-EW(_1*)0U{giM4&J zem3&0>$|4yFi&yq7}$C2dVJmoXgIXT9{YU`zjqD;dMY}@Sz1*mz>7DD0P!xE=ZDVo zV*w)00goOk-OF_1p-zSS=CbU76CJX`e3M@fDZwd?h9!qNd)~N`@@s93BK%wAmnV0Z z9{m?U!-VsHlSCNf-bYP=Vpkg1IG5*x_%!EO3Q%6{e@ zI5C(_1-;r1F(M)MEYX~pU6wcRDv`QOAQ54ZT%1DceB2gMLY9L{GAEyo6SnhI`E7gS zblR?aDzROrHM#SwRqFm1{0^%D2~7r=)Bpw5>N(S9NNVO4`+dgsjX zj!gTxy;KcZ`ANxAGwnN`%JbV5U+x8NDuSmSZrny8)4RThzdUlPbQGfR&|Ia{R5GN2Ao9+tV{qE=Zm0$T40BrtyBw@%2&%SsK$qj%Otc`^bZEx`Z{eOKQ zT}#*x*Z9g;ukbtn-row*Jua_0{QiINcY)hm?E5{QesYCRo_>m6?x4uHy}d>r1U)nI zFgVyTO6u##4s)hI*0ni3&1J8cYeWD`urmBU0OOns5TVXL@{2OqeP7MB80u%|+7EM} zA$Vkp32RB1t!VGl#kcnN5T-*;vM&{Td+{8eVYhpMd z50gw&YnlYDD4-c4A$05k1)URvz>T7FK!8wSrcJCNHaf;R; z*qLTwdj-4wD?EGlIlu!H*#I}B@!W>EPaT2`W=JHgXa;fS+@m{$XMS=x@r)ro1Tt9r zV{T2a2MwW7H>&9vb38cuP^p=?u?Grc;*S0dC^H6Bvf{<_YkczQV^EWz)F0gseiV{v zEm$8~U{McOTm(RBQH0!ip+X>>k#UE+VUH$d>|QahuUo)1K!|+o6Y%+Wo`JX+#6e*W z1i$*#&#>KWp`>6|4=b$r#*cp;pMCZzv==Y~jD+1Q!v3{@Q;RG;UVQ(1NU1@aHrVYm z{)=DyPe8GN^J81aCJ@qDqynx|MBLL zwSx?-utVq)H(%^=Ev5bam4Q35KJ)vDP>+m9%1;$<{}@o7s$2<@9L))G!VYMcmU?L(7WO~L3FAD_b4hH8T;=(TZ zkazp_Oy5PCueo~^OQ#+eSq)Al>&YXoN5P^~tC59xF>&Che)FY9kL};|dFl6la zp$QSvmng`0(P~eydn=f4h)F#}-SJKf3F`=85SwbSNCNRC8Z;2SgYXW(Er?th+*OMw zbEd*M;zI1MZ<|V2RKL$^;-ogqZwJd;Tjw<}Qb~_V)qk@|u$>UMNCN=DLdbG%(ds1< zZLn#sz}Nse{4+SC%nGC4*{{{`b`3Jj>lZ#Bj6E{PY!)`Jy=>53Y{5y9Ss;?3gQ9Jc z*?12YRyNM+`dnj>tB%LKqw(C-@wW|7wdd-{_|7#I<|YsGKCkcB1pa;1VxtYgI4{aA z;g1KOxD7x(M%T3h!5#@0pxk5o6&j}e_^0i?C~Bx^_PF?Il3-6P^2D#itzaHBjn)@FJHa@r)29| z%}Ms_>(@|WC>nscn*W!!H>mvHQ$l31NgY7WKk;MnoR1T$c(ZBaYok>Kn((< z%pzs|Uw(b*lVx-cKn_?mYyEv38c6Tc7ut4vqKP{ohRMshO%_$KkWi2n8}6 zmqsSEW+az~%QRJGkZ%mL$EnU1z^M91tCA1^u1aWxS$N5xW@_&j=Ao{OKVBs28up1t z+7W~q*^#~o4CjnWvA0AV^zph83uZdN>m?Bv%DYKTIOugp96M)PHG6F6wJ5^`1z0aP;}L^tNtF z*2-8)N{>|lI7OyjqH&4 z61VahR2vV+7|S_0$q##Q)F~u`fX~JFS=qQyVsJ9e4b8TOMF4YnKmgYa8G%v)aplJZ zuCZ`nOsq%N){w4$Kafk&i_kj6U3MUYpxA&t%0)(Y#>@w2#(>O6Nhvh5szwA8TOK@b zT*>#?NMXuUns_YSZe6FNn_b0BAIzZsa0n$r#ln~hcsN5MfHXmbKw#&XR!F<|G)qx!RC_DZcSZ((1?*^jEB`L*>5eYt@M+f zLp&kQInI-aUQlV!NCmnpWR(zHBMc7_n{z^bPOz>47Im2hg0Q!XY?xNZHqO}a`O`qP zwP+FmWEik%U*eOm`~Y_^zJnfj==jRO7f}m4S&xJI0iPYs9{u%1ub2E#%w$>>?p?>E+jQlwo z59jnE?JN5pd^rjjU?;4bN2vFf;1t#8Qy&9?ytP}K|jp3-8H`?%3h!0Q>?X^Qh zqpTqBPLx@+6JoQcb@kpH&Y5iYU#oqw&$N8zT&Vw!cTcJJvRd3@B4f%HL=u6Skdhq) zvhs|DN+kDsZtbhv780fjo-?V0HJDRua36jlez;Uq_a9GM^!HnI|D3?TSGki^tyije zO^goBEP8~xI{+Pl939Oh*a_R@?^9MZsl)Z1;P!S8;`WW(`tc-%VzBUlfD=mq2}4=k zkshjX71u5z?>mw2-z+VNw=S_ahk_$B9s8jFiFl5>fKu(TH<*hLqGEaG zp}0oe0RXwGe0@a$_j8e;=mGQ~w`nGAK(a;4TQq5lmM*}W5E5jjbyI^AwF3u1=wVCa zJQXEm2&iFfwhh`XgOXT80F9_6209R?Hp%sO>#8YZA4Ge6kI#cX8ED#7H2`pSOJ{vk zm$!DmE@!R0a*me^YQMDsXaJ}OWDC*`gu(o-$R)V>9FM>DE9fqt6&qQc>xQpY2d~PVJ-KAb&2H~;qoyii=dDqd@vZ~0xmO; z31Qa=I0WNPAoHC<07^K>>Rl+9v^YXGjfBXD07!{8H0S_MaT*)p$G(=6@83b|m=xdg zmmC^ba8iD**(+w!Mb$)tx2e#V1VUpGF4XF%*-c={gk7miNSg+U8ExC3m;kXth#-j} zP9rEA-MfJ~6t_qkj3gtB3IAX zQ%Ayj@_SsKXw11fQDng&jAq5d8R%G=4a0uzYHLmQ1A&h>%VP zN;5|`Y#XaABx0jFBP9mMSu)AOac3tQDe>fR$F$lYk`m>B$kZt7iU)xPN0cc%;Fb4* zM1V+ke{7B-Pa-SSD(XWYRhXMX%t6t*E^|k1t6jAK?lIY1*T$4e zG#3J71Ly|89^hM$JjRd}kH7vLPk-!t=!a|k)NlE{_}Vvr9RKdW^Ote=Dx(W$`LlM^ zQc8%TO^r*6fru=l5RkCfVcGA8(_9i56GWoXRem}y!Lk%%64_i(nrb4NCInY~17j%N zJSa>b1t$Fs8VtgC_3RF;3EQgLJzA|HEi|!BBm17I2Z)i9X|gmOp=%p(V)NbAFfu6!8H4Q1>7=UfnHkU? zntJma!#fKn-ZW56AZ=ayrH{&i#OeOfP!RF$a0=Yk41B$})!=Gz^Q!nC$p)G~@eVyMn#m$42c6Bw7?jG+{h1uNAX@ptL{6q;AwVK$% z#1vu-k2x)Otj78#u(qkrDms0Btue>is&DW9@JBVRg$}*1Z-H}`<~bYLF*~t)Z@{QE zXSAqVN7zb2gsO~CmRiDACRLDFgo#FgMvXW!IdBF^hwIlSk*(*|e4hR&B^3*?8m3R` zn}qEmPOvz`m(8_g6q_!F;I!D#Z&ugVdr%By6!skI~WDPoz|Q>9x{2DUoYTd2Xb`~rh0 zddc|K@Aw(~^ndzA?40ZPSn z_hUr$++TjDSb7xJ^;)(RXC)2v&}sh|7?r>U>vWOM#Fs>kUbqPW7$l4r&t8KY#%7z$ zM@_UfWKu_5ZA{m*mOZ7+m0ACsliuj;P(?osXvED==QLZW^f@ywY7PqHT`*&GG)*Yl zAsBsP6*pH@)w8au0)hKvfyx$dOo}(xLcBy7LYw9C427o-z1QsLG$^AHt^Fs?z zrxNQc8~8!7&ocyyt|PQvgSIoR1x`krGaJ~MWp9H{gv9EOCCvv-Qee{%y4GM(MvE?8 zfYDlgQ-qSU7S7MyHW+eNEG0uC*}#z7`#0 z&7|U?frk0LH+k-ych1$CI0YD-`d*(W$I3ml2h87@^Erp=cl1nt1KRoAJ?apBJ3s4A zJ%3Ie-UTS|CV8A&PBWeqw&7LN0H`H#u^Cffqyk-07Y$Pkb;2OEsX~%zg;TTeHJrE{ zcV^2ivuEP|`k<2^6d+euKG=Q(2M#feDYyHmZB(@DS-u7|-MH(DXwDOhEDwmIV9G8X+rtTyQn+blkcF_FDBqij5A(CCi7$YG{fDC(+f`kr;ngq!R zq}U73Eb1Nh&$y#=m=C*~Ja|+BGDgk!&qN~{&s(K1_*yfEZiWd^ra0;m{!2+7Ql{q z{1`Oj=EV(Kegtk?WHI_GhV(vr+j=_n@>}kQ&T;Secj)Bu05DS1xrEW4FvFZ}(@eWH z#@d~zqMqXc94KnL;L-W-2sS82#-G6BGRralt4>x_A;80TS2@68IMWOS!no(y4>qj_ zb&pIWP|Zl3&^8Ug1a8<(H_X&H4?#=EewTc1nd4#gYpe|H6)(P@v48m#pMK>Lc5;Jm zLugxq=pOxWhkZXFX9j2k=-`eo1>{jKEOe_BQ{y>v8GBl!+H_(qq-E?gHFz)wA5MK= z0~`)9^K1LseL#pq%=bAA`l-C`3oe|>|I~Abey^3YcBY)_gF`gs+WB#+K5ugU(EZwf z$b7!m={_bQr_S4l5Z=x6cu0X@BkoR_DxjChHXHyGhFctH000J~X;N{1Gp4#z2~FcR zWo6Hts_0T(cEJbMfC5MUd0MAPhGWS1{n*&4X+f-K@}}t=RBASmYrpjH69;lVEa=PtgMr+DG@;{5w9Qi_y0ma?!sbL1 zI%*S8kly!emx`1#&*C5qpay8S37c&LYBH3v8A^zPCK0IppbW|Qk+BGZI=%zzgw2|C z=o|^mInt$LbvruOSM#Jr8y3bL40ctGV=wLdOZE?hv**tDt5a)@~%VQH@Lcb ziXjik&f%#}`)gjd?Ux-IbRcOE+66L^pPX7FYqX23T(*2vT??REgSMxPM3Y5I2?v52 ze5uu28O+|7TDQi{Cd!o&WH6_pW(Jlhq2FgbfBqUzKY3(~p=ON!9^Q7(e#byV$tKpz zsP&R{Zs+O>_`+A6ZP6*!}&<(!* zw{P&L|JA>U$4|G|?O)<||K8t@-~Ky)5;u3(`1G?!`1+6iBnI6fOOKu2TGf(Zz#fAP zpah6g34>V!1u@?anLf;YD9rsc)b|0r70>`22N})*6OP?`pFqR8bz6I{Xq;i`|Db+< zO`GA6X5FE7*Vj$~6X$>i$IhU)0Vw90g~uW+z3CqM5PZd2y^sBVn|d@CmrdmAj*#40 z6!T<*F-Beys&xvt3p-knRs^|iN;_AYXgf*c@gr9;)aS< z0af?VZG=iDMMDG?!d-5l+yD{T;72?WWwcDlO~QU~iBw3H2r%g;&)ylGtYN|^tf%)f z*D6h~QPato>tJXo^{{axD2DQ?)$hXrLFY*+ChYn<<7_1d~;}V`nR4o%>@`+u=@TMTxxMfx$Ya|K1m%wsDTD}DB9RY#v+zX z4ghyVJ31FF#1+*UD6~k}xm+d^sG7N$N!%0qTg5BB#iOTJ0A~jqrkW`qBTyWmUMLx? z%CO2cXP97)6*reHkjdxm6j+#iSNE3^m)((J;lni?OKSBFd~GR)elTBM1uU|^^{G+G z_%Lc+jL(wq5n2iLtZB7x3ZtJ@)y@0HC}onVqQ%2mYyeQMaY1H2K{`0_5)CwMIP%cp z|G!^+ZYE*^{GGr0*Fov8BI6c6_G6#oCx7}I=<_pt{l`DS-~V&J8@v1p?FRVj*FOa| zJ+kc4>mE4|7=~%oi1~h2J9C^fyY>Ds-z#d|2`#HZ2%{wcoc?smwYp< zHhVqZLGy57rTFT{sqT?8o>+;WSXJW0>l(K4#~%6k4(<A@MiNo>27 z^bv)3EWiQa#FjgLgn}i)U7DW;bJ}FjkXjfmCK%8_Km$|betjnxoKUI5jVcar;vah= zXYSfIq3;JH0gJ_%NfZktqrRtwEilDzV7~8txa8wd=4v=V>%e*el|4YchZPBr^Y41z z-aqeCAorLjn>YQ6(@-+!eGmrg7Tfd~9X|o*-nuTK)uif69AJJR6#J zUbbeWHlcgef;R&cf~-A=6V%P=M3XTmB<^ffYn-UGF~ERHpUeP+T9Q{wSyXir0aAB+cv7{G|zk3obyhnbAb68yaj{JSuvI42#dUsFdp5GQ7gR#_HOZ-C?d z>2tKONr*u`Ful-k0%Yiz6-!2~WgmkLFLzD2tYx8=Zsh0hw z={&XO({(sCW~b0Ks{X#K^dPE2C+41cXufB?7FUk<_sQ8$Y7~J0jhX|<5;RNQoI*_1 zl$Fd^gPTw^svg!-&}Igd(O|$P_sH1d`F@Kb3z+ucij1peGcl)fRm+bVdZ(EiFG*B^wL?LtQ)XwptOVV4S-t+?IARj z@NJ~7RW>P00G9&Nu{|-`vFHq{7{+BQ7k#6^Xk$LV=NcqMlf;@WaEIs4q;YP*vOz~r zux&m;qnBpSuK=)zQYavg^`gS*`Z-jFP*(OyG6szZSp|v=VF4vUyKT{K805Cd0ryD` zNk0G#<2-V2^5W-mr~wvx;U3c-ddrVCOjfJV{bO=D3bW_9i+}zF#8uBg$`sM8Ud*7H@Sg8k(yh8J_piw zu)BSQFc6-ax9AN%QVL1_b(4LCHf)Epox8YmdTJ(w~W1npZ~HeW}lU$KZEye|@9 z79bqrot(P>l#5N35vj|!N`KqEQ7hC;cg*Rf`g|1Cv4j1&OoKauG|);_t=_{PsY%#0 zPmsvWfgHy|%tIm@r|jh!*l3IB^^4bFy~M@U7K7~FN5!0|4pn}in`NyENVA_G4O9|F zjgV;LR0FmaTv15Y5o?i3{TF>)CS0)6qn{DL#~M+m`CjbpAw|}_3UI}{V~|H0n?lR13<3xDpH@sIrB z-->_YpZ;BVb-M?62a*iN1waEN^^nXH4Fv0>F?4SoKDP!3fN{^8Gq2}pFWd)cn15em zzSqn!=I_rL>{CF)eeT`&xj92Vua`waxnI5F>{-)@I0RB0%KMz>YH;Hic(L|-&hW2Y zJM{jcYjs-FLaeWy0!ogh`|@DtynnVv!{nukl2~iZL!{NtKl1D`Rm!(5_wAmakZli^ z9-yi3Aw7I0A7YH(HqZA`2YnZ_=Ke{^_`;} zf`JKWFVLVf##GIeLJL9Un=?>ol^=zq&gl@FNACS@Sbc7NuZrIv!>AumHWwI~5(q6w zGKynJcF8X(gdC72eh}XgZ@li5iocA~yKK_iVtnly83}-erECFd(9#9Ebb*c^f$|nA z%}BBbV|8N83U744^}dox;>>ZfqS-K-O^dc;fQ{kMTyfmvn+SHq7{uvWSQF7}4zKF7 zdoIbFOJHj0-Q@XMb)?$26f4B9RFc4>=fe_BieLs2^Fs^xGU?3102+N#_Z1MvT}l}Q zfzlU1`Ze_XTL22yJ(L-lfZzVD|1vI~JVmC)bLb5?NZHFCe6E{{xb_<~`4ep0uY>ai z;NZZhUT%!*9JpIg!SKXBduWciuZ0*Fw#QXscDNZzM6@YmN+3=aRYF|Mo zwJGBf&&kFoPwpFNSpSAQ0Ci0PRU{7cX)#JbM;d{NM{Nn;3v4+nT22sEh-NS;D4DrZ zx7lE`y|DSgj91s!(4m2ajqgnZhZQ2W#)%SAiupA%xB&vxjv=jYmu3|8?|ROxJqut0 zF07sN$AEx2Lp^`K{+xe56yf63`wsywyv?<9%8B2Hv>EOTl-%e2sn#AX?ytSKDtuqL z7W1z@r|W0uZJpO;Ufv;%!?_vJsd^o9N_lQNW@>Wm8DIu9oP)@`uXGG#cpvqe7ja)r zgLBfy&w8wL2CD-O;@S*a87hf+WnoB>Q4#?p7S4)8no9%~ zKvDwGph*fAMizk<2TGMB0pvbjK12uHFV(8z4HJ3_HSS<&r-#6g?mRNh1XhA->(Vs< zAczhin4>}?cjt!|PfTUrB$b2x!1Xa1p&iT?Tzf&BNhA-p3TI3RYM~@^gAPy8r6*|U z0*vIY8eD`Ii{Q+iIo89W<2!2)PzJY*&9+6iX<&ihvJ=9igm4YmzmJ{hF=8$HZ!Q^$ zYik7XBp?4<-j8*_dHA-<`buosk<-CD3@Qw4-(Bi1q0L}s$ z#w?eBpI!Fo51!`!R3h?CfMpi;nJ^3)DVYYBv$T~xWmbD9r2i3MdLB)i2%WXK?i37 z#T>GQKa&Gz-kjK|wHkt$s=ETasxh3z8T;W^A@W_c%?=8N=oUk-*zJM4+l0@*_bd3tzwsrwZSYe+`AzJu z?{L|5Ko$r(aLNXtN&_CA;K}C4an(JA4s24^LQux|%z=SPD`%}RUp7azKCDAAn$e8? zl{ghmiYS?=nyHbIzc1C3|m`YLkl9>GO7Fj_c5k##E8qjHw^?U}7{)2N6Ne zxo8nEI}<}Ab6mHdnapfw!kCR^7Dw*^7>lB9wn)4I@e6#Vr)bG8?wY5F_6mx%!nLhR0p=)dB$0;!3oVFgjUNiZpK!rCc z=iD~T%|7Py={{|)^E?F-90CN^v?12sIi_LrHtD{=#IZb@_rc)RowT-4=jqVEJ!HDC zqs5Px5k6tBe^$NUJu~;N`|qO}pEINi4_@Sb+pchJ1S8{;pWg{$&LAC7s6mEQ{UcQi ze;KOv%4l4tcVE=VO~qcF;e&SzDS;9pb;)?r%*c5-(2jLg?{fjmhf7hOJB4f-hzx}W zUGSu9)jBaH-hZ2x$!w~{i8#|~AvWirL_ikTBuE1oa1#mziNz~QVs_1;R(`OYw{BxZ z+fhXDdD79GgQH$U1J*4z^cY?92psC$Vz%N2`i&B31&?jlQ-FyvfgrKzyOp@YYfl) znerRv@1edt`n=$!slsBKn#me7yGaXNf?R=1@byjr955_SxQSdlXjIQHW5wn`vf+e% zzsL3UYiu?fhzwPo7;W3RxrZ^498x}*xz$E2OyaN;486_C{l15~v%)Bo!3e)A!Dt8I z66>P2Tw0xjGX~`J=^ST_{X1{FdU#>Xsr58J3vFGXytAgkG_E^=MH?Bf#~zYW!Y~Z> zY-4+CFkzM_qiGt1HjkM;O;Dhc=Q!WZlyY42b=#(O z6UD+@V$LWxO|!ah){Y(npoq5BeK+^15Sk2!90ShFS!1H-*XH*Q^XgI8;wQ|mV{#ZI&qv6~PKMrk#-%Rf_t&QP8733)I|VZoz8b_CPLmOuQmspINy$No2AMjOM-@h(E|&@uN?!5Qk$Z8s z128<(tD0>m36DaI)x%>-kiYAs5ckj>D)w$W{{E`)&XSRhG^*t)JPJYrQD@A82t)}& z10t6C|DV18YLaBv(M7=zq(`JEk+rIpZgE@8F&n!!^EiKCe)+u5^O%h|_nbc6TlDTF zOQnc#67v9nPN$PDA|q?n+TAG2iU@Z)m6IUw5d`cccb>~r5=TRKEYzdC183*-j||U* z9X-R|zrxRy)k4k08SH?_5$qY=-eI?wGsMC5$X%W~ zA~5BgZBh>K;Qr(M%P`Z<3P*; zltc=teCZ>Nl%WfZBZmvx;quCZ!MF++2!V0`a1g7vqlOs-wC+0JiPYh+?Sd~`a;bm9 zvr!E&dMZka2!@dIHDJ(yuG+?49)-bspR5WUiT{oPq?9?+b-Q6*V;xde=_R|y+1JT@ zn1YA(-$3U({2%}Qf8pJ`{~fQtcQ_mg2nIBYL(l;eYgs@I_vh~AyeZ#F_TE={Tgf|H ziu0Uem|tu0k2Sn9uV2~L^0^#XEANuh6jUn;Mbe@ic2vj#1- zYv~=X{l2EGHEBOb-D}oI!zr|s$K1<5HP7wz`Mro5t!wxB-`Uc8*@}#vqfY;+>D+z6 zoQ_GD1p`?*EC7Uj+P=1!*-{w7Ub;wd3=MBZ@KJ=EUe62X=ht;f1*!Br2uluq2x)hh zyhG<@$BrW-_EDp(sl>xPm8U-`Nj;ngcDoLTgL!5fBMqM;qp#6qF@p(nvI{x%HUZp$ zn9w025Gmev%nW$!Y;Su(JYRjyv^oIjb-X!n+=HXXp004|o?-8=;KC))dvQWX40fC> zukF}}WGnB?S=i#G;~zTq<@E>n9pLv4y9)<)jDQEEol#~fCz>R#z>MY5=$|>^qP$ir zA2q=$7mUi?x^g$m@=D4~CQQ}Nk(OXbndj1E&C4uzhz9DBj!8g5=s8D_P~7(b{Sm(V zQP>y>h(y$BB$NXjL5|gsJWGgj#@t=N;Tq(Co&Shu7aiiWBi!pdApDGYVEp<+#O>Ql zIPCITBi}@nc1M(o)4&`AAS=6KXseDv2aEx2Dn46%IMj=|m$ICJv;qP|Fq{);5YA)Y z4RhA}4!gZi;YT9`4A^y@@c9hvwK3sHe6s|WC@JE*krfzW{nJ%swCgQCRmjOPmB_Mt z-gOQyE-t~$=!5i02oVqWM^TRZUgo;qV>^B~(>0}f%(}j5Pc=j+PMz9fUvo0-WbCeF zfwTFsM23_1YXG5IjCc(N8TF_FNu)|<#%||j-69ANWVK2mHwk?!^Dlqb7EwtWVeG6n zKihSmAGxWVglYht+kw!5e1Pk%@?wR->;&l2dK)-eD$ivZC0J1Mu@FM_nNqoKIcRKs zUs77PD%iDar=~we(Qc({g|w`J3axz4(e756OA3B%T?ED(0CUf;0S&f-40C`(OKxbr zhfiSy(BcWJk4|g>1{U+eFyVhMLissp^wP8cTWNkP8r7k?wO2|?+v@x|wDC71o;{s= zHfqi)RyECZDXmNnJeaQKz~Ueh&@=BW!a4(vZ4WzY*h{$U3dlx07n_K zOg#VsM+eq(+oF&nS#UT8%y}d)*dB2b*n$1U4!g?^=puT4&|O}@lUJeKi(*88n6S&) z=YU?y%M@%U+Q4XyEE+xPPg88uI+`W7{45KixgyS{5>)^U;aDR>WzcLs*c=GVw4t?(=l1|Jm8m4WLtLhJdEUc{o z48}1FQeH|LE_BRFsQ7LQSDwuJ5QZv%I@uW}lJJ*~2p5+-c;Cs~MFe>#N+`^^ssN1y z-PNTI%#0pK$PpEr844O$h{(*cN%T=K;}Wdk0zr-=nKCIrVFaggLFS0ktQHu4Cjf^h zkNs5#4h-%i!ZG0Za0DXI_k&YdW;>?WSP`=IuHL_M*Pf1uv|5!VB%dG5K;H*A_0tg} z5Q4IKVj%g+QEupMe#_W%z5^pDKR4{YRHn@LiSV{ETDRoY)(7gKLhVRYEzQtoz=?xW z7qfRNmg#@Q%^<0pvOn!bbvBE}@-g?3SmCmmsUjJX>UYMS{rS6n|c9 zQz-5LmW6{@j#)%^1XDzGEZ*lCs$lStZ*t&hyU|lh(IT^cGYCr73q7Wx=Ig{B6tB?X zQo~g~Lr0fD=v3&IV=l65$q6%cARv+){o#BUR{o;4&0Z!&JL)6lM~;X-!tELRiygX- z5ZOW_lAIrp0K=!yZkj3XJsj?Fb$JWF{{?{~m@nXH2e=L#J?=jq;cyA>IsjL=|JdPh z=;5e?LkD1o+uH;B9&jX)7l^MAdf8EBW-xlVjx@|(?HvH-KveJzQqaJB9O$zQ1@g2{ zRFO;kOW!@i{3B@g38dik&tFj5xkd!Kox^U|Xm&;qCVK_w$ZPce_&N&_9HlHJgXcGGN%^aQv{>CYf2t-Cil)Q=HFFd-7 z4*TmpLWl@Q2|?QT0mp+_H}xSV1vx_c*%N_S{Id*v)L@h0SW4=ss60FIjNB2#@U)F} z>7RjrmcqR~Q7XoRQXuouqBGf<^}auXh|uji%}d^c0g~Ql`8(}Z5^p8Q-WPL3jB?aO z-rH0fwK_<%WNpp+K+2yygyhR3@qwIbyuQ83XpvD!#~krak2fh;1%~jPQA>((>-uAWhONNH)_eK+{?@U#T7I>o8?Cm~j-k}@oC6uw_Q}#` z>EEDsBx$Kl`DY1kt$DVVR~^V(U$54^a-*S@zC4~aCuiF|^D9waFOE($^N~U;_eL#x;O_vHU0DHzLFKaz5obasiD2U55N!gwZzNU^F)2qrlKOifFpgru;C5oI zz;SfuTg;p#Z`n0bGff~llM5lJ12a+dLfYY!d*12UNhb=e^G<|OmR*LCStFr-p7~@l zVMnO*4$-T?NY;~Fq+kCsXBl}lrxJl3rb7mRY}K9_85LIgdgp(=R*T-;+vFLB{tV9(cZ+<}6Voofo? z*4yG*=}D(rIKyTKse;TB9Z}Vys5`-KN4UJ&fp!7p8GY=NnK{^rA4y`>*~E)_Y2GXI zL)4terc8>p1Do<)e@oh&VFxC}0B1^%DK6qsFI!Co%uDBbV|FkmZK-BG!()Nla3d0P zmf=j4Ie1H8X9<&-(wV(ZP_|P_!)N}#0VGy8)_XDPajgyn4;Od1zPQB4Ti};dfc$b;k?g9oq!AZOK`bJ#iKGa@MMcgX5(Vv;J{`S=`O-Y}LD5BCGm zn*?isobad^#ffHWA`3v!?R589$I5Qkq4PV~jAkdkZPLy&$?mgLUm;+xEvz9@Gx6KFT1cqq);6jTiAq4bSMykIET z4Sd0*0R^PT{b^1or^-_TSgdTaP69wt-j{QL>!sFA3OaQF_f2bs{P&vhkmc_h(2!q0 zH5B8LLbz3NUi!WTyeRWuTgFoT*3^G(JxYs-rM_NU?=^MY(ynq0)t;HF*P42+saNY> z4miw}QQj}xWY?D3&CKP|i5j=J#Iv{0NWXzXS)os3;9e=Wy5fG`WquxS?ELf;W8l-j z-?7kV%BIX`PJfi{iz4WeV^|^2ugt$j zPcSado+U%iBLFObgD4=RJ`#FS@KaMMX$8a)qQos%D%#E{Gf2Z_lI9nZ** zTrp|LTnWI7cm(cl9X`Ab=#S5EeE1f?B|t&_drD*jaSG`{{s6dxMl9HYlvkw53k_e% zGJdF-(E!p>vT45zO*TIu%wmf? znD2}O)44X~*VY%gKZtxyvd40#i#Df@$771-U|?fz-rsdzfpz7j;-o`{rL(q55p$6R zR`uRe`r`J~v|1aQs*o~LQuTS~V@QJs5ct)jY=_bGK~wbRzOoJzkOOV4j9e`|l2 z{t2j5Uq*injV>YP?B*juK1B?$s1%M_ z#rom5g}m%yfY+!Lo(Ub~tgoE&oie3VHy)f%C8v>@hx*(h9S~FaEJv13^KuSM5q*Sh zu1Y%Z;7AlxifRVVt;N-Zpj?2PdxwJ}<($KACrUyLQFjwfD9U^OuZheLg9F7qz#Ygr zc=CwufItsOPCk-wUOKkR#)9n-juu$`R0{~l1ZEG49*#R)x>vaHFG292=pb>=C@F6M zFV0Kbkav|RGP3I~yNVH_S#}o=`wI_r48{RH4~ue5NuQKgIS*N*r8MOjE*JlrkdP}w zEuOfASFTqIPp8@$;h=maM&U>OL&V|U!QmMku5hv2BeH-)V6mu5M;Iuol5z>C&ls>9 zkkh0+CbU57QI3zOVO<9$neEt_BRJO~kVIG5cOCZo9ZVTx7RP+9Gpj3mHy9Wg6QYkv zB?f?CWhuF2$zZ$vnKH@%6MatCyMZvR>vg;v!;xe z*J{6O{ZsoingfVVRl?`e)qs$>=a$OJf3L06+G}eR>sp`B0S!bna_+gc{H1!V$#1EB zbH7{dUh}&ZVI;r5_WAt!oCQQazsvDA0U8z;j@i4Pj<_&~F8S9QnW@a<_d=gSdEQK) zs4sH|W0OUT&#?bewqs4Rc=qRF`llq5^UOlQtPt$vyC_<+Pv*esJ|Y7#ia!R0U#o}L$-qs4B!MXH>rlcu@I+nHk#rNF6^-L&#>P; zL&sO}aVG+QxiM!f*Y zxpDy!AMOr#xDV)@_~Q`eQh-i*P}g_{Kn{-Nh>H2ZAX1+blxzU>xnAp=DgfrF{74)^ zGKoq1Zr>rD&8LW6*TH#T=&C&MELP{Kq`TFW9dF`PoJ3&YF~>=kUYd5?XEfwN8ik?s zb5-{13DR8oo|ZRjw&%YlPtN*k;QR7_va}%yz3Jd&J+L>-K#J(W+0mZSPWzxl1M)t? zQNp5LTwEZ8fDnSt6S1P`y1_?4?k^y3Qwaj*bI1|&n9b16d~S%Zjb%l>6fpAstl|`_ zm!BHQfKfjIGVG{)j)&(4P`}L!IJKMPC6n@aHcO#_$1mzEi|at!nqlc$>w7I-%ZcFD zJWshcSGOfa_tf^D@_g<4T>6%ozI~RU-a9){- zxQ4!D9?VfqxMAkBGws~qWX?N+S7%t_V}QgWK?Tkv9NDnusER?UEa$r&at_~nLg!hr znh1^&A#x`7b5$Vxeb4~P4BC`<`Vfa|dvPktK;#}k53@=b4(F^P7DuJ*L7~Hru5qz{ zj*hN@xPyy2l9?1-&`1FK9vJ3Yai%4CQ(y|8?IcH#CtP0cu)Ej+E+TROXgJ$Vtg-2N z7<0LEw{l0RRLtA;npd>uK!7<#aIV~uGO|K=xBQmcGFQj4j}{dI2p{uqk8n8R;ay_L3t;?a7>hP$B!U7{v9qlr z*#`~%Lp1i0kS7}U$;D}Gy;NN{iGU15BqHqh`!sf?&eNU4IVu6e$Ww1;)BGMMXUUK} zVOOq7GD2ltwBKuMvA~;8sLd7yYEoVS>Xv+|RI-*7tNeZ~5<^QloKrea1q8O-uU&tN zJh$ZA0twdSwI<(FfQD1SgsuIsCS6TlXdPcD^I6KTcD;4KmSZCwS-J->3dpp}dd9ngO6V9FIu87R0Jp7z4%@4xRxQBPfa^ z$c`DFBf2P&DSV7@i10y=PI##4;~==@!qkM}k;MPDcUb}xLis`u06y&=6G0sdl0?7g z#JL+sRW)tb61tnH=UpRg_gT~v?;YIE0Wl<K%(QJQ(oi9v&q#&ILsR#|Y=VcsU2s zE@%i0juMV6rto-T-Ykm8W8e09h=?YWc{*3sq#P`}zs%Y-YT*C?=-}KDksbgX05Bre zrxsPFoQpe9=-}K1_T4k=-4#4v0>Oh~2Xc&L4llJF;E!U5t=ZOLfQllh=l`9L*k2I3 zZV%@?n0oXGQl|0;^HNVVc-kNDKDtp{`j#@C&xL%R*tHs!A+Kt4W-csN4M;edA2-UV z<=3*r*i<$qHJOcB?=_aVQl?D!~go8IKj*5qLLeaGthZ2P~_GqYpaP@tOL`zy!gZ@(;5?= zZqn8A9rxh?GQgteaJ@bzR}8<0&4{@=r#}G95fr`Fzux~_K%N@a_+kk>l-Fx@7{Eyd zsTvk#b3AiNxz3eIquf_dtsYCtYo5p4bEg0gOYN?;w_GE(fETSktM%1VJ!_w>_p`SC ztvp*6iZ!5MNy*QhqPNCztL?RX*WPQT9Y>v5(6ZJn5fkRWamV8n`WzP3mTwfdUKw<_hd*Grl zh=MunOn1)9v5FWWrq>MgrpQ?BhCMN>wDFjh(;3&RxUN z641 zKu3(Mrp-tu)waOb1O%IEa{_&BHzH3n2S}`S>{ymrKHo|s0EdOZoYu8gXJBae;Mamv zUM(R%)k)dM?d<~|?jsyJFhzL37gf;_$jR{qs5v`F0T*{Wf^z^R08YXV>DZ0( zM{__I!f^=UIaErcyyTH9M=x;EdFte%I@UKm$3 z*`=FRu6Xw6O4`bpw=?ojq0mp6dQsC!k%Y;<#Ahi7RQfw_Yi(gI2lkp`Mu{qUmR+^< z4$IrMVe?x62UJe_;(n!BTgUHW-_UsMWqUm7KC6R7g8&=@F0%d+97hmG_^5swAl3{% z%JB&`2v+L{r)S*7F(0crDtM={-dUaMk;;AMJZi8WFkpchaO~ltN8lh?k{ahLBaDuK z5XJeVBMogC5I`XEkdT3LHd_2ah^0aD@ez@Hfe|?nT#9EOqV8xqCqN1aF@?}%@x5T# zWRV4&3SJDTr+G7(wm#RL9X&(7+j|(+6P*AJOoY(e@ewzEcGV;+g|#)4#KxaVqDwn= z8s}Ww!6{z_e7FNhMgTD(!XfYhh)0mqux%=hN;EhEq64BsM;$tMiHq(fI^KiO0l@>T zA=#LdVwl>P&jpscP@cvjN{F_Av`I}Y=j}Pbbq>1=k8V$ZGf+X_L1a-}Nt8yth1~kd zfHbjCk)u7%4ews=557i35SRQ0!F>2_?V1x7N~?yJ6G$s>e2ufR#>bPGt=@UvIQ@>g z8$T$}`FZxJ_iQZL=TL70C}JG^ut>c)J!gWH0UjX)9Qq@6U5D<%%iPrCQy2SA)OM0F z*?C2oh#+xB0p}tDf`-I2aPK&Pfms+r2~8?dMA$-C+IvKTnZN-O%|hRs5dou3*KyzGn|?P|0CHj~(XWMSS<$2wYievRLO>3yqKG@xgcBaM5Tvj;5C2?kb5YGaMu z6z7&=s;Mg1Dl%XrrSZ@FuFX%WPEDR12Bxhw;|NXydJjFK&M=`-SRj5&;25wl($OnF z5K!OdL5u;O0%8ofKd8To%WIJ4BQ@2d6l^o!_(I_@GVcI=8RRUYie1ylAWYw|+l;mXBwzjR6=azR@w>X|3pZ2{Q=^rO3`AZaIS&4EIPM>K_ z?AHCKpjBmz`fmQdr1=dL-xDaWb{X@&yuY3n1d7Qx*_hwc4~cbD)}tc8m2`Gf>`v?F!If_6e^$wB63p}awA8We;9M(n= zn9Mnt01JpfBtq{1B;O8Uq=adY!F7Z#0`L<1Tzo?a5J4a!l*@?-k^Wumv9zhfZo>Iq+ zh#npG=;#VNT%*G!e7q>;QAomcYM1^Pfhol43Z=Fvlori#q>SC30?0Fb=dimFU?8H; z%qmUMa-w`XF=>YrrIh1fo(~|6N#}AS!Q330G9@0P>qEbf(+iN*-VMvIBS5bQbWW9Ep%;W+Zxe>n7T zj{nnQe=Yk zI;AfYm}2(}d1dq~=k3{C89h>)w=+P4DqBxazlFTAp-e7&Uf+G0A7{rPfQis)qoK@u zobQr=q3Cs)N3A*4tQcc7na3at%Q!C}5dF;fVFUnO>%0fYAbgm_FG*C;9qbS|f+)hF zNAfcQIYJcT5&f|Tv8=cK;SP>_Fc`-^0M6rLw};<#1ux6nPDP*4G@Z`9ynC4e7wu?} z$SNta5DK1O_Tmb;y##SA2@ zBTLkx4{N~qQvT)lIm?9B{aV^J0Ki<-kn&!6jAd=P<+V8leyMFsKt!$XHm+K2ZRJzj z=qShCZ{Q4a+|X6}{3iew{#xm=efJbS|JU?Bm)mlFkZjdrnteBAkXaR2j`~MX4G=&~ z{u{tCg|U?1obD&%R3=b#=osR&As*me09=nqgx~^#@8QV7vqQ%O^Z*k9-igaSW_Txp zJz^BA00%?_31vq+_@l?ZcZke*@Ur>Mf#KkB?`_XWlvhLtI}u9EaO9*e2nY;B-FX)I z&*>&olsZ9n$Q)Q=*t2#I0C()g@f!;x^`3Z`p3_m)sBX7i+D9rE`fT@@^tbKi zGNbEuU_Q#xibo3ip9Y{U>lm}^qTqS#0E&ok0QVpSL^ycv;CP45J;UBzgW?6acWUYI z7|IlO7Vv?bf&|=4q?68Jf6>A1NWcdReFs**3&W1SDavv>Xz;x-2o#ovMhkUah_ZZZ zrr07z5BZ1m+;9wM>Qpj!f;t8m#+r^nb3eca1wwJfPj?;eqT#gN-dJ$G`Q2ciCMos9hk|E;8HyQd}O!|liE3$#ykRGYJ@P;i6prZod*w9_hldA*_!hnsOTb=_fq@+;iX6dW$}^f< ziB~A{Gk4sjW^vW%x%#Ci7=q`V!@tF*XsuiTlPE|=#*2-%d|wL$v_dTA*X(y$za`+o zelHz?sD*YcKi7aPWgC|6ZM9(7+UIN9w$}1uF8t*j=+P<Wdv+6YXpKEmmrcbl@vHdq>wYnB4ALIbL%du zRRaTF!&=IYzC&~YM`9d02XX|*1da}lI{_`!L^-fH*K;HSl*si2pp!bW?5*^kaNGgz z;VAM}CuYw(mR(sfe)b^hz>uR2jx^$SWN?g#&Y>qDQqFzmIH-RMI8~~~&cV(xtCxkK zHKoiylUbTWoF+;~$U?LS=m78m9vvL6;N2A*_MmM{#43tao17ITgAn^^!Q|6HT1@UXrb%-(IaCiWb00owpGY72N zFLqBXAz}g%q@EHoR{F-J=cK--Oc6pKo@AYy6L`0z`Rk=q_(hS!LVtY<`DIdvN|nx4 zkM;S`;LOsF4kVyqm>&R=m0Uhg%$kgxM*ML{06lsfaex0FeLMgF9PbfB2jV>t9r}B9 z=qt8)VArFMdeo5&kY@q+BEh*%ju*1=!ore6*kJgDd0zWZLQKi_qis|E#++~^W6EJns!US)HYX` ze}kwKe=Q`!>xx7T8gS_I(zyj61}0XT6Xy9lk+sgDz&{0I{n&a}WAtf;)_j06y85g_* z2Z!Dff+O@`bdWrDfziR?&NE^sWqPyl1R>f{2zmgK2eAi3ED}Hga10j+I|eRe1d#*D zSqv4>q+fghc2R^TSo947#AH*tEOrh-{Zh!0eX(SS%;=oQ(UC-}peT_g1j#UURje({ zdN($ly=k4m0p3gWjN`Ev$?=J(E(FbUrKPbt#2c}lISqdqJ9uJ%_aGeL{S^oo5=DYL zI2H>NM{*SAF~n9ju{!%?I2W~Ei>k&V<+W#?h?pZljr%BiJ^afTPjUx%lqf&O=}f3X8t_7XeBMK@$3NdNJkEs z<&PNT4EPoh&M9yX1VkL+93zAtcMl&B=>Wz7KfV1kBHx1P4j=A*!m+;vGq9s)xY&Jx zXS*-axtG}cYjkc8jvXBPBs>u9VB?UC?~wSqamtS(v--Umzym72}^5XrfS0~~I>19x&f!}SDq z0hi&37ySW_dqmH0fpJBIgNt}zfUrm8hl03h;Zyh`Q&^& z3l9s?!L#_6Z~#ahLk9703GYabe-OY5LIh@oYcyo0?d~h6Bb!t%y(1Cm?0p7!?+|)Z zzWk$hbIwVN{2W8y$^QgUCsqm!INHP0H8^$vcktRTq=GZUl=gM}w_FgPB3qS7GPFS5jwvp0j`vWWa;ms#-E4rJA4kyE)92B z{UmX_Z|9WQ@>;H-&jF98f(&yTQETMnwX*cwJXyoP)_^N>AZ@MuTHEvTYP;QY^{&0& zB?plCy{%wFEB`#dE%#0VD{6VpeYW~^EdWt#`&@snX3SlWm#Fm{?gI*$hsZg-6PuEz(uMMnWXI`I$f0*=gJlBg7L zJ5UciKR)0^=mEZmcYu!p*A#K-B6i$k7YW^wu;&MS?;^ep_qggmfane{4)=)NHU1y| zYy4Y(g&lgJBkXnzP_IWdI`lB5UVT+F1GZr#nlFxEfI~X+z}j!Dq3$Hgh7%tWnPMp+ zL8BVEiju@+M>9n5itNOxC6ksf&x=F*AR~didQZ2KMd{pi4iAS<;q>i{L_ogNNo*#; zdW{K@JUa3iob5$`dRRn`WI{YcBWz8(&WJRGH6&Y1n*}-=yG~-M6C^1`wHYEDjR~FZ<*C#LK%_DM%Yw+cQ{BjJ-Y& zbs7uD$D??JxAVCnh^P3j+b8RTp)OWN2T5+%Jg%;u>G2&-77V$y!~h7m38+yFhFKc# zGGg>OdFLFfGQ~9AR8Vd?M*A&jS!jQH`DGn_4t1#0(1+X{FGiokd$&3?$07BIy8{Rj z$8eAP`&$t8i1C28?|uQfh`=7#$jqOPqm^gEx&4ct^saa*MRYOuJPLvxL9h-lJZ*X&sH1l zXx>u3OZnUPQ-OxZfD&sym!2=LwXQE&@@)kg@@pfYVQIi^nViOKem6>J@q1}$5(Vz5 z+g5wwTeEojMfRM`acemnbEsUK>!13B8~>hvVhI#jLt~^-y`j(L$-`@R3^8w1hf)G2 zsAU4g|AHg&wV-DQ;36c9WwKbXaE0bHQo#!boF1a+h|$F(e1C^a+@j+MiZ9?}#B+DV z6$N-v`*EZWF*5%5aEEWhEqVm((c}7fhri(--yILQIox5#5fQ*X_PFv;-wXkL?6F70 zAL9%BKX=dIxsxDU+^O<@K!j88@!BDj1)7shVNs%p&;P zJ5wUTh#bVLzeaWtcZ@9kP1|GhnC}k>W$Hj3u)FB6-+L`F0L0)B;k*~H11x}pKuF>X zlI&PPFt{fvDhDXa9i18E*RCX=K{}g zZ;6)Hty2_(B|4>ETk|}JW$9DUsd56tgx?ji+Qz;(2eB~tYMJHOb>#5j;V<~%hyMdz z2lV|BA3nYVs0SmUKR$q+ID;goRsnZ~LE@BTk))8ZXXU+sJ@%a!VgY}4q14(2H);yTR zVu74Ga1@7tk%1VTI>n+SIEqrHAr3{_g@;7ZfSy(NtbPGVokFttywF`O0=#pG2E;Nc zc){v7K+nGt!FL|%9BsKVQeto)}pStPs``#JCHyD$_$by}K-d7foh=N8aV0tk9$ zz9=^oP6aQP>VFE*(5hQU*=||6Q(DgIr()`#f)*#|^nn$bo`2_JOpovHM=R_#$82S_ zX8NJVa83m(=JOa-nl>$?#mn_tD51Dt&%dlkxiHk*LH57SS?l&>-8hsAC<77e1qN|| ziww`=Ex-o}(6D*mI8^2l4d~BRbLY;5Z1t5ykl8kLj^abX zcSm^cz`O^e2dh@;oGAN@AR#ZA#193D7$fGUQG^XYS&d2eS0ZUU*G%d(ou zcR3bB7EuBOFeN}QKbnvWapkT}ZZ2xiPALo_tl9s~x^jf_>(=u!I zZQY;daUPlJa|G^}Y0a8EPp;9Ioa@wE`C_FnYQ0nIv(}g<^4a&KNe?_@PDWC`=e_9i zf=QD2NznC!qcJY^3qu&4sOVWR3N~*7WBDw@w8d=49`=`p)t2IXz&`>S9g)Eh~t%?HE}XHNryH@~o|k z`Sl$5mX@T^t|kmDO=<-k7zK^ z`7YI^>vo7S;$pwY{lfv}35rwAjz1S-(mLBh&DMiCna~>3c$7C5L#cqdgFFSmZ z`=or7f(6<?Fw|R^5Zr@vaP-_i71t{41{9N5012kBke-%K((sTNH98wg6$Qn45C2o0)0ih4z$XR=VLmzO2hF}CuK!(wKKatM4dvYoC~2blnTQzW6@_haEcCA)*J!eBUU~<>h{F%~xv!Rno*5 z!BLNjMs?PVpiLgj6HDcnO6Qhww`EK{1vPY{eXf13_Px~yb7hvi&aRh7MY<7xT6phkhQ(In-rr1dE*bMDsK)0C z5De;PJl8_^W zsG$j&(IKJ(gSm$%(omHad)%w#fYm{SD|SPDe3ApBD)a)Qa3A2D*f~UfZ{nLll}`YS zh`{DsKw9D1fn!7;dXV!7Z06{|LkI#kP>%=+`x#iS0ffK+yc53?M6z81+>Wuo?BK{FQcOyR_zfYDqcj(CrL*KoxjzL15zM;47SH4HD1e3@aj?7q zq>zwZH{kWTpMw}4G*n>IBT9+ zo37TbJdeM2fZ-H5V#)gHciCsG;{omQY}eK(qIsGnK%rKKrLPI<2EAA7x$=DyfPg-M z(iSDBT^~UXoOAHzCx#fuqePyGK{gXo8wns*McxCE9`M8a|1b9bC2n?q5A=YGgkTnd z)pC;oMzv02-7$V=W}{fXM~)FOsxxE`0?;GKd72FllIMWeCHfqc=cT!OO8U7pOF;7} zykboq&Pg>3hVpl-PFujJ8rU#*yFT81-MPwEjq{p=xu2Xq~2GXbAr{&1W5hsifid?YM?1lu7Kj!0DI_l3JFw>uO2L zv&w~LxMf%8v8H0lzr8uNi%7l{92lM>Jk*9j+nYcJ9zX+$CNV^%pr|I1ntrGVhUe_E zf)B&{$=jyi3o!!#q7w&*<}-%W9zu5W#h=8`e#t*V0F)gfI${Kla8V)#FtOqr@?2zA z1vCIe;0#y+kwz{6SdT+62$2|w;(*d?=ky`y5f9r#m$4p#h)dD(;HZWqnvQ~iX{-(q zNdX@a$a_R+B!tX-Hk&cphn&9G7W~f@$ebgySRoRh7cl}I)cF}CLIt2b;(^_6585+m z7ZE})_nb?XGa{h!Xs#QGKr|dv2q7e3!GMB%Cms;Re!t(3gaxxsD20&{6vzdO@?Dj? zB6&K?YmO(>7W1;4Tyd%a8Z`kZ?*ju%N`awfRZs&J)>s~tZQ9B!s|wx1PV-i30WsF@ z&nax?=SKs-`Yow^KjmDss4Q!!&10u!jOOr((Z6yKfQd&Dh$LSOP(G`TL1c8h4$q%I z!_~7ZT-&I@A8&E{@eU7n_lS|)qAvZ>dvRx3$;T)URBF%e91=C)e_0h)a$u=dS1XYU^mZcIRo! zxl#Kp^X+J)Cp~`9o@v;R^K2=IkD~cZek-AUNg-dV*E#B4I{I3+Q>mB9TzPj`SH~)2 zm;oBrfK6qRG-2Xg#*I3pM~d`C8I!J@8F#IInOraA7N=3F(oqO7h*&KdhOm}kQOqs6 zM7kFBxJ4982S*GS^yMj#fEbf`qdbe$p#o0uP&S~EGR0|PwapAObQk{;aX8ArkT8-2 z2cigy5_S^FSd#=SAWA+UoWc?w>iChReqt3cc&`>=jMOAwuZyz)^iiP#EsI#3^d&0? z0zw1=GniZg79x8vd+7&q+FBEq>^O!T$&ei#X}?p)k_nVcz)HC*WTND{@sftgXQ%)X zAn!f{qF8NCh!{bml30H;LZ5K*##$QAvX(p>{@^L)$2xVA%I0tvZNo0m}n2>DTr+M-|PQ&KA~`kYc< zQ?~PKYXE@O4p5nAZf!EBK(^}KqE`KCd6w_^_WwfuL@l5wfr zrF$)KX6^H>I&@nWf^!V%rNPs9>g?ryj?@xR%QT-GwcqLbx^8aQWFg=7c)d)*no-`G zQ0JmW0oi_9RV~V&9iO0lu~#buHvbC%G3lQ;Yb0ax#TiWge|^YJIYnmV~e}zf<_=mS@%|9&5`i6_C$yO+F8O9{i$3#)r## z*4|G!*2cSvz*YfbJ1=c1H)|AP2QW0$G6ZbkY`#O*v;D;$Uw-`tuU_4Nh`}7N-|umG z^$Zsmdqf5v9*%f;xW~i80sG56zPkDfS69#Qm%sc4w;w+W$juRq01CoSsbjo9`~{bH zukrHY?}6wib$L{FIG4Oq8-H{6)?BNB_vQOsvlh&yX^oE-FtVn9?D;i* zBl5r6{kdzUEKva(ep{+``evQ;^IYg3Td$`OzP2)v=8p7+I;;^or#>2L8J~P}KHC%D z(^Cn@Yx5MdYC~019ehJ zDx@XljZ`^gNVrVR%5i`rN$-i^34>Eg8jegr1rZU!hEK}9X;Z2a97Kt9An}W!=Q_pY z0ziz2z3qf*yb98&7$i;`qZ^`I>;QyxY$5ZNz~Z;TOJFZZcuNyfA-nQqd-L+F8uPhR|W7H+SwBLPZ3gnD@yOv1Wg7ai7{;F2|MQzSsZnCorHLF zo)9>IIi#a7#N%CiEV_+_3H-OQxh`IV(x>8uL3Ew3V+3dA`Z5CBLGf!*#zs#>y*BWTF zRHwX8KGo5QCBSFv-2Yra$E`GdPj$+v$%dlF6!BeObsEw|}An-5(kzq6WF%Bu&Io1=1aZG3!Hp67qRi^#5MJ!OJn z;+m4L8j@p{Fp)4{3{XXmMZJxBM8Z4(upFlVi*j$k1DG``g+3nzD3FK^0!(iGo;D%Fw5deX~x+x+0BdJm?(HsV)l+q4~R7#nl-G>9Q!w!V& z_<#c#x8&it$F2{E=;R27(=t{0VdgZoh#Zda>CJO`ALg@x5Tf*KfLJb=3T30dheOc! zL2zQ-0C8$*br!!FlCM`+msXyn9lYfbiBre{wvb~4abY1|TBwJ`#I8tBQr36^kA%PE zWKo}=L^{b*f&q3ic%K2){oP7mwz2lRMrD~Lv9M$_OAF%Z@3|byPlf7$1 zFv-ye(cy;zqe~Do!xN$N9?p5Zc>Ww; zzxfhB{O}|G{HH$y@c8=MukhzT`~~;-cPTtGY^+g0kDqY+@FQOO7rJ@jK)+5GPMp^^-)|B8F2Mf%SueTJs7I@iGB5T)b ze0(0TZC_uMCl~0{=a-(F0MtM$zXEZ~;OG)>UQ^Gd{#;VH=dQKxmuqIZ_AF6t4Qr*z z$K>1?Xw`8J0Bo(NOL>;{t35liXn3?@jAe!I^TG56s&(j^zBosJ%@ zjqztx2y{!CJV`Iqip?&b3;kq1r!aULgB{<*r0t`2OQtHGL_KyOeiyu2DG&r`KnUvO zP+bzT_zZ|qc8*~V5ecGdM+P~x3dx6IQeK!-M@Ln-nF;2w(S{;JeH1uKmI2;5Q0KuK;u8Rz8~Z{~q)W?WfJm(i zf-ca~pA4&qf&t0*g^H!bL!GVDQd{bC(5}bGsSmPLqfb$Q>uW*_5Gc#8?GEH1NNpFP zthYI?thKA8IUyp?vuw|r=gQ~D?P8Q*^K@+0l)bIs{=fy6_;0P>PhGFK^p8+&T%D7i zV#S@-b92on>sF0^fcA4gB8Y`uR2f@gM&IuWoJth;!ZKAcz2p0ggBYY`DDG<8QwI7FU-S z_#gk{e}J6BH{ZU-zy9G*2)(UNS}$URc)(r%7BBWud^iQD(_Ts|R1TUH9JT0&)_cji zjnzj32OuhFt5zM3rU1eykBU5>0}Q~F7uGD5a?qi)@XGU8Qr=2Mv9?~6(FpQut$fcx z=gQ}?C<-g1IB_9v9G-W%=^sQ&h^yM>oy_WK*wY&CA3y`US9<_Sr zn?2q6U*3W+bmr35(i+rrZThFELoLn7T>J^koIbSm`K@3_E&Vz2*q%nxZGV340=MS= zWRm9hvitd`2SK(tWRYhJNeKWXM-#mB$$x=&ggrd=5!i8$E)aGMT$00%7(Pl=iY`QS z5pWdXAjbaEVB}N_M15sLUw{1-x~{{^moM>u`fvY?XV0z* zKEdM;7GRf%;7F{+zWnlQ^nJkp{Gb05&!0cX>zf<=_~WmDb7>G5kH5SBfaApnc=rnA z)!8wOuam456-6YW9T>ofHV>3CLx|#xxmUN#%tJV1DlOX9@zNHx6s#IRQ9cLE0}eGs zvzD%wzd0bTQR{jQuxLHIc_VD5?3w~SM@zuMr=+DZw8qk)^-OC#&8@*pY4W_w{O5p! zCHdTB%Lr`)M?(LakCy{@RzF zTt2#l6Z4-FqFcZtSk-4ao9qCX)O1}Lh4>?oBMBVk=)%r%=is7R9Yl5Tpx-Te6s!85>R3@`QpCkUGanNHh=T&jEC7QY6%ZGI zQciS(YXx>J5i@#9ig{FBoz+T!09=M1mugmjbUS=-*Ld(du?Qe9p*wy1y;^uq>u+EH zJw__2-7JTM-E`BuQ=hT4XWTz_lmo+YlvImpA+%%M)PW zB<&7^14XiPAb@;#A<59Bpc1J-+J_zv1MpBC`;+dO9ybVKsjbr}53{MWg-@&*7%^hB zIJN}d7>9Y6=hX&4>IyDU2Oi3Wx+ZM4gukTPyJq~0H@~@!xrvsWx#gN0jTu?GfVhvW1*!tmaa2=+OJ2KVJy7HAIgeT5Gc8{`1#CiPS2Ic*0o|y`n=52YG!R2Mm6~(kH*vj;Ft1S)1KB?YqcpKqfcPb@Oau< zr<#&KO*1zMrq{|bP@5C;)m)xLwNnrIrB#5*q+-RuS?tPMUoAZ|d1A4QO z=K6X`=*~aqCTc6c+=&VRz!AI?#jjMtI^V%_5bJYhIFjfMva7CM_Mu8T7|umm{v!lL zQ1AS?)}Vt(J?TtW=X+ndD(F%|6o+1kKNTuW{0QKtr5) z-|1K#A~O&X0$BQlpq3V#GLI^t4y8%Dbj>-a2H)7#l0J#qJSamp8nwQ+gp-=WT`JkO zJID;=z5!}=7@i&HmzP!MUkar8;#&eLWm&a0j;gDA%M(0aHu_)Bfk0e8@&7VSN#0*FSvR25_cbe$PEz$Vx<>k)Rtp;3gp;n*G{aynKY^7Ent@gD*rnPHidA$rzS;{u$ zduhF+Jna^LOtm`B9SK?kqO{tSKl|iSCr(+QAG@fZ^7vAjb)X`DW-}78SkG1cuvo^L z#lIY==g6~-lCF9F@nF+(`Wn++llPpUn=cCG1b0rH-jxc-Znv8V#HRSAXUY6BXru)I zb~+L)RtPBs6aZ3d1@WN}Q^-okw)t+J0RSM#&VN#F6-WSsgVxF9{G@lXICGrqV-g<) z&eT=W@T9*X_eA*NL2pf(cqXu!($9mRga8R6**lLw1djkuJsgf8a`1?t7{F1yZBK@@ z%8rt456-LxhQ-IK#Uq6~!wvMe8yq?Ea4Q{9FvZr!Sq9L!pu&Q(LTuP8jD?7b>*D7@{=P+RzdXOCh7iV`7Z(-jC*e zjY>YUMj&em7jpt+nRbrWfIn-V-TK^?vTB0U)6?K!^l8g|Y`)_;zD5x^2c09&Q$eG7 zn#rpo`!!)Ut6Ng}SJp90E=MK;0teW6LC)Ch)m4YrU%ZAR!gt?&hu3f3pbvd2dw!nK z=raWKjT3OO-{Eim=6l?Jyv4KU*SNUe<8XVxn0@y6aQG3&cqf)@aabRj+^{TG>tMa+ znrV`(p?wge9-q)-8BAIZhoMR{yfGguB@ZtZyB5%pN9oDeoKnGCisWOycJe%1`K(D- zw$GlO11fSwum-4Dp0#!26fh-!e$BNld7Q#awt^RVyKA68?HS8=37~ik|H|`y%)7Bo z&N-lDZG9{sqkLXI8faKn(0{AN>bz*!C~Cq=nphK*FLHB^Q#$9ueNK7`py2TU)D#q0 z1AvsuLQV1Lx^A*4bX_-D09q#4HKw2H#}FkGB+8tcQ!*>q5FwxeoArPyn9$f%X-}Sk zNa~zXk4We_iPUmtwRo5^o&0YEIAm>MRay;`ASOhL3M|M`3p+L;M+ZbCV<$T`j?8a? z94#OsG4q7o8`=^*8?aLy{{|HZY1P*z3vVE0y&DA+*8Uy-Y3VDhF#IP|z zoGXQae32``zfu9HEwVt}$NWLI!whI#-=f68I;wU72b6Z(VlkOxTV|GQ#LS5t0+fo12%|?K<4Nyuo+heTNu& zL=G9;J;RqWz(VrPcECXr7W35?_;`1Z=g+S3^X(yffWeN@^F0C|hc=tgq3f0jzI7mB z+$*hmGQ>wi-}mT`A+^kWGZ0NdgFL^Scej+Nl3E}^>0igF=0BmlR?3$psL{&Dp3UzW zP*LXJ?8A!AQ_Ev+9+e7n4aisnBGk%Q%4dzvR;F1xUbhCMuhp{#7}S2B3j}Qe6V7%-QA&S*jYQzDqgeI2ZATv1@Z7;u}<(F%;H(wd-IXNax^1n{xnwV z?VS@TkR*r$ECd?CqBcZ>K@ylW@JkXfE9%&?e#n{ul1L^=V&tLS7Uq!1WdJ}$sG+(N zK1$P|CALrkduai*)~D-!RF*Bud1JN9SM#!SgQex%%R!2{bS1E{R;b)szo(>A1gxdH zuNB50b6KS+WNe$pSsp%3VTYyz{SN5 zFJHbu*LC>*`@g|{zegXA35Y9|_-eIkmv!CfI*%{E{t`d^@++>cpTYTe0ytZLIL7gK zj}NyW@%6KzOaVsxBy*Ds=K6C;GxP+Q5n@0HJwohZ$5)tS-Exy%ylHz%aJQ9iT#t21 zWUg4%@+t3^b*lA2jkmOv`?Ah?9a^$<3BuGix5|8LYe{XrZYia$-(}rfX_jc~GfU}P z_1wBCaBf;#?-p=SqcvbgYx8EQPGx^>at8USI(j;gCn;9svTnh849(|J#z#IS&&H~- zDL)i>Jbr;bw?Lg!ZNjW6W6MI~y-!G=nY)=qLY~eX;u&MM37JpM65T5onR2l!89@y_ zWZ3Ec9DI<)RUACVq`(sZN)aa%lmH9BV1fq^fJL-inTIl>UNeA!RSmTraRnzTFQEQj ztbGtY)J1VPB^Ckdn?c8=0}$Ah-Ut^BfKVkB1a=O#-(yoku6XRC!v*!|T!fDv#CA+V zz7u+k)qZ4{ODCV8PQZ|2cFXq}348AV1-&tGJ z*kuOUF(u|2VWBE(!Ip@!jC@1{RI-E0WgAx3ATASmFOX z4D>)?`yQUoGCbD!25b>#KD=4srKF^kZ3L>PV3t1=342{1E8u0{T#7Kw?ytsJ* zzuV!9*I(e(s~d!H)V0Z0g42{W8?rG1&z?QU_4O6@7aexH9S-*oiTMvF>jEM(Iwpxy zi5aj5d)1_S(1^~<*;?W@nMhFK4JC3I<4Hzr@SKXa+2#Z^I87tsfB+4wI-uOM-F-Rh zpA?-;!eEwT4FXCSxG*T?oGda#_@ktB%2*8{0>rwn!O2OW)k7RRMU5E2*@g|Phys`r zD2lfD7gUdsQeR_^Oo&mVO1L|~b%@l7pyMJO2RIgGI&f{#f|WMR5ls>?fG`6nF)(E3 zRp=6=0o|V9yhy$rBgi@U&Zi?Ng9Ebxf{D=%e-M~s0$aTENKr-rc=K@(GY~+n9H5L{ zddH>b3|MkBn9U_W4TdN+rdGc5KXFnD09-#BA!C?QKbaDqkL{!=n}Qt~p1guxNT7uy z8ZUYjbu=Hq0tgT_enpcH)O1dv)< z1BZsstX^&5V)#l9NjX8y5^rgpL#3cPUpV#tw9M`6XYS{vSqjg~QCl}T>h+wLEtcC> zs{@U{bG?6uvNHK6*S%)|sIt74pP1pH+8Unau;v{Wer4p5b?<&y`-T7XQNUKR=#siF z`_AF{%?-MXJ-+(pE08mVnshC2l@jO2K@KtivgGggm$f9F7hGEFOO>)z5c(>|X911&jpPLXfP(fRkSV8>FL8t-4T9?X?lYs-?N z+XVL?L38ab`*W_Z=D>*B@1?c1c5eyjsI_CMjazBWSOI`;Ei(jU_pU~gzbYO@lF8sX z3kdZz%I|iXQ_xS$aq?g}`L;eke|_oR8ru4NO~K9`?bJ}Q9NjIQDw=SeA9a}Xyqllt zuC-wzY|pfHO@Gf##`(U}eu66fNv2>04FnuWN?Hs$zetsMRiI*2-ICS%0V)`n0%vXI z;UK6f$joV{!Bnjn1;~iH=rc!f2omLi%`{(~BdKuDkYf#|WI)4q%030g!<tUqQJ*wF$%2^Y7G$~w1%)N@hNbt(dE zOL(1J%f?d6Ddrlg2~~3f@qf{nMsMYj>-Cvx@taah;BKYO>2n-sX^Vh4t)Y2$a|EuR zKS$>~yn6KoZf;&7M)Tt^*PbcxGP>JPYF@l}f&Ffei~Sy6g9$}ukY_|h+#Y_$Lwt`* zf0g73bNS}bXXRQPrW`Q!3Pc0|y{yAgu0I?j`fv;HKj0y}$3;A%j{;JF4aN`@W-ZWA zwzC8o@^;tO))sH7@$eRCkl(M#kP}cgjq|Rf%fsD< zQWb~YKYr|4`-)Ir(o)FA$12WNlSk+92^9D_#&T+1mXN~MfL$|z?D^9F0RUWFT%^IB zPnvvZwWe_8lzaBADLZ+6OKXJ^0GaEDrLb%@ONiQYZB&wzra)kI0EzTRswfdd!2t&J zH>YC31;Brodpgem=FN;S}2Ki1PH{k ztKz+f?;IixX6)Vz(7=$kkR!nH;0s}JIHCB39z#&Dr?jeREwHu4q7;P6=WI;o=JGY6 zp(a$7V{Go)oI;v^FU|H#0jbQpC9LIh+OCxzzH0(dtG;F3Ex#InYAxLP{I7i`KxYHh z%FWw)in85$cf)UtcDHL|qt$PgX3cnBqP#!X3b{-9{AZ%+JI>#O>}I#ppHB1g;1X4B zE+#VNvVu5w?-XTX%KxM$^AByyb8~%CTO?{v-YjOR_G@17XjD7ECp*o!<@?J^O)l$4gD(uxL=D>Ah< zx0Db2T`Fd+XP1PVIhtcQYx5rU6QWoGMCfq_8QsZop+=A}qhbkZDaR#9bmU}qZbu)O zBSMVeKFE;?lCX*{25^YtFCa1q0Ue7~Lx6w@6vde%Ij7)-Dl-m103s2(tbTBUgLnWI zh9RnT!+4sGL5cLuK$rXuK_L{eXz-AT9MWcn_XI}{J8~kBK}_W>3?!gqNxEf-oFE;V zFa(aWI}V6Hgj~tbtL-RrWVJ!~Ef@S6XkcWDxLG~q&$sfm?^dt;GpD67-CE3Az8vP- zv6O!vB5aM~SyHPlEg^78AhXX>C^%&`$lpcTwmHH0F(i6u8(dh!&uT!!DU|nPSw^eO z(RD1X>`Qffe1CqP^l92vlRf4i_&vRkxq0yP^%S^B<(inzT**BK_7^)`UhHvob%hr% zUMLT#)zRj;0Tc!S0L+w*hOx;7BSb?!LI~LHcDT6QW53^N9%>aC<*W06BauCb%zEzu zq6c`8b7J{O4uBUsgh*iYh`0mC9=nSjZr(fx(*wTy+gEt?ro+t_9iF{-4tC#yb_d+w zABMF$MtB6s2FU!;i6x*R-_Wwpe9f}8KIhZ+yA~p{rcBn>m)0C=eLgki^|4T=<@F{% zo>5$vu0KW>Sxc?DY^4@}Q>IyaFVD|5Ti2AoroYQE+-gTjrOY;`OV#SP)P`=$i#}yg zOrBYj#X<)y*CXT7o1Pgxv5#IvdcG3nm1w|eE|0PI?>(3U`AYcXiuF9obt`T4Wu z+$o=1TC8he;Zk3;1hbX^4Fh{*2% z5F#HyJ%ebMqGtuj=18Og94NtpYX27LTI)-mXBl?VECP!|HI#KI_$1ZTEDR*nk1fM_vsFkuoSlTjCww7NLAZz941EqEZ!2pCZ|J`mk zI-_gPm)~1$D9c`IYs(2^>)NRx!AZjIOqwJgKusvTF>nU|?O0ZJ~x) z1n2^(4gujvo#|z51`>!6HBYC_3(R05c(&bQE=APQr}dtP?3b_}wjjq~$9mj@F!;e6 z40+8FW^Un7D%X>DlPPZLI_tSrJLs{XXw?{WId?4Y+Tu`J5Ug30^5+czurkWJF8L){ zqj;P{(9f+J)|6XP3E1TI%Kf}p-sQ1{ma;v{V+HSaG#2Dr{HLb;E`c>Q&?x_%u5%s4 z$n&2QNK2Xnd|KDn2y3U%Zvq1RPU!dAH`998(`*^D%Y`oRtWVTc3?v7_woo#QL*$(* z{4ZWUhxe{fNXNWV`p4miAAZ0e|M*9AU5EXCkN59C;N$xb_@{sRCtO`!jlyjk$y`;L zz`b*-ox$h@zpmS_E!Yz zKEUrBfDT7`3+Eh;J>wzvAjfd(uYsJ&s8Jo-GQ_e%qi#{%GNDF!x*9;S=3d@M# z$~KkqWo-=A#$5|6sMT{KV>IfJ-x~o9OC9p58152%ibZm58IP&UDWJlVB4bno5X^yM z4j$A7RP8)-YXEIs^yk_z_sr70Q-OxL`={pFVl=gW%N0ODlTE>o;<&L7aLm}L6$2up z(_;(_Q?zx_B?TFX;C*&I*`*HQc0CC}Fw+B5gw6i5(% z*bMWj%_-^tYb1>})xdeihb^uK%PS*JG7@y8LTwLz4+wHL5?JK@7WF<2>!h4Tj z-~Nif{N*pWxw*mXH?IKzhlc}x{Er{-+5 z>JN!P#NtaS%Jpaov!FS^z^W zuUgr)yvnp|70V^1xRvMH{O0mrqBZ<}?%5W2liy!c&enRZO@HcI(*hJ)?`Q3}Tr02E zsGD~rIj9M3nrFD@SeU1IY+pFGDw*fZd+xa{&*qHJ$a_CIGv>Wdz7k5yfEI|5Q_UYk zxf7aC#I4>)&oL28rDRJvYwO(-%3F#Wb3No`2w}V%9V7a}X=OeZ2n zWc8d1Uc-6b8r7y#OW>;ApZ3$VZ*n1TNhzMAxy3UVP;()5&LLyDXh(}bm#4uPIEy?0 zf@R%G0k#(R-GGFAJdFV;sRG+Gaw7p7cFlmC^7)p4Sf>HhXbI1)Hm*_rmIT_l{IiSW z-kRK>&GNIR$I4Nk3qbN)06UYhb%Ojjl{wGdpXz*>MVS@{in5ma&ZFx*t}ZTdad8PE zkH|+*3QJ3Z;gj&sz|ny-h84xmofTY`WMBpWWtPecM$rcS?Gz?1R#Tm~yGA!^Uq{iW|^ zK6Bsa6#Xr~^J{ZHjn?qhmcqRjw5zpuEyz%->)JkQU9)Ff_geX{UE7xG@Kn6Il(W|8 zJ#zpPRY7yw$Z6%~?l*ENeos}8IpL_* zNlWKwYUx`H!^)ULjB53$DaSSN06;pvkTb~qNJCz)xrv@D7yw4+&X$D4IR(E4RxBy* zOXb$;uqJ)2zNJ}kdG;+=xW8w}VxgcBDI6tBiS!O>U@#Gbju1&Mh|dVMAaD*x zc-)f1k$@c-kpnt@01*(#!AGY`p5*I@z$Bnaj8Wf#owXMQJ1VFnQVvA$gB@ha$Bw`n zL=p@nzlW^uTWGXRWR_ z9_9M@S&6Oc+;~oo0J0gOp%^Fy-?T-^Rh8m8SpA@Z#oL}udEfK6lO`uVR>0%F)k>v4lXBg34$qS1 z$8e5Pxa*-ll4fXQ{#?2K4#IJ3jFjZ8UBHBYSUu8v1i&G)S^@MpSe7p%DRecV>#1mI zJv&Ps8jia^FH&Cn#CcF$Dq}$&smKOAIc|{xH5WAJK;6DW_vr&7$&tSp8KiT}IR{6C zi;GKKbQh42OTMTR0W9m<`(NK89s=Hc_Zsisy~n@*`OoM>k2kNsz?(O3@ZsG%e0cXB z&#$l3(Z!*ia*PoH=*TNS627e7xZpqt{Q=KkAMlU=+jBfTe3ZI#kB=XF03Mz^7(Em* zfK$iJARxv71L%kKGip?-UN;J4O*0v+1qkFaT5H`XdFv7=P&>L;uBSODUaM10KPdBB zqb$~B;F@AsKD%`7Q}McU(bC$Srvo0Z>^~)~(P!qauhBEt07^C8b!i=Jr4zXz7IhqW zM>i5s%UmHB^HKIJ>0EwGEIK+jcB zhAWUp7$_tGD2deJW7KezL~6qClC^@kC}af#)QZ8$b7GN@KQDPWs541&nuk1(sF52; z1#(r;NdW+YwS!2FTdOzAEy9Hyia7&$N`+5#bp`$y*xL&Oe8xClHr zFM&H*lp&}5D$;P&LAA7D{@EDGj8Pe;RNHuvisnkypscqAf$8|PPXh=_L1u7B2-y8X z7)@i%DN`TH0|rJvQn*I*s08Ec!b|;{ysW8mIpv9^Kr`+OYyVVm%a!b9;)<|euYXO* zs^++Y-^>a;`Sr$nQLA60_L^P(j$}+!c}^N&d424y4Ib)k%x)3LrbkdH9Zy1&}RGPPf4G%ko-B(Ak5AsI#*ezJT(XQQ1+>#Gp$FqOv?JR z+wHL5?{T@`%dx*G>tf{bWOoE0GJgH#SG;)f0)5}($N%^b+~42Bdyk)gmg^T6d)(dL zroQ2vIVg}UU_XI)u&e+PC<1VVyZZp){RQp2I*lIW0EgBS#KO9 ze01MO^)(@VK*V5*kRuZYtee7~_gB_~jWw$VJmlANAfWb~g!2rOyygJ#QZB5^0OR#B z|E&2Anxh=_uF3qZI+k_IpSL#7IhL<&z~*&tIkPOUugS00KdtLE8DwsqZ>@h@!I#r? z;_>}5TzM_uQfJ$u6V|@xeNc{xn(oxfbGS6N!en&>%nW!>^FA7Cm3u6mlE)T7()I@^QNGvF&uLxd3d_wyV zjE)(X@g7705!dLuOGLL*XP5z`RtlViwkcXW_pa=-oQJuB)LIx?`C+8=jTOckqi-z$ z<7e9E{Kst`z>!*+b7Q@1V_Bz(;yY>gGPTy3RvyEy|9YBxUp3(?uR{rnY^774sR>T4 zalEGgjNi?f4%g~1Cj&gydb0IdqA74Sd`^W?VRz@^R!>Wt`|6Pb^tvK`8$e{-79KTq z?RakIS4%JDEYzw3NC~g!H9^#=8KdSLd4b8CI0!J z{|TXw==*w9tz15`_J$C26K!l=o2R$5nK(SFIG0C<%k`~xZBA~ht!ZT*8^hj;3-A1)gn`IlU53IjiV8BvYbLsLjYtPMH-;#Dqomyqh@vZf8oY1MVKu)!& zbW7IZ=Kva(@?HltNOZSh?ueBn5v#t{!?^{Z;as4=W7B`CJj+3og915tP&*S<#zU@jd%WDnRl5s3ek~MAInr2Rbt)*$DI|tCPRBjFo+4bBK!QN$w;MVe60uWjZeyP3$ z08Yy#05q67+tCIOi#*}PV!@f^fmj@P1qRF!q*^2n(IM1I!GYi%!$kou9FW39`6x#b ztZ>p@1!5K-4Pq(3EMIAo$BVI*g#s*5HIil?5SbB~5hB4y!UX}KfCqPh_rc-dyd1Z1 zgVdHcqg23`s1)YP#dPhstu4ZKE%(<@OP@cJ-<#tv_2<^rbIo|pg{C#?&9UiYRmSca5Vpan?eqXd*3H>eTEOnqlP%YncCG_N916Ai; zd7*6fN+soV;zjDCM9*ZFj%+-TFJwotxa2=Z_&Br zfu%k38n2kkV@>+uQvih$U}a{+7;tg1$D1!+;j6E|M)z37^)ZWL**UGr zv{av*F}2Fc>uHt-`SS)M5D)}AfvS4&eHG@lyCsVx+_(4N<+?3Xo8 zBJ(j&GaEA`w!CHlLfMWvrepVV%aKw6DHW*lw|$>OTU+2nx(3MEV3qa6*`rw@M0n>@ z=toE5@X;Z{2Y@IGZ3)2%ymN9)f-P^gRv?i#T>=p_A_Yfr+6V;})WQK~{=` zeDZS2`qtW&Un_;47T+(a1T&arY?S5K!hhQ5Tv*StoLX4S{9U#{i&ow(VYDUKW<3Xh zs&&YpZ;k1eAT}pF%<;9H9<%P(@|Y`k$tmxU-*Duq_F494JH@2pXB9wm#)~A07@k9)pJSm3Aqo#r5?ym?QeWM+j5%_k7JP=g*wA=y**V z0|Yh2$Yl5YI7E#v=hqDYDg8Utwep<%trum{CS*PoNsb9{Fk=V3$M8|&X%iF3=@E)J9B&Y71pr`)zM#Jy zFoeB?g@Y8I4q)^9Fn|ip_B^>TT&V+V`?D0p;utdm=pe@Um zn$vkYr+n3}n*v%c>Pt#pjn?pw);Z6mI+u$=Ymq%w30P9h^14}{t;ug~8fjDMoU;@T z>cY=fzS(-0Exy;vXAWE_!I9eYt-Q+nIn99^b9HP9b4%;`R%gp=)6{6q7_2`B%<;Jz zwFK7nW&TDWLZKXUq3YHTz7<()?%&T4FkxF4H#|~p$MT$*_+;RGA zgyZ1>h>V@Ur@Xa@0swn?*5&oP9Q%{# zP6|6gpGnHRj%N~|k3L;F4@v)K<7LU29|rh=Ap)bE6OH1(!Z~;XA|x_LbUQE@dqe;p zJyY7C_tgZ5 zfp2XpvQb6_T_3f%20pa%YTp|_yY1*&ZQZHWS-zW<#?ZfIy;_2DD{ZYk=cFYd?5U_F z7(R8G!0EuqZ$p(uX7uwj1O+zIry2`O0M&Hf+KP3C$RBAp!pfTGU*0)T1VZ2A#fumC z_19nV@#8JL-{HG&zs7#Q$Gf-h@Wst5-H{waP>}!*5^D3>nKI9E9jQHEU*qetQ<=85PSx7Bh5xqloO`x)f9*QD2AJ9M{F*d# zzvuL^{QeeQa&SP-X+B?G?D6vDHNN=bHD14djh8Q{hq7CTv@HjR?Fjf zJf{0ZG>OV!{a!v-W7sukK6zVeW3mQ5m9)g@^L)y7=D%Bc*M$FEu`8ct7QldACbn2U zaZs$ynWOFI3oxL6L=s7Y0Q1o7SdU3yI37U|Gk1yvB8fk3UxcXrXr5}y#&BMn5S zX@?aeqSU^jQ)bdb+GI&mpAY~A6C4~U9<}`*J~Fz#M}UW;PTK0?h|iSN;v@MHpqzh{ zf=KyXYeB7*ndfC?5siJmv=;c*+;0I4CIkWFIk%RGhT$+T?BwTcOX~^|ShtYnVMWRB zsSq=+)A&5D)qg2k!k{$BaU&C=iI7Z$tsT~VEpVXrj?4N=ew_6aV3T4Pa}pkQO}FL3 zwB<2cw=sZs!{i$P4}SaArg{!c!*H;N3%5MCh$Wv9IebPJ8Oz{j1jwChuwaU z4gpC37gzY=^((x8{|?@Jym;|aLvfb{0^}WH2za#stQhiR7^Pg0 zUu*5)&*@xc9rAYM&(!+0#hXnYD9fy^Qzg~%YEf%_F7MaMtH~#|_tVmE%6m)t!JLf0 zL`&9uOL?^9&-}S^?95pu%*nX}-{2%inLO9j|G)@+03#~zc!AfiU*r4lzroGRXYjs* zbA;njET90Ei18q>MzEVWgKUKhX#oi3+2YdDz^;{N!pzZPDNNJ`a@lbu(;0P2mR~;U z*8(6*fI>@=UNZn%R2xupb!-VfYwBJylQQo)P$9q88u(=yd4IJ$o!k4VG4fWOTa#k$ zckTLIo^zhrTMOCTvqUoKazUS=M;X-lv-n!jaF!%dCG7ZwSUJSO+Ch&#BtHuYj8F>( zHt<2CPB4S)IDsk>a+HG7k&3)d#$-giAVB2}Cc9?smZxAxJFY`=>g#92o%%;BBVT8ig7+pOCYRN*2{ODr>zMR zW!|-N%Q?G72+8YIUK^k(tK*n2)}EcClGjLh&OyL0vl;R&=kjnZZ-4nce|D%tIgiG9 z)ZQsTMcsyaSf5PWI()`xigymI3_!rRAM9P00*486fOC{7FP2XLxu_9i2}8(J`;^%d z33^0G=SucYofFj3z@70p;#5ED0b-dELTtnS-UQTyvveDbFmal}~v+CdJj{obp;ZzQ-T| z+d?&}!}ut{bX*j_?SAQ`GZmk$6N%@@?Z_mK8DmUy7*yF9hyZzyFJ66tAAkH2Aq3pq z+~CEF7x2Er?d?ard-o3CefM1o;aDnk#Dva!+}_^daCpGscmM}ktZglQ@!~nY{q{S= zXma4x2SRP#E9LM~&MVi`Q5O~SJ+F7ZK9@4*=#6CZWKG7*Hyg`zEr2Ai-;&ivjc+c= z<7GX{`$lEI=D*AElQmf-r#1J=cC^|$$EW9HpB9i-mOZ!btkJ7#`b({jW%@Z?Qx zG)^PiacqL^k#tt+a=@2otI8d{96ZPyQaV&@34^Up&dXg(bDcXUz?Aivdx<6UniJNS z6#k{UEu|@iue|;x)6VN%S{#@^ggmbtH7}KtIYquytZmHLvpIlNV+Q5(EyQ(>=`JyW zx^mHeW=;C?x3#%xb;E-KL-HR~hfqs|;pjy2s{jQI)GC1-#6JTBC@`7GYd)5r{aGH! z@)3arX`_O8Q1m6tr7DtOiK#un3P>V{%3}+oyz+ad&(mF@;qC^XIk}ZKRfI+mX;CIyaqra?>EgUMNY+h7yg;++6l@|~L(F43s8OE3c z1X>@BKtqHK=#z5U1OztWlC^EaEV1_DmA;Wb$*A-!VqSKEOfdV^ficjF&H8;-{Z}!XN+mM|}PD*B~OifBzo8{PGK4 zzkZEZuU@q+c$q+YU^wMm+KKVg}o-T=JhM} z6O&6z%dI)*%w>D?@=9lt`Smid@_D1071^9Tk>}I02&?H&WxwS0v$AS!H{WM1xx8k9 zQkJ)c9>bsKK&Nx$U-sK?Nj2~dsOym}-LjUZq*7-c^BS`f1^PZB#(-zndt6;z;_v?M z?{RZ;gNuucbi#m{aXcJGprW)zpFB@H#$$Bn+laQCv2~M zv8MnHr=}|f__fb2z1(vE4LOy});?{~u=i*HLdm4}NduohvvVdfA6>F$TBC$B|3N#=og#!pd`KKvEfcS23dJKY~ zU<6OnC(8$d`gzcKtk(=&pr{NY*NN72UW0OHj&t{@ERUyYM$cksD{H$Ivl-H>aAXX& zwTJ?k%#{*|$OVoypjMt|Ud|RO$NyFydJd}bxV52OxA5f_4_bPrRu8)_?~O8mVLAVj z2ern{^qHwLVqV{edX5z;Vh@TP5?YXhc{(9n^Z+?UisX-(!4!4AOUPF+;2ipJ}w_vMTfpR?7jI!_oL%t$c{Z;>E=UzW@Gv{L8=m3;y`WKVrY% z<8V0O_3PL8_S>B>Ew(J_!j+<}!ZP&(^Yk)gd;A4X#H!Qb?7g%i~;LUZgCcR#PlkU%(O#sY>I_-t|sjk(*Bt*w~TdQtG=z!~&J+jyhCQDST%0eAaTiR>_ zwlZ2&ClfatulZFS>Fk(7s}((?aHt05A1d)S5Bj(+u%u(l{=0Q$9F4E&ew@Q{XT!aQ z`wJ54=wtZ`)TjVRh|nteUXyl9rSmUy?LOnDI1h)EBq?Lpw40n3Sj-ZpU73r9<)mPi zX0hS~58E^>i=^Yb#rx_~4cZ_mn_s;+%yGqxgTgkM^fyU5Gk>M`eL1$^VXeMn=DhsH zvOK4*|6Y6eR|=5~hz~|^6he^LqJ>!%fN+KYv5#X%G4Nc=xi?;xUl5}C#^x%V)a?q$ z@x+2acP9H!+|5Frdy75<+60q+ayDza&aJ(hsqTI0$F(B~!En%@kCTY&Xb6 zpctYD$wk7p-C5AK=&dIKtPchq-r*nj8}DD%JABf;>G-_vD~z>xD$O?_{^RzMCL8$| zp$LZR`%N3Zk>-Dkxa_S2$CQv)Q*;g{#hrZgp>EA zcCB44@z|6q7jHwJ)Wu1cu_Kxo0t_*XH^pl2$}NRm%!9oXQj{?ksbNVFCnTP4g30?M z835&ZT0g3T`r;{&LBfkrnhT2kZ)+%D4>BQsjzDLJ7!*yvKQ!>aBwg7FhfiaTWQ;R5 ziMl|TdF~EqWA4qJ;=4qNK71D^?>9W;A+lT7oZvN#lfIDk|c0JtNYkL=!dSPin*QCw?N8!AK= zU$qeuz{1SdrlDakFJ74^j?Hy&r;@5vJy-61kjZnwz>i-VQv|ZlNm(y7b!={J?SFY7 zwuii^OqfOxZc>s5@gREcnPr})_Xg9R>zR%NocSM>icSL=9}^$iUEk#k6>7Er)P0o! z3$K5366#yMOCwu|Khv?PKd{;qFK2ks)0rghZI#h7lULF!+fe4_u7ovioKE9m95yo} zdQwVGiqa@|5`a7Lyd!BD)lDYH+&_FW-q?DAjLG+{c301H^bpQ*0El!TRtO=SlcnKQ z7b;YmAh=04kS7xfqe9%gao3}Y58OB`jY>l^GlwUa#n~iM^WqvsivCTb+=QDYIhy5n zNx$sbGHryib#4iNG82pwmRqQu4 z?U0?44XF!>#W-XSs?Cl(vSzh&Z8N&DK~N-7)ON+zhBu z8#oWS*w!d7I#1ouzN08nMZ72dx1}ZG$gP%_!ky~*DLjxDt3z8gB#{m_jFJvETRkmf zUNev}(LiPDAmP5Dt>gQXu{tkj)9>c_=_C;o8Gz=@H%1KFix>`@M)n5g+?FZskr>2` z|E$^bkmI=Q>bZMRqA}OG@hip*AwD1gY+;1M9n3KaFw{Ab?O#Y(M~8&p>A$9f2#6Nc zA=u+w{*4 zyYrwEx@2*V0Qht?nnSUmFsRTu^i1yFDVU|a;?XcymK0KdzU9_pW`&U?>88XI!eZ0! zLs{Jr%(?J_Jhmv=Rcn{>8|9JXrFi20?B2CC#`BAF%s_50&}dU=??0wQI}~PNOpx-{ z1Q4wIeUyB1j%*A+@s(?`)73eDca1VfaX*n>$)nwR-eIqvgCy@>-U_GBBQw;kM#MG) zh-c+eJAFs{--p)X*ODT_p=ks&)TXdJi-p0bbFg3YyYs8 zk?gbsh=p0CmmJV+pU%+G^3>PYb*w58WwK)>K*>b4QmPh)V2rlKDdM$sGuX#33L}L{ zu~_zg*)-GoB<=aX%r82C@NG+GB(Q%j=@)Uat)V~GBP4yonA9A_KLRvJNC}g{hlu+W ztp1kkslU)eGq1N80y=>3YU>_1$R6HN0`we1)^~#jgC6d#KP%2b3Pf*y!l*oxrc9O*O@U(=BAp1>-fJASv_BT{4a@V==1 z=7OR2`8*&&qd2<{zuBJ6U~CZw8(oe!NXjt@Hh8(8 zO!|->8(K2Ph%L?CsJeRdyfB~2I*#+6J$k^sSnJ9#PW!?bnyf&oki-r@zt9!Jcvs@j zS1FM4>#qW>SM)Wf-5j+-BCht+oUa`$wUv-jdDJJ>k?x9}D+tHlBh-8{d+VgSv+v}a z!RAxFd2?Gc6bm_x1($Df5_K$jy9}v_wN1mzT88D3vdMyCIT?3P!)M7w&(7~MG%CLT zbx)_61?bTSpT`^RP3kVYry?xG@9`W^lEI9;w!j8yjGV60o-LAAD(ujgf~Q3# zq{)iERM-H~*^LB$l)CgdugoSp>!flJ14$mX)h{Icx?5me1^$ns#-Kg+%l--i3cKh} zKO|lce{SfNCM;kdaA!H92`p~=JT+&2;oW-_5D#0_KFDP-6**SjEZ=jo-K6?9TGc+- ze}Frk*jBM#%_D;XLjvUjqZl*9f8L`5>LCO}IJ_i~he$|-_F#{8cm)o9Z$ITE3DC+D z0K+oadr?o;YSZ=+fF8b@w4CHc$lHaUHRkOHc2R?L2mG3mrRydur%LF(uZ52TanJ%ncdrV=XM z5yX-WO6*73@BrsmEP=29apvM;2oeqx?mj-@4;LFd`}^MyEYN7=6QfI`q<&du#MoW% zL)xgwf6h4%ZV&Fw#4j;GG2gX|hod1F=5-1y;5~O@99kF+@N)~4&O1cj05O_R5|Q73 zGi&R>@z10BXgHp}7T1Vun}7Z&n!v8UU*KVsn3DO(R`K{KPx4{!YxreV<512NHqh(GB0{N6#6Sq8n3NcpZSccwwA zOv3UpaN76eilcIM{?_BU;LvL?86>Y0?jKoV-!1m|L#-N1#+W9{U1hi3`Q)n_s8oiX zr9-AfI7Tm=lyLVgh84PT#JMKz&I$ixtZwU=Em{`Sp=*-e@KkWJF#qWQG`VTvjx{=Z zV5oi6tkGjhM#*q86n0}!^QVHsV7-b${n>S!61)#R?iOZ_hykBM3+AU5AfN%FP!8f( z-Ryei`}ZGkwTr$p#B{`bXj9gJkx5Qdy12*`gAUNL@=l{Uvh=nI6&j!ok_<$PDqolR z?DPx_27|ALL!c5D`V$u7Xq&Y4pXJ9j`kz52Jd-JvlG4>W6Zz9MP@&W zn2V4xP>mRDev{29ZWNlvBg%RX9|HgchyHh=k35Rz5n=#wW`1xtBtB@DTwt{Wz7_oL z9{JGJx&5_6e3zHGoC!`$46O!AYm~HDjudL;>Ey70SQm!I^bLv`M8*d|Pp`aRBO8_6 zM%(}Dau}T0m++ii7W0GYPudxrK(qgkg^*uGN7LS1l#`XJIM?hxO_@o@!jR1*pCE%? zOhJnyp3wP0nIt_j9YAIIt^??fr><eALJitW5Mw9JWZ~Ov5@_x!>Hp(kW zjv&!huiq>9 zNJMTxZ`sshcz@4{qflV7Jb^aZbd~areu2ZvrtD5n#y|7dmJ^^Psqt0sChqU_O_Fo@ za_i8=_}x}UTW9e8?nlF({6+GatQ$}>Wyry|wEe$7RL;i{8-?%geecFG5OiZFlF9b+ z?wi3DWB|~kt^*E+b@2A=K$<~NgkQUud1&+76_JOn8mnr76$Y2q7hE1qqgeDn2IflD| za^?H~w!?jIW#4ICPz)U{8A&6avoy_;gi7=uuo0=XVeo#1iP0%affpSlhR*dKmq1JnC;r8o0 zgW0|VkS!Plg>rbfQva2fK@NC;7-m4gDP&O0V7MSdxy-wU3P{J$Ly99Ok4k5L_nVB0 z$~kJ7g$>o1KbDg!FI;;;*8;%54b7=5Xc&V-VyK~`g!a{pUz!e>$Kk@r*nRUn2}EQB zi`P z++SbC7OGVGSmybao2f)f#(P83St`S>fyk%8DeH+mL(R9P3T6aZaAZqbUCDeA46Tnk z?%>Vj!Je0~v*)eJbjc(*N^lQ?I9yHmC5!ycD83k+ccKsYSiCOsAs=+(Te0O6#ehXV zu?MK22dIp%nJ5z6;@4$z=}nOy0(KVxup&6%Q0AavhUC=&Uka`1{47&<*yYTzo zMF=9acl&^Zn_*y1NrW$UJpeI*yW~ZH)s%r#BhJEY5=>GQs`ff82U(lQ(;BBw9jvSr z)4?q8NTmvR$Lyc!-9^6l3tag9#kW9;-Ia|M{5GFxfhfs^n&5LBCl0_BKponZ`@Fw1 zr-&XQ$rn0CC;W(B`>2hXEeZHbG;!7)*Cjxrh<@OC`^HGr;{|wlw12=Ev=0rvq<_A| zg!;j{iD!F&(G1T$eW*;dtwMuNOPh@zN`6jsUfbE$r6Bkgl%AfRKt(886_v@oH1ue@ z;L_aLIrtB;h0q0e)>hmQ5_fPR42ZsO8{X+4p{hdV;R2o2d-=KZxMn&sfFg$0|Gdsp20oD}mTOena#%H#CpOLHya&<`pN7eoxy^iMJ`%l`qx?r=RfR z**ZAP8kRc>44V?paSm%;Gx+wODv>5ku=56GbDX9MZcm~70m|Zma>LYIIL;!nOaA-a zbfXfF3zE6iBRO()C7(0gvw$R`db`5)VR#a^1gf9PBuDmEq$aPs^!1VsmYbydF2lC- z1H`x}IE|F7RCG?YBUiMij#m?qv7C5O6ciLT?v<^!#4ZZ`Th{E^<*4sr7FE;shb_V|$#6i6S$U-qZ9RQ!m zGfs9N15FIwz@T46ySkrq*h4&k&Lw|u6J@@R8Smq9_b9<1>_)i;LCCJ_XWg=4M~5?h ze=j1VV(9aI*)uo(>5@Fjs4&5N!pt4EN`4g|k|zliLUQGyo=5Wc z0`*ALv<{xV@vg3QN^ERwpI_2%dWwMnFtI1XnT{;3_Pc-K;aZSMBJ3z5`TpiTT&(Xb z-IzZ<9b`kiWWPY<;8v#Htpn19w;P5K+kl(wtF6GG-`*eZy)-`yUm%uve_aUCLPc*L z*9o{=iU12Dn)?sQ*Yy|HS(bARs_!?fBYeq1AsmhuN$eh3);FbhF69~5E%8=94R8o) z(CFH%i@NKT4~Esu=pr~q>Nu72N`e+^{%Lbb!qH3W)% zkTQ>Efv}|y;1D-eh0IRsWo8pcyri6dRa5>xm`qwYr4g+XTWP>yRt!LBkV?oeWcoPJZ1RXlt53}8tS(${G_nEhmIMP^IOGdcQ4WimJ(P z)$7lO1)wln3Y5Vf4Q*w%m`3LUq=aGRAF#0*+;xTI{8_mp-+FR3&G*tTTcG%st;DJ zNZ%FAXce!^;wAQw4Q&{fFSzX{BgH83<}eg>ecuuu9X-`I@?+yXLyj;d143M?-9DHx~gWw zKoY?mnw$EKMSwHDI#MjC>g1olJG}4fmBg)2jDhcy_;WsB-Okqba?NdH%btt<#dkFA zH$`^!TFq*mezLWFN2&;zX8KQQHeZVNwAZyitpCVWo~jG(`6v}x(>|Gf(YeTj zg!z7`z=h{%%N%<4$zLclxJ0Xb6*iH$%e;mW(-|Zeb|FFc`>)Htzse} znqpg93WmMpYL|-P0cZ(SIfX!ZMiYD8du9FwfTqsyb&6P~g}|tsJs`oa=kRLeEP?%5C90i&65!r;lP&}dp*tKBF|Ion(Yi(0 zFStB7f`dCR(^=+5L1B>OK7zo6lcXGe}r+!vS+5Zv@r1WTqC+Ptr!pA!jlHMOv z=RLju1|{WV1<_2jI2-7sG_tx@POL6X;V?t8wgF>IMU@aII*G5d37ys=bDxAbKUM6G z*xOP0j0hSKl>iX6ZAPAq8?Y$6}1c-_R z`0;+=H@NYBwlU1@14H7Ncz|%hN_2u<1Cw#{2w}Qhg$lj`A0GbUMobV`JN=do^Pg`d z@s!INMZEUc&SYt}8Ub%ZIe|&P1rfKZ#2KCR!lyUx;HI{Xx;C1b$wal6vAd+@tH|Zr z2#$r37mq9_7u`SeBdzMi4bOjd^%kb$qmyTnT+AUB4u8x$21Z(qB~|IBJ%$nD{yw2C zENHm@qZ~Z#Tk9Ga7jC0xKD~U+2`5W#M>OPW9m+Rge*k!1WS`t*}R2#Y^})7#Q4N^0nwT zkmEOQyjmcDoB`+a7%kHGbTQq89V{}gfLSBTmhREUAMt@e4zu<38FlS?jN~IHeXV)Q z4_npp4P}(ezdc^l(O+>5R`z4#O)DzUNMg9j7*t8xle5gAcs;`O&=2-d*aEwKVoXlA z2+4!I+CCm}x`0vS=jZEWn?NB53?hW?HCY#ng?CD(D{&c(F=Ok;*^%d&gf7$vO~!9= zXF8SkXJVcxGaGdGE9A+?Ha1tBl$8wa5OZn}JVj`KWYE(xQIjBX<(7H8$YVRAwW94e zk08cjTo9pVrTbz#Obm~<>moqEX~>xv_C_Hlu@{k1(`BL@+Cft~|H3O*l1 z!Ql+!vUosH{Ub?IGabP1nHh*!N0{*Sr$5{mEVm}N$IEx}f9yKJk0++Zv;VU&Mb%aG zWM)?J_i;{K!iS(CDriWphW&W1{)kvv;r&N;vD@fKza?h-$0Ye@x;x{rPl?}3r7Jh&Mi@mkls681>~#d(eMt^#$&9eh!zz{Ks^y*KDfWUOWa=J*h2rfJ;ge@AF-0Y>if$C!Zj%!gfWad`1V)Lf}zY7Z8&_`WEQZ zCJ_Y>jxhuYIRjeBQ=-AtC|kz-#`ew2oqbIP2HQ*@SLRn*LWIhTls{m(&X@ueK_;w` z@N3GkdU6i7=k1~hHietX2EGuh!9fT&;r%jHu!}qNo83Bv2Wz%Y;RW=|`#*iP!N;A! zzZDZ?x%hfJqmb{y3K8iS`}Np1^={dhK%we@gX5*&wpHmohD>&UCuO7>FjY3)yi{IB zHz?%egemTPbK2~ke#o%;qgVx>G&#R4D~3g%952x{!o(<~^Sn*VqjdIMYO)R5vC0TN zn#N>d<@rBt1(zxNA641i)#v8~`rlfSA$d5llK*-TqJge-^ec><1)m}^f~U&1`%Xx{5;RyZsm87o|I*v z9C_8~AoH@VKz4v41)K>c{fJiOceFwU*8U->wUgxKjYzRSP7`L?Ww`JsqTU_lYEo|~ z#rd{6Ao-PHe+lJ|0XEu$C^joORK2P2yA0BHNt<-0Rp(76bNm1V3wpd!_y}-w^Mm>e zy?EDahyX)YZSIB;Lao`!wi1W5Q)?A$=pu)Z`d&I02>Mm?HrV}5q!F{UQ-(d)0;|OH z?XPM>Vw^1V(7yNNL7Sxo9UzOc$s02=#(y_WnY<3bmgkuh|hu%s!mSu znbgRMKX$UvRZw?tVc`o0Ad#&0wt&Ipo*l6ELX&O?S42Pw7(ak_HK`-Vx9P!J=*>BF z6d{6R&LHTjuMf>0PasI526PG(oFF<}KCc;;{sn$#69Ny)CfD!eQaX6Fam;sjh*|iI zg5XxVT?Y_z%kQoFBRDh^-urG&<8u95X4oL!7379w`#vN7`z5qc=<|zn zEzC%lwWj)K{jvPwbhN;y61MPE1H+O4X_a?8F3SJqs^D#s&5*L; z>}^>H7b!whOdQI>lidt=PoaVe1DDT?FB zzDjx94;sI1-nP-#K8nXy{ z{e@=^VO;33tEx~I6ugYe3B4co7$Ah3L-s0+UNtA)}@V4jK^^U%jTmw zeg{*tv4K38LC=@SWb3_Nf}ZH2htkT#7(5*fObANd-yAT)+t7_}B;0`5rU)!UFCZg% z@%EPH1+kli;?$q90eUhce^jl%{zb7{clUb^J=%g^H&j#M3%Ya6z2Y3jdq&l4&F=P zE)X=7W~-y`eM5-+uWuKFZLl62F@swWPBNMt(-0Fsqmp$5BE1I@4rK`Z2@4|^Y6m?P zdIha{1=+`diFQ4i0}x&WhOPw51HJ^gC->}=RW7man+b3oIG_NlJKSM0w$@sk+`0G) z?h^0`uq(rxV+wz zfh>UdG7nrQNP{3qznAypC9w1TnI3ZVyT{x=AVJ#@hG9{l1X+*Z`;MUeD{O+Jt8e9P zb`t$BnfVDPX6>NkJg0$vbd0@Pcz?n)W|}8yT|;Bi*WcM2J#fF-|2f1d&j80Q z#=k6PNN`;~N1Cj#aIa$hYNOYAF#oQuPfm<#mOp}k#<8#1+OenoGbzglC8g%BWss)Q z8vAnjjuDH&Pq3k03*y~h_d1yKQzp;}5s%JNYS@w`X!#}^IW-dH*3a%o+C!eQ;G;@Vx8v-yP4PiEJJYS)y4)v27SfJp7hu`K1{4p6Q3(5~Ty} zC?E)4@HOuDqLXHmrc3<2z`!S(pV?OzatZvs71F70TtPakgd1B+{R?53$D8r&yTxi` z*;=%?Q7@J2jT;eJ760kSJsfR!k?kSfUxcKE!O_keHVQYk3Ib{aVo+~1a1sEKAZV)C z6X!Y}@ES9L-LJ-xe9~ShY~m(nQM zhBX)ssr9H;RaFi?K8SfG)*L544AZZ#G#XpyCL4YsItj_!tdHLrRDN|b$)isd)3@NJ zZN%2*tdnh}>YTr8fg6`&Fu8AdVJxr-HyWR7DZH)z+#|E!c>7gbfL+@~UnNw1nM3;H z(=Q#i#`nk~v9cPwxbV_PezH0G_;a<@0@C3_uaPG87+qI(X0kM^k{v<+Pl0B^;`Pim zy>S6}Ma=2(CF0EG!LU(E$4j0)rlFcRNb-ribC^rc5DzOHM?{@9__9rHTxY9|QBbn< z?`sO4o)n4seFNIf#$!`U>j2YK}@K#_w?cA$bKW zSC|i1(v`Q}yF84&c_$0ne|#vUxc#toTQO@rEz_OAiKN(m0|eyZ6^QkR|4KZEm|aVd z#%+>Czz_w16ZK%`{B;ASt+4ri)VP>%F5jMYQr13lSEoyIa89P-=P6>=toZb)++n8o zf9d+V)?6>Ybj)b}uH?M(VON2Fdg>IwyXBp8sJ7o?as?|1?+h0e0Q&{G=18a42>c@l z9sWc})b)n#3mBy$(FA^gnSt1-6gK~JIjrs9R4?aS#3Wu#+wPj0*Z?rNvlakYmgw@oVTeP<3%5@;aP7JZ&_SF?81W$%|(%Z9>j;+KT%(OI= zl?fj{%)Yj6TwDzbzGGG!bPkkjR0Fznn1jqW=jyf~UwL?V5cne&9mVqacHtMZ=NSIx zn|+o)4Vk@x16{$i(zI_|Z>r0yHz~L7CJ}ZccFJg`lI^Y7%u0FayS@k5oe5)EP=YLj}aF*wMMVPcWmavNnZ~^jl(+@bXKmQhdy)Y^0?}>-grSe zOrD<<`~qF)7NIA^(2kfK74=rJILG0zWPj&pJxo92ef}bPSOKzQP6X;aAvgMSz)Zmd z2=hr?sq1fEk(Xc>GHH~96-MwrwXAr)cPiLM&5mzeY9$yr3+CkZVE&}6_KSF8!K+zK zKa1vW9ruARt?4o9$f&vbwEOaPIQy9;b+Od^6Z-gR9&HNF%vw7SEj6VR7dkAV>GpMQfMp6&OgF6*-+xl&$_k%t+W3z(Y z{A~2^sB3VxO>wyY3^aZ8f7?sA?xDqRmibpw-8pU-5!T;|G8Le#2*(ClA6${YZLSF> zN^S0&*Nd7w05}YJ@_Na6Kz+vk+RTLg*TdE96U0zzvGz%Ds#@?CC7nraP#NiiJ?uh) z4?#|`JjwUr8*VwDh6z#`icQ*SNwHrr@5Q;j{oGXwJB8s{cV%x_~({5jZnkb|BG(}9D z98nhg{A9q1sveZ-8BUg6F?7t(iGO{MbT=>>S2*U&VgK=3APah<+7e;aZtd`p!nt!F z7UyV*Wk*`rXt|$j+|RCGGv`^VMx_iWt_!9;B12M~r+(7bmX7qX&m&TH_P%UU_TRE^Hgb=&j{z@l1gFLdo7F??iPmYpNMvUGS=WX;GEq`PDGbqg`?j+nP+R zK%tu)7Mf4Nm6S5@V9XWoC_^oGAs=fZmkdvAVk2N8^H3PZ5y^|`9T5_}3B&2O{>AVB zT+5{J#)xqzK#Aap)A%6Oy}bggoB0X|1l5wjNHA2;C>&=)k!U)S_Ad5BoJasM7DeRy zBd#sNGbHqpsW`MyU4M0g7q(k z4}s+(EVdJqz(yMgi}o-3S`INvx7IdFXwvOk&Ky)wOYHz)==UNAu|v}bqFtj#-eU_P zp7KPU#|yAS^dH(gui0=NQ3u&26slC5Zr`| z8W&~l&0G0waQhl9)iUVOeJLIZJBce>z)noao?+Wp9vY1Wvh=d%pY_=-S=A4mjiW+# z3HB}x{hsZY0_uO{_bHx;`UBKD4>Hy{Innn_yPK=HeSVwTszhw8U{B><@FbmuSsdn* zPVi}LjjO${il1f($L+8cJ%(6L6gt7VsQV9jj~Qs^yu@RpZOb$`P4p$^tqwjLv(K7M zC%DUZZIP?6qz9kjk^M$ZsS&uGhZbE|@&OBEqT^Zw9vD-c0ucb8$?d<= zMpONCTbCq)sYOve9`t88mIh!i*64rU1^==3C#{x~{fQ)q)6%4D7*-9f35SJfcdeZX z4d>lD>;MzoGYqX zNs)8>63?tz;omy44E@*Zy+|xJZnUb$T1#?nLQgXNhmsCWJjPkhO;_HQl+;% zWpXEoqv!iN6&d8Sdr9{gRX?|IbRBT!)nfP4{!f4=3c6pcHIKhi>&tf$S#`m{7U4lJ z=X=B)egO4F!s_P&sQU>pLc2jNvbRJ=vA zCg&K9Gf5UYDa{JHDoVXoNaT*QuA>GaS`)qod|eTzj>OtJxHnN_(owz0vZ|V;|E})G z>Dzp7kjm#qo^E3~)H+{MLg_9XEGB0MWN06mVI{}$iAf6q!7M}$UreEUGoVl@11%$@ zF_I6ic_sX#Bk9AmBFsDIgUt>-Dgd+?x=R#?B85;<<&b!ed`Cv+1AM; zO?i>G_R(fI!r79q8Ys6@B;$+n4bv?E(J{6LwuDc{S}hJ0&IYuwSvEP0DO zBcAB9(S1lgZe;Yg61zrKbDrta_t``76bDZRL#<{ODmEV-2cG%t?-DuB>C_c@7y|<1U~{eY%A!BQR4`3Lpggf#`{hu+!NKnu=XU%up`d zVgEBz98Iur!lB>p8GO<4G9lpy$p8?VVW%Dp{K=xpfMc=ZI$Qt2-8Z(5+h<(c<@a&% zLHO^S@zp4)sWrZ-7|NV$tqRgcB>w)SB?wQ`H>tc=Ff9*R536YpPXA`n#GL1N&?yy* zp>L24n~Ax~@XR)ORvZ3)M!Ekx-Yubwx*qVJK8Lj7{lN$scOW$l7Sp3R7pg2nyP%x! z7c{2yF%~oyw|=QZ7K|LT-|FtV62oM0lKwH%K1G|ElrSZh7;PenE{h!PU5jTDT3vD; z_nsj9t@~FwAS;tFCGpnkdrIVPdtaX`L_@5UknXQ6_%J8SejxV2ibewP#ztY}RJD{h z{lSC~@r$=P*6bYt9^RuA{!<7bJmin_8LG2cc`El9dW|5b@H;*R%?qrED2j6-46f@4 z*OrM^1{ zqPnVMGc%&C!JkHFJJh?w?<2K0O#4mC#E06*?@JP(oc-ny7ipHE;MOYd7^*w#VArs7 z;G$Ow;W;-fpFBJS>_hrRL()MqA^62IU{}p|p9`)@R56UmAS4*_Vt)_@>iGee7G`<( zwipr@1|q`N^8}uMA>}P|cTW%AngjVpG$p+@Zn1Otth{qXkBj$zYuT+66H>%UUpji@ImZ$UciKuHFzslP!1z};$|N){ zOqm*{>JWvqCIfEsvi{Coxkht`wn@F#^EjMPp1OZV!1!Oj?9zu>yqR~UDV9X4J#uCa z;-d=|Vx19k+7qf{;)5A4BOgKUM{wuI+XbW@E>UQXQao+@Q8C>Tk|0Y_54#*N5q43G zQGP)4M0r$vE&|x zXVK4|$0~8xjmv=RGqdAP8_{!+&pzQxZ5F^PWvSnT+P&Nw=~!l>I0Q-wsU}EB#+V3{ z-l=dqzv*LUa2wmgG&BC&*u^MMWv@{%0^!h2zxA*Z2 zbqNio{DGX_0z!?&rR9S}MN)N5MJMzhBsfBVBRHxa%2;DkNGn}#_<|dRYi>W^s3(NU zz2)J0AOFhEAI8>3dzJTOdU?H>&4;FUZ&jyX`lF60i2S?~HYayktk-P=Sys za7Z)!Q3zECl|Z2D8k3Mfldo%f0(n>2dD9Mzg2ITQU9RXFJ zYmx~LU9Vb|Ael9+@kQS_mkhjzdJ(8tgn8hLL2VC){$NtWJa+-dfML7-PWH!BwozsO zKjPg#Kp%o(LexHx&p=86+wClsTw81Qijvunf1P5?$Ccpa`PmHSzk_2K7xVgPYEeDv^8gtD>{hnRZ-*H+)8bKUQ&h26ta6XtF^u zvzmCwiC^yJ&V338!mnrV&mO$^1O&DZvi$~TX0XCcC(3$5GV5=6;e+YK=??;MTV9+5 zQfRTwBPLRXCZBSOyCR&ZZfaR&Fe^)6oi@CxqGsWp&&56$dxYPzgewpE3mr^^L7_Icrg358G5b>aBnfA-_wTcxrx?QXNzgr%jySuNHpI8Oti$MI#M5DCSw1-ic86d@qQ zB3GrDnmrHR4Jv-M?N852lbyYb3#>Kos^DsFg9M_ro7c}KyS~v|&-Q^I^>Bt=t1W(D zbjs4tL9;6rRu%Iys~vv^nl?ImcV@7Nh{d~`U%W#@*RUWNaW8?ZqF z&PE3PEizOuEC~}dY^V=6qAZh}4=}GR2Aosf_N zZ{j8vFoZw6p5K71Qp{cd_2tsB2;qp~$P&&jRRyK2=I`YPW$yAfTTNY|{YQYe<2~_6 z&b>Q8`>F)nasm(%oE+fYQ?n;TI4CI3Uf&VZ$J#@Fy4?ec0zY<9VH~Yr`R?noUcPj! zU^91*y)TNXsXdO{`9hQRY}t3Mtr7l{d~Y8eA%^xE<#_i=TOGSSev2l+cs50N6ADV# zuZ7Au$=5a51BbJCFgaJ$`HPpUQ@w}~-mQwYo9c0C-mV{2nTH_Ks(G~Kuh|04^REa0K|MsyU1nX^rygQC zv;x3U01ZyGdi;#u$!mv(6t-g#7+se%r=cc)01-$kHDx9sE^mZNC&x+poqL8|_|*VX zzyG!M8{RjlVc@}HiBohhNXOxQ14)&IzF&ko;Hcm~ zW%dt`SdEdy4y~Fw)|@2T0XFb?>c=uZ6bVF)X%FfO2RB=7aAp_T28QR9w-X9j;nZFqh zIfUXU7(&`&%qVh(rkYtqfbey6Y2$U(u)j(m4SLnHlo>zq^VGL=V-iwEv6F8Y^g*?C zgiw74P^b<|rJY+Y(wLEZ6xNl39XYwI8xTxsa8Sbg_3`5&3Z?o>*h`$v;%ughm5o6cvgN_?U6vlfpi32@`Xk+| zqfS8eHe~2!GOV_6ZFqiCK!(w5B0sMQ6w*GUXK&`mKx*08LzxzpDZaAa_*yWKRWQRj zBk8MXNEw%_KTOrWC41Eelk&TQD|?5y1C4$tXf{0Ww~1KbdfYwiB%I%l=ZiBU?Btza zSrsiS49jEg6A7?Bc#p`G+g#f`DgRTGo$cjW(}r=oex9W^A3r|;rp@aGr}O#Ft=Y#V zvOh2BHtBEUTeKnGcMgems3~MSn-wSkP9!XZt@h==YRHPkDG*)Iuj}o=Yt<#&!O17^ z!tag$So~ik+9pWOYHf#gPC5k0;ZqDP!2fDj@jsHTDk!e5Th1`JL-61dT!Rg60fL3# z8Z5ZGySr;}cL@Q4ySo$I2Y1&y-+!wH9-xXB&e^+HuNFN$BlE`1m_Ac@hLX+}T@(0_ z6aoXXam~dNc^y{v`w)IP$Drd>s)36%5G}m$?c~iQ4ngVlM_KqwsVO)GZ2y=Yj2v<) z!_0h;php+EMx1%Sxe?8RNYz@T9^6V-Ih7P2zzjeol0k!VMe!s0mpKwF)q7OyIYhpT zy0ZM|#2Mra0zflpdC+^YiWppS{<^I4#QsG9=S&rek2IFl&h7RH_dgyKN^L;LIdn21 zF96^_sfwG22MinP*AkiUbo|y$+An9WP`dN}yl%~=POD0w6l;N2Xfo?)Lxo>fd)yovcl2?SmsSueu6&RDA4Uhum~@G=3Y~&W;Il>NqFGXq{{O^hkpVR z!pWRDE^=_$2{RUaPyV+L$QBBOH~cQ)HdLj(l|n#zva>9c_-`wEj-`qG!7b|C^xj`44g9m(~_FQ5Xfm)G>&K?DqV3A1OI_ot`f0Po|F*8URgg&zqO~UsE?6D_X?# zmruksw6{cR9DjZJCTa1-ePN4PKf_Lm34tR?gvl&C18pg&JI$07g;wpuv3QM2H!(U{ zEeTb>xV_%tZTQ@iMz%n)8fbdc7D*! ztuki9mwnl9>KtfwwY?nleg5F{bV%#v^SAeQpJ=1aH@4-+Ce$SoQhkivg@)x)zMNl| zb9s0;`LO>)62^lbHydM88s7dR<;Jw5%6)4eeAP2|_HWb=k!Hi?%p@~4|G4LggB)3a z+`wM5=Y$Awpq~z4dTNdXn1JdSzRTypY2?DExMBlg_?K)jBpLH)n}JcpBrxC4lcpb~ zFzpBc6|Th2$7cFz00ap-LdRuSdQ6cTqlocIBcUgrw>u?3f3rxhink2T0lR^4wsJ#M zqxEY{9y>gAU?f@Z^u?g;fkN1pYVldlhf%#Z7ywiW+gtK2M^P0Q`rH5ZWBgv!j zumc|JQ9vuF?w$<}yKp%!@ilw2Gs$q1yp1LK)WNI7CA7q?=;!!q8*XSmDo_=TjPPD> zh{`oZSWZ~gRX1^9_o0@h9^i*sbd;5!q$-kGa?B(LXT>eMs-w5Fe}@Ov!;1Qdt&j$e zU%rtXyQacKDtSm*yu|p6f-xC*z7=*bw$nQJ4d1OTH6?!(U+$Ejg}R6*_$%g}b(x8A zR4xW10&lJ62zLu-I7L~DE+$vxA3Y9<{Y!r;JrEsY_iTV8dmIlkTNEH*T)JBY&B(SV zfwsL&5hb_J+*!g~@jeMu4N8bv^Oo)4ClZIBwE!egd+JoY=y*O32bc^1tHKhGmgM>& zyZ+v|?%PhqZn8=V8(5?pKEe`_OiU?#!$P1( z#Z&>_2Y7US=>ujXzqFc?7(JuD8Og+ceG~;;V@eq9GZOs}!S3EpAEqcL6#h|EYMi7} zgI;d*soyFNx+1D}D0qF#n`^DM7iTL?ye?8+E_pPauXiLq*DD*_`%grulBU`lEnAsh zS_)^bM{kFZdMGRGP$t*sUe71eP?<3YdG?f}U&EL&K;}!nP?hsy=Qc6(fEAl19 z5Qg3r9~$SI^jiVMQ*_XRi6|$QcG#hdE0r1A=9V(UYA*pC^7q?~reb+Ui80gwdjJDa z1$0tP(eZ8Rpzo`vR7xp- z_c_Oj*tKoD9}%BR)gNXRz77t!p#H$bA|)fc-0DRjM*r_~p0rQ{I(TLl$fnuDYN<}g zcQ&+&OMYY7(v;Ct8qR)_hMkNh5#nqv#3nZb(Y zw34`2p(UP7uuDuuKWLYzBq~=T_|RkyI?XqG>Ln6AUH++_Nm2$*@?uKBzI-kvpG|TU z^QH*u*gz85n?NHviY+4y>+zkDY=9?BukWiDxW7d@-rMINn8H$9MaS4@^O7D-bdtz> z?{fo(PFT z456a~#3*Qnx_pL3CiK3s)b=Cr0A5!;Q2IrVPLVn=T51sDB&_o(Lg_&KAQgrv8!iTb zj=8xBA25uR-x*rK!{ZuPjReqNZ8{7R{#~0~FSkk6SJOjPDd<-hx(BaAGM$bNi@*I{ z9^)mb=9*l@i=^cH6f+HH>dC}7kbL_kbz690 zppIkEMb`i3JB2rkf;o>+RmhqkJ`R2I^({$qM~SR5x=5PR(9R8e(UY6pKo$&h2W;}e zCr4b(A`N$Mg;xiatL&$`fdjr}VI#3tCc;zu|t^ml?3ZcKbEPH9<=p2nBIa*F$1(n%|5DFk1QHj~JmsE?Xw&3vRK7o`VPi9ZiY36PN1 zu2)~MzF)Dry*_b;A?hwZxnzM3ip?wpG=Kl@Mhz?mL&Xv=cRZbvo>mvVIqy+xvmdIP z7Txa8pw-fXEsY=3Dq8Wxy_hu+MhG;t{iFK*eS2PK^)5YHVG7`J>Sk?Krn>M;So4Ak z&EB+}ehBvN7<$LsOc*r$HWYr2N5IB@t5XCv!Vrd(@j1P~ay!iV8vrfrcKI)>x|q9| znYhT0M3RYb{V7ynO9MYUQ<-xT7hXf_Z%BD2fJNI)0BSkv!$o!fQr}pj2&Lx=mGAPe z(eGI|gQzskDnNx~+&6_USZPYjJ6_-!FC(eX+m>)Yd)&D=JJo*B)4CL$8y5{W|i+@KS4u{4pvht zLAM^k<0jG2y_aGAzua<0CuV*ohHk`>v zAJ$IxbZWT@zSXXrzF>tzdAIX|{Ax?#lAvF5WzZ`X%A+r#>sO0NT>FK{PSMcjfCC?C zF#EBKgjG|CYszj|gCkNFEYaOAu>*Ew3wreMoE1RuloPiTAH0bu{h~EMnRLgZ>)mP^ zHGl8TJu3WFxUg-p5ob^a|DN2~BKyMpFhFu=hs*U-csnDlBQ9f;qg}YR(fY6n5-}~D zL?y^FE8A`rJOHu ztWx>Y>Q(T1{y=mRszw|v$F`x;Eyml^GC_bbqZ;kj-_eEuk}3V&lYNu=0Vs60cl3-7 zEkS@z>}}8c%s#irdRtI?#6imfNlhB9bn-MJS%Tf~ZOdN1+5&OadAIkqrvC-XK%`Vm zV#iGap&_$dB{@QfLUuhVuVi3)!!9Nn2&6am@A}Jte|ojiADh5%%H1LuSzZYB$VbaZ zR#=v(*-XC6Lp>OcU`>o=MD@|eb0&=aI7hk_ZB4X%2Uv9LhE^sneGizOuow)pN32Fi zA-pNTT!1{)c|C{V)TkB-s0XGm8C2s5WmHoZzlkCW#TPp4@ z24b4rzEH5(uCaM!5qWD7eSD18xM<0Qj{*=`Y^+twEDxySpZPb+2AKnoB_<#!J7_*I z%@3&Pg&Zn-V+ms%<3VJHYmnvCk^%p*z0jNB;pUL)?irLu=-h7S-s5sFAn_^T_j0xP z3TJJj_@X90@*2R(fE~ywV5;=DFUa8xA?X*L(xJ@Ah+yY#q2^WhBv5UCY7Rlz+14gq z*?N4BUiAh#8I@iQfhL92|WmV#b;={FwTj zOf2+%l#6OrpUI`DhWcHb{6^LRpaEI}UW_warHX-la5zM$s3B*8ZAnMxX93otXd2SNS z)@4ZA5N`Idg2RrsKgflo*yrjiLK6Q+o2*nL6m9HoWjCz6`lxva|No|M?iFSsVXpz3 z_n>U`}R3y6mGe38Xm8T-pDEA8-gcGpcmpcotpng$;F1HAGQ~vzK^UAoo_Yo z2(2Zca^q-qTfLpFL!{>tZ_Y+SY#Zfc1B0fCW9=3kQa$1~zz1bZ7H z|CBD0^{3vdXZNY=Ary{0&XP&}9YsG~;&8YF+2TKCb|ldCgpKcZXzsCS?mMl}*3sM0 zhl-}CrBGKS$6f^KrZw?D432n7pt|JM6jk2b^T7%9dt;7R)xD@C_*(ry?Cwo7WzeGo z9odJ~wzX7GJ7-<*{T_r&=0HUXfH)9YDB#P1r|4S*OPD5VoB>RC{O>+smk*)`=aU7PiUNf-aW%B9RA>v#bCej*n*F?HWA`0E}ov5}Qi353~w_fGLa zrTOt2_TQqr?S4-tCl+WN@O~9e5DX3&ZTML7VJ~!E5bouV?aYRzt+4o8%-bSaqT;Lr zTjlA`Cf*s~bu=iAK-Ku-^w}0F+714eb7p51`*8Qm_TroGgJ8;N5kJH9Z03}1Dutw8 z;h#zjvi`ppS0kUw}~YF%J)q+w~LITg&tGub^V-XWcUEk0%)4G-_<0=&4J^ zH9Ge1zoo|?-4bY|wSMxg>Kh2TBaZu870{%pe@0S{4VnW20RyMl#YZ|?4y{7)c7xwAav?3 zUgzKq6B#g(vSi6j-=u@L_V17qKYx{VyEXZ7b@m~wMw*6+7$As!BjGJgxd{g`QF~D7 zcI*r5)HB$QVxq)XIZs&G8pZu{D*}?cqJuk9y%m9SaVpwHtJH=_y$J;&5gZyyf!^?L12Zb zB(F$NHl;KR99bzpgwsHUi)LDp)gOFOk$<{rk{?aB+<@MtitCVY3376Kzd~eZW$8pA za}>ppg~QB_sQAv*gH&t@ZXOEU)GZ(|ioxTH*AxhgFMU8jyp|H4rEO;a_aQs{f$g1S z>lvx|{hz8)Tk^q=)ZY5tU31qrDF_$2p_4oFG64qoscU=Hwn>nQCLUkymk0&#bfQ3$bI(2rosD ztd8)&EeP5>{2yA{JbObQyz|q0e_DJf*?334oyj%NNGF~(&Rp;!?O$6#VfSN?I$!S` zgnV=Tj|{nV!}&aOi~a3eDAN?%CPtS-pwa!3dOV*SBko^Y&T-RmXU_-NGoY`wFvz=ghF~%7=#ibS0~y zj@rb<-jy#nIXWbRZVL3b%E%61Nn}SEwk}sqmCq@PsH3Ne^>~G_vr@Qpq(YdUAEicMmm9@(7d2Q?p$(}6F0DQDCV?YhYU7dP+tnM-JuIHMe^&_Y+ZpPXwLEb}K#-JEk00tu zlN^I+cK+DmPZXJG){A2%@O4}WV|x{j5WvEAM!CnUdKk@9gZ~)LL$I&4PtDWmZp&X? zCPzZRoJLfqQTxrzK6K(N>pU187cr#|g#`;-(t@oC@8LDX2J_4rc4eD6Ms@qyzeo&~ zs1WC0oo87y^?s_dl9D^Tw^pea>KDq=iZgDC{Z(%fYgHy^uBM!m2q4%Rm_AQUHlj2Ji-o?sz zA9R-4`zpxakYV>*v(Za%g4~$pi0HV2`M(x$==f63VYnyLK5L3q&s%FDP3B2xDTVxV zinDHhU@mPuI&sdqI%l9`=Pzk9JKk~og4TaKB`9h%Tj7>wwfy2HVcZqTz=P+vb4iCz zT16Tg=gMwOQgFVzEkwjZA&|rn){Mb%j|G`Y5@4;G)yPihNY6;xS28D=_--FP*Ym4T^4}io?TCt-j%XDTafe-kI_V%g z>1GaM`0Q7dyFucomU`i%JcY3|fAopz^u%(;f3~1RXCDHlE=eYG9s3kd(^%pMPd{k4 zbC-Bzh>Eb;iZ?Eag#z+e=GnkNWI#-fQuiks#n7Z(QO z^)3r;x^yAok%PiT^%JH3PQc|tDup41>9R!v;l%oW3(qY2DLV!NwN{Ebl&As0TqJz! z{O`!n?|D#_{CZ?FYjYM$uV1_oW)Mx7I=NHa8Ma7Z7rEUXZ-cBA z|BZBIFZR*$X^yYv-f?7Ar^u@ky}7NqallIkG6U}FQOPPU#X&`UcAM}dJ^rPm+04bo zBD}cH-USr}pZ(L&br9%nGs+dO?lAhjIoC=o%cFXy(wRJR+T2oj6;0nq^I9en&^lXE zzx`_zGmj%^+$C^chWH~Z9*VCD=Gc$M*?h;VMU8d`>ud{kxw3N^-%0zKtdCNct7&{3 zd47tBsOC3e)yMkGJJ60^sP_)t3i~lSOo37gGwV*>l%~&kmh+(HY?mMXl`Z;~b{ap7 z&pyUZk#B2%0>itCQ;LFBUN}@Q#=%U-oJ0oqp>Biq61~Lj=mDvUrr6AeUr8WZIitOv zWn5}EnF$UijbZ@-M*{;OE)|=x;Exfteh%WqKv-PpN_es%=Q2LX0qNt#iF|UqNtweF z)eYzoB&K+8h>J5z$@<+hkPd7W(&s@EmAH;DhD@BIwCv!`{j!0MkL*}{+y_zh`E+c; z1lpN?ef-hLcb%GeGJEbwBY7L_0K61US;3j%oSmyesft8A{>MD^TpuyC=_!Pfjv z3T}h}vIp^{ewD_RYA9a!Yo1I;a6;ZsL3Qq4`|P?=w&bHmqOziy2legnTA2OSD5H z62K~&7YFfuw*SONTi0icZ(0})GXMC;1)}Layk+77&-XmV7paVyD`bjg94` zs1ijV;pL!B2gwelQ@PYg+VohtpT&h554ooZc}sChjsI`Z z>N5T$bLTGK{6_OlokOAnxw=vbJA-OQ$cWr}zJ6sid+gtAWn_cQ>fLpMce^#zV-g`o zIMIE;ShLTst8O-_oCruOacm}bPGkVP+^i@G@&_!nTNr5ktedlEaKD3pc{xQ4Tx)l$ zx=_2=WVVz;FQwv;^6gAx@w#61*(L8pyYL=~uO~ej?iMleBJJP@Oj%q?a7x~$^&&I` zA{&agprKC%O(tMLB2h&>p)nBx%5^BvI=16=L9Znk3BAI{+@uuj*tztu&oyYA(#$RN zLE}`Nlm#*v(XE0xx#ELCbUc4c+PnMeH~q;i{^Y}<#?D17 z9TD?BJ)bZk*Rq{xIJ@M zQ~5pDC^KdAa4Q`Of`9W`=e-GJ>q6~XgPS`-__a}^W3Y;7cuhS@&aEs&36m1tArj(0 z-59))`U8w(cGJn{wwJ;b1}=#=D`88A=3T9}+69Km&-pY_2`@%&=p?p|WB*-P*bqZ2X1B z{R<7c#wcOj+D9FgQcpwrgpGv9h?_qDM=ywl|ISGfO9VazHs}a7und$3Du521mLG{T zX#JS9Z1n38RI>mu6JXXrAQd;Iohu@sG9z z%G385iAcyyi~&!KoTYU`laygg&XV_0Mq`r)RMrN>zAJpM{+4X3p@u3DMZZNaBa8w` z+4B75a6xy-r>Abjz?6cbW8Ji5!?W~5H?LZ!RF|#NnxuxeT-*XR*dg|TdB!6sqF$-A zbTU~Jx_m2+Q`c~@i4iz0xFIIGQmPeo4*~Sg&L%$JAMAp}R8_xXetG?T(~|ShYNj2& zJpBhvhoC^Tg&>LkRe=Q^TDTRbl-x2G^gvT40nO5AQ}z=3;rMLA@Jizst+c5xgGf-| zh&MX(r#YBHJ=SrAVAtR>!`9kP1!jWKP=~bpS=o-N>-AXG8Rda3Ik1hTIe;Le%9ZHf zwY^8MfGda1DRzk0us=$aP({*KC9#;9A8r`Ao+WOEH^~xQAXQxeru*uny&uWiE8aT} zHf5sV3`fwXFa@@Z>B|h5)B!V#%*l`S)d=8y#y94Wjq=7(`rvLsO}lR^SuCvk&ZN3Z zaU@M{aRvNP4=M+L+!x%Mx+mcAI5zbCG+RLrE$(*RXdi?|L?W0(PPkyx8w?11KzXAH zIH;u|_NU&1$-7EgBa+lzbbCF*JrnYlG-c-g#f%q8G-$+sS_1S-V`!K#8y3Srj(gVs zwx1H-efv@uH&TOXe56@Z`#e`!+*r*FOm!lhLs8SOHP$ei{tk%|AvQP#THgnWdm%!E(Ew>#xA_&6d3lqk+hyN=1%5k9i zHqjLRI47lwjFaimmUiun$;d@7MAI77JRY67jaNKg^mV+`Xj4q)Ult6Kp%0CS{1Cr7 zguT|l>IYG)u#|arFaN#Ij!+KFrvabXc~4}wVSf_)r-yZw4!gz2Om`c(eT7>o0r+CG z>M!EqFDo1BU--5UgE4qz)dTEr8?wfX(r+oi*KM#DJdG(<5Z4k1U*Z;Ph^c3@h z*z9kR2=+CdXy`-{IO3i_S}}lfBI`o-VCH2YD5%+Z@(ZTyC^LO)lBrF%F#ZA99nwAH6(i?#{CyVgJHWz9$m&Uzw$wYyd)`JS*J=HaZWT}GKQRu z&jei5Wk~VeUJt$ZO9ZubAY-Ke$mQiHR5jO=r>8iqiqM5*1L>=XsiIp)hM4%cH25>G zn(pDGji!`oFsVLLJbl&zP>vk(AwRm!N+IuY@|C4GoSQ2r^Qw4r>%d<4=+;WFKCM2(R!Gx2Hg<@bYPPJw77(}XCE zB-MC}r4>|TJtWuLCTvLcT3&~m8VKzPAta%e~vVDquwY zezfi)8H3e!OOkeo4~VX3I*atJHGEDk*d|gze1<+-8@0N5^Ixj7ntu-@EoRzf9ZzZi zgdx1*WtAMa&&?d$b2>RnDN4qvV-?Dlhbrw3?n)xxzIN_*C9<6plN%iA20uF7Ms^lG zKwJ4pm;}$1U(rgV@_c?HVvZ5vWhKXjkM3dDtgjljY8vc`DFy5yLJbp|Q%8DaDFUz& zMU@)syxyS(Yd!Z}Z#5TFUc>?=eo~pK@B+#XhN~OR&6j`3t{s)eq~5vY12M=*>sAEw z%wzOZI;zWwBt%S^hyI>Q>8acAmMR%6I;{^=)!$y>L8Z6Vj~PuU>#j?}=7K!gk;il7 znH6%uPG^s~U`_(ahM6?nx}jtfGR3$X%F2Y8U&% zysuu~4^ouEqBjgu+f?`Ot8TkO-b1mT)+!~59hH9gaQ9g>tf;aYUn$E{xBOT=AV~{h zsOwUBfVrpcI1owhAj57L;zz%JTQt;Guk^(pY6`aCPX2XZ9iDww3hE>H%Vin?2vNNI zGlJ64wmY&5Dy@;VnZAr5ov9Au^o@aOzu4tNlRC%UwB_n#pS$uZmZJ<;ovujp3le zyh2VPVRqsqxjak=>t+<4bYrdn$oG3oGQgA%bZ+_JOVYII8o0%mL5m_H@;xK|T9eq}J9OjFX8DQhf#*vGkM z57u2AE_)+ZzAIjMVcS?Tkr?Ag?{q_#zimpv3RR3+(PlU<-Zg?_ziraMhVj$Fb(sk0 z=F^k@pB-v_J^#m?1`GcBQyhO2sU(LoYeF_@tX;#`1uoi+!T~E*ss6TspT92t@h*K> zpof!@hq|UM_l3O9p?V$kP{HhM7qg5Xk2S{@Q( zD$s5&IY>R_{nY8-kQV&ZCM1>KO6`r5-5hRVwHRFa_)i-(af3;T}wqWW7A>P<|W zdJgXDvIVscrvjZ&38DqMnV`)R2;fo-culhjOCdU>8>1pDdxz%WO{; zW2*;?h&o*&``l4wg$MkL9e#|ywP^XJJ-maSWo}TR&=qjzSM1&M_JA}%T(_)NI~TCX z%-}@H*4uN1Jb+2m;_8S5FvN%91z-%Lac6ZrOY)KT+_EdU9>^x`s^k=9XC>O6Jgy$s zdD@de7967>nVik0j@Q{J8il*5*y+ViZ^J+_`X5H*V#BW&|B}S`)!$_Hn3Go=9G07Z z8;vmz?liYSY+h2L3d(#~JrS1QuNa*$&6q)}{^iI`H8yqaEj=C$V!DegvGzW2)P@R( z96@`#Ka(66Hgr0`=fZ*uSLcGHHS7;@48mN4x8}D^L(EW}F4U`2oio-YGrD}Sl*#y! zSfI&4VtWbkuRbvM>dG8hfN^@*kg@h}7O9!^omPIFUPAWsCCnaFRfRiT*H)BxM9|(R zfhWxRMQD<~;ATnIrl+}2L-9w^q%3T@Qb)p?Hx$u!D&?gCBuw5!YQ~PS!h~9aR{C8x z{b@{fH*pY<82^P9;P_|hhiB1<3R7s(QmH3Mh@hR-eCbd_0X9U~y%P_KR9hX7AFk$O z)9D_a%(%k$@&}$!_0`oY#)aV`4+ITLcxf&A$Xbk4N{O!qjrJDh{S^4-?+qrc12cWb zz}ro-qg`y5+Jv6KoBXamU{`yx9ri~wM}iJkkDuVsQHkKYRP{xuzO~V9=~P7GKZya} zC@w*})SiyOfy%4kKQk*h^1Np`V&B1D5?=$f`=c4^6-~M{v*qezs9bL07nhI^=7-@^ zm%zy!w3dmOKs4%&W1DwB7tgNWT1KTezV4bL3Pc3$eq&-)^?le|ssl*5^}oixqH^Hj zku3eux0!N58`3y=L>k-&tT?+hcm(%vhgld;*#|Fhv*`qe=_>|Ci^}hs3=1+Cx-ta> z@O7_vvbT`_jKe>x9>smejx(?l2zne4iNZO@iJg)62aAX^#ZB(%GL%F&_)cW1EiXVC zkChzc>65Lf_h)vWgt&ebi-fw#M=cKM5Gv=|RWlnjL;TKD0Swu)%|7YnE5=7GYAEG^ zkK+F$hJB(>U7*-7xSZqcA<+4FC9OfMMYpU@ox?=giNQ7+#523Y>h1N(M#@4c4Tjo7 zb2`^rn>f}JsxCHYT0yXMo2+o%wS-p?O$Ry{u>3OGiIv8T*BAkZS{-R{F!2}G*>c~u z7cYbK-JA^1`VxuQQdQpKo2^WwQW2Y)9TlRgNH8y17=kQ(z01es$C(Y<2fBjlf}PKLUi)F0Hb}}< zA}Gz%=kJUYf@5l0xc}1`Gkwn3!K$&*gXWoa!iDK;lh|j7qr{dwI*c;!%CY&IT5&ns z#-N>%o!R-mZ^FX%STqb+H1xT&_Pf-7(Pi!OkVG_wnMhOY)h8&g{ZXYK=5@fh#r{v% z518Q+TFnnFtlvOE$2?4aN~NGgu?)P+4|r0JYXosnnS0*K(TjF#%Hkmi0S=}vN#(DD zidVL#PA*R8$!dF`JTvS(7m*KUD#lNdQpFEQ-?%cQiM`oSYwa(Gx_zRsdqdyS>(dos z*pdQpnvaRu*x@*L&x&w*+*V_PBhg)_wx5cw_5iVU?#Ez1F&Te?U$m3-$Feg^%Zk5Q z3U?pNxQwG*8LYo%K$|xe+Qp0Ll3mX-+|hIOV78<7rn&nz#^+k;^R`0BfoERApLIia1;Dy(tCL(EBM<0hrjHmw3v#O7?sp{Pgw7?O(75 zN|0NO!mWXqZ^UmYS|yy4@%~RF1+oAvWp^1qBN^Z~3NU@PBW)UvAcQ2ynNU_6CMc>1 zdT%P5Lz1}EBqP2FAWfeBHzOwq^m3lW5Clo#s4U^_<@_T-I`9Zy=LKp5kiP$YF2H4x z0d6vrWp?V8+{ivfWO;IZVv@Gp5dk9bmezBAa-N~PZ9<2^RE_Rdi&Y$Ap=K8)uEQGQ zLlgtTu6YMB1f5LW-};d34uv|#N*=6WS9;rxWE+c(8cvI%Th$Vk+Zk>twAat=@_#xo z%V78C#jOEzrH8gDciBWZL~07WDMzlXUh+%DM_ljXgeBgb30EE@jIKC4WGlXg$YE)3 z9vva`@HDaPe%LwXfvTWc4EWi1PL2zl$D8WUwXaNW7MS0P6V{;Tn($7I?<=E_?;C6& zQ3#@{uF?J9-pi%j>i-bUfBN{r@rsX5jYye#St%8{^BTU73REFw48ZS_Oq>eWEwM=D z`k?^SmwKza&kK>WUV;Y$)y!{o{M$;ZC~VqnT8i^|r!fb$2vb{2XZD*Qmo?IJwT*&e zA_OnV_F6WSNZJ=$%qo#Tc8>Z8xu6w1iKlj2FJDX%5K72qXK^RSng1t!VhKb@DzCR2 ziS~Pc=b&GBnJ4=m&UB_%swX#>UaJ^LphZ?vd>*1=8%}x}DnK+Do_RU~To65>eY;eD+)$4e4^c+DtgEH>f->gf4Eaf4` zJ%wr%Q_Ognd7?7W!k)eSf%$nZwFRGDped?f}1VZX7nJCP{#jQm+ zw{=2@y(0S~bcdZ9q;h-m^L0Tb3pK|~878r>KVDdgW1}NU^PFP`6_)S~>CLNdtXKXl zk$pU`H_~8DcAnYLX1b2?X03}NOerWd^09NG4DH%wxWOhDHP0>!H;rJqv{#V7P!@Zk z0VI|^6`l2y^{%=qJr^LbcKuO4raZM)`b{}fu)qBb z8f2$-5MUdE{IEI^#*VbRNodItG}yW%#S{bn1*hP+EC4@9Qu{&z{Y6t0>;8VHa+T{Y zJ@tQ5B?mJ7TvQiCp_KN?>O^rG~4;VaBAtBrV(r z`Gjn4;S~a-Y@vi6D=V!$`T3Eb*0$}TIEknz$O{_Wy0v!EfF-K0SSl3n}m3U0)=2j zTd6KN%Y$A&VDdVQ+<=JLm7J|K;i6Fv4<5eC+I|-=7d>e`lUk#Ib!>S(zh{~B$lxQhQloB7^asg z8g5`uGH-!SZp=qequEC$by;Y?Z#Ti(S5u6H55vNTfr?0{qUW_|WkUqWN`*)G!lVAE zWww;CZrkqpKUYy9sX`JaHXUD~&>C+-FE$oiaNCYI|Co=!NKuu7R}5VmamCha$-LXn+L+IBuf0)L?)+t7itKQhX? zW{3j8%ta+2@0i|4NI5z{i`X_Cmon zB!36`1eluvdSq+VYYo?wamoZzyNJLASgKd3UYx=TD7`N89E7?g&*1IQz-liKAkGFyK#^#g6?6$1gaT{iLeXk(2v!;P45FyGm!& zQB{mh`WG3>Y+i-O`lCmvxuLPC+z@er<5kpUT8`c%R(THaOc-wRGXsW$m0`W^_R~Hx zbfyJdoUQR!sxdCHkTg)9P(@?MV`B=EcfmXB?#vFxJ}mmayAoqac|DIe{q?>@zRibs zMuo7$0u1b1drrq0D;Gb$JcbJIY`mXtT(Ta&gVcXn+g6DNO}GT^2-U@LNER!_<%{dG z>V%EL@65(s;nRjq$T7_2>19{)dR87IN8t_HAaJ8)xWx9_$KrXOJfia)b1ez@%SHAl zOnrwF=VIa^FV``S#)up(BoFxV1;%X19x1D#6ag=n90cyAP1D2H;C|cV|^pJmp3Oga(7f|=_sDbs=j<`TFqeIuPAoVN08WT&; z3101$Dchf`KWn=(iSm%TKppa!cI0*!1T}Ej!$wQ+ltA~E#{M@uC=mw4q&QAA-dRVO zV%_#u`Rq-52^HfZH2aKrFS1XGK~3**kQrjp->`zr!;Uds0{8CKEM;vpf!scMtVK7W z&cnB^!@1zpfv0>YCFVS^(WXwE6?*i&Y3?5Yx!Pis9gGje$yYF+T#7jA7hB)0U#Xa! zA;-LE&=CVHng*pbAZQr~n=(w|TT3cYdl1XiwP%n(gy zu^JE6BS`#6F292vUW(EQ9fvj*mLMEtg~%t1PWkh|_EKWfjB&H3Z^<4F1Tu7Zh+siI zJg+Ci=pZ=!aCUy&xB9Io-=x--EMP-R;ruiw@IDXu>!kMePnR)T*cO~3yznG)F3HQx z?^-|TqbW9(fCzeEh-X$qoEdX98Tcgt`(@4dzg`FprdnYE{W_iP@n7m}xOwJUodmKo zTRn6vh*4O@Z#y# zl7Qm@+BVS>+W8uFYRk>imc;K6RBLmP*BvjJxG<{OLIfh9;+N@bPm9Mq7f~D7@wg=7 zvhEwEVedjoU2iE+w5PS)B3^Tn;R_Bh#pU&GIP0}H`1CKo!ll-!>+Nsgmq_vJu+s$n zLqD5oKeAsXTR|Izx7z^SSniN1WsUcrcC7qI#Jv<3uVWYg4O`YU-5mgo>xw^fO=h~_+-{!z2DW7Tdy?FcI9Jw`7HL2sW9Is@-k;`M(4vnbV^``D#!HFVWB?g zdYQQSqWZ1enr5lNh`?<3vE#gZe#zR*XNEG7C3fK(PFD(K;kvs>0g=)asC?4t$h@VL z61An7v4nRbUxdpv6Iv{pkVTHsMOiaJa+n1UAFTIAelFs3yBY5;|6JPC0FvRMIQ@Z1 z>(8SBaxL*^64RcZUc4&atfn6Mj=CX33Mdx0YUM6>P1&v4y;05H@pHXju|yvKk32W+A$L%I|{OPA*uLXFO9Jki#hUcZoJ*< z0oi=+SN=1@Ms~qG{#b7GKYJp;rfI4tv7pq^g-R0}`qxS(d3~Nqp*(U3nv;~^L6ko6 zZGiS~y)8M8HJoWqsXy``jz?+Jah!B&*7Lb7{g_42c9{}^rM<(hqJkioY3rXQ1GqgR z=O+t8i*f)t(5R;dvA#J*F~}uUO5o&tx@X%&*WWC3ejpcaxNUO^M!W%WyzxCHj8D3D zctDdKv(KWt9gYKiPKBb5Oq%GVUt8B*Iur)!J4swZYn50=VLA+w5+tw$2eNuSrvs&R zzSLooFfv2vHXP}oKLo_CewxU<>ewZE&-C~a;UFW1JT**zOY!7ab%~=ofQGO&v?Hpr0fqpa(6@5(ngwjvZ_nkhd1_B2Jh8}`N0n^5AD*1}qGn6MJbowe;W`QoEbI?+AD zirk*TzQJ6$sOkrl6=EmuR7k?eI>8f9YBuB4H?&>e@gm%?gbo66lM=-{;>o(FB=R}d zub0#=;T}=Z5Xa%a%^_9%>?E}~JGzYMAF?`(kqnzL>Bt$d?|*YX#-+7Pej>i}R$P9sE5P#xR*e4F{k@C)aCdz}+7Zkn7#` zW7G5|k8S72!bUj^dt_M}&CW6$9S1ZJY~83bC}l=5?aW;+uTL+-$K0;q{6igTEqa^G zCMO|$7c?5mqCsr-58$(nt!?HkO_L+gemAYA_iz~kM|S`6-=Othn0f2QEBf*6G75wB z%Jyu@H)to>y#XyW&g}mMRDspWp8rJ-=)GU5|3|en>jcOd#^f8+JJy6WZ1h~$R(gZi z)k%lu+~EP;Fix;j02V}BA|@&TZe^A3CLBs!@&PLKOBf%UVAr-^@mfIxf7hP_JJ?yE z$+UrTRo5T%nI@N7!=O1IzW%ZfP6 zpe+vJ+!I-;j*gFW&kJpiqZ9OEMxBo4N-FtdCAiz>q>f!7IFmXnj>bP^_F1b|ijM4_ zbo(NA4h5{Ok4F-34I2K-Co+N>tQyKmq)$bxk7MeTPzg|vy|iL6R}p81tC(FmtXZ|b} z2S*T-+?M=Ip95*{)cj66kq42}X#T_MkEd`+cQ_?mL@3MO#5#c4$Ghg}iZyWLeE0&H zV~4v*LX>BfXIQPcc6Y8FLTAIwfiHJ!wZuCHnMg|@qxkBGCZoFvaWu1S%H@9*)8y#o zJzNg${+YE7n7>P36;`J&M?8tK6zN8w{KGUsjTR{mHfl!r=;TA?R~b}G4gE7a$WwG5 z%L&;0GKTa9rDzdR4cDe|Hc;)z#m{LCBNSYxiU-!yM3lwA2G0o_8;%D>{xQQ~S!|%< z^?XtQzZ#(LroQ^};UTQwA^h|XS(o-lsiQ)SSTG}8LOJ~@^wEU=8!^a)HrJZA6Z4=@ zpK?`LVAIz3`6IMWl)*?}E*KhF)Vo6k4cz}vA|FEY>8-=eg;8 z={()U@-!$cKlTwzKVnfWZHDRY;_cVk2cX!YUCb0Y1L73$^iAXYYF7ge5xG78+#%s@ zYXf-$PX9{*q_kshWh?LdyjUu?=eD5#L+n-SM#Mi;7S}R(IXVQ{@Dhg?A!ram1V;xH zNFmYj_QVg19}=E(hftX!yZS?~pxUGMYv;eD9kHS${6}8v@EI^dnDpK+6sxhaZ`CaH zaEyy&Tc5{2)6~d)7sz4gbc8fI{#We&VlF!ACVnleMV)S(;MBe+iYxeDX~RUg%k)9V zS1cKH(+MOv>MH&6uhy@x$1IEFi!I+BHmB*^|B-aoQBA)8A0DGSq@+WH(WNvDP(emF zNQ{!sfi#Rp=?-aWNfGH1B&G8sDK)w~e~;haIXnEh!`YtQ&;7jb*Xz1Ibp(mYEsEXc z!uSYZMsso=$P{L>aMcK_{08ZSe*IdBP4VxM{67acfrJ^S%-j9=JZ6ZMHLzCeI4%~?OBpd- z;W=pYhthH0yjDLi3>+=F0!SjI5!=Hi>4^!#n~jlaY~8bi1*(Q_dBvNu}qE z{Rgx}fBr!ir`t%!pwIr<0UpN+C}8~ntlt!rD=FwNE>8j)@j~CTGKJj2nBqxG_dYjQcRG`X+&g$WuN&K{(0(k5bF%gP3Vu!+^F}uEFa?Cmw(CA1 z@=jBC$FnM03=Wl4%SNwJE#j(NZgT(FbWsG|fDO+#-NYR8p+y!C`VsLb4VoG*rz>40 zw|AprQ}nHAI3L_Ff}0u?<2}>{jVkS^Qr$v;+55EJ#?^N?S04vXNy1a}31c6f#I?hh z?WzM3uFZ5SGSkF^tOQ90nKBK3#j!MF&={Djfw;vFo}8QFjpu)^(Of(8T@v;7-iskE^y8?vKxEKvL_&<%r^BgG8md>et#()L%efr!00 z^dchhKQT)h)uq4cOmkGkw9Xr>X4*q6?b zSux|jQnJkzjH<3wXt?YGmV%toYJw+)42);5$uI57X)UZc*?Rj<;CXsjYcF{QO5G`F zq}a1lOLX0@uL`zxbD#ZNx4Qq3kz*buQNC5N?Ceg8eU(Q|fC%(M3u%{1 zp~T(Yq}tXWN)eG+e$^{hYp(AmyyJASUOs-EyL#17fb?c)o*;xi6CCZjoWbYjCZ!WZ zNHWB+Tk*1=nrrh#ZH_#AE{G*V+xE8G`-XaxH>S8h_o0q z>_05(3OD+%>>_#qWnsT|Rdve0Pu^jat+lN1DX?7XMDKpB(eqbyc~z}ZRgDQuba47x zu1Iqg;f|egWY47QleD6JH8hOBmoyBtk@KIyLT-l=FHC{4)2$B9X-V?Rm4T5-mP}Er zz3;ifr10GS2jImkr%T*hcmgvHM}DWP6J7Cg$TEef*c#<>5o0DT{CQdr@gr{fVP_h; zCUKq};jOhIZMz@93 z3Xa$+Y==s{w!nA9`-{ID-^|NHENUFBgeg001yvu7srV_{vWCGfVRx{F5o|&ArizfZ zHaYKMA&u>1h9H#(2Wy7EzdY?7G@H+m6^^WZGh*;njH)(t`k5?dBp4q{O0a8HEhpp~ zX0ppUiup)AVc`j;0x~WYhvKPw`E@C{(7$svHwZqKNi$P1mLJ|2|LiP>S-T0)i_t{! zsf<$WAtzt&z%Y|f7U*G9;zq!WdH-Ii2Hw!E-Cn?uX%Ib$`w!CtTlKjZJM!+XO;Y8TyHPrza9HA z$i!{ZzL*w%WfM!N6j4>rBff{+8K94Y>sP^R6(ZDXJ`fMl8!mMNCv@WcFF+nn?d4gU zsw36G9({SBVxr#fZSRReM)@r0HCK8}Zte8?cY6F^8q8e-yS+!{35hD08ZXtHoSsHo zh0*@!nfF=sSzK995cd!>_fuFbdkZ*P+lJs(KkipopFGBDF|?}C-kn64jP)0mhLKU7 ztCE>%ul?Nl2Z)tb#h#dZm7ls?(Px3Co1RhBU=pN>gH5F9Af|0nY!{_}3j=*7b1_rB z76Wd4L}pUGbD#=?A2z5RPI`ltTUr)#$siK8Jz zG$~BdjSE*^!CmrX=pqYeAU|0ghDferhF}985Pmrb*0++)Boa%UA*JI+FRvlk7&Tbz z!jJorjVdGYL}`l*@ApF3dYbxkC0hbG=P>Ogb$|R9#4YDtWOr@(o$60EF>eD_xk#_W z=XllnL-llQ$Xsjf^I5uRhOGEAmzHpIEJsQ06(mMKDV|H`GVaVh!gWr+3wt^Acm;gh zOr7?w3%hv9wI~>kpe)|(LxRvV`Yt|1RTsg1ZkC#-+Lu|jd$}6@yrLIGKi=3=)_lis z-AFFtRP<-?A7+wo%X@Zeh=7UP&Fe7sB4F28E-1?I+Lq#L2-3B9 zX-zKv?nUp)@iuN>@$vHncy9pT``EA3<)|;Qx@QRMUh~@cZwBUYJxdpV|9z^xbn`rB z1s$CriKvqMB}LIU+7S*6rr6`<-@n{!s-gmtM>%%@G%(@m)jSp(8;h6 zUm^rpWZzOJ*8Op_Q5Y=(*>HGEr*0PIsG*T**=laD`LbQVFm5%8o&HP5#9An}In#8) z+s2#xTfw4JZs3&s5wX!#t-=ty{Pt}N?==z3Jt^@-wU=fE?VUHk|J>z%ppFXby0DAd zu=_ae#-BIVXT~)=n`=F_(`Q67%2sj3AmU?A3OT^ z_yEx-`S~9K!wjdBi1Mry zaDZkol0kq{t+0?p;q_Zsm5@{!H6aEg%P{zxLRVzonBt{#XdJ*kSoD%yQhN-=Bmqf) z->h%Q5J@4yXzX`#i=P$<`S|KCNf_UNLSgm>+}Ltbeb)hWM|&%Nd`yv+XxL1hLAXbP zcX>H@ejtCt*>^RdIelv5IbqJMcYBdpD+hn_&$R=||5%b39YbyCO=w-^F6e_W4gS2L16j&&;ZW z#)!Dx*+u{RSO zkakto6%6#@T3Li>ft!Q@umvQub@^5K@`XCROW++o9N_I(V%HimrI)83rr@S*qfwS_ zBwl_cq4PLO;3VIiQrbo1%SyX)5zTe2nl4?-?7uKpdmC6L z#s0RHuSZ7hi>H@^qs7o(goTLbD08i%f(cMa!X{tTdLU5@G8J>~7aG>G~JhsI0hZrfH8Ca#>?=#BLItx+w?kX!ohONRe3p}J;Ipb zta(p1qzi$v^qpF=3QsyCdfTKwTaCNK9^Gf*)}O6$t9Ys!ShTt^LaPESg5TOoZSvZn zaHi7Kt9p9}*(fu~a{ktp4RE$rGxi~F&4fGlB>}(SbPP_0t*^38Fjm3GF z^4qCJ?0z{)5KieZO$f#kY)ar`$AEm7#5=+kx80~=lt(K+d5|=kL?bD0c9ZmJH{r*h z(DKTiuy!dSf6#6&d*P}Sp8n+wl~V#eMx@+Mc$Z-yy@?*#dZp)OK~*k*Qt zi|vK3Q;bDp{a9rR2J#mDLA6*J9o%%8j{fl{VNBvNZSh-r`KO=jc$ouZVo)TYkIOnZ z7vCMZ`dEmu84VLls{>8nR4>$_Q-Koed)tQAj<>G11SmJqI=WVNCB{dK05JjZAEu-j zdan94oiTU#5S&A-q$2`w(WGCaK=_$_Sp>xskE~;`)+BAl`w3y}zkU#!g?@1&41GCx+(HC(Ez&*Q&}m@hx3pjux`K^ zz!gm3RWu}S6-I62-%X!vh6Feff;2ypBnt|LXG|tLu%HUjvHh-izH7Vb_9mIU5ck~A z2Z@CiMT`sL&ApULDfI;9&2qEHaL2Khj3JO!aS2o7(*zaA-zyId|9E$*LeN{=7 zU9pkN!)0GI4Ga6g%SF%9U2$g<@%KMTpIhLTd5F^0EE@e&CH&Yg7Lp4KCZPtM(XtF4 zz9LMKi(x`ETO``)s^%*%vg5VyP;0xa^pqt!V0WO5MypLT+_F~D3o%zABrJWqWbUfI zNZTd>9aYuqf#aLZ^^eurat1nqeePuszxSonjskJv`JtvxsD|%EWj8&3ZiDZxRDCeh z%m~CHf(tNaUzjzKAkEsA;7vx*dqFQYF-@O7Xsq@v>TEzi(};0%hdhp0=SU58;z!>* zI9xAPShcHK!BbJc)jU!?A0zR+EP+weYO59xw6qhGG42882S#S7J~SMW_SKu=Y_Gj8n2YAf6Z~t1))Ae*WuQK}Y@tSw-So|y^38dp6ZHLLTxsb_IyY_iahev5- zl&f#uIQQ8&M2=Ir9m=f@%*bhIyGg!G9;G5Bl4fTO;?((V8oU?RK~@$vr(!nOX{-%c=YO8{La`F+7rM|tFonT7mMQ=Z3AZPE z#%46B8(t;z$|i6(H~$-!3=AQRcmXs)%s;=R@vOIk5gwD@>97b;?yaN(+|XAbmY={( z;;u!sZ!~-+Cga%U5!9JiZZ9dd|GsioC*?BHACFG`+sK5%Q&T)ysg&NIGC3USW=*2> zG^?`4z&Ur-Bnn9s;uFo$UZmu@6TpoVe)%1M#PyI%DVXIdNnj2}Ys?il^1+6N+m;hs z5hty}VarQmZY!`+RMYu;hrQHbTEwn2rlj(?n7o$2Fn?HBS@X@FI(Dbsu`d|&$-_1ZPh~#N6c(wlQY@=2xofUEMFJ}2 zGkZ_t*(#zx%feS*k#eKC<3Flf{+|@f6b&pOy^f!u~WEFcMls z{SkZO%X`oEyf2L;v#&E%z=wB2TxSM$wrs>%);%Y2T|{{?)tKFUX{6*YFIFRu=}}Y1 z!bBw&^xtb2cnz~gd*!JjK9T^mdvW>}idn1af{HUkH^p=tX|g!4UKvSz(rqY4-DSD1 zh(TRLRN<1qr)Z&9Aaei$bHZGX!C9;98|a{<)A>#;vapex$jsg#R!WTcuO%9NDWS3M z!J*ya3(l9-ta7Lsy6sW$VUQ`Bv3U*$g_4$)UmFv;rJrp&HkOa<;B-dB(DzF%P>H8u zZNC{ydUJS@H0MxWx|qj=^Nb-7ny{!h{0p>0tBp#PSpEU6(Lg{OS^D=h5YPkEj5Ui+ zZ9lIrJ09u(sT=?K#ejj0ieT=kYHT0t0V4yjexMEU-eBY@dA1v{%-M;KQ9DG2WyS05 zfnd3D5Z78{I!%X`Tf|3MqTths>`_z0H#-Kl?TG6_j21DE958S34q3@(^!VuGfki&d zG^L;vgwX2q7mt}KD2oQ$MEa8yldH@4LKpVp{M-dB65Z6k~BlWt8= zXO4JCTz}P2c=uFeR{577!-l)vS}#@BW^F$PkPq$b-RdpXIzvDx^5!~GhIh_gE;sa| z)s_i&y5{u!3Z`$-$p0QTs`Z_$Z|)ZoC8aaI>3-K9TA(kuHG(Fr>766w9la4_s$0&G z#=-ZCtHGx5`4xE_jDxx;X{2b2uCqv+sj2WpN3g6I8lLnzv6Yt(DUTWdqD>7`5!`LA z1DFa?J<(zLb#OR}BvJk88imJDVmKijZgfS54jjOgyZ`D>z~VBQB@CI%o_-(RQyY5P zuZncdiJzvzAWsL0@>3*@rGiEI5o0WULU$?z_8uBX+0&PVXq5Eg@yI6&xdv0&(@R9_ zX(d@dDWxUSP_wEQKM&s0D$+%Lu=~`1!bpS+&yT|r8KLHX;jK^t?mq6+3+6Nb_H+Ce zt&^LXcGoUQuc7(~CG+^yd8xH)c$l!csvDTEH!KH4H8?N(pDc&$G4gOoTRq96UA zA`C#?1La#!Y2$#!^i0(HAt0&%j?5bWIQ<&eo@_*|;pN7@79f1VzWKFjH{P@HR9JzO z;JWvxN_m#Hl;%=9igVCn@SOZ`st$sAO$TD8j9)v`+I`UXE|P?Kt4Iy)zuD|nx68`X z$`!LU$yB&=vS{)k5+ylN9-y%BQ(7-ZSY2d+)7`}NI7L(-dI%2PybH(S$>O_-Pla}_@2L6xHbII&)^|rB<>$ki4*NI z5u3qAW#8HI#;L;`wUIQS%;IBRf@TxD$UZNlv(9j|eu7?pAs2_(xx4pCoRo&m-O|jQN3| z#Ul()$ubic>aEZSh2KkJT1C~pM(>_^2jR!~4PZ;&v{lt@%R455hyg9rM>tR_+n&+& ze1*=-g4y+})McY{)<7s8)^{^s`NFW`?DN$JxIEOVlgGY@KN9l>(}swHrsOg16=Lk1 zn|O%q2s%j`(>@sAus2d|d8hwWCK_h_nBk?i~;3)k*jlwvWI3J#JcdxdAojR#<+^ZAqcUK#gktSdB?_ElzCk zI{7$+1db=#AA~CgTFY84T6taWXt5?#5?L}x|5Y#6?fx@NA{C%C=qK=$Avp5V)ZhAR zdXMCn1?1fHjzBz#R*uQOS$r}ve^OQ`v*uj#$~E)dGNkE8VJzEr@gN_BFK4z;re{!= zmAP`3wqn-4LYJbv`Q%e+@LC(IW8__Osr77_!mN)sd(LwGjsOn1AztAhng+<_65>$n zurERQr?pwTdVbt|ypn{j%tk`qkS{3b(p3udJAIEVL1eSfgm)U;wCC9TvoF=Pt z`dQ^kUn;#E2)uJ1;+??oBU+pC7G1_6>nK2XU6~p;P|zOx_=~yPWSq*S0M8FfJ+S4@ zP;1QZAVvQ3nFiP>S)63$ny#4*pYIqV&{co6$MVd5&^L8F27cIgw;hiX z4`(I+Gg<@L4}d6jc3wMEU`z8)DFINNYi3qOI<5%;`tG5;k#t%l4j{R_y1N$A{Yo+S zNlOv#Bl0$E`15C4lJU-^5v!u*x=B(elyvIbo&S{N{kcj2kfLI z`7Uck3=1dp=azmGBBfJwG^+_w6?|Q^C3gBqcfA7B+74IA3OMlPDeI&5(ntjS8diL& zA`Oh8xncD?4)HbmQ~K4_t{(NTjbS+N1(`|WK@k}qp0?kO%WhO0n>YS^*4$fLZn|TW zEaA{QOgv5oszwG{j_KpQ!ix+vJdd&vJlhJ)N zl^&;V$OBCU4(UXNFN}8%$G<#5jV*M!E@As+NRIkTd$Q2)el~yYZvHbSp`1^auU2tn z|1;uw5yFND%z#eT^vlyr?Kv0ASG{jD1Rxx1D-sUNa06~qf{&({Kb&IRh(76a)AvM= z5=E_%IHpMYYvaDPFra(MiPiPYn{ElM#u`&+Lfk%Ll5cID8Xa@HYliV&-6_@gm(U7P zqb><4^-M&UJN=>sHM-ZP%yyBjku4h1#T8bvocTcgVN+y?kT3dXZnYmAToQ|Ibe>H>{SSMc-Oy4)EVs@ErU$l)+`uof-X6jc8pisZl{Kk0tTR^{@9ZB`Q^SRRvn z^{g}Yy~+35?E-M5Bo z9xJ7Qr3PV?LomHc;Xs)`H<(cRH9X~t{~!(?E>b=I83bQ`EDyg{`C(?o^I$>L_Aup zXqm7shy)!U7XjIz2E8(`S2svg8C)r3GFR47ndCeH|0gW0e0oW<)_2HN30tjvVo-FMMQ0eJwQn zhk33stOQg9){>G7Ysan;{1`KU!S)yklrAhRTpj7VNzX?Akl)Gl8aY~P5~LuyWj&CV z$*ZDddI_u%PGmh}wZ=LWfSBxssI&Ns>Y|5mgdvAySnioHAT8TD4J zS+(ciUdb}rzZ>wB!W>NIKy)8M@9DSZLR(7QA}iizN^6T#MbUT|196O1yB3TEqtV|r zKhP7MGZzm4fz@MZMP(KJMS za@$!%?J%`Q2QvD+DnKZF`Z{>-sm(WiT1e9QO>w%ntwC2_n}OzgC1%FtInQ@h(Vrh2ROW$^zFYa|QD4l{2!Fr0*njm&jAV zPuR8*qjFJ*ek|`s z(r!zZCarW_onXmwMEJL7VBN1pr!6&rBhOu_(&Hp*X!oUhzkpSPWVS9t$cAkx#syR^ zr#JQuLABa^xz&2g=$La5pMa)x->rzXtP9>VfSY$XZHR@4_;<)%i7z&=bV$1|>G$~lq5gih=aO|wl~m))dl9?;T!9i3}yx^a-gE@}%677d?J z-GCIqxS6y<#EbRw+e5)OWd2&3BjlrGz*l`xRyV*`o0o%6xglN1KRjhA6n+xRlJeAq zL9(W8M-Q{ulRj$a;N`n6?iqZCr{Vo&*4!E_>A!+lqs*)G`E-I<%mbx!vNYdRfRNnK zUa4mSF(9$NWSY!x7S=jl>fhxmo^eDnkff=Q2~LthX~ZKz>coOqi{|VSTI_vtb6kn* zyZ*6D#^UV$gzko;sF}~5c4A*>c;68}N5hb#NM8GGx}q%mQNtC}Wx7Kh+@mEFlmVK| z&&SrEM=FPO9}9gT&K>_lPc)1Uin5sfS%8+otNueCA895bZ}!o^+|Zsptk@QqYXMKM zx%Va!*SFUuJUIUf+OPKypA3u>>a34KWEg%9mXvb>3A4XzeZ-}l=)ew@d0m^fy!_|> zeq|g&3RAd{{N~8ni~isubkMyOUl>bieUNxQ0WU?Ym-Ux@`5mGwt=3Hwd`&(I0X;8< z*pqDt{g{cF&R-9}{bkkXHl=Nv{qBALtxT}sBb%+V3AYAx6A5lYu{}6yy4m^hdC07; zPJo*qBISlkIoISgXO?8*f(P-qBNSd+gk@*kCsL*|GK>x_;A1svpPP?3w9I2*y$+>L4*J28$jax7|e)_KGNF7tnRGqa9Ig@g}dc18_BBl zWdMf^6BHz36^~7DRvIyF@o9ah?C@v(yBA6*Mly#LZi&3lKn)^m8~cROssdc*de(ZF zZgnIpZ-c8K=9VW7O*ag5@BO@36Y7^J{?o)xri&Z11;nmDrqPG2*Y2dz$1XfyWt1}cyfN~sMle|VyiB5W-W_w4i~9Msfeh$ zH>o&>C31YyY2=o`ha32C`cHNp3BV}V*5Oxu}o$rTst%IL&=h_8XFV4C4#X@;8`JU{kbuE1`5_L$K1%>}#=+C6r^a z?!)b9G&=Q)W#g0Ttj;rLc7r=kZIXEC`EwRD%ya?*@tU%AvAJs{q!!-O(w+f}Uj%|= zU*rm;JJA^|`xomDID#XnI>VWn1^#0!VItG1SvA4dd7ThLA5KGXn+p07{GOyKEcPvk z0)!N8z_{ecYr6RGhQ&_5gacoC934msucSRxDW$}TdGyEBHQn8bmJsn*(!zQ#8<^LS z>~g5SkW(Gd8o5r>>?%>|#lI`1nI0Ys{NZMlEtZW4N!Aj}FD|cH;vG-;RcmXeOn5}P z!wuU7OFfw%a?zmmVJ@?!sX4t^^e8}f_}_l`CKE9#@50)O(u(7h&4-KWIt}=d;pe;x zU37|2%asOFtOezq{}en1%LMtzg1^(ij%K4Po=!Ax_V_@ts?FjOak&{lRd$A;xHZaF zYA-3fE!quuD>DpXRD36}bzkctei@5OHdX?t=`&q04Z9~c6}&~GeO}U@ljaVryJCKP zi+x(B##O(Q$ugC+1`)B6PfHFdVCRT!|@}7BMstYEN*?qPYx@| zC8L(d(|zV} zAjaMaq<^|J%hgemvI{6w^v&4_C3J);n3wLLf=P@$mOGZcGAjwm43HR^xfUN^73l>M zLKQI92Dc|+VNy&W%Dz;eb+jrO%y;o$Xr^YX4~YrkWv<2JLh&tIS+C_Q=s5XL;%>rz zXWv<5W-E+yTLAgW6?T4H>R+YsfnenbqBu}}O{>D>LFWQ|lo;w8YK31+v_i!1rotK8 z)vqr=V?qJwxkMRg`+ZG*e&FR}vZ09CUlD~5-b*pW*<@1c)Ppp_y7OHnH1iWL7c?}A zm9x0qeNV?q=~(3Ee_Z|R?*Wo@1R^SqQD*hv!0CHd%|8Gz@SY*J7M~8OBlCjcZ(EeE zH*I+PDb3_x=aTCkH)B@vI79B|gJJ!cu@*EgPK58>&_k!%ih$#N!ZvH5& z?3KYooFZc0hbW#z3sS>h{45+X>q6Im_f7|DtT*Q%GS^&6%D^EE`s$Hgjpu8RHKUS| zS0R=scjut&ox2kfP)S?mYv$WGQ|JEl*srWlZ?aP#AW9#{(Laf>&##|($5(he^fr@j zNk&Q>u8e8_ZjYEOroi!Cf{0?_I}+?z!R`+ij*Pc6B{SJq2ArcuR|=WVpGL)mv91aq zVy7ka(x?zv*G4_(X$5Ij2;3X3K~&L>I3~&c#NoLnXa>Nnoq2DAMcIk#5I;({|2~&3 zDa0RyYg~tr@^U}Jz+nOtJmG%!4TIXIQeTw%Q@rOvitN`Ywp~}e0SD$8;&$F(DxARZ z5Z2H@q^qbx!un;&e~=7hcWjgAcd9eh$H|aq_s+*sHf=0DK?`O*Ep4g(74lsg0X0%)35D+!vdN16HZ zm6eZ$djZW-V9)Zyg$PyZ#OlKX14uPADE{m}V3;~QJPdk9P1{oR$y?PW3k>2#dzq|R zHbz+t!Neb_?3=0+2y!CoPgs2lI14Z1X^0Wqn!C4%L2=J4NHwHs#XcW4b*kw|NO1yT z7+riZbG!59`R_V??ktNww$!hGGGD38c*8PSri@ zvO`B8PGnEhUcQR3?8XiQ7n82HuOHGm22f0JRp#?;FQhtGyfZqT<@-^Ey6mHxj$9hQ zVdR&ZM{WfD={}Sr2CfDW<7eD;?l}SDrB4u}Iw=z{TrX5>MUxdrc1wCM`WhQY4u_`4 z)t^#~&bReklru`tJL5OGU6Oi;SoJm}!wJzOSOB z#C?$UZmmDHk*`smyy%-WZr^|X;x)^Y!;!RE`!(`fmeo95fZ_)&8rT7FVC2o{GH!E|L*z=SCrifD>G53Fw5fQ$?ISU#F_Df~7$Ug>YU#4zX0U=e3l5E8YDpA5P=L&hDuqt z4;Rs++bMZVQ-N>;M-6=Yl8K7+)NbH|07?Rcxc z0iF?zj?9$|V%}~rdF_T7g2Dmh(J&SOF0vFCD7xGj%DA^_VKrqh>$IdV*&J$GgA|EU zt`E)(8>{s9rae7n24O%uLH0?=U*w9U(pn{BE%)P_)?s;G$hz2u9#uB0 zY8%3So+~FSr~=tv`1k?Si`_JIrjkt6jyTjXv+GjLo13g)`$sHhMZfso`a10VIfXEi zD@9K-PX1YwWS%zvn`=(TVi=4}NhX(IRz-z8;2|se(eA4dM0r=F9tNnjNHjSV09^W!KA|3HIzq zM~&UUbfngZ+f`C}b+T{N>voe?TL%+{XY`vS6^tyd7Q$Xr{-t}-LE&&rpy?6Ufmnom zyGJV_3N0@OFm(SL!@7vBOn(&tTz@}-!b2iaefa(4ZPc8@%Ms7lA|&o^Ombd)C6TfF zKckPi{ByoQ%Neqb-ixV-S160)?^IQ%u?WdwJIW5Kvu;zY#IB3lCNHrbF zS^Bl$wrj>D17?RsRwey6ll1%g_(s4|kSD6x@;|cc`gLFJc&o8u3}Q@_jzOCBU^l@; zY1S8|wwK!3oV&-7bfPrUNgY3BO*A@m>m7HqC0|Mh_iVdnov(32TQGZ!XbA z#-p?Lx~E?m;CfM2-2#(hS|#Y7c5^)M!I!^A`DWbyL@A@wU)L=%J-% zSP*iuMhA$LmGoI^L(vo&Ro{fhmPA$QS(UchD(2$patw zzk~8+ZLSjoOJu!&iyjcq9TEYVw4dLcTmmnVqq)*+pPk#$-tB^FNihW@WUqo3L~%n& z2B;)w4|y9!;I^j-ZZuHK<))5Wjc0j%cI?5i)i?Y16q5O63Uv@Ry81GUwdFS&X7S9=G7s)nqFdF&qR{bl>n!Pd zv7{tOF*LGC={NNTd7(hp{eoNZ(ydWv;VVi%T<cr+hX6;4<4qn@<%`~aO*P1 z^Z*E%J`dGgMVfwWGNlWSHzhKvmU^|IUqU zf)0rUt|ORVk!!g7kX2i}yB#J*8|y7Z?2iT9etY@CRyho-lVXSlNv}0Q;WMKOfbFof zR7j|Q3YoCQ7$ZSbJHL;iEz+AtyPJeN65?}X*s>w5Q&c0P#C@%W@Zeoemdm9jF5~bK z`&w6fXsb*dvrF=TdDHIosVsZJa2&yIOw7&m6IX_^0LHY%?>(6@? z_Pd~tK6U5?CoH5rh|@z#;P58Y`gl0ir7(TIe4x8an<04Vs}}WT~IM2_S~^ zEcr|ymU=!OSvXk#2%!#t<#Ge)9m5#|?*Mx?jgHRW!@x(0i(7wE+RAxg2?de~ss&m- zO65y1DK$u;mXaQCAjetqNG_r)ycVSeq>V1AU9=3V(|cz=Pl+Ugy*2MN4~yKpH=0h~ z;12H(A+}%~^QK%X_4oFP%e`CQb0(^)?ENjXcXzou7`UmxS-!t0%b}chF6Hsr0Tz)J zGb4FP54rDCweV051mQ}5^=|}@gl5if#E&Bj{w!jh0Cn?rT3) zJuxL}SyYuXLNMy!viehU^|>1O8{^P?d^W9C_K@zQcf4$LecjH$NPK)RK=MrFu;dT9 zrWc>;7r&i!jo&M21t_LjQ**StMEBSl!L-YwTYEg$2ZaJubjcO#ly8x6c%x5I@+%%I z5Yu@{-e8_SH+7`EBHGflDfsKb;gn7T=xWgc10Jj|qF-ttnUCLzRc|!5MnnD(0e&Uz zGS@04 z82w(VuwN34PpCIXn8BSOU^ZiV)X;Gs`O7@$+$RQj^jF?d{P6-xHTZv-xj@C zwx32wKRswrEj1l->`hLzvccuvKBlya9LKD*6L#0=#>zx)$OSqCO`(D5bkz=8f!gPu z_8dPs8xs?q|hkm%&r!l5fq34EwHqqf0lh?%5+ILmG+-J!O4)fjmr}AT*>La z=jJ`-D%;#QOr4+l$~R9f2he#CHy0=CooF65{dg=cN3CIpgl^73(+i`WnUr~LzHvO< z^j)GqGXeLun~Lu&Yb>M35mUGXey4u3ICXmh8)} zdr%FcwMhPoS~zdsqtAYnY`E28Dcn5iS&57V$Z`Bd%Lii6YsB06m&Kq~;d?TxcJliZ zrcS?rZF-|7q7DIjwnew5&JQieGxm02vnXu%jYZJkR{BC3JUZ24nqq3b!IAu=YnChL zPnrnmK&wO%>=$Aqd4k~VaQ(Z=30=)Ysi`v>$G*^e8_a~VHZ}QYpP#iXq5+q@<9wtu zA$7G(xun2mH-`vS$&HW)-$4=?n{>M;5sAQyP0i1=P0ht8MK%Q5O6Lk!4Gb1WCz`$L zwMIF$s50TEHyaZrHdSDTVhHI=-h9c;!E72YRC0dulkkzhB3P~Kf82Rha2qUwujq0F zRAQE=*0nXA(s^~>T!@{EYaG5O9wCF0pM3%afh+1hunSCyP-c4!@fdu3Pfb0FPmIa9 z9)1(ZPf&^qAZ&a4Oo2|g@VUU-N<|Px5IeOCCFKMGHcz84oCbiQ0#5Lwn`upF-5U`l3MTU9IjLLoHgUtUuCP*|Q@88*g*th6#_I?RkI%Fi_tG z45!wCefcX_XJ?_sw!q;durCJibH`~NcbJc7rUArSPrp0*f*ph;pwX)HWF~;8%8ntY zsxEaNUmd#4D06p2b+_*vh)xP*PmTeD(7&nO7X<8zcWQeLNH+i(Ic$aJ#Y?h&eC@nw zcy7?wpK^Qyo&4Q|sq{r7tUnTvFEP?SHVGqkp5lKh>KsnX6Y&0PU%D)o?3>Fso>Psf zpKf^C!9o7hlgZ)6%poC);wHr;VLM+9U_FsueIPPuyf7=xXkXS`>sE*ug^ zWutEP>6l#brXT~X&t87>&pc{7Uy&QcQ*Xy+^3(WxQ?^^zT8EeINZ&XHpp3w9>O@vD zy6?;lPPxIl8`5w$A7vT>TD?6Be=FXYN?f*P^KxDbxSRuNqMe@Vp}0ir222@ls?}u1 zuA1UKAl`PiDpoY5y1_Gi3X6`b&i~z{r17cGfd!4&(hQ?>$60N+KsCw|)vVKjJJSi3 zyZ2BojU1Q#qJt64j<28J2lU63DKS_n$wASzM3GF`f{`1c4E^zj`Y3zo-RsiDU4gU_lpyvgrT5}oI}r#>E(F}T+UPA-mUbc>F)EbyvdlwHC|bh1YA z&J)sT${ES7Om-W0_1Z}FmPEW2yp!2I}a{IW+*KJDbe+KaL7F=;IXrX;+s0P6>fa=ARLFdy?JZ;YV-7VFx{To)*)^ z-JyG{j1_j3sl}P3EikJCb{fGQkN1cCz5mE^zyuvos#9aStcu&U{J&H><9yqN^Xzz_ z%>myUjKOA$;puH@_8vPYu;yk_sUl>TC17^%am z0TJVd+ct{tJw9U-M=FM7u%sdEzk6z9VwAxj<4^5pm+_hmu+6Qi-Fv<>Rogpo z*z4Rv?%))Bxhp18rldFIr{S;XJ+s75C;FY;2j-|TJwBwTdqtyRia#N;nuPWfKU;L2 zPV~8UAf3)$LB3bO?CswJEw2juk%gjdAp8MrBZ2ROVe-H0IM#|h@ zVFNBV|njHCfmJZo4`oa?B&NyHw(vn$7=BN$@O|W`DWdc4i(%}J}V(Nx{5YDdNM;*KV}%66DTCz_-ze2IG*j%5rbC8z(J#g^^q9> zc!!-MyhBUjiLi=O+AFG4AcY2OG`~2$jhnbbzRLTTUu|0@0u%K~1>9^~0}r?V zmVh6-V+ORX&QDwHJowk84231NH!(}y@6Vi#hXn6{)#UD|n;2ksok_U=3r+)X;eT5K zI%*{Dczp2H*4a4iv(>~a34WCiP4MX`GtL%MvMXDqua@}hrS$7n?mH7)V?4?9cP3T) z$D)zTw{s0Tng_FTO~;pHR-x{y%RsXPOEN%3QvTZCf%ls(`BZuNzffDHF7N{8Jp3tF z`dbu+2B>IUBKRlJq;vWio9%9|o!FJf%yUM0xllEIT-6$CW0&II1N~<0oU9SSqMU?B9dDZGcDExf2yQ4N;7vPw#Q8tTIRW^5)cP7>7Hz@_=H0b$y%6Ztr6m^U%dK>?tS55j;mp=$a83g{oC5bGG+K>htI7}3 zPoex+BcD2NS}oBUEr=Li!LhExjAHfs2M8x6knXk|SCx(|dd~6N9x?|M&U!fM)XG>2 z^7--zoqdyj`Q{3*f1&C9hGp}X|G*#y#+;+ahvi3F zAS~;A^nWB>bv#}F|G(NaGvn%Mrn{N>;ND@nW6b2#)p^B?F*e-{SLZM}SGTKUy1QeV z@7eG7c-%klKhC+{@7L>@e-Eg&`L;*A(SF6?(A6m-d#b!yc?-iX1iAsx#qa7EE%1KN zY*gsq5vZZ_3vZlcIJ1jU#>8pO3NPXk1MXh1Gc8-kz=vNSu>fOu$b!mwpmVWzuz%vG9 zg;S1Gp%b*cEO>4hWM)0}Gjwy;%kmVqn-W^IAEU&l#iu7}uh&6>1oxM0J*n%niUJ+R z#7OREdWeY-x@mnb^q6PBPHX%t;XNG_g#MewG_uF7jT|o7E%`?D;=r~s)=2l>LZ%kjnMVFXE@diW^adeh{GldQ$v+%bNpF zwpa7%h}UVj?51D9-$$WU3~|g?CKurrYT2k83=&L@%;b%_H;Zc19*rCrg{_DBVaKJ~ zDlFljF!&`DF_hbFAzgotno9z4CX0k47|qSuzu8&3R(Uqfzi!D~t(IFRSOss-T!xSj zqLhO8YW3x~@=&>y+%F9%1~t?iuy2|f*yhBBEOPUzql6T$zWxrH*i=uTV* z9GJiB0*5U7ESckiqcj2-5uG}$@}!R(5_)`@hIy-7Ky1=QG$X9vRV4*DbpY8dpvmm8 zYd|;Z1`_sxSg^-uxA#O#{+F~A7dbI|wE7{h=V{alcEzze_h|Bam`iJcD5f4jtsM^3 zXp?-$!3NGdHsClM&djQb0-Bs|V90K-)=m_3XGeG%z@tBkkh4b<1#8d=rfkF%J{`-=TX3-PPDE9=&g#=2u zfUOU({Wnr5O%3iVc&3rOm-9(P>D9j+cUyYXXK99GVsV%Me(%`qWzzZ2Ah^=0Al*UO`u4U9Y)Seyl*<|03 zq_H8Lwk~e2&X5mKNsa8!R507ikxFV$dVmJw@v3e`Mc69dTSXXrThe@gZeZ0%L;T_S zVeFrS!OP_!MPd>-;Y))$V!7p!QPQV!%>4ok{l7%#J>i(l^WQX%gMv_K&sIU<(&0ap zIEB_<@Q+B)#ZDe5i~Scum$Rr)CC7>VzSB$y`_LS2qMI|{U;g_T{hI~{w0+eXV z&0jm4UA!Z@Hj+{=A#z`iuK~Bth|rLYS2vjtKsNgP?gkbW0C#O21e7blPJ;oElmA9l z03YeHaIsL~dtM(kM=9a!2hapPG4%fy9YC(T;Ti#ap<@M}75E^&S6>xM{(i(cQR_nO zpp@WKmkSsp`qhSI)bxa-dLPj!`7kuE;q^_03IDbFjl{O>s@Uj}p{U7uvaZe~(9#0j zL^F=lGSWdK1}^%9m`hKyPHCmG%KM&=a&3-HquX_nqZ90M*%S}oiU-yQ?3yhI%^Y0< zL}`0ft+^x(z19VlZ)R?l>Ilc;R&>hPO>_|M3HGiyNV#~>ICb6~)ou|rT@6^r`Kba3 zzwFE6`Ey_J@Ykhu?9m{08-h1kMjwtPYAuroo-_5PB5N{pTD}Bg?ZK@-gjHci$SV`rZ2d6V-hTV0(*LEss}+BG1!ZjSrk8>0`n`Vs!9KQ~#m3cO<=Zs6;EKn(DT{_P|GWc2@LT|kBp@QvC! z!f)fXmSDS{h3xh+Sd@UD4}N>=OYZ@zH4I8|@$~!*5( zJ8D>VH1A-Snnx@>xtPY0(~tc9L6nw$F!$)AX_%>QUv{Rwrp7DSl`%MilUqY;JrBI!)VW1f;sr6TxGUoK#u8MUhe^19EF&>BDl)6_k#eui z2Pz2+mist%)%ZotDPOqwZM9u$m*_Y+v{A|YzoT_N2T7oH`Q2AJzWfjtCLHpa#tT$%N^64GYdF6-zII`oZUQGq zhco^we63mr8jWf0-C~Twwj7IZ-tZy`HdzC{COQl3QpL}Bi6Z6{OZZc6=B}BP1i2U^ zKd_aFiqGYgv$wyOw!%O)Mc2%t6g`{YIQZV#`4x0Km9DD|S#vM|8AyP{wK?G4XSo6> zH%o5cGMQch^7Vl1H<^7a9UYrgY@neYSX^5J{$>Ak9US}vOei9|z0eViQqU zP5ACxvEoi36_5T5A@sbIoisIn_pM-ANwrH7bRh4*gdTVOBlWS z1G`yfk;`<}!UTo4JGUM7hFDQ56c*zF{W<^o0em+Uw8KcG`d%JI{kzPGyBC*2CglVn`3IGAKt+RO_D5<^=we;R zh?$acQhKRN(NGLc0_R@C*UZ>!v3w43hv;<50$wcA{9S3K=fAH;BPx%fs&;0Q=$V?B z!?ed*kk&vUydH>D-`$w|jo|>1zjWSs$yB*SGk9~Lf=BsYDRqqAV4a>Gt@(C%qg|UA=oie&fL?99 zJxJ`ed3kGhj-aHcS-OVD;ngQBtRQx@*7M~jmqewTQP)s^`Yld4B2pJJ`ciQUHoX*Z z%MHLBE>d(D?>rtZ`v?E6CW(Y;L)gG4vg_3=+k<~e!=1oIP-R%=SNiwBV{fgtXA?PP z2xuco`c7~+fS!Rn4O}eBD1IPL@ZX$pe}AvC-CxxBnXas)xE&y0d;vcfN-}A}ttcRB zhlZpZ=j_v+ueB32OR1@O0b#DxhCG#t+?7z|Ft>0xD<`M%2PjHU!GApsi&eLB;ATn;_%NEJ z5YW>TmNf6ryU@qAlLwt-`|Oc1cQ~<3Y1C`x)7GDxG`vMM^}Dlg4qA6Xc86q+aenSz zNm-w9Gr}Q5Rb}_K1hAC-o%rlYk{#sx?nl-`pMe6d@yb!j3tM67O9}$)#WexRpdT^d zA8MScW+aj&PcF7AykD7-3Xu~sTZEkPzmq6U6fUe?Web+%tE=RG7r_F@popXx=pua+ zqt9)mJz;L(Ubwv-tq&SpEghXDdcFTbrJNB*SptnvIoghol8=JhU<)(OoUo%^+(!s| z5Pb3Kx%OI_#EgwTPapLmUeZe`7_x)xhqSiEnpCP2>gtV&I_(MW9tp-Ykk~zqd=L(} zTKQ~!YY$rY+Xm*nZ8SJA-rYKXQym8?PNbxyysW?4{Q(+aii=OtYo{t~!Mx^sj&DtX zKx+|T#k5K7&QS3Ormr~sxyefn4%}QTzVUdq&IPfn2mX|Ixm03hQH5W<2det5wmI-J7|H@#@p$9t&qpPfRZ5XLqg+JCkCa#rmWYk4V)O~X$pzX}Ruf3d_0Xm&ZWn8c9XVgMlE zT>Evv2((P^s=N6Naz4xqQ6y+2G{pUj8;12A%jl1W$V85z{!3k1%ilKU=2eAM3AS%f zNU;eC46Sd?%}Z-SFc3>r&aF8i`a<781ep3-4a#KQpE`x)yBJ&O%zw+h@4YfTEK>RKP|7+$7dq)bExi-M>Db znmyqEV`qT#0qI+Kfp^an`sz)ub!pTK7KV;J<70EjhoWZQA6|)xgzM7?Xzfu_-h_Ut zAa8u0?B^}Sj{VLNul!asy=uYP@Q3PdU|gM?1T2?{grRa&7JYA}kaw=+b@x_#*Ub&D zLI=*r!_=z-~XOF@|-y$4p?{(dX3-98dv@fOa?2o>A9e>@3EC0 z!#kyEDRSL}zt#fnlUEq0PShF9CPHhj)14*~XQ-P>i9-%GH)v9kk5udCf zHd&DtNw^36r#sHiKP$19i|*HfJbdtd#c8$fal4#dZD5KIrNY`y5g@j5>jk%lC63F z7R2nA*`Ky%gf5eJn!j1VKf*p4ZTzR9A>fU83Rx6N!v=+BuqnkmBzP&AWwbbvdVawf zqR^-<&AYIe^lcA9o_yV^ev=XTf+J8zKH;2V5STE?rl)~~vd%9-eCcdHT_R)8zv*A& z&GKK~hh~?sH~kbRJ*7X*(;mwCSg5wVfDNwCl#WT(TWVUlwVe9o~R6JKtF#SfDqyoiRLk??3ZmY$n5sv_J+ z1d#6=lJe&dZIpq|Yb~ogO}Wvt-meN|il%oWHie3EC~0L}sD;b=dz$6eZCWUqJh`U@ zyzAsg9*|}WqkPhO8wAJT2L0_3nLq9DYb+G-?TK|gWq_E2Ht{H0?c6(Et8nH=v0Bkc zSKT#Ni1l&RJqV90qBg?ASx#G+Ddm**xp^GSzh`raMv8x~V5<(MK!e9VW6$rg>FYF= zINZdu(OMdTvO8&ACsP5+hdC!?R{-+z0jzl;`FX+)Xs7bt!>oNfvh-RABwSi+Ge`I)F8Y23vE{;;3+W6q{ur~Qg-3R}sjh}HCe%^XF0IX{HEecbPX z5<7%`)opp_Z3%m$=9$_U?H#{eYPt6z;_!Qk!hDz}+_~6H^8&h%CHQ%3{Y&iErK@Yj zb|W>$B`rx^*jT~o-5R^6Eu#Yp)y6UlCJsx|)Z|gMyokbD81qm)Nry;Yc6`Nh`z>2Q zw>4s8B$h0+z#T;OTKbpTJE9X`fQ%?7=p$)WD-tCNg}+W_5R+c|+k78^_9E1$$qJsM zioT~EfTa19jj?B;xSdW#NBs(v7ujPsj#FLZ{GIx=hP#pUse)`F0;Cq3vg8L?b+V}3YRYA{Tz~Ta~PT) zMC9psuB>?X@>ix;k-PF-9%z96;TY%NOr@0An_$$)UEfrtLeVh19xZlhw4{47v`qZ?ifoF$j<)^ zquZ~$e>!9iDuH><2m`1_9C3TYWI|p+n=9!WuE);8<$%~6XDK?D$7A@tY3oCAvD#@* za}WDeM0fm2(VdoU_n7Jlhlyap`D#_IQ*?U#9spXxrrP5JWOa{>Gb68Uu43_5l9KC9 zi=)I}tw5QYVDZ6b;P>HsB)^yttyxU^YEQhhqzXVGV>fS9$CB7Bk0pJ08k_zrhEJbL zPpOjq(!3Dg({VgiWACGdf{c}+*5@PBXuoAcD~VXU>sg`@{c`)!j#qD9!g2LmvGLKV zt*?|6oL^Uz@tcn+#5YVEKhJ$A-}$;73f@#=f_x)7IXiJCR%8 zRB)QvK%F1a5s)i&QlUZjZ;9TW1hjg}EV>xL9VeYm}4eGT`8aB`Z1`wH*hqNVF9k!U?;Y!8>QO49x-J6?P zRjP-u9@Anq%Z;Q{32QCyFWp|VUxzdK{hrdZpe>~0Oi;NckIn{s#~>f4qo z8WRi)`O$#i^xCbd5xXd9-NB@&klzte(@ggdF6psno=#O@Y4X5Nd+qHaO)DSfguM5d z?|VB&4ZY1jPp>1zQq)9gbBlGK*~xuZu2I*7zuEIr>+|IDA-w&SuXU%zSe83v`}J?r zrzL8%Irgkt1+PWRrkxX#it`1>(F*{*Y~r73$s8scPi)U4kJ$R~S3NPWBc0i_?ej4{ zb!Us$XNEYl;*bYC3yl{X$Hw*0;LI{PZ^b0Yj_AuYkyS}xVH?5IwrEirq!7~zbxbOOY$m5b3| zi2o81?t^_PX&6N8&bU@*UNLfBlUFnGl#>Q(;k6t`u7~+Opa7D@wZ4EybB#6 zmm=ynVgr2!p(VdnsCYJqdkCk`P9a}@W>Y<+3PAn*Zit29nYRReqWQZ6OG zbwZ0M1tV3K4l11UR`UYT+|d`lwnFdaAJnkWzzo@e(V%AL5=#CBg7a;HSAMdzoK%55 zLLUqRol#jFqiATa`NpY8F>RdDzExH=*DEl>aVg+mQF!o^zmTU$dBo{(T{+5hRAlIF zBpuIAoYD3oSq!4p3}1Zf7yy)wd7j^0R0R6hp%Ep`8Akpq+xtf$0O8%vGFjF~MQ1wb z_EVK-+DeH2LOc3{JR%Wtrv39tDucjm0?XgXft2cuvji7! z{0rZF-@Sw}1Ho8&`7O|IDtLYY(lYb@0Z>j+#HdS3N$vNzb?}8I1li2xx)WQaRkF&` zI(9yk{kZ5JzxD6ebq1DI;RF47 z2YRzbk$g?m3u1k%k1ozU< zqdGbwFcVQT$CM{sE$Y{sHg>_mVzBBGF_PV`7%k(#SQ5zBToYj#m=$4ge7pxVP?1|( z)^}%FkH(!x!V$aq|6btZ!_i~q9|z|KR*peH!VCwNQJK=lG3^=(9%-P%NT z@L_U!3)kiDpNQYzJ~xEut+huziu!K0H{ef6n1dXETFJe}KhKskQjQK`JORbK-I>*> zOYbF5O6*8pvzBG&V;lx`pSY{gJa4_ML zqOxebXX_)|m?+S+asTt$Z)#x21Aq6sEq!?@c>MDzHM9~O=R zKL3-Z@bdD$I5NTrGmH&JFP{5H;mY3csBhl}czm*&MrxJ#Vp&1jkZy0|q|3yB-eoxO?|Sh)}c1u$E$2IO;xCP2m9VzO2y0-7jLC zSG=`o0fW0{qH5(!PK|KYvmGd+LPr~%SE(qIs&3SiC~mXw_VxXI!^n5$ZUeXXqH=Ct z-IpN2@4?1=S}pZsuU=QXh_+v))yuKYGX#lP`s`gdZKkV~`J6J;DhBc@cESW~*|C@A z4k-MW)_}o)_u=6Zx#lMERT3?VzdB@isvf=iQ(;x~0j<>^$GWTYou@z>hyC5nH1fZt z%WBEtTCSy9uJv;h4x0oxHKB?nbAqU~dd)`7SSp$;7p^n$@hf{?`;6V$2g8s=?3Z=f zG<8{=@Xc0z6?jK=Ocj-4X!1gwev=#i`f0)iql!%%fO(eS;f=qn+cd zw%j8wN)N_0n;>@-F{qpG-{}eNh_oN6 z-b`OInWK5pU;R6%#8$n|B`H^*C4jVlv6&$6&JtyKHl{&G2zUc?(tkt;w~3yb*ELyF z$5>Ob+?tcoVRdlLB=qztIfLrmL@vFY*!I#5Z!VlrFeguSeseP0bLSe6n(#S=E=Q2S zm$ZJS?;>z}S|#XawViQtUua`xKj~Uiy`_0;tp@c50gk$6_PaM^lt#u`Zn8;nA0LHa z%WaZYKU6Kya!2@8XKmjkG+~$haDox>5PCqnMOmJ1q)CKU<EFNi(&K|@i{EuHFvSI~xyM%&apjbfZv%|s)n=O0F(8##EvaY;h5_evVGC^f z+(Vljg>y*-`fA2hBrsoS`l5BBm6 zy;w#!U{E>1W~G(++Mp8HqpmJp@7y{tfNyHbLy7&kqquZADR)|SpRHV56+!NIhQ(q_ zl+X<+dwf1;ntCg~1T*vC{u`lJxV=rLPjE|M)GU5!6_tN+*QSde? z*b~%EjK}K0K*LOR4WrWX>rQ*gS5ERKOF!8~Jv4b~P!^B>LyNrywnXT8igZ>`k1=w7 z%)77lcfPvNwg>0cxMmUXYiwXO@jI+Ibrs7{1JK{Ao4tyYA5IM}uDPGOYI7fp${=pn>e>3`2Fs0b1l zkve<|Ka-9U9Low2r;sDNjg_4>B5wL93Ac=n4^2R?7STVp3Ml1~7)R@FBc$k9_T)eJ zr$?X73tdAJS(!7kIW^M8PRXoSGgpv?E?*Z+qCIsGlYRaKcP)Fb`&p#^>%EcsQ~D2V za!F@t-yMdwnJZ}_Z$wZx;{zIWC(jW$V8G}CC-X7K5C<5dL4a&KLTCQdV^0 zWSO+^N7QL*1Wby#Xs?kU$%0idtJA1k8p;Xd#BwdVE^z;rBr#@4n=sx5eXl&3mBhHi zb(8iNdRMV00SGP#I^Y0-{Leb`2%N;nS&w&H#WaM;24kKzvf@ay`(3^5Te>XS!0rO| ztjeX^r;C=Ya%VjshYe}T_DWoE^Det7U7lkld^#(_iYRR1MpFW>9+KDKT?p%|2Kdt$>m;UH6LHk5BQw+<4rh1wG z{Edw%K(n>$M_kO$&-N~Kg#W@;w8t#2-DnohLA~Dn9j5d#(~y%9X8)rY8o^ZtUM|22 zg(k$UX5f9`$f~_LD?Y?MgyO`E^l-iCCWu{r@IIISphA$WunOvU=IKYA>@4@1?-Bk4 z6_zqEu*XG(@%3jyx+@2J!dTQ87wF5?C3lo>5%>1(#IIXTsB8_`q?jF6VYt6x_X#BO8d;3qk`{_N$W~dSGY0 z!vMrL9s8g@_Q3ULSzYk-Bac5o0Ss`I4mkyc07{O3Pf|*1aMwOcHo2r`^*c3=+si2s z5wsgW;cNbMaI^Lz`7%WjMJ4CXLi`ZKH zy)PBQitQ30foC;jQqOgQ{;ryTw#lVbBOQZnZxr(m#q-WKjqikx@4(NlgS{x3`TTVm zcTnKsh5HeS=|Y(w!&i>T+J4nPWr+f=B5&i8koHvz(Ea;VDbZTgf-i&Wa@{Y|m*UL` zAz2)VcuK2)o4{s8N;0TCej0qQ<;p%q$rj7><9ktOT*diIN8-IpqHO$A2^?q;wkQrA z!(=YIg3v6i)wZ9P%lE0Ca1`l%aXRDFZnQDIioXdS%GIi71T67Z@F9;u6K~OIy$?%D zJTqy)O3Gx8GQ_Fn8aqqIzkSE8{hzG+sO9#b4yt1kE!Hid=MEVB{t=;nZ|}W~Ub{UM zFtkNq&Pa-8>}QOH6fvaksh3~oW%G53B1#~ZT7vX;J$vB4*HfSdkpuNn6!JOWr%QQ9 z2OcyU$H|^JS+y>^-H<6w~30z{0*3tm&29& zi`w<^^0xxShKhWi_JzuSYl ztHY+Fe{5p(=kn3GTv`8{P@rTl%F0QE`rKdkFf6_^!A(v$C?3;Ecie4~^qH zgY-kSsInGQ9b2AHv5(uXhoSres;kNZ`_5!!2~*cD02{ z*T2{Yh7ACU0OUdF~Xjd`IHGxVv5H4$RDV3M% z`idc2_|RiX;ps#keqLUk9!-kV7p-0)t!^ZFve7_8P?T*HfB0u~@Xp)Z&Vul&Kg`sF znm#Q&+sOJo4RPmkyLOnd3Qtt4VK!7w{| zU=m_%X79z#eMDi4IH!3(ayo#p$KpEdio2yKIkKt$bkdRl8{hPBP<>gvaY$YSD|1~9%{InArCgy3Jh?P(j?b!(_)K~Lkoer=Z-Nq!+i z$b5>sS$S@##z7*7?rrGZLa_iLLbmT;_n2t$+(ROKhUlO)xfauM@(E7l-Zb2gS#*vcj`P*$@g2-xAGdn~VNDyU^AbFXun zIp}XPTMDNN68%c+UUR_13P!uRh5eYtH9feKj_9OpO}A)7q{fZ1FSp6(p}L0?Ed?U0 z%;HCyB)LUv-~)!fSS=4IoPcA*5fS@pb30(ygi!q}%~KA|3=Xc~(h>~B+vElDC2k%~~S%yR9U(#~Tro9x?xYn9e6t)bF z!Cy2LkG+vc|G}K1Y0eeMdeF=n6kJ0*?YudK-B+`r42zyJftk;!w?(&5oVX-5Vkbw} zT~443rHg+QJz$hxY&HHj({RO=;N(ny9^MwNxKh)KUBXBu45W`O>K zuK?hHHO|F7c2!wJOjp6|Y|yQJ5QTW-r#DcLmZK%?p?K3^=r&Qx{xmP(F(1pD;~8X! zE@(nJoQR|kWJ}rvj%6LWlOb2Xt?*t{$-KASll9tyumX0h zmk^|JfTt_sEO}tjQQ?;ICH%H~9@u=hlMD1!o*Z0X=T#__$@gaC==! zZHL#>uRDCV&G1s+VMys^E$!6@w5KvZldrbCz2-aGyRSPZ;?Y2B<|c*s-|4#BDg_f> z-}43hGj2?5^HTkk1(p#+@RcZ4oE?nW$W>2 z&As4We^d9p*XP?_zhSG_$HzMgsp))SH$%>^LRqkl+L;>P)4Udhol-}vTp^a%NICgJ zoTElQ`4wW(7H1Xw(X*s+GZWfh`Jr{1A%(*#5sxPaJ<8QZ?lo7^dDDNU9MYbJEU{N- za;!L+lk8c>)TXqdd9Dm@(^r!$B|n5g%D5Kgq_O2RfK>P!@PYK%gW^D<_*Q2uP_9rTozd zBYkpg{tq%ySdqg>3##c`uEH`>7^ajLi&CCs+PZ=T-1!lxP;iL#j~ccpKVe^k30(AP z`*jE24l}G$5y1IPDm}4HtdCFDdPt3rvwaA{nDhx5`V*>l8mctLR5SAxK4##viFcYC zvujSU?L&49z)#PxGW7_kD%NSrv7U?voF_z$&%HM!rb5UjovopdACL|z(VulmVZ(P? zE7meklSdwiOst(7#L}acXw=!7jZHs9g2&~jU=0mXn)3{Q7;lUPm&D#O{&qU?h59tG zB)-v5UDQrPtmh1S8NED_v|sPLrbS#8bPBThLi9cag$YY|5GtIQ27Q{%mJw$6&b|e^ zwg``j#e*4skSDvatqZg3IYQ7T@;4x14^vafjo;*MCztc=)0pE8Zo&t;{dIq7zTDYV z8pIk@TgfP0M z)E3;U7p8HKW$1o{Cjo_{Oon!ZAjAGbsz?qxj#zj&d27a5h@-stG5n}|8J4mqU|-M* z7~CHZFMXw?{aYRDx;*AOvI3X=vK{@{@fG?#T+~?4y;kl*T@h$o5(Gpo4oZ9E7^|CKOZoNit`Vl2n`CJ_I4OJ%fA%VsvK5 zcN_2(f!44E$_m60yUT52P92&01onk};&`mA^|W0p5$SR9x7ie`sk!dNfGckc z0{@yL^k^akLi>T7L+UH^DU(;=tbj$`lh#!)69j6hWa{#`WMyp#$8t%x%HT~+v(Z&8 znR-$9zOzR%*420Gd4pwH*oi;IxN;W0$@Ew31T?QF{(z*%SuFk7H6RGK@~aHw6~Afr z)yV{6_EWGz+OzgN)m*49!k*_e{?5NhN;T>mbyJZ<-rW;5r&GS(OJ(kDDo;)r(S>iy zyuHT9<8(uliB0u{C+ipo!k}VbxG`c298k-pZ-_MujyjgAZM)Tkpnb9*(kTjn5>l{m z!@FsZjh&0pEDg7QU?+cEDe^_mR2h_X zKny8O`FwHkLCz_no(@Sa)<9n-9b@QsLMBVhH$z%^Y?(9UcrA+(vf)t^lS8~S2XJeWSuVYjn3+nQ9c(7isuLIIP~lP>o0;Bk zUXc)Df$}&fdO^@|?}x0oPvUkt`ZDn5nXh-m2@nCQU&}O|3#%@nZ8?|AvM+xa1t)#K zqO8X$d#C5fNSqL|tLP&W&5t|%>}FV2B#mzFfJj|E1^{u?kuI&RZnP3> zdcABWtY!6c{2;;twyPvdSB0NcVv#5P%B^xP{S4{UAEf+E&?qr5sAWNn-ggb?Ck+}j zl-^kRBfF{W5HafZcMq>rr$y7fTFUM$1l6vw_ehBSUTc~)@kYBk z=e3=vwUyA06OiOp^!YEr^Qx22!Lw22hzrwKe)~ydHO<2t5jDT)8r_{UR{JiDiUw;p zq9pQvsn=(*bYTj6+bpW0MoV47w2(0G+M54H%yK9iYSkKl8LPg9JSL=<3xmSI*5&!l zi2Hn61$*(gVE7MR14x@3ltlf^ZXL3r{<~nuaJE`k@8u|U?fqbaGh}LF{w0TQgkh8& zCuKReto44i+J>La{3){UdiVZN&Vl)ARhtviIdG8H*dnRh@baD z@9P@Lt>9(mV+MwN-h*0Swm5r@4zE3E3X!*ytNZ)+>o5vyomGw#H8i)_ve^E3kN&*( ztDmD2_e1k#?a-(=3z%UJaqPKCe*%>rfm{Uuw*Z1o7aT=#xEyf1B5+wj=u`D1Z&1Xi zY10_TqsX&X%<2>8g_oV8-K_>ar`Elo5135BgW;~9PG_$1wX&h(f-43Mri*{#G{kUl z)+C5?#HfCfl(hMOCNCrtlmu;e`d12H>v?cq`{wuaIuj$D|w@H*dKGYOdZP#44B-plOr+DO|bv z6)eZXiCO5+Y%(W4Du_P1y|Bi#L!X@z(6X97u16?TF|%)~fimjr+`5@l?9r_c&y}OA zKDZlkZKZZ5SgL4jlK*!Qh~>lJ9du744j;9~_b`|eje86t%A<26Uj z3?XNOwJ^u|ykH2P*Gn|)z#jrG&J|OCxJj`>HBs+uqibfKWm*%`SH{a0IBEIt1Vk>m z(|R;<)6oHC!cwgOBik(`^qUyWn2S4k!599{3ne0U<#Y`cVEw$mCTl)g4XlxRl>Cxi z1WroIltdetS&Cmz6S^zO9^NLTd2-CrCp~KRAV^7!x_UqZoMJ70-b7hS1cFV_oy?nR zR<*`Y#zonG6Rj45r@~iitX|up(Lp?9wiKWeGKdZqBll@RFpygy?8en%A15>_gt9NM zKH?V_MtvasqPN!xbyHVV+|!e?71Nkzk;gkaOFSum!ZYQFq!4P*6`vZU=ccS9Cy9#3 zH`Mx>NZ{hQ2yJ6W?xmgaBp9JjdfhW$PhnQLUc>xZYYkKm|B>VBWL~XVirxq=e%MCR zCjQo$sl%QxTT$SV>gX>UH-bm%UYuU2{NMD!^iz@dcq9d$rY-jmq-OpX&%`H2&r$+4 zN#UtP$3Y*(){h|JKlht6Djq**-016mQ!*m44QY_!Uv7HlcjDMws99?CgP;*^-pFni zHh`zl?w0J~i>pdjjJ4N(h=mUJZtZ19W0Fxv3nA)ut2f3@H&X+660xk|dSf0C-(lkS z?nmiO@1dMt>22;mDM%XZl)qPrnGLjTZc_QJpER$*oLG{ze)XA2W47IWhG$F#T3XR^Y91&Uw?E_1)0?Je z*(-hl(KWxgOApS-aFxa3zu4FNDU%dgnxmO{1>#501C0kGeR#edsS(4t#ud6k~ULB>mUD zpEbT4cIVrXl7P21VbN));`%{Y3W^r?Yd@Z8x?eD<0zsUo^9ex&`5H7P(NJ`E?#)$s z29B#!R8yTpyp_+i9;!-Nt9l)=N&YQN2xjJ!r1_u;av1cx<>S@DVBdJZbqXE!o{JAi zn&p4Cjj<83?A2lj`KlLDk=K+6Pv8$!UFJ^c>q*cqpb^tS$El}DcPb~gSdN1x-82cA zx=PiaiDK!iz=W+TG}Q>RO6&4v zZoQ)a?7?q>Blfw?Fg+TOkP(R?(@Ew^@&tutj9bcWLA=(!PAan}nd4^Mpf@U)cKy@+ znLZVxM=Xt=Qn{l}9QQd@Pa-{q)`PR>Z^4PutYSI9N~00#Ta&$6reFGBpfl# zJ($X-K(vpKD-`Cn#Ls#hoEWVZW#qcBgk#eeF?<_ViEu)>Y_-*pf9ur2Dk_b4xHAp` zuiopq@@d(6-Kv~@DX%$E_o?~0bq-W@6;Xw7SbK8R4&tbisEv<^B+kN5i=Q-G(9L=_ zzg#T1bo1k9u8`dql^DjiLgGqsGEU!<`k4}P>CLJh z&Y3*~={B!`u=a&=CFIV#s5WyPv8&;MH_y*YEv_V>2YT}yXbgvVaK#7>l*kPxc7yT~ z8sXM)6 z5`x_(y1ceGRddo&hZUDyrZ(1fKiJ-{>d0p3+vz*1aHCy~owBRYx<>Z(hcpOdFO!W; zeU{j(bA4lf1vx0#>6kJX>f#mMaYEx$c75rRk7$nljyQ{xZc|(^;oa`GLGsk>sX8MBAQ$sUNEQPj z%jiqe`?_aQIj#k>;un%SmnBZo&)*K*sn?2bs9+eVlF(e2k4~`^R~glML#(FY+V;QX z*Pji$eBb0rh}r8i1Zfmo7afXA?}qfV<8*_Bqbthyjw=IO9g!V?2OV%}A%BuR7ZYu5 zsJvcyeQjw@xQ^~;xI}5Jb|XTgT$n7uk_O#-{g{7bkL0W8?D0158bV*+VI_>XPl#E+ zB%Qz)voXS~`q7^nYt=gZpYPw*DB=V0OCIjhl1bO74W9JPF zaYuIHM+gCgP{T5^W=$?OM3P^;HHUm&<)CXxMa?@RFT0-kGdT$Ais(-Y#*cWe3LS@* z*ff8I!Z@F=D|>6AXlSYDHMnX6i;>J*qLawGBl2(GcYCz|6j^_F4U$aC8c3klGTzjt zM{L?Tn%dljP8i!%^@wv0S*g(Nh^l6R>BrLF?DQHNon5k+d`}Y`TWV-j*{H$9iKX9p zjPNU;@}OF+W%|xul(X2;03Ka^UlDBf9Y~Nc<&&J{l5U14QKK) z7zC#BSf%nN$71{$w%I!vm{}SRa9Ahr9*Odh7V><}vV;}K0kLj(0#V~>uvGok&c~uYpVr)}4 zf;pkAu7l}JxT5liz z()wXbc+}XXoL^HzOWRxGQSy6pw91YK$+*?z<&-mMtYTF{^e9`yX0A;D18pl9eR?8MjE?+4)Oi_(-$kn;TPm)z~>T8V;&6f&#OZhn; zi6k8-1sF7M55dv+$ji2gEH^Vk)`^5LAn}XLEIXgGCUDuUAV=K=$hjXhQQwh;Ng5a-!dToxzjz`cFl=%OVZB6R1m>=NCCo9r7g+06wqj) zc;-Sb(BqB@ca(E&D1kmT0AVReF6Gz0=lr`ABYI|)RK9Z# z!!VtJVNAU0GXt(6-ygmV18WDoy!ZniPp8ueWJq$9NYfW3zf1#c-h+$*k$)nm{QRq-x94 zQmQO1rSj&+h?WO`r){$qppN$oy@pSdzGhsd=B>nkO)5F|-0|jfeQnuV`Dn-MJRrNC zcQpW|l&4j$9AB=}N_|Ct^E@dVGJikmxb3#X{^0|j9-gq7R0vNQeFRfdwi z$<>Yf1i86z{n!PWBPbKg2b>)4h-3_Cq z$bT3tPNyUO_rL$)<>du{U)133S3|8q^IP=U?-}Uke75-STJqcrKv_y_`0KSiTG}SQ zuljVNG!SxWN`lmsy++5cVO(3vEE%_7=xx(mP&zqB?6no82C&lvXf^XA<%CE;gCwT} zFlg(;d8G1`9Pr%pRGXy?1$Txe{v}XA%EN&dT3)Nemy;vc_Ve#`^Hc(PN_?U$#naRo zl>%QXo0exTzlH}7V!2$k<1@bF!N3yRRs(KPqJ5+RMOvr?JWJ`91Sb;l`Q1`aKJHRu zlkRp&^$Wcnh0C{w96sF?lmozKv%!A9$H$M4*gx#X1OEnh8PoXNGXOi-F-Y`>`Sr81 z`N63iSg^*Gk2N%wfC~oGYPvsH!59M=FC&cqjKVoLAq;{IssRDCL4sr(RwV;pPk%3F zs23}zXye^1&wN~1SnDv@$ZDN=MaRPNc);`X0hi0PJBPkc>CO`WR(#kN`HFvyyBwT_WQtqvKV=r!O)DS(p(Tgw2fMLlZ)m^Eb3tg_TP8cWeN zDacCk*2*P~mo=2g8lah!Pr8Pz#t@d?bK@$Nk#dq~dup91?O2Wc_+fuk-cq2K3glBx zc1{)!Txf{5YjkipYA?yetA^gM5B?n-=Uejaf0cH#0%f2WAIod%SV zc=LKv8B=^xJW9b>t>2T9Ggn5A7w@k%*BQj`>Z3j2SHx0%l4_T$Yh;lgFZB7;ZvH^UzK_AFBRXjM zJcH^|E(?{D&-0W%mD*mK-`q~odPzF5M3SD6ZJ-H-HTrldk5oXrHqWK}OHO@@vMQy~v<*)q1>Ys7oAcog(miy6Bo8$* zYn*qXX*-^lI{=d7ncKY}?RJnTcTsSNIPONUfSb?0p^IqUZvC#AqXcf$vz z6v#mHq=Lnm{?_$vwFxO+w~|!~@TGZmkE`fv0Ue2Wz!{&#eyHKg$0!dJ;@|X}d#U_L z)>>?~1`m&WJUl$&;o$+h-41}kFkE2z9(J%}u!wOd!F7G8?z#dJ5&^fh77qR}NCR zxU0jM9?n@f%=IW8H=XHV(2ead*XO={wNj>ZpD{h)9FE5qoK7d4PA6P0XZW$xg>vfk z$ZPozOQ-}mtwCHL-s(KB+PFa@L&+b~#yb)ZE!6-CuSL1KtqwG35sud;Z9uX%tr0xD zcDt4w*A^-Twx#qEy+;3*i1**U9O9+K9juaZN;%+b8?sbAYaL|zcP=2m7x6%bI%QHI z(`vkEe#$=v1TBshB`KJw;i=IJr7@+|nNnc2qycpNxMw zL-#?D=P@tcC1D-V0WPx}fcN{-gJY>~x-~h3dOHXI*@&CfpUMRI9UySS>|oIuziTY% zx=iQDC7l33K_cLAJmPRT;&eKVV8*oTP2K@^J;r5QR5L%hU-cTqb?;m8m)8i;V_weh z-c;MBZ>0}vDdj)?Bz81toKdb=YXOn9gK3WBYA7YY#Q&CbjSkD(iBqI$d+B*DU(SIk zm8FrhmB&4JmS|1>8b>}?Uac(J^jz-%c}Jfcc)H5=8em>@YB}hUOTQG1ljaZyIQV;D zz8gUTcsOX0(-%@b;wKWNIn7TaPt`G{OQi8yaw20Nt#Ly{i6osGgB>YNOqb%5l9zs3 zlB?IPolweuZIB_Cr=^V2+yvTvpwvzkN}7HzQEGnDceVWD`0;h{0X8jzwx7Q>Vrt9n zb`y3jZ1MQ`6vpHL7p_B;RshX248xT?@o%Y}yUxH3MBf>V*Hp$> z){O@o2E7LZ6F!}Qown_J3c!P*Ps|LN;d5X5j6!OE{&x+4RC<>p-Yy&k@NMkds58EA zxUGp~orN1FAcoI3FP{QwfWKYS_s^8}bPAtGyu9FYp<`9HcN(AOx~}y>CAFFNrhCL} z{4>y2{X(fUwo|@IEv0-FEr21Nb5l#N36exw61$i`|M}0Z6x3xI6qME)r^0H3$|XEG zZ!LJSgj#skIv^UJxw154qjvnZPn-Flk%g1GvAt@YQxkxP zq&iDwx0cHtEY8~>CO3#>VWsEj#zawLtV65l2MOm2KjvRmt~lQgD0){W^$Ad8;g z;>VYR=^XaE2Rwaz!sC9At_y2lCi0kqbYuKsj`O~rzOzr&F#?x#E=%pk`!)tgo$(-m zwRQp+gm#{Id7#0La(g*F&k%IG2pT#>FeWt?C7Dy>kjl+%2S2YO_J^crO7hgu%*MsP z32WyZixaNF3Qm$_(^#K>%3-a=`FzIn^8x4ciL|+V&Vyu|*9Z`EK9ZzomXs@%uT5VX yhb=Ot>Lls^7FwEjNqd)Ul_vjEdMzH>JpT`wvohLL0T@yM0000U$(J293gF2QqJgeO@YJW4 zpay>%OU2foXHQ#Hm|Gr+d#!$2y)@E`d>F3t@?oK(yvTjBn}BM<-{s6<2{K0#)!or^E-cgUX$ff%h|H)>+dwyLtgRjHV1f*pS`{r z^!&>6D=kopUK$OR-lw8h!U=I-dq9WBq&PfrYv&OnCO@Q<8bR|sX7Dh*qFJvA>1F{dD~)DSJc=IpdL7%{zz=ci-~1XjcjQ29=a>9@Zsp^8 z0-a;Y-R)b?hTYZTrFjj>4=t3&h4mIjcBOiJ2#a6wTbrk{O_CNHelOgVXE2**D^mT= zJ{`V6b^bf~6mvyA(|FY|)D^#Wgj=_lv!JqK{SD%(s03AQIAGTJ`t$WB8TOd{@1Z!_ zB&B)w-LI7grp04w12{xi!Y?;*XFKm&TVoDBx5MBw3w2)Oh8)XA>KP@`8YxPtW`bDK z3`4pH-4;ig3z#*)azd~s2RpE8kO<{7yt**%HP*5|Y#_FwGhc~FDIIpVD_Mz2$spI- z4mc6&Hg^w&QqCuHZv<)zGdr;Nzwd_iZ9N;CQ_VC+vHc}aHFCVSP^@=^`>SWOBa`iP zIwsFOnb_h(RA$5UjI2c2_qj=rt*#6*85t&Tx593!$=nl?VcwWKveuM)TJTT!Tmj3r z{2oWDN3G;p_AglBKrCK8tb(I-bnPh)EhFJ#&8GXCpANJ#N)}bTQ#&%^d&pzfiD70xswNK65jAwLpDyip$4gD=UaNd^7%YVo zVRZgl#!F_JJc)z5FD0916EHDHOrx1u)-rGjmy8gI53+(1$;dpba?1{QJxtHjWYi^% zww;VtU|)gh#iQbBhGa8A*ALAVnpwt*u@FM=;eK~q(J0*rn)yPDtJdL(U-Mtn0oN2_ z)4BKx4&^adCPxI#rtY0reWOQhRxh~eQrn?t*7Kv2Q1NEvm65oan?_8ntRpXCS8PJbPw2wzMvnStvE{nHnSG-#fLY zEH-_1!Am)mtl%$*Rl*lTB~?cPW?NTNvQ~asaOlHh%TOtq??c-@zOHe1jjhAo8yb<{GFdJYn(m5+JI?kCiF-V3lldT7H&g-t1~ zftXeX5n3FE2CrZAC1(!XEy%<;PTk&Dp000YDOQO&-0=BpbSgbdmPmmUpAL6?ph?8= z8IRi8;49Xn@=+MQxCj58(u+GSbFT&CYN3=$;_F8}WPJpy6`%i*#HP5y715jbu-#Fz z&@LY-?Ip-HMaL{fvgnID$X@)sS;*CcKeaX!GssgpWJMG>=B*Y=rDbLD@%fA*dUD1| zI4QXcQ_=4J?wUa7+luv(jF58$0cUR#y0-t=Sd|jW$DORxOt=eVq5k$0Ylb&+??iCp zvcFhQ{Mau_Yv3>zTn&^PE0WdEEXnWlXl=hC)7#N5(VXS$eM}3EeGe; zFDgDND?1B;F<=OW_2`;fYN=rmflhCVh7^?C$VDA=T(Vfsj+jt?Fm z@{#%jYeU6G=uQNj>9yX*3~e1?Bu2m%aNT-RZDyp%m0w^#(&>A+?u@LWMqhjl<_>?< zdq*aR^2DymzG&S<9)dt8GAfB?vv`M}K#%Y@oC+ImH%dmjt7n%|$2J1Z+fh?HPi3J? zw_e7h*u824sTOW9ZrS+!A*}Jthkc`Jvl$0&OUBGg#LQ`eC>AtjxVN!|)0`!R-Pcf|vaLm5*I+{zM8>KOgCb zg~Lc|@u9rVn0njCcXj%t8cEvRb+%4zmj}n_N2vW|&t|HB zvDzW5R8);-`OYaP!o2dE$Lmc#oV-k2Ykug=7fp6llIQf|{57K!zpGyq(M_QU*BYZ} ztUyn6`}>YVEu4_C^#Ghn8x}6`CN1#E!IYO>`yv`%+P^C6y}(g0lD8ke?9qh0y{lz^ z8ZIC;xBY|LOlh+kc^{?{--SaUy1r^{%5n?D=j$L_NzR0J!3oTdFm0>%4^i-GAF z=o>(9S7Dx_v_9Wx$fZoH4cDUYxJsEwbg<`$?}|5z}*+M!wy*gWtQv%ArL_%7jt z+~qU{gHPLrPy|`@!V(vgAg^7KGo&FcD-Z_XTlMI}v)&~C;=8b@QK#yJ#fZ&aRni)Xmp5T??AZhT(V8)}oJIVi{@WD! z7;7$wOeY5~dn}GafdNxG7VoPR1Z~~a_fHqqY~<0!^QmfNXch?2xA|3V6Xvh2a_c5$ zw3bh-8$Nk{Ca#?d>w0=HqL1fqZD4blQi+}MJ zn&2wzJtySid!2Y_8k*-@JW5Ws{5pNd;mJABG`sKr20h{6y=C(76+Y)1uY(BrC{T8; zs1_`(ZtrFqqm#dg`@}d-|5W?9zwt)K2W)q3$gvvxSbA0^C-_v9O_}P?%&XHfNA$8P zCaW5W%t)H2Sfc#HExO2Y?Hfk(?LLY{$u{|EM*x*d% zzDAYKRef!{fUl5LRTPC3716UmP5Jr<6r%F7vUWYq;Ly_}qS~Sem%}lRk}(`vMLw85 z^<`cjQt7EoV=Lnwxy7!UK%H31_xQ4L4@uRj41~Jm0Z>nD`}6MZ)5UIV@48lc462un zD~T9ZGGX!8|Axb3Lapv~n-vw7ue=?@r?b%^7@>!pw zfaa=puY+}*zppB)gnjQRHwg;iPFO^BzrE0;BhJn7RqF}Hi@NHIl{gVen`~1XXsg1= z^;I33G-zNXu2spqd~nI^WkM05_0wnIbZ`tbgi+IV(xl`M=L{2%y{Jw`ZqUAdLfl%! zw{1P^!S<6T4nnBd?q^71F3sk4_Or6GnJNz<1Vi-=<_=CA#ZIGV!5&Xyvx17&o9Y(v zJ%1C5=r$frUlB7BhKsQM1Qw+kQm9}iVu*8ryV4HoLHVS5$eq}|XAvw_7+dXrkQ>%S zm8sNxW>jsl4Q1JO4N654DdKR?rO*9UkFXz0g!hx8WX<}j_MDdP+rOY2|l zNoa>}#peeT?L`(KXg6xY;?+^L+cX<0JjNRyb0y35sQ@7)-a&}m_H++rKOuc6q9*hs zzX6#^BS8_mmX`6bZ|VD8d2}JUD=$o}k0QEiFvohS+=c~XP^QX9W}Sv$8tqn;EHaAH z&iWaRuEeZYV(tj*&5Zat!StS?;wz1bWKq#tLEG)$a^J(|o_cDg2)huQg%BnaSJllk zlU72U?I-9QM&;4f!sg$!yiI2_OE$D#e&t8A(`YuO(gi5(b<530-31;4kW9mk%lF-8_c0QQ&*v^2?*K?O zVNr@(H6Hny*x$<^MOE>>V-Y8ryo2vHdorPru&4y{t29C9WEIf|U3<<88<4qKR7UdC z$zcHk_SA%CFo!-NC#f|d%PYlQO;T=X%QEhehB2WaDL}{G^ryV103A^ zzZgC_t${6!B0sk3ymmS#%Wcq{M2823j;oo(iCbe(KX${)txviger&ZL+ntL1VUOIK zw0Yhf*qmeQ1{zm5^e$y|%pXEMsMkH~wHYzn-nlzK3d%<4uPlF9-Esc=LWx9)q)^$U}A(uK3= zjq(R0h+FGTvc%-W#D-JJ4DZ8C!S*5dvx0Q0D7UWD(Rj|pHxRa39@o$o0CqtXvsY%L z(xR%bAO&`dZ9Y=HRhV-h%WF9i+!gEH8e6WVoBVm54v!`cf6PuLfARd+IC+Or0gh5m zJfMe|j!emkMbr?$yX1%fo4`t>RRODkq6cMVDOc>IuY>@oK`FH;1HVx5dVGk;^(H@| zoB# z1CHp;-O7Y|a3w=%DcK|SIE1cWgoNt#V*71hR3BC;h^~^JtC2QiQ|8l@p9*(p+zsU! z)THjvPuQd_vAZ)eBh+{mbYW2qzsy93KA!^x0q%Tnv7u{W5>$I})%cH0!Hyx+U5Vr8 zo6`js6d12l2@QtR3kT%9)4ymvFSk$<^U&C-i*OvRm~GwUeL9twosL|yxWUX0$v; zM8e9i#x_Sc0d!V*hGT|`opOgg@d7+%zJr62k1~5~6=G>=le^NnB>2`%x`^%?$d^w0 zmGK%e1mG*a#WjF>%|7Uv>Ct$sfIeB&h5@Ueh(N~6sb!n+IotKXkHMY6YPR{@r_L$I z`R$;EnUzCTSJNW$+*zSfK5cMbARe3#IEQM&*N!q2kMa~knPm{!?yJ@gFz(SXEwc@3 zr(Qnl4LkGaulq^bR zvRn2Qx>lnNy%M&@2@%4d1aIYAfDzc9KnGSs`JWhSa%T_>so#c2(ts1g4X zA*Hiki>qUBUP9|4{AN)Se!ryD1wi|GN8?ZU|qZ2|Ih zLJM9y?J0`uN^MqQz@l->KU2}{UuZ|BLR{lJyqb1Fjb=eZ{zOK=ozn^Wy0F)bo7>wW ziE1Y2IpyC56|u-#`=^aB=}4P8&8J&rJdadULPz11hq)9s?-GrD&de2Qk(Z_+)(J&Ruf zadK)>NkHQSI;%13pAMT>VU9fx{t1UmCqE#QhRc_B!xiBtvj;-z!}ckkI=+nS_PSpa z?hPR(BTL3Th*SeK+pEy>a>XW$M;BU!X&Z`18|ua4i+~PeL}opnk>HDp;MO&B%(LS_ zF!EWtGaN^$a92Zs`~i@7n!ZsSEen~h10bXo?7#y|+sEPw;x-s~NbV_(hidiTb3h~Mt2$i!Aby%5J+##wE4N{KEc8Gpb|NPU(>F6Rbql5dDI)tWbD@RpB(Hl>&zW^x|+!) zO?}v`gyq4u-g{c!f=h!XSskz+UxTH7hPEV9%D5s9aghMd`r+I7Ea*;PUT`1*>VsmN z13svaod9(lR?2_y4>NEan|7w}#GsE9*f|!ih3mglJv>I$IGnG7jwr0R#NMXHIC>1Y zns5FH9c(@G0r0pN$6wu%VNrzh#x>`ATX!tFJGaB`EaK_tfF6TyyI(b^qBu^(ZDA=G zTtP*CBH$kT*u8`Vqvlze7k8!g;?il2-BpiTz55F$);S>X*g983vWv)An?v&GdZU|B zK1#2};R1I7N}GQC7|yj?!noKxg(8{Vnyso3gP!`np)bpb+WC(uYH4|a_V+-nJ}2Z@ zzoat;oZs-f-z_9nHK5p6O{%v03T|;pAQ(uT0w4~dr4~x!8!}+;GboZl`1gRWSy;|a z&Ye}&DYGgsrEAzvJT5#>>#G8AA8FPBBw5M3G1kV9tA(cP4v^?G(orQS5|G>qMt7ug zS5C7=Xv<7&_dkVBT$MD<@SK(bdTun8Ko24isWng%YlO^+`Wl}PI)?4=Mto%0DPI3`#8Nmu1ZK}BBQ&!48un&r81v-v0m&26%Pb-mdqxmM~7w~3G zpYM6Y;s}@%&^S=+ip^cMo*7-Op=0NH(F;vp%Qq@LcS+Zi*^M37q*job)ifyl22hPt zUVbnuoVAQARei-p*un}#zpDD=#0-fe&uv`E&eOkB(xz?XajU3I>9z`2=JWGuv@}O} z2z?OmqttB9gCvWZvu7EJFWuE%&1&{9Thvu_*Ueenp`-wr}5&W6YF%UE@a?ey*rk3Gp}4=>P{-pc92Y zp_@jVP%}{?Cf|cCEdM>mqD*6%sTxHkt0zyI1nKmp8F)U|J z5q)7oC1Luiq`Kc8(^$oKjXEP?bJ8<&CwR;dX+^y9dXbCG zoBL=5ercHAU*FOMOrP4vwanY6GK{lO%go=ox=khH10}JAyKkBhp!gIYCVJgYJvnmC7#M z#PsD?VVcv6VFyOvtebl17?2qxcJeFc8}g{9NEJrE(ay?ALjwXy1nL=}G?VJG;*}1p zJ{pEdIj#{Pebb16k8xzCASW-GUa-7y{op%uY?)qE&GeR5n3^Py=3fD0(iO#tsz=f8 zbJatUxEO$a2t#~N&MInT4!8p9e&xTzM(wvdw3vvhTt~KqPEI>_zpiv`z9CqtyBznhdFM!mS9z%4}v49h^I$ z*JcFGIx!8?Xb1s)Z``G1g#X)1+H5Yn`lD%#O@YL3qAkn9SOEDG95Y_+I}+&#?^YF9 zv?e*~isV{rHQx&-#ftk8gOguJu7s%jO3q5EDz&+9z4PxQgH3ig&IG0x7a-N+P**#s zlzSIBZRtzOUwNHGoX{C|W>mzKRECUb*r9nq&gk(4>AxMpzbbKlS%H*f+Wj$Ku+zVC3c%}CTRk=DpR*ILsBcLoyBG**Cw z{t+d6?Z#YvvIC3qfM$a`A$vT6Vw;U1Cl`VO#9>Z4mTQvCSm7wZ(1RQ`bMF_W&@#oi z9lwfXcfz9`;kooIQRl0>tq+>K3KW}-9dxo(*`h>zA2>%_&oqasM19m9vs_^(v8I?@ zo`_Tp_G3sgDn8TjN#{J)stpti5ks=W)KzR>6}YQI+hN!2(+gW%Y`Ssd&rQYoPx$j) zz~mlh2)Z4qSf|7|ie!S1d=;<-FWp;6A$>OS_T{ASC_ zl$6g58UK4THR}3?>0kcDJz4-1$6S~0yqSanAUglzL;xDmIggmT31q>m|&7g2#}o$4IQ{N`@Pf zec4TxmZ|EFMq9n#%sb%G^eitxKX1$`@=MFUxIlkAYT%$QLy!a}HKz7X> z*kGb1{^7dC9r+@bc-pJ$FyKc8=cf0vEG!>)pT1i+?b%gzb>8j!hL6#A)mMEmVC$Yo z*E*ZFvIzw~N}mcR)^G786hUw=Y7Fm(GaR7+o$_^FJ6^=P-Z^{g0no#6GiEDO{aY84ik{e*Wmu&^2=YTHFj)*V07wtkHQV4kx}k1ljZTxqI)NF#e7ZgW=y;c^RbEgnnD@+Du1`f1O8 zK>y+^X59~+`ThG(xDgcR^tKGZ^taMCkH!E21#%5H_mVHF4bP1Q_)4J1CxBrlfherP zOutq$d0Rgu5rg<1+G1y1I(hY5Bc#+$xtP=(U|+BPr!Bf&wvZ*+cSPLzQO&fc*P&=6 zQ3MrF>4um40PZplVCvqTv!x-q=gP{`aNT|HpTy-`56Z*w8*stcuBt~}-*Yg1wR%%6 z*R|zIrD7=`yWxwzwYIY_gW@yDazGn6DI>7&J0y4GK0?_w4IHmppp>UOJ^G(P@Q@2~ zn~QB)Y(9^#7awdOi-;wy$`sBnZdP`g$UGm^8Z})8Kz?r$d zl9z4o3=$S>WU8c`tK%K2_n02FQ_sjAnT~J;C3m~EbFOg0rw{ueK!DXYZRx}c%;UW( z61ji_nmzDIz&i+}E9g`;4Q?z@tHqe&MA5z~YqDriiq*GfrkXYz>FQ6lZ)TfhCKb_v zB^tm;?C`n&sLbQ(jJ%4iAK22LM2uvaI8emIf`m%J<7V#x6gYaiDekCBL7#cM#ClWs zDzygxHy_g%{$_p;g70*~C2>5Y zJ0pb_^5RnGmev=op{=kvJ!mE{%|O)>W2$5f>qaCYi2#@W?Z?MSP88kUv@x*#`iVoe zpmvJm__7_dp^5(?>HI{rTCHu9Ar)bqIYL zM2!xiiW_BYNjb$8)AQHx&$(jQ(S^y#YhS`12=0rnOw1cOfQy4zMhjAs3i#QY1H^2eI#-?-NgQ-p+p=xxhYgPgqaP zC@FB0pSg_7G2Li*Ie;|=xspdenn`StS5yM8JhjBCoZj#5@9+P?Fr`bV6D!VIHZHX) z-;hR`6oXdZ9tTsAV=w{Og<|6a!zBjI7QChdDM`(s0KPe!=k`zT`To+y7ut_HZsNAv zsx5PuFoqSlCe;&Xer)KU+4c4kF&M_p1%dPGVqMZGmu9MbJ1a^@j}gl=%heDso4LyR<@3DMRXBe*t1?j_%HVt zsshm=x!XS<2djT1!!wE`q$n$HmX=FP%@gj&2Y^;!d&dgKEqc<-{>JC7fZ4H5cNlk` zEc8>y>_LO|^tzj=l2D#NDU4d~BtR`tM!Q0~lL3}t4ZCUsf@RPDi zwGjvMO+DtAR^22_?*@quh{v*}<>UKSO-0iip}2vI!g?h$SJizIcx;WD%h)71-1AM8A(fvn^Z` z(ZKfiv;z}Kq=&iiR>@9X&ct|bqZ}#477#p)2(TM(UfTVOET6apOkTO9u7&F+aTk3C z{yPIo(s)458;_F!qB?)&5Z3GWs@Eh!3VfroK0hp+WmD*nH4E)=+uF=?%E zdP98mS`7Kg1V~|tK}fhO*+8cP5>u(?DR5E%x4vY%?O5ZL5(S)>1N)+7vyN$XV(;D> z(gDFUP#IFquQtyPT8v7QvXuFl%l#-J_;HXD;UFfDm5BS(&N3WJwnJN5G>D2LtC%7N zZqS9~Bfy8~l4mej=?t7Jz^(^69|Ap*duO?0ohQ}ijk8Ula}ld8@mhD5m_$s{a{6-XW^9z~>p0!f67~e?P^y;U z6Of#d;M~`@{pV#9wMNj~SL*1@p`fdZR}RKsjRr(?C4>OuK1K8t<27n@Kdc9ca~%*0 zKYpY-GB?7XdmoP`Bd84>u&s!sppFCgjFLYXdTM|9dM*Z^Myo`{J2)6x3O5tyfR<8P z#y{M2rmhAaBa9@HKAlX57&WFH?}h_II@S?dME{+S0*t+SVm+jfDoV^sY3n`1%Ac?* zzg6H9MCa8TxE-IAh}T8&0h?8*3whiHam1#wl1@W*W7&1n#tY z1I;-9zXLw+jP{2Uc!!w2P4YudT6XWxcGOB(bgvnHj8!0uI{)*2 z-s4UCKMKJQu_$v`0XN4Aotb&$g^ADlRKorsx5mQR>~2o;{9R=}w{Kp0Wo1Pw3e3vp z8JrTay;->TVzn55_L%Hue8ibO&H3tK`n1ZcboqL0*fWVo0SL;of-~ipedByNab45L%rw>uDo;`QFFKNEHz3Z0Ws(;wD z!h+bah)=PC( zuvnH5RL`EDGI1xNt+&?mlJ-N*0t0%G%;jQ`MldI_PyYN2fw+P?17EjEWb_QiRwpx5 zv!BtkUsSJ0kmuc4Yi_LaRm=ZTcrFBzAow7};VR4RXWCZ3&5LSC+oyu9|D_51i1;(~ zub(u?M$LY>0=p3}lTmJ<%#tq;JzG!Hhkj)wI#=z69nYnyhbJO6; zqJjO_;qtBDC6al4x~~8u#U?EUIj_~@gXgT~lpchE()$J5eOoUUkk_Up#Ku_^U~7Ro zAz1EiFpce2LA@5>5tR55t{>oiV^)fV9JL)qBXVJ1tG*Vvx3Ef}f&imcd)nc-12qk&W z@nypSKzNyzi%rTqtwODvqlM|1zTnBHIH7;n73dT-rVC|I{EHdMI&|qgeM03*yJ$<% z>6StEEHQ`>CHuZ4V059HYLnLDWSUj$<@_d0Q5GEd!UY@031fOWVSU!?RGjf_@*b-U z@b6@#SU5pgHNM-?SsR28jjc}_A4C$9O&2vkd@)x7T;A<)=R8cRC$pXJ56gE);;zt( zA*l2HlA^wOH&F`dF@P>(5v*E1Ou~QETm^VvV>IGAXabo?fd1vCnoNDS6t# zvZB*NuIx3fp;4h(Jvk>rik1Kl$|>L7nEe92;`{Cl9T*BAF*6(@4zbXEdq8o+#rzdS z!G_Et6%6Z~Ut{M>zoy0DLFs&ZJAZm(xs_Rs>9Y$Lgd$>ALM%luyf6}l$M7L0x%TS| zyU8?FM6Wk>HyNYPPi^1_tt1(_ZrCU((#MXRR&LW5D(L=cjqj!&YGn^V5iU*7Udl2=ZPI?3TbBSl zZGu1fo0#&K)62SH*6ZR_dO-zUvf29qc_IMhW=@%VfW+i-D2TE!YMKE7(P#fz%-jvY>bupS!YLJp443VM?Un#4(Zmtc$H<0%s&Nqyg;$cqQy3hli zMxt3jTkw+e$cQbXbN2Yua(93)P(PKmg{`b5WAdU=@dJ!^{_PyNg2o8Pbt*T63g5?Y z#NUEPa`jcM%hZ1}^^mgv%#SN34ApH62Wts}$fRejElM($X67oa_rtWf^Yh|Lo#!+p zf-VILM@2l&ODA;Vb2KW{L>PP3MYEMf`^JZO^RezWsn+&@_w|9nOfvV=;2+0^Gd-uP z+o?~haWvD#_RONp<>IcZAo?idth{md_UIL0^p5o*UR6oirWra>AO>WX*n|-i*H`su z5pVj4!^t9+aY&J!WLYa+ODgTg0l{E1B)4My_buLn)2bwD93<)F4&a857A6}yffVFV zlT!J^1nhmx<0P3ZYG`Q*qz>5%Btg_ryC_$v8gt%$;s?|wM;)Z-&Y8|`xh4)|vY;i{BMbVFm;RL_sjR`A0i4aM(x8HdimPpu{N#G2{+ zH@38t`$DNN?We%L(9N_{^kce8@Y5U}5B7?z1ETuY@VR;O(ZI0hzi`pDYz?veU-zu%Lrac62eVC8aOHz$0KYNcoiLL>G*^^|q5gg*Pk4ddnp{DKYuf!YB6 zOG-Z1yM=IrXjwRzGSF6}@d71sSQiC+{nsFw%vr!tljebR`rOZ~Sl2vq$$v^nb>PC< zqqY(xtbC^|))XV;pP_wP@r)6y0;6Jy~q3V}GO;Fv5 z_k6or%4%*S#ldyyL1S8-FxW$mNN<7Tdxwtv&fgil{3mUFRIwUgCH2 z{%Jal{rQb)Y7thRgg&V?lzo>_U@jf2sxX;K;=u_-quC!Y%6i&=y@&s7ZcDE|;m}b^ zGXQVVCruZ{{QCJM`>y8iQO~2Ep35fi?jW0jwImz8L=v=4)hVP2D|T}WkCcU zS;M?<5BV?_cNG5rNl=WMp>oJ&pc=zs<^|H?XE=0vJ$T-@tBn-Ss`mJ}{t5r@s?7q2 z_I2_2?%aR(Kb(h4;s6MHeO<&TrER9AwWEk_5C{PtHSHpqRo5 zS^W_TlKjH#F*(LtUD#@Ld)qx{0x^K#N8fIZAh##}?;?X_S%v}gD+|U6#Cu4D&&ZIg zSWB)U7#Pq8O_aY!tSIMyi@PH0ds3)mV!hP9*?wYH6HM#00g>iPZ5Bmq<$rHiRVY4E zq~THirSQgz^+6+okOKgax-gMVW|ZvP^H|P?`&Ihj87ED+>?a0fq4DS>8JDY_ag?|A z7oEAGc^|A&Srkr9Wd#BpVf68XZX|`YhS2)d0*^hDA!PXI)I}_35$3hhqsarY?K&08 z1N#;$r|(=JtMe>AyC$G5-wEJ+lWIH{5&{9rcca6TPIomW9rT%fr&?2Hehhg><(wHO z6hz_^%4Hb~wtsmY;R&HF?*?VS)Kczr!qHz6U|$aF?no$Ptb+hVkp0CWkM+yt0WBHgk=4TirWkZ)XS_^{wgoITyZ4&+8jp z-to7%!M*hNSDW6(+11r3Pk5XJ60ahnFvHPJv~xbOtW4u}|8Sb_Z5q7jokwjTCzwV$ zHoi6vW**vd9Q>lm{-t&{T!|<|*YWhelr{fQ8V68zCAr%hER=KwPy;z`AT+(W8rU3O zJ}zl!y02I=WRE%630J-u{O{vWUKQ7iRTb>SmMr2AlIV6=;J?QHP>;tm0mKaiI05TDCc3taajN_VqlS zdL#sx)}Oe^t7)%T)@ifB2S562;6WpXa>lFCK+aERDS6-7@~!UqcjO zVgEbo7V^fu3<}a;2Z}&PqSt`$a@m=(xSH9+4}W8HAtwl%HJ9TlN3}LZe39xwL#SY` zfFI)8jZQzvtvlm#wztX-DlLfpwj+^q%GLiCV&K0X;MJydvE+yi9av-B;X$lG=fl>` zdnqG9n7%jPQ~(XRTR;pOX-@W&PKrQ?Ga<6(Z8~WCU#DUm$6Tu$w_Z5?V?6OXrBu=( z)X&)=_bU;iIE7e>MkIHhe!(zm#&QTB(}@7M>waJ{i{09n7`U6T$Q0yYf?!u_pk_h} z->ck}Nf24FikFB%Kj`KF(+6&|XpkU2mW8?ub7d{NxlI4e+?DVYOOz{eIm#z3!hiA( zo~!6X)92uW#Ne2JX1KRMDu5s%fHR*u!^;f@K4^}P81-zEd9~I%^sKSE4WFpEC@x5= z^~seZ%;YhD7G?3xCGVWOJ&S(-ow=xf+$L=$1z)jbNIu?tD|pOaC$!W2i#$z6W@G1C zkX~Mtu(j6y%K~~keFYMKqR&0Q^|2{uPt)JN7)W1_Q2ZuJxh z!$`=D+*{dFNB(|H6aMpF=&$;Q>HTVN-%*d+s*lV!q>Bjz`TEJLw&#a99GQJp7$HpG z)UP0MfX^8VC<#NTw6QZ_r(nPc14(pv5~M6-)i+S067S$vu`YRN>6bJY(vS?|tRi|w zcYjSL!kl!35BKOl;r#jILi@cIPl>;={hjuZh*GIJkt3XtAurVGq5poly}tRM_f1mx z`oIIoskQ9^SJhY8ejq}M<#i6(X*aK!e|G)PLZ2X{59Q9(3@mC`rrg&0{W0{*qIPi5 z?jP?R&83O(l_PJ5yg3OMo}YMs$l*@K_17E2|50&vhx~d&AP}v`_Im$qT>kH1=%3u@uuwv$(Kh^N-Ltw4W;q%%Ha|d+LwR>Z zhw)=DJt>Hp$!Jl*a4&!7R`huU$MPjp5T_b0n7m5x6K#=P`8DXSQ2i7N6vWbhrr+Iz zZ2y{ssPeeQucb%M^x)cgY_qYkz2Iu=8Xt=;ZI{?K6k$r!KnIlyer;x@H_8#Z}9#e`fu6vn$pK7aT1n@#?=52f>AllwkjVd)Y^_u zZPZbepNLF&)t~Rg-apR8uV=(UqSH$E>B1@8HU9*#G)<)^9!P8JBqr>vm;h*W-9Ls^0-?yZ=222iR^>?1X z9C)Uw4~;9poV54Is<3_RltwEbF6wb&_C?8daWXxpy_mm!9HmOg z$t^B(y~EK$#+Ubdjr4pf`g#rj?2E`|W0o=p^Xf#vx!jezDLTYa zHHpPPkHiR26oDmm;Z@tGXFC#}hZ6<&G3y+)?!rU>^0QPDyI<8l7jXDNJ+f_F%Ct2) zv^#8GQ?~WbfNi@|2}-MGB)psNz3KFhDMzH{=Eq+u0x556HSa~t7XrWVIK2r23IkT5z`z_^hIKdCJ+|^2XnB->acE0$c@RY!eQ`H>BjlaI#E;Y;I4ME9wl3(b6hAYD+1B6s~%)>8GTpS~SLfKWlO=@pDOx?PI3z%&Ar=Z{y18+k#LG+O8u z0FiO|rlLoum@rPNR+zxo4QnvFmw;0^_3%jKcr&B+f*|6S_D1GQ0Xnr~!esM<4$g1> z$%Eg`YU72p5kJ)Yz7dbE@L z@^8~<@SpAZqIW^7hq+{X-uDX{7D!z;@c#lH4crfG%WWC*Iy{JM$*ZHphtui%<_z_l zFL{Ape+Eu$dZ*ovSm0K)9+=B77HVkcfpn~XxwGB+RWPDl22zNjLQuy_y2V5`_~7GX zv$ad=ibOhgPkR?Pk=(q=Lhy12bibZc&|=#;{{7Cvq9kr~Ytqv@;F_;}4rl#D8U21) zy_WgR(?u5o_mhSOPjv8d>|p@aqMi$GV&NR2!y?T8bukI&L2TyS!+N=2b!XJfPbxrC zCbC+cv2CbS8pOKw}qa-oaaBPOF2uhANe z49Vb#pM7&ghK3j#X;({}UNLmZtg;;Qm63!SW`$`u5$qj@r1OopaWE zRHv(qyz`b?M(^*t?M>O&yF0nc>k;-3uNlOUK}ibBv^mz!ib4y$Uu6k>$rHxhfqA!# zIm_40%!27Z=}E`$AIgt42WZ%$;fky=0nax(ZGwgG2|dox1$|Uu)87kC`T=jqw43in zpZ>LNL~yFqnVfV+9Lqj6`4of<9?fn}TGnhYRsiwS4u(JDUE;?rS38Z!R{1B6IsGn~7Gj z#zc0InKV&7ucqUJ>Zel^OFwM3{H_C}VpDKMR3r=%j8}3U=ez@US63zoVRNUv`+hrn zKP*_RrCU}L!XlouSnf2J80@X}{5pM1IG899xNNllq_Up_aY*YDOzt;my%ND;wZDo` z&Lc^!i*~LE+?#JWJRLAqwIa_VjS&giKVseOcjrX(97%aAO>71lx2T*_8@hG+3IchD z>VCbgs=`tF-APXKtsuV{@&wpyA-~h;W_BiCmpGj6)#rB@{J^|;a$f0T;oyULBsYt7 z*6VXJILQ}SQ}Q*>#;JQ1^g%>RxGVD(uLoj4vU~VZh0kv!!lKiyY8BbfTG%cY8n!Kgen|0W z|Hvj)Iljr_H=NtVdp62n6gskINzD$!i!W_s^6d*o=PZ^uU)gBELp4>Om0aof#pxZ0C?qc`=@BSS2F>F((w-;WVCmP)o*RUNkAtL4lx%_I6~G7x_d7>ezA!J7h*KwViN?La?mlb7V)J#15rt>$n9kId zCgUGgj>0>=6#NgZt?Ye#2&Dq}0PZ!%N{`*KK=Vcm8C}TqXSn#kk4o4td!I#=lk0BD zZ6mtyvppLn5JV?2tJrygWfkxF*ZRB(+X-KP!5mS<{OOOMTQIdKx)#**x?}LlhpA!T zy^CLTi=zze(b4m=CMi$G|}UES!?o{;3B*3}~sO`ktS9&{y^Th}65^2Xqp z#5ak!mBM=p$=$&_>G*u0XRg<&Lv&(WKvS&@nfEvFv;>s_1XQG`!s0uo5&E?s;mzkk zHsd$AjRK1tS?8*q$&_x1Jy{cdtjZcNy;CCGx*`M&;gc)=^3e#v|Hb6#|*$1gt7n0 z8nQ%NqIgf@3xBOla{@8y1+7zRtm`YC;?#cdteuDOz{_)eUClmma1RpQto_ zK(Jefj;L=|EOzW_tU080A$6pq|C_&dX1_yM5&1?iLB-`RjU8M2!$%iYkV4H9SyTEN zec~T!V}+{jvFOGYSJ8@xKaayj#~QC+Mv*^+F?_%^D46x+fQ z7GmbH&5S0B$3#zszgBzAhW~RF=jv6}S9^dd@n;yI599`^f9S(4N+cwwYl6~M99j>l=Ls{(Sw|s(q^w^AKv&z9K)A2 zcjoQ%AB&#Q6(T~sob~;7b#Z2k^%;}e7ZUY{%ynD)fsZ3!NrwfxRNp?4yUTC%J-X@( z9td5ZX@sR2dfrDS+xhRG^2%#rS}B3RL1E?izcJXZO2}w-TzPMuFCIo_?q6=85AQvL#FgnVCmyx>p1S8s-9eV zNZ#Osa!RK|6_b=AAX;6-8~tadsDFK#qizAv0gENuIItk*p!fQ zqcMa|e{%HkU2y1I<_^!o<{m_(=(WUVKpjZ#`WxqF3th()Tf>W~y847_ zRM&TUrRO-|lRx~KJp;c6M{fK)0*r!75mZor9FkhNc{r{dQO_N~Wx4F|2uuDa+D9Fg14}V6_D;bw!do4Ao3D#bl z%S2u8zVhCJhVN}L+<*U$r5n6U@g)-Z*o^uW-Ho4xBB_!Y1&Q@j3tpBklBe7^DeVB7-UHB)eS8=P1%S0_5LSzqWweCU(@{0{M7_dnUfXh#_!U$l`b0#vcfBlawR z--YsNzOt-+FsLNtY4?8kr)0P4tyi~&-|%X(zPW#C4%&0zfE5nEIr(dl+#HCPEBi^X z_qU2c!a4korUU{NKmFC?opJt~CZb{fkmp?>Fq?ZaUi3&{k)Q>c0W zv%SRtaZO-^T`%Qc9N&BgkzQ9151ZxvY;bJU`4#7t2XLNmD}L!MIPJP5=|w^BPy zpLHmk9ku|F9nLek{a~S)^3Bl^imOqfgM_N{Yob~GRVbDMF9r1sjDq#RhL!!GOEj2_ zZaW58b)eFbg~ELM!kq|TnG7)+J5joh0~b;N96D$^7q4EHPUFKEYltU=#M4h$@y;=J?;tM9os`0 z+VA}Ft;fH5(4V7X=`M@<;1j|^MLuaEc4zlqoVtpJLzs#X?*C20W`!c47YSPYY?oF| zTvg438|}xx@G_GX%4rFm!k(|0&JJO~A-M0C@jEpG(ujgs9sbG>ZYU=b%vl;ipb(gd z;SS?LNd>j$6t~+8UPuweB_RyZD!@Raeg@2^>^Gc{?obXbOxH)p!Lx^!DTovaD62<( z!Z^v)5KC%2R?wpnMVZJuc(x{drOx_|tqESF>)|POzq%YisX!sd72BS$M(P+p-M%1|8cGV7r2YqF;$-+ohQTP(+#*5O&sSbfCuy;_P5k5Lc#vGKt!NB&>_T|6q~eOR@FLnKcdv zAdz0m-wWI}k5J?$J{8}^FeR_}4f;L6X#`#qnLG36NXl*jc<7`GC`3wbz3X%L*1=iVMiYFdqY^=Bu3-U!f!uKkJ%R7kb^ z|bg9?)xlkwdYfqasV&S2<|gQMkOH0R1eArmK*O)e;&#%9>} z@OFl?FPl$JBphfRGWY=i*7m^_nR(NnkyZ%IxMP(ePjJAjvf;pX*Angc6$zp9r0+vn zDt1h=H1I%EnqKxfSZELMY7eMt5A+fjP*oi6CZ_dQkruwUK_f$ACbbma<`4ZkVP`3q z+%~ut|M0EIT}INp;Rhdm5D4fzMRk+9?m7$3e?02|DW5NJ7xQbvev<}<$y%U7`H9y7 zhmnPLEg`iLYJ^3&rH@AcvZ_MC%emx>M5r0x`lfe};-HlTZ6DK;2(}I)^t_0l9q;tV z+pTAM-p%^{mO6Qnp3(Jkxqea0{SGLvGe4Nbpp>1O6)fH&230A!tP?1wHgG;D^;M~X zMRRJosW_5JIV$hfg*H@~Ml+l~DojhhScttnRkfPn;=*&2;UZEQKK?lS_rs>N5I%Dn z-FkEa6@;I?YcEFa=6NEU)!>qu^_hJ|#zN+RzS21POP{HrPj zf|NX24;5p+d*gXEqZ3!D{U_KxKwW~;rwAF;Y~^4-j_NCPhR~5?!3Rh<0OJ&#h{SMX zz_D?kQrM@WpeI$bH}N6^t2jSj&Dt3QdR@ih2qy zA?=gLdj+?B&$RLZT(C+PIa;&(t{z}uhj7~$XuktO<$+^B0@xa>YQBO4^8_=GQxo=f zSWkOw<-=_Yu@`O@A>t{o1{VM`+VzfWAx_;&=Qqk46H`>r9H}`at#i`+#*H{g-eLm+ z-AJIATAAL^vMP7v%6@wPvhPm)$}Mzu8j0Dp>a)YXf5>^EpjtC_8@Lhg;Z!TBJ=(Qj z6eyf?o%Z?QNB<-*McB)s@RH~GpP4|Lo9aYSOi z;7ijI=)(a(GC@2AL}+iB>^c%$ZKCVxm(tuV$+87^>_`PxCEkg|;D*A$S+$Ww7F-FG)Vn0 zNCET`af&c_Wn}9}z?Of^&jq1gpt5#+b~OpVRW~sI52xlblFb0$x8Q{@M#@AjL>;Av z7|?A2IAeVk1(=2+ZD+sGr!pr@l|OegTu7=rOV!`NV1Xu_qms|f9+7ai zr{2)-hDTElUyvvD4!*8Wazz=P?v%T;aTlJXv+ZhfMD3&*V(sab%S(z*D-;M%TQDf= zlTkqw3x0I@!2HV$eB1J9oq2-#iw|-~P^<}PwhU!ZKEU-%`Nb4|xUN6H zIA!2(BGdKIf#_oBLfC1eUk_$Tg!0-+#=FzkMOiS-$})P7!}*9!042Q$k(p>Mp$Ph~ z@VmNHlE7`?WX*2_z;Zm@h4&((8r23;+5^x)K6##@s z@>7rDXF`WHvc`q*%THTGvtkjE+Fk z2@LbD=8l8p>4#Qxoc*>8ILYV?;9O^QwqIwX(KMr=2!96tv^%qiy=Dy%Uvilpx5Hd$ zS3lQ0`r#Q2?q1sSrRrsL^}C6ceSl$I=0n^9yw-~K+MCiv4{0`Xi0_41jp@T-c>rxp zuJr6@6SvE5qgms#RtVswL5?Wah>4F9quym9N!#Hj*x|-#k^;S=ju8Elfq6`Pd_2tq zh9zsR@T@4m_gxk*1W((d>>jf+kHVG!Tj@83yDG>$eW(z>Yo!3__8BNa4hSTDF)y;t z_0d&q*m3Zf#m8_^D3*zydMW?TA=mo%bg(<+K^fXkMrZf z{o?f-NTEKzoP}z0L4zKSXKx%zIp3djm;ZNG|DDyW!~pU&W?I^9&7CWJr%J6&GaU$r zl?cQt-r~b&EL=dVY|xR=?n_Xe&)_0|W246;jMJYt)M;0ud*k7%h+MPMx763MgZPI} z>Mp^lwZlB7(D*vX@%kWmCNapemr-+(Vxf^zX9$FtDD&gbH7}0$KOWN_|0`G~j<%*B z%O3n;sV=_3oh)=J^lhpquqa9wO*OScVYj)O*=;ayrjV``I_J(tiE-0RNjfLes#%ko zHf|%yYC_p?DLCVz5WqtsEDKMwZ>{Of_nu$KdWJ;DK)9Xfo&<_2R5~_B`h|%NY2Ups zRib`}3YXLuNSq_bJ&UOns1fB$?Iu(uc;W`a45xD0t}gA}!_vMnlk+GtrDx}`V2*J{ zSSI!=P5K61l9gf8*Wzbf4V;J~RT3sUg5bYyi%uI*7uY&thGocM>d3sfe(!w26hPeua4LU> zQYdtfC6UCye-VFGPl0%W;bJv)D7taLEr-K?Ay!L3gTPsGF9&|Pspo<5Vyv6`oqNQ3UaRo;Pmh$K2?(W`D^d!O#r1jYh$mW8a zQKZ={-ku!D1kWAQVGU1NLt_FI4=F3)mR_~)z5opJg1+B8t{zBkM&+m*$nq93Ga;Ft zL@%iPvd~1H<$m3D_L4+F)d&B9&qAjzEn~OXPOftQ@=LV7mk<#lKr((Yy0kFn?0uqm z= z>9xVFbW4iWxHPx7*Ly}ys^1MQ?#8KG!?yXR7r?!Bk3Rc30KuQT>#`!Impd^$A$1YE zcUaG(nOMnxSD*qgAa+3^TSr-=<}M1 z`Ut2B&OMYlT%QPJKV0kyd~^B!OPgy;a6}8#9#D5XJKUGez!e@dH7tSoVnYmd`#BGp z5V}sdb450L^0@Rpyr|gulj{z~?F@J8A2MEav2n?5fmoq4En+ZqA^+6_5kbK5g$iZ6 zv9Yt0W#H%a>U7`m9<0m!loteg^NgPNdc%eQhujgZ@nEw+v`C%g#I2RV)1e*X!@CP* z@(kk#6}tID$HBqMOB-T2*$j=>W#`%unb#O~9}(8P1JsW?&r5VBdZnWIp4pl-p@fIV ze;5Q$M$F%IHjXHYW~*LeyR+P%H&FJzH#|#s8_S2d>9I6cy+XKs3Ud<7|8DTg z^h^`+o933mGxR}!aYK3D$NyUN4&^X^bL&xKdHgNYQZ_f56gb=(BtDcYP(an~@=0y| zE%<5$rC!b(_>TDCZJoH)BGveyS%w#4=WnjKCfr_?XxI&3a|t}o{M?}*v23v%BUBJ^cQQwIZZuk#?^iW&?9CG!Ae+rtoNyPnhUY zAZEQx+cQQulv?~+BR?^l1?%iJQM@B7q`Dt`a6SVlw=E z=HHT|g~bU*LBze9&n{$sm(Z zshSyWOGNYpf4{et%2&6;y(5llGRmx#;_W@&)O{IDinwh!81yJmGf`5vD7C=zu25>% z1w`Zfl`93_&ZN5P4t4+3wex8MhDl1i>!;PfYm%I>hV+=aN^ZYK;3UZTdN#an%VpkZ zq#Js|EyYC?@|Mtb4HEDeaX1BzEN)_6W&|;9KW4KhKF4$yX2)pZ4MX~eZ&Z#_LtCC3 z=i@ad%Lf@yPTvsE?wcGIb@wLc#;(c~pPFNRN@2^{@h?J_nCJ0ozxKp&x6sj{ZeY?r zpv99uNwT-2xWmJ7_IVKVtuQov9pyT!eN_6j#WUd(qu<19js)i4t?`0d3TxCymG)jQie3&){n-K{E(6&uqKn%Nqr9Ex z&5jQq_N_D=eGwE7OdaGiOZmHgaYX0La|QmSQ?OFu#Bn1sKhF53^;Ms=0v@w<c%Q(8$9CyDo`dCwxNzPBJ$1f^l!wT zSHRuD0~=A)DR)9$_QgkpqvhjE1#HmxG%~uLtcepmZTg&GEHto;TzeqZ=*~ajmn#NlP@USAnp9o6e=QdH{EZc>wtNp zlJ*^V=5TjpZU5B05dgt8A-2lk(>qjnUQztY#hW!t56wM-7b|ZP*L7Sys-JG@P}sb( z(-L?tl~$f}Q24yu!N9WL!*nZr=}t zkmF-(%o*(gud9tqUgvHsZMLDr)}2Ow&{|qmnu>x#M9s~6Z+wUzd<{rk4ni;(PLHs? zZr$MgXSQKY`!1-cmQRd0UT*B1>dAu-2vaEO24>~^}F0qQMZM9{bF^&7aIn1 zg67zRkBN#btgx`J&*e8O&JO)DK*GBFa9ap0J-6$H%)n{CTHc4?kAk zSP5>M?sWo*odK-ie&`Xshbc{yO)t&Mplvs3@v(8Z^r3GkiGUJq`) zo8cD<^q#KkUOAXw?5=cCX>|3~X%wBv=oc8w$qLY3PPZ>4`@J5VV(1s=z;&?je^@P@ht-uH&1q;hU4OGZtrLk z9)wsZmo)Okqye&(CKbIPSwwTtS?3Qv^ER-=f?`~lgWVOU&+Fq#rDU0%fs8{^&0}5 zR`s5g{mZ*Edw(wx<{4KuPw!O)2E=dIlRhe1d+T)`#yl|&<&g@e`&t{%* zRe(h#qit=e_v#gN+eFG(mLn>q6!x!V%lqEd(wzC-q_BN!x#I6ziIeW(7)=c0N}H<=x*+tJZG)S;^El$BNVK)dZB1#u0pP%m`z@9v1vRWxgQklC zg_vKAXJVuFWDpOz#OWy=ptYwgZtj_f>O+V@5LYmJ&w6~Os7xZr`tH}LTRV@v)pI=> z?ib{`ZGRVEOiobQwxW}J&{FAdomnsHxJ0TU!xWgdiC2&B@H#6 z=-ktYiIMhgr_X;z?)&W!y5ZONr$M*FxTr^c6idVsJn~OjvW0aksqh|TmQkv+9oY#zqhKBT+7+ zKeFj@t{cpL1R>*NhQoj393p50#1ENOlq2`wxDxN|lpUWr3?AJP0TX$gh$kGq9V~kM zr7V8VK=7%H^R!Dc>0aZpSIa-`o`!ZTJHQc$R15m(&bz$)>49_12umAz>)wR50DDYL z+dCtd&&~K;LWh?=1t?HIzQw6~s~c%(4D8mIanebkPk>%Gs!J(AyP`p0{#U?zKm1EL zuf;{4`krSCdmn`n$MSnVJCA`%{AxHwL(0*Byh4vc5Yb+IHL>o<>XMST`ozvwLs*H& zU~adaWN}zn;q9jofIPJECRg|%dh69q!booIx1FWqfWw`uK;;p7rJO`}86q0cxL)%m z!NK(ds!!q1fOcJk-Lph32smM@jT9f>^B!+{BBHyD#=X0J7YmGyFBn+<;XN3U-T?zV zRyqEpZkLCRx1N)X;hps7_V77&?=#ZkdDUzh#!t7Nt>Ov41EvCmtAef{{*e+O z2#qqxU`an61x-8|KNe0f5zV>2^8EY~Il6d$|0w2_t4y|jx(*)IRP{O+bFlF3-%3#^ z8Wpj@A74dA6WcfM;d;D&2uopHe%6rQqe3K1_R33u{%W?8A*Il~-w>#vy z_s73BG{}n+H`cYrI1$Df*JpQ|7SVfL7tFgd+%~(gy>I#bwnI9<5bSyEX$Wt>Ylp2; z{Der0n~AH5h@pnxN^{p&&}#-VkzWO2=oC!j%Xo7^?&UYlA`*?hKm2Y<=d8h(&e{pm z9uQN841g~^kMy7XAvLj1!`WZ3E_k(Kt(4|J@J+e|%TzD)d8@6=nta;68pN5m3ai&# z635QszOcm|Oyn3n>d8}Pm%SjVkcs`DsTBo&v6Nl!Zp%nF{yag4@D_I~M~eD#PAvf|nR z|I~j<0~mEnl-=yaqEv27sozvxFK0@4w_Nb;S<+ttl3@a4+e35qS}Or^qeItOt{3t) zhDinN6JE;%b{+3FFUR+REFnf^UGk=k?J*wVy=%MoMT4O}Sr!M!iH6^%g#EH${db;i z*DTZ>)yjZWHJ~DRbUoGrE=a{wzwb4oZD90M=xMC0_>9SUd~BRc zYe$M${Y63SUW_p(KgUYyMST!G8}QB z)lj@jmVLc=|AxZa4TZ1rhZnn7w@J_HQ1KE|4qg8%KUarpGPu7*HrH%F&OW z_ljU(U-3@^1tubuc-aER1QnRf_JkBJ-cM;7j?Fv7DfE)04E=~KG^Uf zcPXTQN@%;ihbUy7f8}E!LAT*xt$(7?cKVB7gi#YdbE0-b5^gO`Q2Y%9fe;)Bg^Sm( zOoRtdwG8SWuQ9hV`%Zc(IxZIxmhG1sdh;M#dddR$>9F8%#RPA&KNI}(Hah;|GGjUn zj-zP7^f!XH!6;rJjmPqO{KWGfNaaS9R!=@45c%GGAfr5qcfrgvmdR4|FQ4(+V0>wo z{JSc1YIS!1t8D!h>zVCxk@ioej;8-q&WG=0hUgpi=Iqx0B`}eN9Pd2uR5+N|ZcZSz zk!^c#OJ5ocHuwIP2}90#3j|Ec9An8oEpeXdR)`Ndjif87wA&>Cs+Khm8SOf|Z|f3| z*={I=19kJO12dHy5!OpzZhzT6?{$vHC4!Q#fB*7bXO=#JiNC4y_D;tK*JnqK`rhB6 znkfI`KZdAZOKC7ZvPp-@Zg*p?(G^ZL;m^d)&NA&@GY9g~x}5HIV6L55=+BeilJhue z;eLQMl>+Hq1{p#4*27iNU!Kr>D4Y{VN@WDR$nE_@gMB$HalP+(BiU>kN($6JE;S7Z zj`2&N-Th9uZBg8}_0yi$YuhoApmmC%5ST||ZimjmH~Gk2eV=2`CgHb}-Mdfb<-Zi- z%+X(Dwmq`J0}E1aASzLJ%GYLhu8y{+AOg_tOP{=wtUjz1uB|dN=3FVouwZYT(r1F1QFUOB}iH|0E-3U_8l`ZSpyGE-@JB$^I zVES4%|A#tfHsM-)0eF!SLT%2<^o@`BYzrZ|Q^g^&%Q80q7uME2lbyWL+r1P-zYDh& zU-C9?Uh<>cW7m!lP&mHs;g{0$4&Xv28W6*SiBxswFt0GxL%O_0NS9ktKupz2{Dc-D zAp`%RZZ)6NS!nJ-K0Z@t7piANHugul^!aw%M!@^Q2Wwpo50&Oz^QVR*e{uBkEMtzK z7)esmim5+%Dj(Qici%0jY0k^Y!r34qwaK=rafCj6l_J4UqRtkkC=5sn=nbp>NAn8$=&}e zebH@<)v&~=NjyajIY=uMSb3ETSXRdEldWH2##5B3Sc!l17Yodw^xZ{>w&zR@!#*%( zbmsT`C~?6uMt&`*L0w@wYubH$G&g>^-D2m6dSW@)U3ucN=cV^q5aWZRe21hGS=4v$ zQF0vcK(Fy=tV_sb5dGRTo)bu@FqVtGa9(buL7pM7!$htFlW&|vmndWb=@%uWrmIZ+ zTbP0OkVt>hUQ)N=_s3XsmI$HRV_{T|Jmeye3h- zb%nrqe{epj(&k=YK;zQy>Vcqm*tF;+GP-NLI^K+`DatG*d;=pV5`nHFDqfYSe)mOL zP!i5U;upDM&ciha(3~){*7U^gMF0vBW>iwSW=Wr|4li3OQl0#Bo*Y)DyY{Q$`we>s zV7yIl=fpV=-1_|`Gw1#uf8gT7W7gXvyXPX5*gG_}CY(sH`d2L>YokQ>=dmBV31Zuq z@6cxGXG|`Gm00zxqkIcira;vWnCdLr0}FlCP9R|+5Yq9C`e<*fo)CIEj!3toJHNQa zaAqNfJ1p#@Z^UsL8bk%jC$m1~+CPQUK_i-++Yksd0oZys7$i)m?4b-ZSg#C|e&~NA ze3^Ih;4ET3S3X#^!G}I)_nzroB;xAB;_1lMGc8YPc@Os?o(C)w{L1ARdq$q>TrC@Q zICT7YF6qzRs7h^t1{K gmh>F6AH&B6D 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 Rx3sVT;qKz?Tz4oq?cbIkA8`Nx literal 0 HcmV?d00001 diff --git a/app/static/img/NBC.png b/app/static/img/NBC.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8ffb54117abe4384d4be77ed089fc7ab8e7b GIT binary patch literal 1023 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBY!3-ojA03_tq?n7HJVQ7*IBq}me*ol84)6(a z{r~^}YN7#9@$cWifByXW_3PKqpFh8U|NiC6m(QO+fBN+4*mdy*RNl{diCnXixQ@0Z za~60+7Bet#3xP1>rMq>1fPyk5t`Q}{`DrEPiAAXljw$&`sS0kHMXBZaMcKs)&cS9c z_H60_suKmNb1q6vEXmBzQwYh-O=U3GH#E~XGD(l_ zY~tHA-%mN4g|BZ&@4e$x>^|G>BSW5~jJLXx@QK8erMq=&e3->Qm?bQ(d@&_);qg0p ztmjOZx-MOMT35#Wxzv-%I#X;eGS7dakm5eOCTc;#f!z}l%gl|Ayz>g%{MCI!(C3I* zwi7n5$-F8(>+{d3$5vAJ9W!TLKXkY5e!$7SO8r&J*Qf0{H*LwKRF7XX%BSk3Dg5QbbQ4Qee8>G@cgsG@{reok)7h|43fpv2nP%;1+fs?s%0pi0v9Koz_B1cpaqTvx6+XEe1~ScOE-7Wh?B-~Qs? ziq3axGPMCmmHxT^=QSz&dDV^oV)qg=sr?bJ7un|Qzvk}$@y!Z{{CTRjY%E)P=l1T8 zbN_w*Q*ViMz#g-YEep6#6z#38ifBF3ARx4)Jao;$)4_%O2aQyYO0vl??bJDS)Hc&i z`J;h{=3{SR$$iY-v$bX!FPnW-wR~fhtB=dO8{vGqo=f^_)f0-it`*#~g*92ezCI_k{9GJkdVBL`edB~TYFo?q zxbo*5xUuu}(QElOhj;E;vhzmO?)1XaCEl6eF4i-YTgU}WIvMH?OsNc>u6{1-oD!M< DJs1bH literal 0 HcmV?d00001 diff --git a/app/static/img/OBC.png b/app/static/img/OBC.png new file mode 100644 index 0000000000000000000000000000000000000000..41638e95a775143eb03be37d08a71c37589dc49b GIT binary patch literal 1155 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBY!3-ojA03_tq?n7HJVQ7*IBq}me*ok@4DbnY z{r~^}O$G)c5m52J-@pHT|Ni&Wr@!yt|9SoT_tU4pA3pqb|NgJrw|`u`_~Y!^ZwC&1 z-LvQG?%iK@?D(>2)93Z;Kd)W;Y4z$)D_4G6zWmeDr5_hAd_Q&Sy9pEC_4dB)=y==O z`lg}bby?Y~qM}y?1uwI*UZkczkB@&I8~ZFW@>xj8)1aWI0Rd0_{GNDvK6Y_=?Bw*= z!QqjO%|mnZ2L=WY^z`m)Yu{H@y(ce!S623}q~skTq1*iYx45`&v9JLBbw#^>5zw>V zB|(0{41!9=E}?1V9Wz($K6CdS&^u&<#S8q^fW~qbctjR6FmMZjFyp1Wb$@_@G9|7N zCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^BW-s<^>H(?~1*vl`N=+=u%+FH@$;?e< zFxNLU(>FABxyTjFz`!)q)5S3)qV?^}n`M_Bc-r0`J36^fwtbn&6rpWSw-_2XZMncJ z9yRUUZ+n4{c9wG9pKk1G`hU#M_Nut-StaixnV5CY`BPVLu?GE+JIFItohfyaNORtu zhbK;)73t#jUiZ44!JPk`t@MTlnQJlmyy{KCKhmT(w6{A=S2=#?ZWgPbN<>WF!yWmI zahWai7cG>nR83jE8PqhHcv3bej#s`$+* zu}qM0?!UMMHPK(LAIn%J)Wkd47d>VYw$;6O`O#aUO(h%lgf5i7QpfDJ-sq;7VC;Wh ziMPqSZ#DE~WH7FKbTj9_V9UMR^XHmMd4FJ<>2SwqvfE>ZI|{oksMaM}Wmj+M4|mtBvZ-JH@~j!-+r*t4 zzx?{RJpQNrqoZa=vrQIjmxj6}ynp)W?ZwST^|h>LRTetz%Iz}!@^MOidxB_?GvDk( zVa%u6fA5s6Ws+*0q93}{u7~%DYL0S;Y4V?}^tslR|9A~0FRWtXo_e+9KI@FIrmrz( z>qPr%N|n>Mo{m^tTqY**TX9aT%(;8Q$;W#(pFe(c?vpnwjmnxVe_x*y``s_Qvw!Lj zHJLfZlIJpms*k@k-r$lm*}A>>-U|ai&)~wdWyMyPU92WQmHDgBu*zmFVdQ&MBb@0R7!T&;S4c literal 0 HcmV?d00001 diff --git a/app/static/img/SignupImage.png b/app/static/img/SignupImage.png new file mode 100644 index 0000000000000000000000000000000000000000..2a35b54624949bdf4555a5b6464fbb9dd7ef37d9 GIT binary patch literal 717070 zcmV(aOk?c31cOacB-j zniOeL98wf%(hvpMGz>o&f@K4GvtU0MGW;Sx8L$OdeiQVd2O9z*LwqqMgOW{Cv`O)w z9L{i>Z#RJYDQ%H8!&&rR&0t0^_}2pZPRxs zP`!Tj{z^ReHWul>N1K5b#tjG+g+AwJJSG~_^jWUYZItxRtnKl)3fB~5*=`<14B;m_ykT(oV z0T!1fcE+l_KiPVOMgG~ zRFupg3DTVsxN(UmHk>Lp^$j#}Ip*?mDgMvjDWX{93;}QmL9EBtdjW6)@OcHEoq@Fi zHwrvU(;qgCVrypw9Du9G7;6%J2MHMl9Q+5O0Fxcm-l23Gtmy(GGxc#V-cC@%T7h#6 zRe>6^AE7O~?IDEQ0_!tM%;l<~8|-t1>6EHGgQGQ5y@BFw9|gDv8ixX>6?o?I&$uBh zt}X*IjU3Z=S)%XO2!PPy6%_?l3Pcq}D^vAskMPeQm3szJuSnC3XLQ8cTbnLMV z*6q5a)?{}Vn-?}AfX+)*b)3(bN5@H#&bK06Z4_?DK{6ic`~-AsP?ph31&klU^e!(v z#`pg6e}eLjzlxie-o|_X=x^fn-}6U+!#zCyuM_@H;Ys( zqF5@hsy4n_QE+xm<}=pi4hl33Yp3m1w8N|bu;A=42K%#xui8;kLjL+ZH*3b9F9o>5 z8Aq+eM~agctW9$py(4(HDvB0J5L2uQRUxI|@xzCB?dAJ;`4Mn9G&OAIf_55)7$2;w z%h_``X|#4TF!aN?W^kLep`C3)QUp<|zf;0)k`7pfFJ@$1X0;N)bMw-l?b*stG}X^#Z>g^r>g>VMKeL-c+w+*l?rh*P8|b#T zcrqIw8)N*e4sR3~OI6Tn35{z8@emR@!Qsl(%1WkJOf;LM-gY5_LfjH!id15A5khD| zt)r1RQnL3kSxAofTe|fH0BWkZ3>bw=M4|Tu$aP$OWiw)|)3LCHXGWD zX@)QJ0kCxnSji5ZXur4+<8hh@Kap{$WJ+BwisT_`LRuOvE(A}-)~z?T70Qf@H1lFR zQdR45RT*Fz!th^)3gQM^1#o}@3(KPF zivfB^fwrjU&gBd^j*PVwTG@StwziB{N>!+q&g*Je2VR*lW7;ckX!umtAdfUPvVBFC`@fy0JMsJOk zso6p=DWQ<(zw@`v3y# z0VMc99Byx~x>JhKa&Xj~eKLw7ZN-c{s3_*div>X`CiB-z(%ZKfgvaHMtu{7ubgO$= zRJ)0|>${kgnY_@@Es18?qMLOwSe=PB<8$t>w*RH)tfB?b^9iM%@H_tX|2ZE1vHua? z{ZIdWoZtTrUjE&G0LyY8`1A=>6-5d@{^S$9`R1EAuPaWc6CP^CQVYKD2mTaJkAD%r z@)!O?Jb3HJ@%Y|-EQbS*2S85i04GB%Vva5mv-L`?&ilMUAiieA88$dyX(%(^Z1Aq;c znKEQW({^SsP7^Ot_#GyUc(x}3bKTj(eb(-NYrR%@s(Fd0!)Rvj6Emm2nM|7^-+^Rn zGVk=Oig97+Jx=LS#yYLtq?lup+vpjqc^2cR+WXZNkOeEPr%DB6*cI7|(DAu{ZiaZb zc4R&{DiyYf>{y)9#o*`=TU;!fjhpz+synw^EVl@XHZ6krB0p$+A7W@hi->6dAGuGUZj6ZkD=4L+x<#fTtqEM6 ze42B#Zhm3Tw%wed<2sBp_D5EN`gzJy1O)|W*A`L=PEe=|UlCL4&7svIN4hc)NAKBp z5un*Y=A%?;c#Lt2RNwRP#k`Yn5hPlwym8ZsXK$75UD+ricR_7V?2)Y4tZ{ zgUEPZx}s~Aa_tim4hTv7AN9idF+@BtpG3RlG}e%>;W$ypWq-pW8XRoRRGqBf^lP>s z_<78FNcn-Q*ohUM?@_(cs0#LE!QJ?0tX0w3Gjw`$dZ61)_CJf;SVXZDr~K+hcxw7w z`|f+N%|UD-T*wv+1G~t$fx>o11fg^sXX$J6QbQe+9d(e=0ABs2l~iqYSl1vqf2S=t zH(0ZF1NIf-hIe=EHG56RztPT$vCUO&(VXLZ`WSnO-NX3pZRBuqK$=i-3cI*X@n!8rC;2;$sJEpoUryy38 z1XK3bj)Dnz zIjSglGv-Fn*EcK^d3?e!1#b*IKGuZ@)|+RjDtPO6|1@s?#@F#%-~TqwpMQo|UIglk zFQV3pAN%niM_pHl2(AwYthJ&n=2a};{$;%L>O*|~`~D!-(=!~^-0@e3%puz%P>XnM zkwS%j8+m8DfyVMopcc{qg;=C0lGY;PQ5anxe3BQb?trph+gyuaA=~O86>Hs&=?s@e z(j%~<+(ZO~0MObTg8;Csz3%D;O?)?vI#?2hZy!LklBGi-%!mli+G)ACb0>s(j{*{u z;xeF^6ZP|`@@5a%vS9W&{&=pUcY=>Vbgq_>rrQTpXun|B` zg?yBvYG)wzI;vxxd;~&3@CD-OH^pcJh3OaX0sXyU;ZB`2A;tqs<8N)!Z^=KBmSv-X z!0^WBZ9Un{LDcTgc)_<{vU_0mM%ZuJ3*F6wJ$JJRn z*j`np&f5wR850kCyd=+7n4Wp2_sgvI-CLNMbxbvYEv!bP%A3 z%4PZ*4H(1bf>35=2&y=II@0|j0ugDBfsx1WM%M~kTti}}EtD0tdI+Q>^o_I=A<$Lr zD1(Xxsg^{sTC>|IoBuP|%)l)GmQt}4KvRsZ0$8BFSPP|V3%RzSC=R3dXNIB@Dz!Nl z#Sw4ejFMz+-<<&fEP}Hx4Nmi-t!-GUiYjU86I-gSxYCQ5#XX#)MSFEaI|d|bdn#iT z7o2WDiqpH$7<2BAWg@{8j)}_e%r(y(X0NX+X3N3s4wdw;$At9XcjaNcK<~HRu%Wl! zr(*0Qxmz}$IT}pR$qCYVH|TG3MAOTvVotEqk2KxNwPe$y$zK+nP0} zTpY0gJUXQGHWc0N(ds*2)Q*#twXxXZ{ak&wO)Od>q6I8eyi)I5J2Bf!2@S(o)c>DJ zE?{poBs9-n_eMKTmHrLm3LS_z{KnK$F3y`m+!<{l*~uJCdudJ|8D#~xovq55l|4H;)y2Ky_`)OL*(dncfBb*O_x}E0L3!{POA$PI z^3-s)9B@9LQMFpOLKyh(jCbaZiYC~RHwyN zfV0c)GkKKGu(4aD9(kP`0w>HR>F=gcU9CX2pK`SN zlu)D*o)Dn|X02UX@KRs5Jqv+Y%NEd$sm4V&wf5XBBUWXo4~(?6yWI9lVYFmEh$<8J zf{jsf{)t>>u2I@aX$(2vy=>3gg0ld!(yL{V9sO+uu-e%-YO-oT-#N69Goos7VVXr8fGqic|C*0DU5r9gu2$6UdFr%YcCqfE3 zvqm1*)_i78Q4Zp?{93hH#9{cBNY4gpj|{1(+sAJqnD! z!~1K)88GGell~4v(VY!l7AwMln{Ncn^zO>Q2A13w7*cYO$`QnFrSWgo?yNl52!I`> z48(I29L&J06}W;ejI)-@M?f1MgQPGXOBhF~nMf(rKvsZTT!dxhG07p zjcj{W`v2I^f>G^;8fI;#US|P3<&!pGN^xgw$Qrde3u)C#7&)V7i!hEjdoR6gS+s1C`W6NuwB}}-~)+SE_M&5|O?Ku%j|kJi;=b4hA(cCh7u%Ap zp5<`FDh1#Ai~kY6|IdCI#|MvaCo5Fh{AFQTq1o<4humtJ}auf6sy<$pQvwa zgk@zT?3wk9N)*5%YI&<*M?w}6lu~i3@FOEV2O8ASTr05po`qIx@lZ@wM|y>DsGLKF zJMOF4*jE7#jR}a5+aj2mVusOSz@w7MMBfNHHN)ppxb28CEd~83XV?jnY_6Tc9!YjU z%--QP?dASC90owQ_W%!ja^aH&Q<3id&ATnUuQUVy(w@K2yZnsXjn7K|+=Lv*oa$aG zu?(5PHj7Tl&Xl{AZ2F~^WNQM+=Ce@r$xJloF5SeEn5Ezd6J)Vt8t)4VdcFsn32EC^ zNWzbZwyu~8#(Z!W@EvLZl|p92DnvY(l;m|qU4X(Wc{C#gg5sfSRl?{$RM~WNRv3}6rH-Hw|@S_!%HLRT4@vcy4VYC56GTqm>IA*FxFqGg* zcD|L~*S?F8N*YfX>A)DgMXBN5cGV!>Ip`7Ac^rd_!FH3-?1%U3R*%oB0S$4s4B+V!Y6uSs0T3MkzAljCm^C z;_c{ycfb+Vxlf7uvTyCw_P@T)an|qcMW5U*wW0B}Eco7czJ-$l_aDE47w*4+Pe1tt zTF-dtg=>7Qz=t1vfJZMq#+z@xh4+8(1KfY%1-$s^MSS?-2YCF_OZef3AL89_e+#d_ z{sun3IpJY>2$X}_Io^|5&_OZP|F3-lP@RAFi;cBUnnH%8;);Umi$4wd>Mb6r;nn+I zB=BS(Ob)L&l61`Q%+$^zT^5J)RS=E?ZR6t63DojmamX8jraVsw`Zz;w#BsU>y0Lje zzxL<$l8WFUhI`%sKg5I3&#G9fMIx=MI~ug(KJ*TXIf#35?%rptdn4D?K?xy&z)Q+< z!0a$M?|_XQdY%{CLsOHegIqb_I&PE&g4@ToPN;S(T93o1)!-b(@b*7z|P@od&a&|xt1XCxz zs(#ytE1_dS3w=E_qf%P#1$99$P#oPL5Gl43sp>a17#zB}9U`(eXg6xpm!(egxsH!Is6hQo_5$^=AO0h<*bKp>|t)p7_ zs>0eoEY@$_oDvR)JeGM-|0o}`4brocY!{}0=VB=PbI-}DBfQq+YBy5HVlA0Lt36^t z$<9iUb17o?IEpJY^2h>@@KSTR%xIyi zIn>0@FJ!6KoDI(R!D~fq-v%I?oI6lJ#d;lFRU+LnAlk*Lzh5b=KF@0IqWvc1%$vN+ z)?|Ao+j`rEanZ>TJOh_4u?AtqrRndiPXYWmlj6zKr+D=0n|S+6U&2Qpe28^jp*K(Q z`1BD(fCrBr;U~WK6Id3(`FuiME0(3;`uZB*d-q+u`rsN5{@9VNs?vAp&o zpnl});#O0}_U*P4DCf2Tr07Qnw*B`K zb(#)@$-#CPoCIIgflkKu``AxnR%0!eTft-<;V?GJ?xbM*W|P9A8R90R&`U$YR{&bI z9UlTZpD6&;uHO%EzNFL55fo5rmpg|&2HJu;s-GDt2u9Co8wA+owUWJl(>`VVtmx;f zAg-J;SEv4S7~fuGd&`nZh|Pr~@x!AUh-@Ar>Vt6`3%^kM4L0;jInp8oR0yk-CTyrT zb6_wYHt=VBu$BcPgRbpT?QYhJRA8Sf3}iiSS(Tig=6 zVpu&y-ID6hFveJ;XHsB}2l|b7BmJ{2qD%=F6j$)x&msW)u9=wih{w%~5D`FZN1?G0moq(Pej8mg(iW^6qy19OYZ$!f}m>W9iO1x>WXl-^N|pQMeUI zd4Gb|BCkRP+7U2?VD&{FI|5nThf6ct=3E;8`aF$SU619gf|C{$zeYM1?&l=in)%{A zY>%4-&ANuxNY3c_FTxy({T3Nvk+!L$DB3KPVNeRSq=Ahw`ssGIUjrUEj^aclJEJ3V zc|o@zd8T-imEkP(WkwC#o$8K%UaW@0A)VHomS`{DkKJ~t;`P^F$LnAIaXdSn@$p9= z;`-h_$g<#jAAW*+_wM0KU-}YiT>&}Zc<%)};#Di|zwiP+`t(zL^vS1q=W9QUUw`i- zT)q4jmaFSqjG~O;ZULGjWlI+Y+9D)pG+1EQIF?d-b6QZVWg0vBF^Y|L3r8CI@s*%~ z8E@?AgJ?Id-c{{(juu;dR~@5H?BDpQ9nf-Ot80&N3&+JJN0h-)n=MpCEWs||F4cBe z%BF@+2CY2Mj_jQxB6KePggq^OBU)`ppU|6&!9qj zKKsn21;eFhx!tgiV<#nvMg_*m1XKCr9S^aPVr+6BOw3VFAikSi=PO9;ab1Lf?_cX0 z?Xmdn)YVUv<-EN>#%B|x+&_@0WKv02yMwwx;!-`Hl*ks{J=_AjkG%J7^CyFgV8UE! z2U!5WxxieWc9*&BuE(LB2o;RhRyXI`eyXFsXc=!%P;6In>E@8Y>@DUrf$w+{+0+!V zSAG)Vz_N18u-*(692q=J}~gg^kC0a zj80bxX<Mc!$O(-(en=kT(#QR%&4|iV~bb`r#ua~ zG#d45Yqd*5062)?z}_tYYXMeG%i{)=EtJ#~m4%HH?%dIJy3tC30cmICNSnz%j<9rlYEu15|lX7`J1p4^LziQJJ=GRO~2(0_V08F-Fm4 zl-n{fF0#ZP?P6_Wsx7L~RrAJK?f76O)9R_olVJlgPfR8u86QVPMiJogOE2Nx)e+zMjc?-N@B8oK-Xb`E z`xk+?-oYE!*LeR2-^cgg{Vu-z&QD^!_Xu)+f>H`T`RGHu{O|#ezwb}ryTA5Jc;n_n z$nW`sIDhl+VH2)CEhCoWlGQ!yd~}wLu@bTAaV4xXOy`Tl5w#sEkf^)0a`PHvV_{6p zvAFUzBHH+NA822DWk=tdlv(kW6w3pJC0fmC{EK5QHjn%Ba4-aYvN3>uvyrzhk;`hq zu#v{HKCV)Z(*un!fgZ^Z-0o-yn<2dEY=+!Lx#qTJZ8v4@fDLE<$dH}2vF8uFRF;C< z?KbN3QVt0IeJ}4r1B`@ADCa)ujt{TTyB0B~z1@#!n&SiVkh1XvkDYyhx=hcog-uzu3Sc+VQ))Qt*uDm5$5Oy zqIc6i2}yaF^M=cN4fl6A;5%I2u1y8hfXeE3TSJd&Xu2@{*;Q@30cQFshVgFrDv zEHo}~<7yS>25Mut;faRW66~^`ry)ui9U6VS6qDzAJy3_FL9 zZNy#jExHpUZf$L<9>v&qrd^Pk3XB_I1itnZJv6?zy z-fEB8HG11a*UkFa0xu9$tyt@7*Xg3rQL@06%e81pO;#_Zc+Q~OAQf2nbzCj0;`%{* z4xf|b*CNWSP|!i+;R?a3i}!7g*$Uv~Uc|QMP`k!5^4Ky44j5(Yo~@?zfqA0wbHqlrv)XWZG8O6r>Li=cxn9%Re+aYc@>}O0pI=3x3K_t z^wwKA9Ix=9980&Q6mG!?zh*=YvHR zi$^ipQG-P)O37OZc1&gw;OIvr8XieD@qBIYGso_{_)r=h`O7Uw573#B?r$hY+TQ277=QsOWoyI4+bdj-uYGLGVm2LLzbv}rXvp4>2no7v z*PP$KGz=b2Om@EGSpZKubGy;N@a%`K4qFjQU^=3EkIYAfopAr*Z9BhEC{hby@lFJF_DodoRs z2)Ud?BH09Dcv9k6vec)osQW;pf4x`zIEmv(fGXd$C-+U4jnSyso|t=16MKB zl@QUL8zQ$|3M9j#>~4i)RBQlSvkKEE{assdS1GYyJ`n;Dqi#X}R zk>A~l;<%vb(m0snw!Y?ANL8l+c3Se8e%Wx-9g3J6DpHQwg=hq$=kHLDkm(nZhVUpr zSv?BNRxV2syESF;tn0p;Sd`D!xu7AZ%K;T<0jhL|#abn?i}aAMSo}*dCyUy_j4B0H zOG}(Mpcyffi7sFUqB&_vvsb~2#g+>WZ>_ciT1wn_u|eskETCu@V&Thg(fhKM8`1AU zx~!}%k4u(P`K{=2q4_4XGv8Q%KQvCf9S6xj9k z$mDY(g|<^Zec6_*c|+pz3~iUux4swib^%3GNh-I)5I&iIBA1nGz7V$m) zj(Uzq)FnYkyREZfbjMD|NCtW9Kk5Cb*Ul!(NE0VSG{XdNC{%b4Ef8qCb#h^s^pZ3! zo(F*KC%###&(YXQL?-EmV&?tNNn$%(?ujGo)wnLOrGXM=}rcYZkoxG#U1JA@YN^7CDSb12^ZsK zCScbBASy$mmj|fy?KIK6^|Z0!cV;N20ni8 z5%he*z5Dm@^yw44c>fB^^=tU>@BTmW(nr6E^2Xb^Dh2mneHG{RjH7DXeFuP3B!LFw znEB0N+JSrg-J+ocmRP$;!O?S-G>fj7gFhVKe9SAWyUHx?9hExD^`JR+8t=&*&V3M~ zCIYhx&<-iv%{!B0Q##5GAm~n}{qAjloIN7?;2R_&#pT(YE84csM6PdE0D;efew(}+ zy~nYlTaQlk0gOB5mrUcmI190l8U=a7vsj&h1!Y~K3D^2u62 zFkWqG@Ah6Z)e}6!q9Y_iOoC~(jV>C7qd+mkB7|?1p1P?EnlWXVg^W9K$GLEkfl$ZW z0-|ePSbLzS#_f%C`Wunpe1ZLaf;iM@B^kwgZ!%ZOa~o6weM0 z_yWGd7reJC{@tRm1ZMeq&!B~kLn;GnJ=dy@R$}>afGy5rF;mjQULYQY0dJ#XDHTxL zaVy0SCa`^6m~;J8z&^-!u~2`dxs~9>u;{Xh5%MisC@5Mys=*Jc_*JL?plaziXND~& zQVT(*QaT%NUP1j!x6)+UFQ022^8j=7^?QZ z&a35W*ek4?;@_&auxUvXz3!qt+2b^PT-(w-$<1zrPvy{NA)gH^`##zmk-XFme~HC8 zfH<>HKvwNhHBIlvd3q`CY{$j?OoFZb6oJECLd?dpo!NXuC$b1ay%xu?H1d9Sc&tVm*h*0HUAOvj!p&7&pd?f47Yo<*)i zDexOc&|SQ7ZC~q`L|(I{CGjE24!|R(lh-Mg&Yii_%)) zIfJwx!Djr0Ea7JYw5a8p$d99XV*FVS4YId&GLE+jrdO|zIGC5J01j8U`Q$@<^8Vk) zOaIcJ#CQMk-@>QA^)0;q>d&Dp2dGrsJbQ-2=?1U8@-mjg0Z*Sk#p!gy*8k`h`tk$`Lj^ z{#<5;CMz<2FXQmG7@ZDBGE?`?{0v2@ZV*!L$DfCUq}@yVS?HCRs9m?-915b5o;=dZ z%si4jHcRf%$D+QNr8-0Adk@b)s9kqhXHF9UiUn1=Ar}jR?)tEJmu4KOLA<~dK`GF3 zPje`fMt~lOAZ3dB@xxXvRv~heLy>c{_PdW5nY%opJ3_ zb=r-i4zU9U%;_*{1wNw9sgCg+4`p|2JwP-V*udSg@F;26P>lZLW_cZIxsyfh3P8@$ zVF~f_-icrqWnhL)>0gpDvdG%SiTGlpWrno=TUMtK7lk!F22$tHWdNIqi3u1RcL@vj zrc)a{sj)QKSvGHis3l5?UBxXT0$ zJ(%Q|xX!b_oa?2Z<&N;|6HFSkd^i<|GtR5ai7qX;7e(YaP!KYqh@g6Dt#ZWN){#1n zH01pAIR7FkwAmf1)e{_Y``lyTtW${5zQG>X69aIkeaL3P4Ta~J%{(SRNaKy;SFav7LFQwsSQR9*gKWuEugp(eDsyM=^-C4#oc+ z5BT(>4{>w#2seNK|BcVze;3Dl4^fKI!Ka^oiu3u5)6ET}*wNmXUwsvi9zMi}pL~KR z@4bh^vOvm5INjXfrN@tPtrho0aV-_A>pkNHcOs(OLWDm5-0!C0TyWvy>-E(m0~7~Q z96fR&a#!rl>lj^{icfTL{MLyned*Own;9g<430>3jxsd(|)E#)RbVJ3U`&p#& zz?g}-^9)p!b@EOw(SPhr=P(WaJj?JJg*`BPM3LVMq|A_dTWLoWNN8r`^LdM=&J|nl z=iV9G{CqQp5awgv>)bvYe3DDfH1;jOI!f@&b6RjeHWi|Oh;Rg z=uUqZN-P+s*R}8$B{+jvW_|VX3v2>6ick=tR|JA()0UmJ6(WJ|g*V*RvY@(ZS)|z2U^<#i;@x+44cB_2 zLW0rEZuJNYlWr1mZoI|PNOmT@4P8Z~U63#^T>Vn$a!Eq$3+y6xC0icZY_xOganotCij94n+u9DDINKB;Kmk=h zqT(3I3Vh=%WDO{T%#Sj2;LP;oM*mS;Y+H!`Z&*i>;T#5eKbe~~`WBBNm$N!kVB9=N z@3g-&gMunG9@GhbwD-rh6x$WyXaIV2(-7rVkcAwHM{yXHI~Pq`n8mnptmnlg1`FzGbD=A zo!($P_T|o)nQB~xgk3bIKo&oXec2E!h`b8c>pAQ!_3ZIwglkDNSYeKWinwXW;VbI& z>I)fi)Bt@a(`fI|FePvYg94Co)I8p>0mn#$p!yCkm*AgJ6Rc80ChVx8)_QMuyqPS& zV!YRnYvg!QV0)umZe!q2`qvs^u|!DXpV&PGar>4{I{)8rOdDjrCHUf4qoA+dBKdEW zgLErtae%H$*E5R8zw)d2)^yyQ)@WKmt?X}l%zNz@FU;pR0`Rr5NoKAT2_1Ey={yp5>Ji#kV!Sw>1m#)E! z3a-!>$rWmeNrMin9bD|=RKMEMaxf_3$Rq$U_uo>CM~aN&8w$~R{&BNLBiS-mL`w!d zRHwP8pr6e;EN`5~YYRM&g;-QWb;sTs4!#5{+X~$sF#^m|DdO7f*oq%j_CeI@w-kBp zRRuSz;OPmteg??m=0wmeI(IJu)Wt;8;!IIjbJ8f>8D4+`iYMf9CADa0if|0%gn>Mq ztkC0KU<|KN`h2Mb@(bzOsDQZEW0b7;@7 zJ?fD^XTcPa5HsT^4Pxt|_g69l=;zFsH&qI!t#e zEEN3zvE#8-M_bosr~fWODm~eDCiE7iz)=j(d%ruguXU7;;cSqCVFx+x4Oh2rr)RJ; zJQI^55~e^qtY!t-NSox3_9jIg2TmBO$TxO*z0r)=FCp%_*&OiCjG|HcQy*u7wra|xFOJ^Zla!gGy$7x7RAx0R!dG7*gz``~{gDng*na74n`(JlD+L5OjOzu#0pc+L4oZxP^RtzcoOfPqliYs5r-lAYBh%e&u^#gekXji1N5->n7M5d-_cgvEqepo7%w)V zCIdQlZ9LY99fPn~g1tT?lvhhZsnw2Hh@jNfWKfH8uoko|kh=4jIg>KgPWM+Z4nmvXIG?3+q6_M`YQk+{StQ)J&am2Tl3to&4D!kg2B-cay#@m zuSqn&hizZn2U|g)?*hAi^P~lf82_(3Mo-Yytenx0kM-AzA2V@hswb!yhjmrUl_da9 zsyLs4CpU`Y4IoG0>T2BJ0F0i3w(p7Y_l>uwigqiP3UFwOFeb1&I)(@bM$U|3qh1_+ zU}KLXl|71+Q|ZHd`S*drCT->&a&C|Nn8>&G{=ob|90{M65URYcnK>0^&%;^K z&UVcRO-G@9=gsO%7JIgi6Y{g2%5XPhIya+9K(pW$`dvDaa$niznK>__u#z0jlM$|6 zflris7j$;zF(x>=Y{?0lSt04JZe`PvU>dHTD~Pj~P04CSk8JQh+Tq98xo0Bu*=Wy7 z8$|(nh$UcQR6|TKwbQbC$`qjjplHD=infrGWmB&V3MRcj!N|CjSy~%{NrVJ25{<_D z69V7#k>*HUO->nEC>a z3|lr_j09?HBgQtADGa1lYHLQYpls+iq80=c;sHDIR$WJkR*PZ~&za&CYq15$KsasJ zeT2V@W`+mnH3{O z7-#f5CxI@k$EXkb8#9zGfrdrtFlwq3eK+~1Bb*t=wh^b@;S%E$AF~wTDE4n-3n}rp z_C;KriI3_z>7I%?FRl=_(TXY+N2$0H(=gXK;jozH_wwV%cKT3Uvu~5cIy2S*`EXN(v_#Ry#oCTP-e$o87}j6Ab%HPi(@E6yVMB{vKdyS5nSiW& zHf~ZaIHJ$-+11_RZozdWdqsNGnp<9eR859{DvYP>NR!&p8JIKbK=!)8oD(chiYjha z#mx#_xs&{WF@{)S$t*)FM_|CogBQvH?F!>VFnmU8HY#FJvw+h)(cx_1`C=uQ#VIf% zKKegAN1rnx1dKaC*))%L*lE#9rHZgMMI38ooGjF63lSB1H5oyT07)m@abh3=KvRbtVv;>z+Q-`yNC{f9 zN1p7#*l;T)7Twi$G6IWMMLqO0a2an#W`7I$6pf$9S;~2#MKWF%Tk!fJF&V~=4twK0 zjsR%gbOs*&g(#OYCqCj#BOZ*>3#k`&kwJTFL;arYkY~xJg>_>Us;^ z#S*8I1H*-!Y$6yFS4zyEVy(7IS;m>MD~`|?9#M|4``W8?8epH5ee5P_Bq$vc=TcX3 z9xyX^kY_~ZMV)ZUHZGPJeeWGGuRgT;Y(&WM!Y&Li%B zX2i|L#mx-u)3fHV4uA#CDsw&AuAY5f!D20QF>1ZZUu1iV*RoeNhM)8JuNoxA70X+fI31C^>GS zk$H16*wfgq2|GmTU&aBK!Sa|0B(5LMzS*-&6w{JedYD73KaLVNB$y73CS+E>TjZc_%5D)cEpR1 zAESCU>o0%#%lOCtD($ETtc^NkEI~&>ND)N8NlXut$?WDSrt54fwJ1Tu02;n zIEI>oD8VEJkfQ-noK_FbX2;0*H3R#cg?BrG@n&+X8GZ~X#%P5wSfVZ7nTYrHP%5*Xz`YXQx#+G=#?41mpj*WfbG|=z281aW$W)YTHW((q&mq_| z)2XF)Bq3Tgip|X3+xD4NU_9r;{St9$w8EY>9%oFR!`s5*!#YuHl2gvc(O{sDLVF$C z`>BTahoxRvRp`6pqN|5Alx^naU5iP^IwI)N7EakiTZx*?!a-3EtTh-kwuw@=tUe+g zPXUFq(uh~|EBo5Zml&O|$AKBWWhbPROWckTeUAHnJY2(Lsfy<=-xu2#3a%^2>v<@@;h zv%4BXReSQW*cn%JgButPi8z-Z+!1n?-JR@ynmU*%QYvxtP!ymur)8)U?}dTdq=4=u zh{cGL#-SvOff1JBY-?(-Id3GQm9_!w;_%Eiq*%gkbifWf6tahgtI68`#%D5o7zcQE zeYH3+?K(UF$2hH{b`!-}v15o%O7J-yS5t>~5cgS>r-ru@H!(w#CCOM3j1vcJ=u?WOtR9VJv%>(Q)Z9Z3@Mz#d6sI=%2dXGmPKS60>-#iRdI1NlJN6kEkYNebXS^ z(W=rD?>Uo1G-P0$oeZEh8?AVMp${^z-lDnvWl{_nd4K3@0!MB$x%P+8ycS_u6D90n zb~bEo9>9p(NahOIg78S%>M;_t$W|y2AB?M|gUC0qdt9;LX=w$3OX}{}f;R;@kMjSH22W z#p!gy_4PGg`LQ3z2Tz{iul(QtZ}{kgA7Xjw4anij#l}eGIw;}}al;oBL$pyC0z4#o zUDb5Nppz6>$pjg64!=*&hWXL%@Th6xnoTjmGwb9S86RgER7GP@8}Ui)Lfez)qc~#4 z84GdwylAxz46eq<=`F#r-~gL{Gb0Pm0xYUH!yHxOM^RQWdu^?X(-}CQ(em$QnF$A-sGLTL)kFa9&E{onlVh4bBcqhp7U(+RmA>nr|z%o&E^d zL;thw^3-vQ?<6J3#<{4kFx*UR46t;V0mPl+()w*Cv^gMJcyauXcW(S4g;R@&T^_(f zh=pK`q6k!b;TsBv05seyK0{hiqz6lfi(^J9RY$&H zJ+&tRhTU?4iFG1RXJ7PeTjRChGLfO}O_!yS=V02J&K~y7-jL&A#PMwp6^Wf$Pk3QN zh5z-<3Vi_R)+PZX-VdYybUVmO~WD>BYk)IBRKDHhp)aTBme&qEa@ z?i}ZNj%!-CeeO`*o>4Og8{LyPlaDk@!x_nJ*^Touh@Rx=>NsGMo(6 zlQJsYF$|NJJw>AcI9g;!Ghi*-e=Jla`_175O5ckrIj1eeI*x@FnB0wvAuaPg08hSm zTHS@Cqr-A$Ket>OempLmWbAxpImZ#t+s#4sXhv>-r08q|&gMFQ7Wxu?lj#POgM_3*Oa|GByse^k$%^zv{u;nL6162U1p3k5mCKO%JjM3pDF`G_<;(cqy z&1awBoj>^V_`)Ch*YH>W5C3a?{)2b%v%mkpgX4n-IGvy1bY5{hUg4vUKf+sYy#)X` zoldx_C!C(%;GN(5hjIPp+xW&``U`mU@~e35#YasEjnc#?ddM@@g={!hn!BZ)+38=K z?hd^pW7NQG{v$debX^v0o5E2eyuT#wa1!9g+Z(RW#HcgEn&icK%xaXAmgm~o7g)rS zs>Kh*ZAp=om1+0@_>s>@H*0p{x-Pg0C!Gal)E&B%6k?l_NyWa91yb10e^PdFQx_V#I> z#Kf>Y&!Q?JnXlkzI54gmaIiTtks}#mP>!7;hXd&M3AmTarDP@Dlg)^eFizky4oLw7W9En`&+mNGku+=}ydz&?VLUTrTb+QRF%1FB*y51yQE`WeTZZqC3tiox z_qV!(Vmp%9Ur)3YtDst832zHH!YQ}XM{IN|1Kd5^f;k$h?|gRs5DTg00H7`q&hV_* zE|6W&McxdkyNEmzVgYCuhYU!9c(hkt50Z^JlXrQp*@k4tZ9LDiCd-w)$;k_`Y*mCQ z&=&U6GyNZ==T=ytIF#;wYVb*?fSC*wvEz@NNHKsCRT}fojZTi=dOG997a!vBE3e>_ zAN~M0Pd>*h*H_SokDv;C{p(*tt?EuLzqNF8b(=e+7vgiW zsSptm2RFc$9g3J4y|+0NhLYRWK1g6>ZZ3RNgG`x3 z?0l{{=7*I7&<(xI>b}1-8b9cZH-0EP2Ki_k+^Hzgb|8Xo7zS>VmD}acXS*NKLR9T0 zS#^Rb!+cM~Dn~(Rh-x-6>7BULJ!g;|U?hr)wndvU&@B4aziVMh@AH~pEBbXVWPG%^ zOS)Zy&4=i3b9jz@uwgFDjJ>@QWAr&0CNGFH$1>@_*xAsr8kQj(kRB8PyC%pMmOf?$ zLW=jW+*A@#wL9mBG0e;=KpX}GInDr@L8GF6ot(F#+FA=a9o-L+V^VzKE<>jCsDE5| ze@-DfMhmRfrn&L6ES4;8FqZAJW%Jh-P8xkQk}A#@Oy&+x)kvh)pRd7UM5+SdjAEhv z9Rs@&W-Mpf5a0^!t1B9gt!a6WT-I~0gImRtcHK3rJ7%=cKaN008zU|Kic$b3I7T5}lQ}ew4~C;D zc&@ctN|%Y#D~Wd?)r?(lZ%SA?5RB2L%Lj)oD$xgX~nX)w4V>csy+y#Y+Y+rwCNGz6EA zSH$rBva|QaX8D6I*XR_!D;atDG3y#sja1f7V zSR%^6%Ao)Yr14|ej(muZ$Gvg~z~)vwpeF;ImB=~A2ffRwRitBsVI2;aGmIG>CadUHn!})~Mvu9Wiwydx^cr)22(+!-_ieueSwXZeem_=-Q#ESx*MomX|T@MRRu#E_dc;6;zy{Up) zBl)%Shuglv?Iqb4EJfn+*+-)2iC;NlPDF87R;=r?Sxd#&;GH%7wsG%j!C^IAon0~> zutH8NmZt|?T?6GBh#<|-Jqxw1=#GZE`ajvkUj7{Ka#z`T0FXg45JP`AjJ{gNNep!uZ2)KyA-o{p3d(LkW*h{;v$G)&C_-l% z3`-aE@l4ZSzP7aS9FOW!$FG+1U4NCvP@vynx697W%$4mqxxzrxG{StG= zLl5tQ^vN3PMf3$mf*oM$ud&%&V2VR%2jBR?#&9LTO|`3_gwHE#9gbIInUYIY-$NUI zn{b5VpkZDkX98JY&ryol4Hf`~O;Jv!G>$9kskg@BZ0xmJ-}!R@&*aW@ z)?`bsdZ+Td^(P?Fl5_i)W$oTFCUi@~b9~gX4$$X5P#82An{zQ`k-w-pB@)n)q-@Z$ zR3+@HcD1F_9BYS}BO8X6LOzDWc*iLJ?J3fCMSQWSA?t<-86yDfrv?2;M3>Fu{8-Jk zMHL(pPL~Z1irvkDzPRt$t>8ldfKHaM5pTg!1hrY2fOz{MpXu%=44l!Tx+03f^hdl^ zu^@6BB#dtGu=k|DGuagmP}*w~g_Q-+=Ex<6=-E<$q7)q#a$zPsCg3)3xY5~l7onGB zZZkD~nc8m_iSC1x`9I5x9ND0785jI47%p-d##hXJmWLkvTclr0c_qMA=^^DJYSH29 zH+GOrvcHkHXdFe{NYikjX<7w--L>3sf@I~z-#Mh|HXQJAjaiw!&j}B2En#fLe8|>N0!Xeq z^>KFJz~f!#vk6|HT}e2_eO@6@**M%MuZ3ZiD}@r7sLg3Znc;TpUr>;DDGjGOHnoR_ zY`Am%yG}p#PObI7?c2~f*9q~AZZY4MJTM#u%_wonAq8W8=VBc<2SEHZ>1Q|qM_q^K zW&@9)$7Q9sq?V|%jP(b`AZ8elP4Df5^x1FJcAGGAGUPEee3app=4gm;Q~@|l7h>@W z4U9!_3P+5Z@v&AKY3LiFA^Y30L$Fr!q{k72fF=*Ku1gDASt~^}KyjoH8Nb=H6{Z5f z9l&WMoZ46^GvZ;+YMj3T(i%J0c_*sWe z-_x!)E71IV?Ps08m*p+bNp>Q0TMZWNHze_#3PzoY^!_T_=R3nP9;Wf+u+nB@$k<=_ z3>4_Mu5iUB7t!TzDZU-Xf^|=O&MY5bmv9)c=HRft#SMcBcJcKWh1!kd6#ei;eBbQ5 zO<+c<1B}Npddbgah^UA<(G!n74omc78?$JJ_D(P)!30?mM;+`o8Pkb;;_3qv$M;Ht;811#dqe@7lmrM)r)Pk5?s}#bc(B?nL0r9lPEI zB66trv`O3S$53QvGr%HJ8d@9RB7*P!=5J!Ty2hJt{}_%}2Ym3s53!zZ@bLZ_ODXvH zqmS^#x8KIwZ@-Q2eCIoO_~;Q{eDOuR|IrWd;Ne4DUtih?6 zl!5PT5gQza>T|6)uPbm~akUitcP^eTFLVWx%1W2c$FTV5e`ay$Ob9 zWroeH=^N&D`nW{`-xZX*ydU7?#V8w5tm<0m)h)2{J9~l*RA)D`KZ|-7U`n$N4aGCJ(GKRa2nazzh667VUSW?g0sGO!02r zXyWyL(kvtc!Jf^Smih=>3_Cn&cDRY=^q@MMd=TTS#f{8TDmGgX=;wnM`t1lsDg8{I z!gs&pyLxmDff?ual$;|?fyKt7$aLc~7W-W`*j%iuy>~2q9?Vgq-3HL$UvsC7GDsnE zc77h=YJDeRnS*4^1|3zYijva-$h07B5i`=^rSu`SlD*46__L6s?REd29TV*sqO(Oi zpcM6Je3$gzR4&d0WWay9x!uB16m4gnH_L)@T*9>bntW{-mrDLXPwwtmv>+u&$qwgh<(F`PZT+>2c zIt>&zWMe_i{T!q($n4r*k6Q8O1*KiB*!ZNFUaA$q0@Tw5C~mQOX3(>izf;;2#?Sf=@vKx1PAep#QmyZ#%Ux<4jjbi z7WD&Q5y9DokJ)TpW&!SOP{pwtd!ASGSs%*Cf4p%lKtGw~KJK*w2Q6ltwuCJ+g_^gZ zZ`1HIM|3XyJWGYUSS|GGp7-*33QqtJvnhW1eG1yd$P3R<9?qm{|Lwv+I630pfOXPA z7}1jE_)=e&0KE&YMY|yta1|YFnN53H;Bfa%!H|I+AMO$z8pb(rd)>`gQv0mz7!Gzw zMaitdZQQ!-&ht2FbMLiojDnK24o|&JH+D!Zu>$XACkZamG1{aNIEk}t!2{T&?hPjg zfZ<3)9!x7?905ITa2BVGfgho0B+nwrpT{AS&w=0J-08Lmtcsnp?$lz20gyes+2~t} zh22^oNinO3tbvTK+P@D~wY}m>8@+Zb~_I7js(Vf7Lz47lf z$2PWneqT0`I6cB4Yai!5fhT%(=!>)(3Uh)s16w+h`DTJ{BL#qQXN<|Xo*l9WT!Q?>OaOt|MVs_#SjU$ z#W_`M|CWmzMqB7oOC&5po{o+ar!5W{tKpCWhRB=hv)PiAIgV#Zz|x~j3)Cd4hbH1* z<2ib#yc&c*KV=Nl?2HL2&ec@jZ@E9e}m~uGGK%vx7sN#X|v{NT=V2pXZ-NnzlN8;@>3|s70{k(g)Pt7e9i3VC@1ve z6j}}LweekPJZZRDuxfW;n)6IN0w?l|Xlt*c;8Z(44I@2@Gvn~1R-WUXA2k9X zx(V>v(>7E7z;^g?)S~?^V`3S>*89l@7sDTdZErlyK=MYilVEE`jJtHa)50F%*wqPR zZG-wOjlDudHH31R0vux^gGw|RcJz8CJH{0|C}L*KWKo2^jfD2{QULjSkA(i}v6e5Gfk7noOE zNF}sEr|oqpT1@xY4FTZJ2F;kfG@4wkOzLeqLY^H-Ow<<%+6|p_e#d@g3MCjsFpa99 z+M|Kk>sj(aYn_ivjJte(>>&(JVB^myt^tDY5cV7yp)IsjqVFVM`iO>vgJDeBE?}`F zKc(+Wn%t9?OmS(>h|FNYRpS!?exLJ}k9t`0Sby6>F1Kh1@2fdu(dQ`m2C`LU;uQvd zjXKUaBm5YgJHRN@Hp5_nz``XQDDgGkAB_7h^Qt6yn`BsfM|$%ywkWI<_rT@vdEEIq z%lsHi806W%!ozR)3mVYAQ`9nXM?bplGe@1pvkYIGD@o(qkl5U0zC>{|6KPh$hS>Xk z8*(4S61Nn%WEaaWp63NX+rf$nw|NnlKO`sfn~gy7^BfNX0DP(B=$z1myRo%0c{b*H z*wU6QA8Z_Ed5s3Q@5m?W3pYa3^}{H7=9QLsQT!^wj%E6U;d6c#_Eykn(3k=ZODtEi zZ6vZ!U)3uPw%#zFtrUw5Apj|9^rYOjGevr&>l4{}MM`Wi_||A#O&u%w&GE_+Y?dD^ zBKa@Ba>)rX!)22twL4%7IeWVaqD?k(KUuy-K7=c=5O{} z9(?>ue;t-c+U=V*u5M{%Ty+H7EmPIs=Y)fSvsLXThk|~iRC~Mjww9ueCu%q){1&O; z&C#hK8=4{u#KxebtlQWIu*Lr^95b|Fj^B#1R7eG`0bGe)Pn)x+b!$~oMQ{zHzg2-} zT5xtpuL8Id#UdR>RRD|gjvrK9Ur%+I z^k(6Oc_%Cv-le;>FdinQE%ebDlkuK?ZtXeY@X|4rhMNpS2tyf_YJ&^ii6GPtw?9NF zr4BOfw|CY0Y;-0z-=zT=*q~8wSTvqfKNUoDzrm7Ki?0MPMgPuh!310BxWQwYX5uUZ!UG7B1N`1FY zB{I~6lW&5hL<&?_K->YbV-SQa%udue!nN&9 z=`*mm{EY>`CFe_+!23I~No)+3bBo)8hz#{EgLw+1(&5WRgpPS?<`7M5@2o`J>OA4H?xB-6}HW?E@_)o+*kq1 zy01r~dcbuQhrJ}(0&{icg>i_RYcyc+QACrhS!>JZD%Z;z-DUwyq(QrPWas9$W zl-Iw6r%(O{Uep_W^2Co$eEdED#amza0?zjy;9KAPHOP9#J750^9FA9ba(sZNAAKKR zef3Se_xTN;{@@3A?X4B{g%_}{tKDW$iSup=@mb;at{-o(!yT5NszulNxKseG=1grD z(GGe{Q0s`BRduuJ7nrqZfF8jcydY8snwTw% zM4RcmeSLBeZH|Zvzj{+D?j?KsfTcS)1yI>0Ej?A!&1VHlwd1Wfdcb*IadWfa^Ctym z0gl&bjtU-k1#p9ICpR0VP#&V`In-z&+0@gLEt72f^Q_H&oAtTd!QQid0uJLVM{k5d zvZUu>wDIRk|8no)N4exZTMBoHAiGUo=W|~mlnbQb4??GleL2wKNpWB^5)o!|Ak#(CXo;jGg zrSF7gT-f)3xek1sHY+Cm5 zn-hbyJBr53zm{SK)OeMaS$XZ2RhV%cksq@i?_GILGIaWLA`PL+%`qq!=3pi$a(n#2 z+X`pYT@w7}-}j8C=h16C&iGh{AIHTF12b@xU^o)dnvju(Im3L8?ohA4XV>O26~f_= zFqsLF0j9@U8teqqTl+x2(vIiUjRNsSa(kCb-Ns;gAst$H5rV zo@p**O3={a%n**?mKV(#m|ZG)LA^cNHj{@e-?z(?;l?7M-H3+vUZu|#LVdUp$#7Q1 z8rKkqQMEb8)m>FZN*iyB+e`LxYcJe`o=Bo5O{t@N+ExiBt{%d^ko}fJX zB92SJ>#x0zoAV0VQQ3?Nh$9dwv8u+gbKihi1?LIgTBNYsADy2%Kdum<@?LkB2cg?y zeRo1%4_5Ts3{?xx8*Fws4%(eni}cS&sr~2;hz1t1d@6_};O4Fz@{b7G(Hg$ZB=kei zgJmx+hzr^j9Kvnugt+y~o}c|+S0`eDMlgqiz>b65!x>Lk;PmVniXO2Z50+o(IKmp#}I*>H8Tm2jdIs`7H$GoYO^KXC1pBy zHsB85gGjR)n=Q5Svr&-WUSd>vXQPVSCFUlTP$rnpiM zL#sLeB4T$oe)`PXra5h5LUq?ZZoBN$9rnz;y8?MEO(rEc<5}#6WFORRCF>o<{GNF( z+0fmzM-A?6Xv`w?vU!2@JboMM$!LHDUEao7e2j?U%yCI`BWILkW%7F-MT8G;ZZ{!k zL+plEfhVFXEg_v2KhCBrB(73y$@Kc&0JV0A0N()&qe=w*=vol4C6XH)55ai;w~|cZ zxgTZW-3U)x-9cNUprR%R2Jbb>^zDe882j##3UPEI!?3TTdOzadBROUC=*yu*)2taT z$<+dna2%YdrP1;hmdmAWD#dgqyJyy3&~3lKuS2|gBwEO2!N^~=l548{m>Ik~W@1pm z4Wpjeaal>{6Qy?t+LMvTBieR%@LZJM6_WEbjF7iwoTj0)V_g23b25ZIp|!Um^#3qW zW?*iQ`;5c7gStS&npBH!1crox%heS=djCCqUV*Rt@jr`S`)hw0pMLN|eEBP1ZTj+j zIzj5kc=_>*D5c=$<_71}8TX1{dEq|v^N;Y>>#sl+IGs+w`56>~8!b@nSyX2EMa~$n zv=rFp$O?hhUBO;2Jo&u06y&)U7!a<-iL(uEYrb= z#?q1@)92QO*Wbf83#`o=`NDg5DOt(Id3m0HR%`>z+sExYUnkn0Ne_nyxYfhi`BG z$LBGlnK|a~)l_ra`*uk*;L1NJQl{@z-(*ekU}0_bLMF5`youf}(R?hZTZmyze4}VN zTe3ng5U4I#VYg`HTqow#?mKA`?<85?=mM7(zf|A#lwsA4D=4I$8@1mzyqIMPjUV3L zTKanmGzTX@?MC#K%fNPn&5Z2!lmtyoi`bH+cY)?#(X5bCQ+s7YXXr*3yY~lU9@{y{ zLu+(E@Dwtd^36koD$!22pl5?hl5Pg%+!~xXFBWu2?{X5!!7(wNrx}6R1hM|#maVK( zn$tqhhNQ!D@x-mzIog(o!5F-?UHQW94!Ooo1Sk1Xxp=R3L@=nvd1!-r-I(o#{`Hcj zwxl-8@&)5#W}QhH=+m-cs?fYwtR|CEa!pQB+hrKh zBIZTJkLK!rox2pKBbJlgkI*=CQAEzMh|#3ym2SzIG%=-`v?}9#NI9~O+nC7@?srdY zW|%JCrk2@wGJx4TEtf^e8M3hieoVsIXc3EMU_Djg(NfBXak?H~iULE91#5MX9s^(t zZk!VrKNeGq(fNW|J`ziXxI%D*c|0s~Kv2qpPd@z&>(xE{qrdp)@$9ot@#v*jQN-3% zpMLr&KK|rmoKI&g%YwC5eDMok#4E48ig(}t5TF0nyEv4B)sr2){@Sa!swXUQyoSJE zhZT;?74(S6ev^iDd~25>v8mTKr9<4%1|hEv!0(~!q?$f6M5iWYBO{ZZYFp!r9#qHCxX6TX7p4eqWe>``bxG)r~0-Hs0$DWt*ZIYng~EAJ3l7D`l6e& zO9O!D?e~^@MR!c zb>%1?nV{{A;f$~eS~^Q)Z|1ag3|6GABR~@&GkMOWwO;t`Vo5X{4ovY@BeZ_7;~H

+~Rd2y=2G{Z^Hqxq;S&DU%Nc5AbAUHw^?Z*1s!g-W1?^*jupKYEOBee+lG z;rl;8RmD$y^($CUCw%(k6WlKcoMmao!eA#1g^?|t=1Di_b=HvYB%BPA@G9d*T%~{9 zbGFUTxV;Ga(TXV1_u}%XuQkZ!vlm*+Fu38bFSr5tyB*FelaO zQL8JuJX$2uZJr^u0&77%0rw8TwR9bRDxJ0$bQgDlB@N#gGDW(O3~-nq!=oh9cMdkh zb3t;j`kSGg7wP*uv4SExO%fQ+2ID8)C7KvZ7_;oP{ZWNL9yU8@nnAi#n2|E^=aP4r z20v&hpa2McObYa4Fxk+ecc&2nGod^*oa)_DVj(!xpV1Awz~h}zjmR=^c%l@DpfML#RX}21TQ1%D4+S$3P z@GG07EgHj!-n-fmFeSoK4Hl9tP}=@&v^h+Chn0Crio;)sKFJtp?_iE&f3=}+^ING{ zq?$rRS6W;*cGwlb0evU5F9gcQ*J&f%x|m5@~!swqRGwR1ew&D!El!nay6WlOoLfHgv^}6;cbQU25`GV?}oPE zgI1SpnU?6(`^X#iYzXoVQi?v$U5@TaQ|7I?T%P4?5La5U$P}-~c_uW?4*=9sEUBNW zI}*AaD#QJIM%SfuXtYimY!frL#(EZnOUhlQzp=b6>G@s7xk~Z80^2u~{vYj%j0=kf zN7_Q<7RO@-W756+S-Al()oq4Af4iOW;=sm_B4l$1?Q3VzO>;qTn6mP`q@5KJ8EAgf zuuI?;`I+jD@5Emng!WxcLLOtbDKcbiYg~%d3}lI z#dqHQ9;7T-&u2V2o$wQ1{|S8mz4vfFpHM#k9Lr(B>De>9b_IO*{yn^36+ivX@4!$0 z{(lAk?Bg4p{?T8>TZd)XU7rr3G=N~d0X@c*^`*itE|ESDff$Y^j(;58z={5E zD@>y~xpk4gz>a<-)iqwXPn=(<=~M1V`pFgE$HHcMe<*yA%;;tnX??9CsFSm_ zMHIE(;Muc#I39o(u7LXmxPm!mo?%=k2zqXYLnwKm8|VT{AjYHKgner_yhO0M{ttwl zyi6(&zpR+@VT#vbg75jS@o zV@&yN>Bs^VQ8tbk@AQ&^7)nJoo6XyH?rKd}qP>pXvCZ=uu(~qPzQ~1O2vq~J;cSW| z?)3(1hB(n8qHpa6Y^R5rWbbWe+wZpMzg*(zSB_j=wKy;P zEe#3RT{mwjhodGHolf{D&yP}OIY(yEQM1KmUaaO4vL~FuCDF`pM-lXe5YOvbM;f|Y zf71Rh=sTkY+p!OC(ZuALV{sUtH_ma4pI7>>K#TaQTz8?lyQ7TapLpY^g3hcHz}ZRO z;F*jO&Up*eZ<4_9)}jEk;w)Jn^^)H*$AT?F!*Ma@Y%+ddmIDrl1MXiR@yeTDz$a(L zXHTBt(Tj?Q4<6v%?|lys9zMi7UwsF^^h>{p^Z5jkf>H#Ze)bvG(;2_>C*HwN{eeG< z^Y8sL&|mnwDC_y6LB)QrwmF)Eu#z6+M@!#L9%y)|II(56mL6NYZ zy3<m)7q`$FNZn9R#d@-VebH$Lvdw{!+&Wc(yY87W{k7=LB9xj*ISg(=) zLQ0E91%us6RWzTgc@er zW}0jsUgBr|KBL_o9p4NAh8?g4-RyWqjO%$zjD?*Dm-ihztP6kH(S2l;a=oKHapS0oj8G=@<= z^hNm$FBjN$x39p@0&_@lo*tEc20teh=2jwF0cyDy7TxBdzgWU})rwLUh;%NBq>e@6 zTOVQ6h+;Gz@j;3fAnp?}U0Bb+8NMa$Ci(pM)z zw5Xcc<&Kd>u*BZl?KTsp^>BxY+LMPHbH?W>j<_{hzSGBTCf4|QYdA&whhnz4!kwf6 z14g^yQW;D!>9*s%XSDsoHXo^8a}FcZ(}m6xuu8u({5i5Q3j)0bwD1i*EE}Z`8%x8H0H>#L zIw*M4y5L+3u8OUmRV?p8v(f0fmjcD=M7CgliD~3a%sD@z*sUdfxR=mzR^a4Ug0hZM zSnjG-%~o&g3ZNYws&&PBdWM^43!Z+q;OYRBd%!&aN0<#1H+Mvz&Cvju5I4jcsH1Bk z551@83L=kx?9tgR+Uqw@E&UvZZ+KV&qA)lG7Dl|K9rwi(1&6}F&B?$ripRi4M3gLe z*&!g<()A(L4`L~)t?g(=*q)~Z92Y}jlhM<5s)7Nu!_lG`Zj<&~%{G_Hx3#gS*<|vU z+njAa?ZLsHNx5uZ+0n3}JZ8~%Lx}|>;gi3^+ZnDmrT#K1rb9}?H~=zU>AVJSI~FVq zL!(7WudHG;G}*R)w|Fj9i-(SPB`w&V#blbwQMPBbEaI)rNj(59sbEA##hLBa zHq%+0}b(_Y~tUF*zR~-GbU6iZiYG0PSn0A z(YqYuZH=phYhYYri}QM1X&8=!{rFBGHfh>5vlp>*x#TxwIIvWpa%fP2K6QHY5&3G= z)-BfRTFbb52+P-^PS_IHChO5g<;+^q9k^1QZen}SJC|Y>TJY{3jrMVkV-5Mr&u7jV z#!*B<1&>9U=Ls1LFUEl$;U=5+^R=XEM^n82NMP7<8fafQu^7sZ>}JnIyVPfvkGw&* zr1QTE&?2LweG+GbY@$IhNzDz41dmd69?NaVwZdLv+l-^YW1NvFIb>Kn?@o=!@$@2m zy=uTGIAZ|?!*Ae-a*#UI;D~00;Lzl;bG@+cHOf8!IDPgpUV8ize&*l!pW<)-#s3t) z@PGY3;lV4f;pJD~z=!1lmJhyzH(q}ozwiscfOp>c8h+-de+CfXbUxvghxhQpqc`#K zYhS}R{?cE-r~k))7guk;136y%T5d(pRt(66h>U^Rcuvvhu0<zNrfqsaPr?rS>s!*tGO{KG&@WMF5m#9g?!f*!r06 zmbvS!f|K?OP*>Q-OLdz{i<0ji9q%giR;qrBN zEn!t^Cp#R3-kB}%nec_av%urRf}D44qeOqR-CXu=ML#)=Yfz3}iIcPC9mFD-?idCf z4L_k|Nz-O!d~3-B(E!CrKzn8O-d(z-F%I4E#L;AN0z>}kHXaK6&cbX3M*mTVyAFEE z&oW8^b=&;D{#p85MPWT%cVL^9+&8xqZ2|LWh8f)PTvMG*E*Xp-{k>$Cv$khH=3{Al z&dG(1vAuH1v+09tN+SW3=ViAI{~O`#IcZpYj@>CqH+-!10$&P6%p^lC^MzvmJBP#C z_bzR76cEcWHYnLZh{&AghzX6K`VSLoR#*Y%abKFUmUxP~Q~)O(uP_VVEC8;GXKW{# zS`)IO&q4mr7=%#gc_oc;nX3`(XewT06gDBG%gdkIA_I14iKK$=_Q~9 zwCI21x-MQE2|B-VUtRCtIkqLz_8Vy!er45%p*}B0yry0{b0SRm|T-L73_MD?bAwAWgWqu5K402YoGtuj0 z+{73{#)R=6@Ep)-w()8b))6(=j?78_4nK|(*Em)!wgIA}PA?d3@sN!Xb-{8Z0KGs$ zzu$^g9N@x+3B#cKcE?m#v5`D7?f4?`YQQr~kW1punwZqtz^86!rHXO(U(pl9M})(u ziTkH$q91d(To$jP{<#QqcUMfBr|_r$xBmhDU;n#* z8{huLzk@gb_@BZ{R|n{W2RPlF@c5<2`26$F@cQd-K%qE2{T$cl8=Ncf%Ik07_y4(n z3%~vs{zII9_%7ah^9@u#8``5O^GGr9%MhW_42k}y<7dQk!&9_X#`U4DqsrsR00Ej~ zAZpl=wT}J3SG-GLO>M?V61u|A3aH{)?Kg-Vq)S;#NG;RJZn~z5A9Lw=*pt%XJmB|( z78_1fP*qx@&|1+pMskju*f8jJkK%kfA zIQ*=B=Y@sSrBc(Ey#!dCO*&s;bE^WFl-Y#MjE?+0D;<_|Q-Mg&^HGeDjeCiSdGhja zInrY9{n_C49%t@zlC#_u<8BkTv^R**OmsTyvPn3Wd}oM;kAvk%y9$YNa-Ng zS^&N5@t*|}Fu#QCYPm6Bi^u{q6a>gVk5>3><;(#cJP}6zZDl1ZOVEvnhW86_Y#(Ay zqjym5S=a4}*qqZQJH~lo73104$sHf_DnnAeJ*Y;B!p7vR%N~latxicha>r7Kgp>!2 zhE);U?Fk3=GX+j!3wln1R)+9tofsya69m3{PoYtKhd?BX6cNuz-(wZH;js21i%K2# zoKyEMP-BtlP>v4j7|Z1SJ@;S8fEeN^=L>z_LRNPKZ1qs++4ag?LKp2teop1UErlI< zgLA?0HYD%$dUgD|OSSBnn_U?n&m}9_s6wGX>@09rcaJKuhQ^F~baoujVB5}gER_&DnU$4--p4G;-NZ;uW zJ9rUuP9KEjkD`dS1!}(~DcTIC8#yahVFmq;Ddu2BcSbA{&d1(s5yesb;@86g%lQeO ze)C(ne>~vR2aj;`$wzqku|gj{1OWWZPyIB`o;VT^)LO9|@1ZOU^cVjMUb}xEZ~iMk zkGif{KluPRH_vWWC2Ypi-vy;<<=>4Hz60&>3}pJ2N!bYf~)!NE9})o?c2 zzk@BcAJY4rB?f%JzB1{dMBBw!7@#ZF*;mCQk#otiuNlGEE~s+-85-`wHy0ITC$6bN1L#9!1EAux4WLZOJ51m5!Enl#_LD;t^(~GBUh>L z9avJzVF-kRk6pYdSwXa)63!yLaHyLUU0jdD^fW83@=;Up@j7e_04! zazfrg>g+CXZc}i#HjHt81mg}(yK!gsJ`?9%E!Aw*&IZSm&c7+uPlM00Cis5na}OkM zry0V;8!b|WK?(lg<|XR%0X3&wqUB~F2rd4dUruaP>Sc$IP>SkW`c59dka-r9?^zez z)X`9F(QYzcbtMFMYctVO{LRxoj059s35u;Tzzyy#(wozWVN43C?MMc!G>YOO8jYZ6HU}yNt z$P)lo9B@R>HM5E67M~xYT;3uMSzSuO{YQ`S&;R;=go3 zob`-PpH}F{1zLbd*WH;Cj-l*$ZzbEhmkJB`raH3V<@&BX$98XvcL4fbh?7!DfW+i` z=%7gV1liQq=}xUBsM;oIaa(pQj#4iwGqQ@P>ILWgEgrxs9y^ z+w5|%lZJ(q2_zQ)!Vjtc{LaLX7@R%{zmeyr!Bjh&&8A|uQ4(k9!?VvX4xZ#>nB8?+ z7?zCEy?U1lFS?@5wrINTT^^h67>bvi3p}}!>g+w636RV?GohXO8bA^ZXGZr*j_6Zt z4Xe!30ObXN;p`yWT(K4Vv{sofydmKUo4_5;X){ixwG(nJU=mE6&S@)U4=rq%tm+}L z4$o=w(!zwc_K&>dQqgfbi>zS1An4)v)3U=Ho5w;=n>SfI3Hq3_PGCpIX7?lJQbuxa z#|2<*F4D)z@+8Qy_tBA8cXu6jh~ZXAVFQm_C-z$2JV}Q9A{NbX5W7?SAhuh1bR3jo zM`+aP;|QZ0P8`RD@y5@l@QF+o;N$Pc3F7T!$@im`;DL+LX^yHsZIWvY?b%Lw9TTO> zGU&=xqgOkL-WG)Dv=w&Dbl20nXECXQ&CxIr9XI`)6bAWwfI@ACY-B|u{of_IGE|-D z@lY!)V*$?xBG??=*)+}|5l>r|fP!##sY=@)kNzsqowbuTBXMQOij8iVgt~CPgG;K2 z=j681@+@2+@%h5?5{2HqY;+||7A#IDizu#T#Ud346f9-2NCr`qmZaDQp>EKf)p9m) z52gncz`+*sD7MpGMmVH>v&&g~-iNs1qTnC}S6A2g*0;ZnfA*`til@(R@aW~2QJ^^9 zyN_pbz_)(opW^A0CpewY`07``io@Z6wN^ZS@kL0fIG@k>#y7r!)3c|zcXb4oBfk9F zOZeLLHBQ*Lu?9Q`X;>mbahB?Jit~CN*U)A#PHe8}xPbxUr*h2Iu2GsNsnJo@P1a7UEG2y7M}lJB0wB2@Qj>U*I&p>*0k>@Qrn1660^&iqX!mP+eAZNY6)Dwt^`?yVF8?R`LKR zjSOdUeK8xa#ZFxgSK3>MB|Us`x9~?QI{i2YWbda@`p(}MJe+oCeC=)L!fUA}WM%v;nE){^$}W*rws{4Ji(-bTlel4n$2Tla zCUd~BxAt|yLxNkw9U0fbtDEp{Nd_w!yt_s$jVBx~VKg?Gmk~x5*;Fph1O(CVG?R74 zAEtI*FEqAG-QVR|1zLnp(05f^WUV`NIV*}0J;Sk=n7qsnREHPDYwZTXuI||&alh~a zEBJn|oVCw?LEky$oIk@tN62Qyv=42ie`{L ztm_51QN;?y$&*!xXv;9aHe(z9eLfW1p&k!^n0-^d&C44&Mw2pZ2q1mFRD}Kw?_JWb zsh`${Z25@wsquwCb-ch^Fy1vU7-KSW1iav2{RJsN$` zZ!C9MzACCa;>t8f*0RtY3I)1j1vw<&X@5rY#Q$5Wl@%f)d zZ~@z7MvBPTkD$Xbg*lb{`)of!09;Am{T7&`@gP8j;wUSQQgJ}Vu_&adU1uqE zJW>No9DDXg559tCHFc1RgPhy5Lp$@)qlJpi=EhE994}a)3Vi3g-@%J7y^61X?Q1xl zPI&LV@8f*)1h2jH3chtb;)g%@0p9uA*YK6!@jLJ%&vwW`uU}FzjUi}K)gPJ=eq?#Xq!WeTCcjEMe zBk_OERh8!|N^E#U-^NQ371H%hltTfo4~Pr10ky@mMK~_DP>1E$X||R`q*}=I-sTyA zYCfFNOVHFzF0Wd!?pUCb9b=`B()(Kq+BKtD{)DWpFk7ZTQP&&PXTbXT z1Lz9?9st*{n<%a^iD+nzN(bOPj^($d1S0QlbSkRoZnC%8nN;Z>gYh}UJ$oZ8Bl_dh zPJU+X%4BxS$|c8gEZlRuw+Xo4j*@Xc5b*>6PI?mm+OD-17PhgNY{Gu8eWh?IQaW75 zo$;AE8eyCNx>Hv}7|@GhV3Gk5iawNSkklr;GJa#j;F5B_Fb4j< zvBrjmHPt5rv+bh$U(UGBI}YsF+VssrE2)j=F+BI`L}L|wC%YRYV|}6D`RYuj$6Q!8 zM?dlRc_QBy>AR$i+t}H-)Rxfy%@7V zf$eO?8%wd>%By0Fi@4ge?JRr6ICd!jq?pllzbcBXIQt?%L{U|pm&Iv!l-Nwa4YMKx zcDv!72d&6EXnd4u&o0PLVjkLU3-~>P%@Hv&Alq73%y#I_Sq$ zGyTPMdYk>xkB;rzN1J!NPQbzPXsahGRAt-{AU@tWNhV{790(EK-eh-bi{ELbY;_0Y zy1;fyL#OB4wr2Vo4ig_Y8SDvqPcYu(1|&LlyDs2jxyXIOcO5^|Dqx`SfD|z)$?-PvYxe|2m#MyTR$^1_D7T1&4iSecEe29D{4mlI1d)o1&FI6 zjjtE)a_l8S%>?f0nP`aE-96WF0&Xj}3UvQG zQ<6atIU(=!^uJd^$TAG9KxaxXd(?!UZ{X9h4oAjh0*>9{s4vt`GvdHkB4$=3+TdSy zkRM}j9%H2+QbWN{+*BA9S!oM;BtcHPnA?cw{F@3u*Xee?$ckO&G|-edx+8?Id1GUS z7kIOUI~#wD<-Ld+rXx@tUKBVPscm+?W#7q`uN@ue(dQc8W;nSxxz`LdP5%gt)^E(~4Bp~>BjGVU8plHn8j3wf zfaS7bdv7L^F1C4@;4^R#yT`Te>ze`YRB1HawqF@IV1f5;pqyOzKCW|dU#Icw$ zxkz779LT{S>0gw*qkahaEWT(t)P~a&fM;g_T5+yDd_79>YzTd`LZF`Hi_6H{Y;gz{ zsZe(fia*a$9h_j%@LmQQjPddqNhj zpC|Zdj=#H>tZ!RCg5kCZhBZ3|_e#S%MxER^MHl~Fnywn~p=cW@d<(&hBQF)sN5sd6 zV|+1Zdp1K$@J@K2qT3li7Hz>FtV?UJ)~*;7Z;<5%Uq1+#4q0KmcJg+EpRdIJ1^j0L zZnV$a74~&&ykB68|F*mCeO&pCO9g^MI8da!W7!oDx_1#<;I0asRH&U^uc+V{&sqZ` zguy2jvbl{&P!YQpU;M&bc>7ClPr_1E#6-}()_ z`1%)c@AWSL^#-+897OQ=K(d+1#*!!S(WcTxJW8Y*q#gv7id)L+m<3JJW1?+X~XWFx?Fmzhx40{cPZ} zGRTgb+(i})v&4Z?wmU<6iSJqY!jUh4cygQ+$pnhE7-}_pT!4OI!Zr=VZTQ{ z%`imbN0}SSyif>SN~%=KXb5kHL&TPM6rZ=SfvM>^Fw$^Nyq2W~)9GyW`lBvr6_e}S zK+zQ#ala=g!?0#UicPaZ?`OPoKYQZ{TyhEL24|Az9X;sQ_}OZWEGfB1Onw_opUry> zAGk$FHbj*P6HJ7a2--pV$c8-8D~nj}g{#tK>~$gBOLxG<=SZZe5|9$F)gIGQY_CFL&c}I`;)Qs3nK#uciDs*60s#+Xhy%H)NWXn;+fG!AX;%k z*Rg<)d#7JXe}V3NAASp)f=EPwA%X$G_V@#lXr@7KCvPN)0!xKmx0inBHcEQNi-Rm9 zwwxtxyiH$EfD9X?(Prtetas2~k!vN|seqlfz=&hMcDFs;8FwztQJ(CPkSy`{K=Se6 z?;Kgz`}-V$6aa8!WAN}%?D*4_bV+s)w44tM6xY!9Th=Fn?uf7*-)bS~2svUo7=j3y zE~`3s`IUzOQxtP<){IKW19{T-cte4M`eE=&(puu`K}D@A4)^ZknH=%%KmTX=Z~qVf zE!6WFpMCR}@#+_U4CVfU?|tw4_~l>zW&GstbYeaVj>jv!`~HVGV8uKC>Yu|m{>uLY zZ@>5g9zJ{>AN39*QX7S@{TJ8j1UW`~{X~yV1RFrD@wk5{+b>Mn$=Zt~AEQ7LpprLD zs}pSq^*OGBfrn?4stg*JnYnODFo)pH3xwQnO!RGSF+8*IGGGhyUXD(Fccv`)z1##x zJ?xc!CD*oQ-fh1ajy@?&QkZmIkG}hU^o)6XQ;6VxO6@dz?POV3e^B4ca;?{ z$<(oejJqfeZXFj+#bK%Fthay!?jEswdxNuSZb=O{Jw!4*rQZWUex40Vrh#~6Fbp%_ z27D9n|kcq)R0Xy=;(VS&HV>oh=1kR-; zP9o3UXR~nBoH087DJJvG?=mg#;CX77U7*t+wPcyfUCd-+>?#1*te3M)oBIE;?*L_( z>IO2}?V&~)o~_852%F)1R=^p-OnF?}FZ*zPqFA6oM)Rg)%1!?5s1;Z!);l$t8!!u8#G=_nWxoPHNsh6hI|2J zV-=Nl45El`31?tJ_v@;8LzNr5(F z+G-fS^NcKxWpkEwLRq!!MhRw_U)#T)^&!8rz>kceM>BA}D#mM9WzNIrwc9yWw!i1K zo55ujSCl4WqZH}e$!v=pVUZ?b-^RZy0qz&N?Szc4^Z5p!e)I{7K0Gnn%O05meU#=EH_ z-GjSBA7JD~!Aw?cvYAer9taea@tq7rK3gWBOv=>A3~hHRiRo`EGc5BtI(`PscYO;Y z@s$hqWHczSaro?(9s8AORj{3}nIV{kN(i37ZBFm)mOWnB zBfLBSq9f*I5Zo=}w2v<$j&3UoY>o=>Z@jx2rRLwUJZN>=;1Rl0@{9^GD28FD|OA>sDOvQO1sZF7@-hC zTw)Xp-?g*9IxKEj1}@T_pKY|H$5@^##(XAh1H`Zvu{mF$P+4*Iu=w7(ecMJET8r## zutNx=^I>dd`)oVY(psN6TxYd2aj_hU_lqhHI@==HFR{ptwwRA*PWdT~i<8QZuoT?Q zh5@#^8b~@=_T@u%@Mhf4WND5S+8oos_ULWE)ZQamUMt$Mht_A%?uE(T+U(oXRGcFy z%W4ZRw>gW2)=CJi1ZRK{c2d|G3VZiz!6r|^aYt$`vdujf?J(XJm}4>e7XVP>uA|gp zj^l&Y;t3f?xZ`t%r*l@&^K7qq`_7c6ve5%vGzd5f5vn*IuWA@N@$&EfIXwOBQ{2CQAD?~vF@BgE} zfv>&s5{~yDpq!uKh2w&{p0UVEjs#!iM=lT<)9$aepq8yereeIFd-i(_o$-qF-Fw|= zHHF}S$ai6~w5p{NSXHp5RF>R!JW~kH?vP-;y{bTDg@`#n3V@^bX}T)4CGKr{1r;Ke zPjJlD95Zd`!dkgZL6&-$Dhy5ooKyE$mwfHh-?^dB7Vm>|bis-^pi@2Y!+svf3OAy3NKv!1FxTHJ5~Y1$y2C z$HgphSG*hb_HQZ$+mVjrN2|<_D=PYJ4og9g zHWY}Ck6*-kI^nz=P;cN-X&yV^YqJV$@@1`l zY~P}C#B)20`hsERv9ZH_Ps7YgL_P$S@+AS$ntF`GX?Sn4#`4IFs)92FRTQ=MIEpwT zEwJM}hiVJ;B8uy>qR4pB@`BaiQL!62+<-aE@qdtpp;3;;z0QetHGzZ@H)T5&o(13s$|Jj7wl?5lKFE>nV| zH5A9%>+`3*9n3o%{~`i;4pM1SO!I?zUH+Ro-@j}mH6w_rvBl7=PGKC4i+`?vn*krm zNq9$_hruJ|wq{sZaZC6L3H%>*9dxPxJHIO-WcG>^cq5ZOZ&Dmr(x2XeGA=<9JF zVTfgN%Clf>ybuS>!Z~NRkZ_A(e2AEE2t_?JR`Tw12=v$qh%dT>r$7{k{|o)2BeffY z=2AE$!?%{;|M(6X1ucuiFX#Fql5HN<&|Dq&}@TY0UKo&Z3VDnO|W>+b>n2nZ|-sK zC8^3IyFe8@!BJ|()`@UiQ4Bd3re$=mo36QA>kTB?(oU0yrT@k}pY{IP|E_+bV^y@s zEQ?}cjWFLo9#Lis7`p_nLWqNnZ!Bw8&&{yi?N#)t2H=S2$`z z_l0Iu6w_zXJ~cehv>Umzxe7=4G!`e(Rq>#gJ>?)ih(QNQpBH|9n?2EvP-u6K44>0j zS;pn(*`YAwDh1EoYy*!zr}=oEGRWD+D;Vtkepaj#g^mh0d1h>y}Et38%cO1te z{i;Vx2+!L{{Zr>W+u=Q+x-Gt-xNIq<4vB|rb$W}%w00bbk7p?Y*=U7sjm&s5OWSO7 zMTK6s%ZG@CVtt-_HtAsQ$&Wty1nY9d-~Ee!9wG}KK7P3|@&_M&h#&mmJwOGA;{ml+ z{P>Uk7~cHC7xA0l{Vja(-ZxQ1P*rhQ7QFSw8@Rs!DCMGURiPF+;LN|aWRT;y_p49a9%0`6l%+u`&yyKHN`a&O78`8}&raRjN}QKxrUmBA zeW{<@lyHV=RD!p?Nvbw!<`C!rEzZ#uuszEL9GeYYENwA%X?bwT9m{dNf2m58B6`&H4d^y0~#$|ZUh zh8>6o7mUV5J0hdBkdtlOv%sbySA<}2tj(w{u0pDWSY86~8Qj^<#BKbe^j^W-nZVh$ zhvz&LAy}TncnrE>1taNm{?3IB{E+3#q+Tv;tTN}#V4sQB*}|gncy41RAZI*B?62v^ z{Cxuu^)odF(P=f~I`nD$9Tp5U0by(b#(RUKLjb9L0a3kQx5^-kOMI`JWqv zdkD>SSlZr(to*2SB7QDyliL&edpjc-#Cg=R83HdB1b#%N8oeF_Et5OTsY~+?fB(GN z+(e@3rP!_aXEh_)!isM(=FknsF{NXS?QQ~rH6A<0i&M+uxMdxZOZ*m}+u}XR=f2Zy zG`NILA>Gz&Oj7j#Hcr5cbE*FFUAQwM8?t2;{RiK)YfV$5&B;K|*%{Nu zBPsfGHEV|RDgj}~*m63O)-58N>r<8bR9L=+E2$oZqk!~CW!r())?ecZ>9V5gcuZqk zn1Hv)$f%h)kG5+IYp?oeUOr~a)^I97DLAhcpMU-Y<+|d9hcDvoFMSzLpFF|Sn`b}~ zyz=rZ_|~_615chj!Q&SnvD^{Or&C3|0j` z`s7o*bbTMIj*$W^3l(9!)b1A0aF_P07%jT0bl#wWWYw+^w;Ov_AJcbp4QEmGGPD6H z&8Es0zM@}M2{7L(Rur7o98|~RSC@+7=!^fOm>xeaD;8KCX|Tq6SAarCfvP~YqN2EN z*LG!Opurpi7JYLN#X-b)!yOq11?qx!WF=(MRYdX7*npmhGL9}A{(CLKvK0n0eu+L# zr_*+mTfmF4c{>7(Oe%S=;O=EEWXE$mo>~$*T~hI1_5Ww@m86epd@~!!u{6uTY(a@V z6=A1-jB;bv`~^wPJF`vEkaTUf*exX#91HrHBAN-mj5XyiUV%NI%-R;a zx0PhIw_->I}&+B1N{7$Cl=iNI&qM)FM#Ma<~bn(*(_8U|u+ zgLkDs24%JaS+23P%DlquEP^52vue*`jNFFToxul;#ugjRLtSinm}zW}uQSKQ=UroW z!X`|gg8rew5qQv%Cb=o5*XP~;o|a3N{2dGLeg?mF*s|=>=2(ro5k7zL1rHmm0b-jU zaU2942CYnlsJ6Zhp%v-|L>xWCXuYMk=OydWnO?5gc>UDFkitW#{w_NRYNpuCNvv=u z6wBwB{JXTr;$ghG4>i4?giY&3J^FxtJt^9`+e+x;#Vui?Ig{ewxrSr5U{zlz!4E`C zaz-ibZx^gsu%e<^g0G!<8uK>9vu)Xn42bt4N5x(9?=&h%b$PbVf|ksT^;9l<6nIGs z3k|5*L7fGreQXwPI{i2;9P!bpGYQE{76^Y2`;R-`v1oToyH>MK7O7=>aU5jJssQek zm^&9ue~;*PXz0s>>%15Y)5TFN3>`4b{|2(rgMrM^T5>+!4h@TE$Tu5B=aHlma4N1! zKZ+D^Uz#xDYslOlpI zeBn!Y^NrVW|4{I)&p*TAaKO5*`24fa@pC`-bNJr(zK;(-_`t?^IN;{lQ#`&t;K2(o z;L(dO;%C184u0Za{(1b??P;3EzC3e*2fUbW4;0oeL z6gUNFcQ!1PwCn^x)NF<3INI<`pJ_Y(V0!Kt5fia^}vf6-07 zTuS=PiiDwvmSXobI}fHufO4OgtU7dhAF5@K*Q5`Ib7JT3mYC;D#`7guqyOgYA;8(_ zZuv2Eq($Km%#%J|-pyk8nyHZ)(`h~PN0BiRQouK3qU>0TXQ0pAhNj=RtD_4~t+pqNM34 zfYv(TnjH;2mr!ban4Eb3(y}rj3TnK7ps5ligJJqkp}z{$)dvteCD{;XjYi70{RV8d zCbW^cSycU8N(a&@|2b+IT? z_Z-?KkJWHN%jy9((gzoK zFct;@$gnV*=?f>rJF%*a&OXIFYV2R6aKzcblbG8%1zViu@2x#efAjDDIqSjQBIzHs z_oLcLBi)SS9yT?|E|BWqYd@tvmPaExw_{r0)J434p2vYx3a5`Xl;2Ojc^~J^(H>vn?PGNBq`%@8Q|A8~nF^>g)LG&;0=$f8U=({jdKLmU=c>Q46$oStiA1>!bx$ z#q;KDF~icoA9@*oZy%)7oAgIh-cql`@`dG2RZ}gE_DWCQxT@7Xlo6L_RNPJL#LR29dF^zRjQG+~D zh?MU54#O{b{+d15gml+C2LT}J_hdGOWI-T-p0-%7K6$)VwgGT43DQJ7qc;~Lg-Bb( zLTZ60u)vH2`@6gs>+0F3D#C8cfUtP43+wG5Zc9kX=UaE}icqqc7=4@m8qkxzFd$$r zBXWe^=BBcNo0ZjF%XCqH$F@3ijfyBM=sx%MEqE((RSXUUGIBNv3S|%Hroe`s@KmpO zg0!j;8pq;__os5F(M9e!#MO2d6hLiZOPK&h?9P5=2rd~39IcRfX{9>MsVuDbXp;*Y z65AgyzZ=(8=5X_9cP3*apS^ zqgJHTK%*0WX9n}eOG6mgQ|PzQaJ*GF?QR`9++?2D&>2G#*vXsC0QCuP$w!m^2Z)E- z14Cq%O50i6k??oGMGvi@5wiDAN*B}$plovGkMC|^V(Lxpg^?o#EwKW@B!d#|lCG55 zc*SYa?FdmkRY6hU%5SE)sb=;Zv7IY{(eQ~jq9U@v@(EdH1+BigS3ia-;>TDGF9j7v z*h;c!fU_Q2tY^3O7>zvvUGy766rt!Wf_JGhobP6SUd6^*&}pyHXqvL-{PKneI;Z|x zM{DBB8J%6CJ?dNieU85TQA)r+%X`xo2VFL@-ki}wrZB-c2dtkY{bkV>dMQY`l6)++ zj~}qeg_wic@wD7e(}Q|Bnj!0{Mk79^BlQ(+9K_(`Fo%KA2BSb%!OhJHU-|k^;(PD^5Wo1} z{8jvG|IWXM_ul<2$Pd1SkDoln{rfMVh~V?jKgUo0)KB5>{GGpz^UX6H@7=>^a)mFx z{UsDx@pu2)U%?;xxj&Aj9B>9uRW`Ug*V1&Q&BX#9RXp!{-44F=5o0*2w!jwt;Zm)k z0tPH??Xf|=kcx^n1d+tk==Lb~{EY6?wl)>3FWAGJdr*Lfo}jebWPJ{D*WoB`a)Bzu zZB*@Q@?D#z<0JT8;A&9UzLPP$G{5O&W^)KU!e%hElA$=ftPS3S3DCZMGInbFXeFJo zL7f;+s(^ZW4DnkTV(S~VExZ|U1)Le#V`XesgW*(%5FmlIsk*wCWiT^65+Uki_`f}s z$;6h;osXWJocDeAV5WBWdnK?ty524EWw zeOnpsm-hd$Qfb+C}r zNEn;^oYi+=eKRtGHMbkj3`@oNV?%d+bg3T}aWh9mEH>)Ud)b&nBp5bD(x(plU=XF+ z%}GSUJ&cx&DMkK5ZHd3@zlV_)nXL10LvgIZm)h*xM#~%mnR#b2ee)7_1-7%lJbx&sJoCPjW_T=lEh zW)4=HXYDu>GaI(JiZKPO6L;54)D4X33w!n0sXd}p-?5)sO_{Q}WX;0bC&3b(He#$P zPo$uf0`;)r{JyHqU)yK_pjuGfGghmG#g?MbRVg#M3=7Yyzzt1I8?hF@LQOWqP?XJ3 z6lgoWRmCIIIt}Eau#nm4`i$-j**p3m7;`ktv>neteCG-w3)&s);!&Q|PnrfuRS0EQ zQvmCd7I)HN-?J&WVF7NHVVvVEx7TF8|J%qeW?g!RWnIYDW|xr6;xP?kLwoxGMUJoo zLAMceQSvdu(33MK18)Zcqhn#u$-tZkj597Iu; z6>+oEby=GZFU#6+8H=qF+#!~DFFu?iD`T#?FO<^oTXS#`wAz?B-zTkpTkW9?QSY$oAJL z0pB5;DQNHadg$*04{P(>MoSw+r(ZoQLrcvCP= zL13{ia)m zJFGlLjk$Top(7WrL`0d{Y7LEbwPdS5`oaY19D+s~M^yX*S5N z8A5m(wg4E8jJGOQmj)rno~gNI4|+~^n{#55ONt__+53kco3foab|6#~Gct=M>_#nE zoGDHdt49GG#KLpqrkn!|^=FKcU$(Fs;o`Cih6I1mu<`mkj6r6>oFtcJ0ly#sq-4E# z3r}F{_sW`e>w-n9C-<}dhQ*Rv0=|ryh-f>hz1R1+ z{ipz9+V(9=MUSjl_!;``2n0rc+3^`NHRia>I|Z79vuO3B(SoO+eT?$*Tlho&=D&l# z{_p><@ZPt71MmFgPvX_<1B$$e^ZAUo-g*n?(+O|9`6jd~Zk|5DQO`KtC?1rGKm4cu zEdJ?#{-5C4yT6W?zVa2^oL8I@NAjgYVQ1yBG*zkNZv~1YOs)wm`Qbeoo$R*BEjYQG zsi5cMXtb-O14M9=F4Gp6Lw12DSyZFVA~t*0mN|kB?mQ}qzAoJ)XD|*^HjGoyWlzJ0 z7)&4;#^wauUfgFM5l(g@oQIX{9JISL{9*b zr4t?Ny+WTetkHke%gS-neb|~ZDy>;*b#&}IXvh@W1h9*R*;v!Fy}I$4qakt~r8@C^ z#?j&0x*T}7?LV7-Q}b&A(;lpM={xGz;TtRc;j{Gbdk}K-c|?OjlRF6orm@qmG$I*{ zq$nX~!f=`uZhn+jBQ|+FvuKUU@G!$SOR`K|+;13pAp^E;?|*M_O?hL7VVLh_q}Xhf z=bgVOi_5c_d#skE$^fQ!xC!2migv6|p|9h73Kq9SYiR5m24oM%geWQ{ zjnrE0_(OyV`;}jzmzj)hz3cbJ zHyg>7Q_oH{FXjufBwy=br5h5}x4Rb+96ZNE`j;r~b6zX$7<9rt0_uh-t+cg{Wcedj%x84NH3 zfCM-g03;<+B*lmoOEi^4juN}9L{2G*BF8C7QRGCHi;g5pv8C7*%T{7ZeuxU=vPel5 zEmn~-Rb&*|e3_)c0f-j?a4^7N-g9T}`*F_q?bZ3CyI1#Gd+qO>I~dYy>dyK0Ydw2) z_v+_BDiDr?3qK?EZwsS7+_to%azijQ5&LE|=NJMJ=U~Y#rTu)z@nJW;?Y`@WX$EWB zJ1u54h`K*!i8c`=K0|WFf~=qI^)&ld`kq190%X6{A)3t|QxAa+A&>QJf!X4fOR|gx zUID>_Q33#E!j=#OQL+o_CJ9IE!3r6`hDF3dkN|>PHX%zc{79VNmJc$QEfX_rmB7n9 z*Md1orrt)9u+EXrWW+7S}c5})ax!ah*O0LiGZN*OE4Na5W>Wx-Dhn=aA`@nD@M7uFm#$rKciYa43KrK2Ons4KLn0a|ZoTG>i+M~4@f+gey z0@WHaN77`>16Ry*J60Q4X1LFg@uQ*5mIsVs|}N|bb3Tf3N-hPHJ|@3`7SF>#Sv*y`2a z--VdH)52=+`(8hK^&Z2iRfO8{NVKPz^?;X6EDfHlM0c&(CktJx>!?|4s_yw4acB0r z7KH}!y_j0nT8S9V-fcxswLEw}kce?wMx=eGx^co%zHOUs-3%hN2@6{7cg5=|12JfR z?2ZM98z3$dq?N>dRzW8Tle%efA=d%28^JkMG($^9sy1Z)U_^A*_G^ zF~=NMT6Zx&a4k`D)BqbwG4t2H@XQ(@*4-Hwg^1!rdf-%n1=U|$9ga!Nno)eR+f>M@ z4F;(LsZ(=FnP&NU0e4er^o@-LS3E+(I2K+y`oFI;*q#PM`M#*M`3hcbDf8zp&GeT@42*Cv)}**8)I`blkue63qpDD<)Ept%|)mU-bM@eE>LOCV;XpjA#1 zS1ybwfvQxOaWb|bd;aP{iVBJ@qyZUV?S zNWeI*$~wpW-xf=GTCU-Hl5;Njlp$FaRwPyiwSAr8Nd+j{=nOOsGB9OQ3$>bm8&&Z! zrmQhSs038x0Gp!*T8!B-j^mDxD?Q#PmT18_bmp)ZbE14(@RK|cE4?`{QQ)Jge`xEg z+9Oa-sPi6ey%i#iDWyU(B?umsppPa|Vh|?wZOuE(JbNV~4UjWBjA(&Sml)-}Y(#}7 zqWVDEKdAW4ia;r!B$EGlB&g6^s3#g#MK0Tf6A{c^;#IUA@DwY3WEU`Vb6?V|EJT?t z}+)qwao>HcBt8yw&%z-S&4xCL4C*}Tg5Uh7(tX2UsUGDd^>yH zPV5H~d#TJ`OMxlR7rQC*Y(ec_MlsjyPAOAGmx}90JI5T3tIfJqy7t2CgmjC&X4#jb z-O(1iWG7R!YwJVsUg2{2n3rR9ihPM$qv2dK44K=6=M#@Cw+R`PAyVmy#A#XvYF<2I z#CKZ5*D$7n9$QT0tI%2s0wDlgsBK~j^qH|`vDa8pa^Zowhcp{{NE6nS)NeQopO!>3 zKmaIZY*|vKb+>*}7-SMnYJ^SDB1~`+GvxR%a!z)m3eK$mD;BJJO#yHPj?Li<%Fu*8 zmV8eeIxPE5`w|beDYRJ+T>C_Q+-dJrvu(qrdg&wGs^>4Dk{vurF=>wEc1MYpK5@~o&t4>ArT|?)Mzgzg;a|R266~MDQ(oaP6Brlm=d1< z;&0&2(H6sc4;Rj#$Fw~HjU$F(4=;cA*Kz&&bucr&`J2BPw{PFZ=I99b-G4urfy1K> zp8M1%G2OX?^XJatZU(;j$;a`&{e3WJ5IY{8sE&y@Kw@!7mjyxxy)RbW;x=#dw<0P5 z#Fw^FB47=Rhv5@N05aG3Igy+vM`ff2Fjg?v{W^H4wPzM_2=`md)}cdd%dQG^y7&Dz zQlfPoQ1h9QqgG zMMXW-*w#VKJGpsBSRA=y;x?%_#dhp)L4A`yoAaJUMEB)Rsa%izZpDQ4)*!BVwC=Ki zQ7POv>=2nf?p#}a?F_rkRF46y-|a4a1>CdGzQIyhy3V7zM~u12U=dua$!r3!9^~Hu zNgqW3Hj|q!6Btt#lUAEUPt<2^QDtsvfj+GxTV5dE?SjBHXO1)dRWZq&mzchI35S&> zArjN+2JyC*g0u@6>fA*ujtnE_97k<5qhFVxcf*V(%Pf{ddV?u4F=V|ih%Q*#Dwv0KhSo;&3&6352=?PPH42iJa zZgJ)66nTe_Usuv_2m0-C9m+%`#yxv{p^1Q=8VLoE=3MEM4F8w&@oFViQoz`B4dOl z25{hzIrOp2aS>Inhw*vR|BcDsbpAqS$WCr%uOscbHKkZlY(Qc;;kTpMwBXw)v;>?l zYU7pdwAQsj?*ND?snvnL7h~wmsmRHS1Pk@|<4G5g{bZ7Z)&ff?xu#}dU^F2E;2QVV zuhzOp>LYp55*0=X0l5U^AFUndWK!=ZM*!Bp=-X{T+OjrA;EVxtO*L174tXt?I%Sdk z8Z<31l17f=5kqQ={!^B&MSdrpn>MUVTPE$5m!x&sWEer}l@yrlkrJ}12MV7P=C7*7 z=B%lU(J;v;D7|2f)pKrFdS1xBr}_O(jiGHSf)49PQi0WR{hGDE<9XCxC#qqzcQ|PY zjooC-1w{8=+DU4zi;s89IP^x?8@a>xyuFrTbk@nR%UsvvdtfQ>& zuH|i2!T^{b+T4|;Fo5AhBPcdoL+S(wVramqreSVAj{U`aS-YK%A4HdOeMJzVT`CqowNe3q#A%rZ5D87PS(qk0(U^j=v1jkLg&N+bjNtCze51qkF8j!N znYhkUB=z?AJ}Dz*AaB6{-uL8_c`bG75xe!TZ^4g?5#I`5DblY}v?Eebus^NG5m-r~NHw?uLPP+7vTS84wUL|HS_j%;)1VuS^}xYkqH@nZa<>X!t9x-7 zX~$`rj|wi!;B6x7#F24++JnSzU5Ty7#q4oP??y*jmaYeFz%EEKMyuDGSbP6jVA2Rh z3)?NWAT5TjFmFxpBNN(of|~adTyq~E(B#3^P{H*vM~#y%k9Be`jN z!w7&a04_WhKt^#lCwLr&V*Efth$qN98A4~6)JKw(XlAuCBSzL}qf?Dh#@O)PMTW5^qU&QP0eDCzmD^dGl!r8&-ozXe=cPmQ^IIeGd z#rj<@_@58q#A?u! z&>qGFu|i#uj%1M0Z*syoY;mNA4~dnK5h-hAgiDa^6a~OxB^f16W#ok@T$8qAHw?bq zcL;rii5j0WFiX!y2-ZA=>X6>YAI8!X zI)~~EpMWf4LHm*ll4t=x%?M-c9M_K!@a;nBQHNexdd?N#CP1^zco>^h0;f-)q6M`& zCrBVghVa~bIU!_1mGpyzkcEw~ooY*zp5sKB74@qr!m|#&v^|qFx`}Z!a#&Vt@J8Ob zODAiX1mL2`OK?8a_Su$Y&aBRf=5@7WipBNwT+SaUrrFE{%8W4)&OPuT&YwAj&p-bH zR_}in7Y_D-VZy721Ma(Y31`oo!52UO89egQ@4)!*`+-}pfrxN)bc9m}XK?q_Io$co ze}gk`UBN@&{?7rMH`H~braoppZ}UjxidhPp!L0_c955jV20ekwT5mz%oC@6^HC1XX z3{ndfyN;+Rmvw08uC}rDUR&)`2>hACViN$$62Q?KY(Zh>W}W<7X}cCaS@l!6Uyad} z?cqTL;rXubmEBqP?&aB}l*=BB(xF_01>8(;t))#!l!QQ+t`$Q}04RR8K#`4}2uYo& zPzPr>2);2 zJPDbBc~43hucKM2K)H*g81Ilv(?FtW40 zoD|(Ms_3ymJ@1jRX(xB*ToVaH&-I&f*|JQ%5m4veVq**UTekD0b<~`hPve5_P;rut zsGA==;H<2g*g@eV^YMP$%l&mTv33+~F{oXU`5ZbUYf}BB2kmVJj+Bw7rjAH_0JoMn z@p4tepazgyHay)3s%Bn3SR^|b z2XznPk|AKePweoJPW&sd6 zwq~o$*}2v~po0s0#jDx{kM-UImiU&wNTW^h-MWsoB&OmM!*?gqwNtF9)W8+59_x+% z^8^VRxzYAV5Wu*zZ2A=8pe&El>KLUT3{a|t*zqrE8}|OBdh&?D zJU@mPb`d&+_Q{cZ53pL{K*3=Y>Y?}^hxG@*HS`j^y_z6(7$+T; zTReD*DXE&V+B=0|{{S!(WdfKd48sbW!<#s|c@0#t7PAqSmJKv=eAJnbn&IeiTk+%e ze!YIyq6{(4$b4@^hTym&)+Y4;?66a6?l6JfV%k^sK%g@wCNMk%5i+clNm-#jvXEA} z)sAL%hRPX%hUsoOi<1@#>kz3~{ZjW+J6u@op0bjRO5jskP>mgt2MCMv0{DKPApaYc z?wBuR((g^HaonKGfkA;{QgsuPnBH!aoBd~Mj*C^~F`#4_u-k-?Z(LztgXBdhAChX- z831K)@^J!!OGgGWtA9PjJ+G2CkO(~6*gRzhNK8$O%OfLDl{hHxmyCgqg&VWXvcV^{ zCni1Fi3@{@j8g*G?Hj2u4Ggk~cgX^LsDM8#Dmo5XG?Y$y_3LI0{6C`%sE&cSuu`qcUc;14>s-Z1mF(D>LEj5He2VL9>njB z-p1$A$~r@Q+f2b=4-v)ST3k3SB2 z?1OmWzxyZH=LxF^@5gq##op<2SWS0u`07`1<@$AeeaLv=Uzvh~V>PPWn}B9xSx3||xiYQc!PGqhL^wi&`k52JD8%{hBxWANEX z;T=|aXhNo3?p1a)-IQMrtnIzhWkLx$X(MduXS_$v_dPo7RvuJWVDB^?BK9wGN=O>n zYB@J8OH^G-Af6N+7(Hu-?$;#iWXQg4CkD5y1QX3OD<$x$PT-7ycD|9(%Kw7Pq1>nH zvb?=IIE|Nn>8J6^ul@{Hr_W(^>I^^x&KqO~KJd@~FLCMpAHvO7Ujx9f^s_l`j)1vL zLl(#3ljJ|^fHsxq^_=Sg5XJLJ4_R%=pc&G(cq7G>%+>&5H#Bug-3$|fPV9)!`fl*; zec}T5z4692+Fcd*#z3B`DG{)z_#=UfFCQT7*n1K&UVa}1oMg{`)p@ z6dE&@ip^3AfY=v{I}3;L>JyOKp-}R>g`PIT6r*=Em<^!Jd-3gT<|R{V@OSiJw>2A3 z>FQ&U21BaBeTsmxUl^#Q?{-uW6-aYRtcKDa*Q6g=XE~bYw#N^N(_{h`$@n#>YUlxy@3&$<8h1(S!ZT;q(!zPv$(^-@V4>yaKUad zO$igIIJmaCso{lTDJ!E@PY;&~mRME1_8cdxysolJXqP8*?MELo=dsqYLBbX>_L{e} zfdw7RRj#_&Pk?8d@i_O{8Vc1D>`-0Z?#!H60wi6REep1uNZsMr`?&S>FXFAspTiS> z;9ted&p(GZzw!k<^gF%_<9Z)7W^C@>!6OGF?*GImkhdFTX56^)HlDb628qsM^U`PW ztxr9Mw0|1I_72v0gB#PfWMVP)FF_RwI@W;`Msmf^CP#rUX&exTRST*d*P~i5-9$0) zttBFuAi|j9a&IlMTY{PEe2SCE25TY^9vc2NqmH?^)$>@ypRvsFo<`7)!KF>vVrQ_J z{?pt>%lDXO%n)(T!n8)f^TS9kz+gP8;afvq zQ5qUNd`bWst+MuoPEwz3(i(YLZBpYvgcN6&2vgGCNH!0~I@+2AZ4aP~s|4Ayd5jTL zEru;e&VhZ-iK#je#Z+`YZ5%(7J0=KW5fYd%;ob@(S+3J+<#%lpFQ#26siazDf6V=O z9W5N92DDdp#)V*1=HQEkfN}o-uYdLz@#(+!ALG=4A7zOMw{IQcbN}c^@%#SLkKoDQ z`MYrA<;%#^k-9-O+bJN_aM?vb*026loB&-RL$`EJc10lC++Q^}CiZ=5Y)<5H zTCK4{xbO1@(Q;K+{oTMq@QKud0b;HQlDyBR*-L>u@+3!(6`;Z~Dw>SQa8&J;Z65{# zyJiQvCD^Y7qwO=lEpPdLrOtfV%VoNH1SE`sFo$J(Z5!GL-1;MS&1jb}uJawv5Mc$H z_llNO_oDUVNdHxskb(J0-&>h!NW&;ZJC8*n!*Qk1pa#GqwwH>RH;;8Yp$3hbp|xHc z#P9B@9O-K<6D?pR7wyF!wYGmLwC;V`9b}Ol2<>{I?Pxb>S*$#!gtZ-FI*@-~_gfx~ zXdO!JGZ7HPG+t(*FsW|S>Y(OiDZSv*>k(YMzbVY(76}_DZ4E(u2tZ;g2BOAzi{_nS z8RSL4pqe|FkVt~Y0lFuWD@e>Fxma8QB{j5JCdD9UHdT@FH{4vNTnPYt%;571? zJscmYyPZ+3J3Tio2CydILn++1b~fymR4qMlTqvb=TZ?@pxRA!~72d5q43dv0mbnc= zJ@)vleW%@Z{>yt*=&wGFmKzr1W}QMmnmLUEB?iQ5i(^VkgD=kkm#B{Uk;yDFxjCK4 z8;PvX7N9i>I~`Zpnr?ySnCF5*0N6IdzOAY#tFf`1KcZ7*&zit?ZPIbXKzIomi6b?M zoV#EgJ4;y|>RblHNwqMN(Q?Br_R9=+w}7nSHUL%9E=aIVF3Q!ztSKIq*%?+VTzT^i zZ1*qX=JUUfS3dc37-@}h7?5+u-Me?OUahe`x{NfgFbtz80vVVN?;sB&)_eO{t=8Ba z-obXt*iKUsZdZW{Q7^gS8p9E;GzB)CJR698&zLFs;(jad_(Bvx(Uco-)4tjMxBZ;M zB-iOirEEDVR`!mRwFx-skkgD$wl?hENJ6!?nJ^AzXA}XdRUTVw=dcLAddQ$x8ve;# zV9~5ougt7?7y4t@BWae8_JgLKq}o6zS7MFW z^LA+cGCL%p2A-B_qp)%mo*N;Htw!EH2HXPX8qz|bcrNr{pah;NW`Nr9==WTh7kzii zK+x;Po*|l>=SYDeb869By>|mDW>FWX-4rerbjoTG!Tmrc?N#Q6W;UaN+{D~iLim(5 zh$eTWx}EL@5t3D&b#mHMW!jtp40?DAHaSEk$e4|X_2fYY9h_@R27O)$fe->pq85v_ z?ilu0&MuKr-(8G|`$hBADLXi4tWKT5!I?emUwFXVAj0~5#%nMBCjR~(`#yaCpZm}7 zvH$rW#?3cw;OO=ZF@FwyEwf@g0C~!%w$m-aJ4u-_s3-fXFx^XS5i}olbAOD?FF6Wn zW3J3BnA#s5Ce+HHOxXytT5uu5UUHlmW2-Ec1QAli2*W1D=dvagLT*qP0KrWL^t$Dm z%ioCfYS=ZrR|pW-gmYKSn?e|8@Y>*As)Je$;u6pM}6L+oPs-I!)!coC@ zYbw8%cI{Gs%+j#x*g_43*8nhR<_P;}3NxPp_xXja>3VQu-U$NxBQpkOOuG03`QBU6 zgh}IyBvwTcO$FEpz>r4_b|__lvTG14>*9hCdZThi(_E)c5&*lcYD67jz&t`Dohm#P z&8OMM?t%u!ii{VOw=;kh3!U5OwWazt|NqR6uZHY6D)RKEu(Ox|4qc9?;u!7w$Zy8K zXzFO+t@zX(bLbNe*lnj9$wuLW z7y7frQdkf~!Ek2#EC>0GUFT2-DLn}Ly}S@&0BD5!N7 z@5XPn<&Es~T-@2j>MN%v#vY3jgcHD-G%&0ram-5o6DLel#q(qy@5Ah`U~!e01IG+|ILKFb(1a4x~aS?jd3Bmh4@+MMV_ z6<#bH6CBzipt2S!;ffCT9gxAcj%uB%-=AH!4 z>Mn$YPX+`cH>noxaOQGTunNKwA-=Q;QzFVwwI&)PHx7A*2tZtg$)cos}f&ATG(DNwyE_DQ?X!GAP zkAUNV6#`>QvNr2f2XSpn#Ha1^0Vn}mqn%Fc>QOpN?d%+f;pVMIoI87yo4M=M7;#)I zc5mB$6pG;)0L7vs&W}ABv@&yL6H6*zL&kjHR~S$6bq=sSsOfLlP)_L^1H}!>1lA&0 zx2N8gRU8GjWuMSoYhN#&ANvb)MnDM8BKw>erm6QgDRwz99R}ca_8nvKcs9#5)Y_rE z&BLCn-QO!Y^p21!yLRiDX|8&8)q=Sh?}1zn5wW;sU(|bg+de&(sx<`c)$!WM{rx#` zs6J5JkMm-z?s6G4SA5y2Ec-nrpW&=6MBJ7`Fpq&W{dSlbLCu7tk~KoC8Ky!&YO#sn z!8r^RYxb@7jjT@{Qon?F2|HXIJN1O03_rY!3{Y~`Q>rmcMw7d~sh=Q12CH*K#$Iwu zHi8~LATA|C_5%*V58InKmgGWh!$E+%B$!~NVHuB|1jDh$cSZcsqkU1(VE1i4>QWyc zBD97f&3;q(9s3_O#}i!n7-ilWsvOggcUxpqApTWXUC5pM=2Co-9_;~SAK92UsO)}Y zQvf`OV_mmkK8A^FqNA5QH%p-e>FdUX-dXlv+g9W=>P$IpUIQOrhGv&3mMMgZ)QyT< z#W!K7kV49gtOQclW>7^W3Lic&;pk|CJGXCPICCBkz307n;_=7u*4tNb_wFGQ-NYjg zKaAI3e;qe(-o)9nXL0@7HEiGeBrt99(0!Ni%2%Jq^S}9(f` zH?A=uxzz&1O3UV9K*pvSFY8*lOL>iXI45y`Btj;(a0^Jf7F*POQWSzY)wEe8g=3|! zEP^6~nK6mA!<6f+aX<}616b0qk_#9zfDL;9>lQu}pe`eF9wu^g3x>dv@dpu?64Ww- z99MDp&c+#IXf2hodh;+?|%5^E+nBClF2px4U4*l{c( zuF^R&jTehF9YEGJH$&pUxGCe;%#I-NT-xuoK?n$r=96FUV_udd&HyUFE4mNzzpY=_ z(!y4C2Ou)7WlH)xIe={d1AOn`6qXLy<#|y_1GW;WbJC7+2Vevi0w+Dn zS|OfeCYG6T>fAYO?%cx9{jI-@D=&T#-~ShX7-t`S4{pBxD!gZ*E&V%?9I`AJRtCUH zgeXz#YSE1C+D7B}0hlcP6T3FV4wxmHxXrt2nF+N?EQh%=W~l0SxYy#aGPLSlWgJ|o z>F`am_b91WK);;=_O$>`EBJS@UwzOa)wuZ6l?qZf9Pj{qE|b>3ome$)VH38T=nm8R zrW=c;7)ii|9C0lQNE?IPa-@3M3K&dF$fyMyRhEdhFZK>3eg&}}0*tsFgLI4OCC{g3 zP>wkY*4tuDq;S2n7`$U1glws}23?uYfDi}?DG{dZ@wZ(7U^KZ|7_RG$seDVtVbVN% zRD5oAFNa;73j^fc$g(rd#h_d|8|k8DYY3KB;b`O7nhW-Ki!%FX2(wjv#C4!jOIup) zo4wiIH$jERmnWpMGHt3&XR2i+TxH}Mh&B6+?`dH?XWjEU8JM!ivS6*3C>5&(Vap^4 zq|M6AGEBME48oM%lEG+D3%u3gvtvVB?UBG6wY=H@F&SRkw$@iU%xA0;V@0foalw8Y z1`d$`riy2cb;L5Jj6{+Pr5qlU#JvC#)|9d3gdqh>J`#b4;jw{yH<$%LoQlc)c@&r|p(*SX?kE&Z~M zi@?Q_W}pd~h1N%hvI47&DsEKUdW4tU;FO(XX{_Bc0&h(9x|Kld1PsH7_doeQ-1p!^ z7Rja=MUgl zzx-9)_v#CvVW<=bCS*Xk7CPx1(FD)SXBgeGM#wxXEzlRT&ihJRBD7~#*}tuj%B=G; zY73Y#tng986wE0KmoM*v3vXlTSf@e{>t#9QNvx|VAt%BSd#;rgJTj0q*HX}y-|CC% zJHp}4JN7*_54;IyuuLX++&*f{cvL2WHG-@A1-W*`ikly1q-N6RgcYbKx3wrpi3>4d za3zImk+dUdE}iT0mxRUq!jx*EKzwe&!Y1-VT>HH(e2lL+SU%H_oV(OhU@ z8cWi4+V;gfrg!qJi)l9MIcV2vUWWmdJ!xHG?43eL5Pk4;M#*}x4B|$xvd&WUucMT} zdCu~)J}Yw#g9VN0VSF~nFWQpo+XRSbY!J6qaYk5NGPGoQfq*Wb`xKd+Qn4%ybncs!1- zA@;8Q^bNXbO|*s&Tt01r{HQC^bG^kR$NU^67QqnLO$91ZE5{9Pl6Ln z>u2LVu7_MOVVtdgOVJ;`?vF=a0N^ojDB9%k>?uiq>L&1Hv<7{_3N1+@Lzn$+kS?Ni~)zaW_&4;2J!P0yc>4yq0g0%C94lK!_Ajd z4nq!QhK?hhK#emBUe|kT_SMV))|5qX5Wa7-LE8PjBsc62>d;sa*QC;aaFt`q1>hhu11nNyZOQ^*p{a0nR|H(1()kVbQqTz8%0a z&QL)D0M0n%;1m`7j7$*AIW5303n^|0!$7Q#pt z;Xb^5?K+0-7LPyv1YUjhRcy8!Bup4ioyPMozKk2!uj85bKY@oo{0Urs_7liozl?#i zy3dme7#yd^KA9~wm21a)lg??&6PGmL3JVE@4F+{)nJPX{=5Ux0Fmq0kTX@PfX`U5( zwB@7%>c*;5nKyIaOH|XExQScK_8z2;E(OfNziiIt%_aI&p19v;+}z89i=8XPi~HZ$ zyY|e8g=yHVEkphmJE5(wFt=7;)0k;kdwsA2Pq1LEN-L=}qS+Fkh+w;{WPs%It&PXp zpOMF9#y8%l^8e5()!>;b*{zY1g1WT^uEtQzaY+yH)at-&lg=4QBPDSgCyc7ij;yn( zyQ%roo-6BWrp^jmvjaQ<#2(a)S==RdA>wyZsI1fRrMTr8Jlkef0Eq}H#t4~LbbNcv z3>sHBdv?UjU;H$F^ndd`_<_Ih|HeoD$NwU(zxg({M|Z2BOV+=XLtlX+NGSc%>k^Bi zeNVgA65v>3@WX=0b;FjuAD-_TZHr^$-nZ+xH;Dim1f@4lG9|Kkv|@->M%1hkAc9Is zLFjuekr2#DVZ%)>rJ^lJHEUjP=^FwANptD=u~tqDAm`d;Nut12uS}GI;48`G!Ks$; zOB+YQUar=t=_>(2Sm>o-AD(O9+V+dtE{8zIk-J#KGzJQ`AF}DLEdA=f#&m{PmD>nl;cix*noy-D?p2$b-^Mx4-4J$ksR>|A z1WabOp*V8{W34VjV_*ghmF`nkAxQ!$-n6yJJczk>!P5+=715vrZugprLuEXMiBdT- zgBg}kvyQa1&-Y01Wrj()`REg7N!6>@Z+&y~ed`SMkgm~cj-P?%MK%tD&MZU?oM>nS`L6^a%e1X;>$if0}p)E)^3h#0hLAKGw!bm^`x*hy#hpx3tUtz8xfD{pROe%$KRq&8p54 zw6X0+SrC<$bvoZO>s``4wHu*#_=yL{U1PWFvY_GJmSEZamY~&Nr0R>FbYDpyJTy|> zN^ZU-WJJM5+-g=kH!~39gO?tf2@yqqQe|M-(w-W-5_CSw5pg@o;fEd2D#JUj!=YJ# z#Nt29B&lcGso7D?q5+`BLSkMBsEG&Z+>!l83BDPDIWz$vVLWvjKG!=ssCAt?e;&84 zUBi$6nSTkFzxo&OUH{sj$L7ue_EWs? z#Ngy5@MzNad-%3FlM8Vu41sGZvi3qQuE?6C z)L3U^dun_nqKT5VyLx8&lxVr&Jt;OdRc-Q?StyvWz#??V-U`idzhqSHq(&HV5?*57 z_qx4`UVNj4%l`n>uus73;Ii~P20_cr8d$E=6nrEWEP4n)ZzjL)!!2c_<;wF_05y6}yXwb}Sf zY!wLdgzrj9i0$3#NJ*v5*QXQ~Bes4Y8e z&BF6y8QbnDYQA9?gqV;bD%3#UR>Y~$_l79hfYV}|+L0IotNXIePP;wsapOg$Tci`> zVUPhz^EOh8uLQOvkf6lR$PBE8d1ovTrL2iMzEajyhE&I3N-i2CX3273^t90y_?#v< z_{I8k5V1r|F=~9)$+)C`*;YdD$bb3t~ z`xx+Y%PNE}IY3=(v_qwrQKD~L6=i&8kV?xJ?g^3B9a@#$O~*a{^EWQp@Z$MDT9 z;~EIh2-O~#M!^Fp)s5RWaU-Vs|FWSqphY0IUC;amp_cGVw&}TjjzZWfq|E-;%np|X z2|yEcEOaHhF~kSa-wmkSufB)RY43TL0D+iRcU=tKLmhs+p=uT8ZRY^9vF;XW$8U!g$prw`zj|GfDMZ@vGR19Z(tQDeNjJTUzmVT*$4V zTBff(KvuEs*cmIaI3o;P^d0~tw!l;&eZr&fc*uSb)`N&9Y={)2_YUi|b6`UawEA{@JPV_b&eCo#T?>xow#53OBF_l?jBp_IowLY(NdxPlR+=G~tmsIe& zoAFy|jgwngZ(XT5+_Rut77$BJQI~C3Yj)M!n?RVtTo&a@XaC2q-L#uPi7}FMT_a^o zY95R{}wHxg5@=E*ZmNU|Qo!*>g+b>#)FTb-)-Ci-t}SngzyPp>{Eg^V=(C z(a@G5)i|KM&j{`;z?1~<=Ei3|#+V`i19Mq7K&*%+j=TnAe~3Qfb>9c%3jYuR15D&6 zbC}5$EesR{OfX?nSa-d$K*M%#6W%hxj?KZ0j#@vdz84j02`DC5m9UsGV?kmayVfl7 z!3;e(6N6cfRZNVOWhQd+{l2Tt1g>JQ#kMS6VZ>YmxWs=dSwk2g%8EmEE%m^iiOS)d zh^ihjYV9^qAClW~FU?8(Hv-s8g#9#Oz*O#wD@(#w7l~K|K~Q1G)S0MVM`#P+TPaad z3*}Au#zdI5M>sq>!n42U_v35N{{mk6>I-=4?rl7|zd~A_!{%s<4}bW>7}9`)g9EX; zI=YK>-r{ItoO$g__?_SS3A}pe72JC1d0c$>eb{U^RiARsNP|-*abv0x+?HMBY&-=D zyi>r`Jo{xQSnx{s9~%qwj*CG8!QykIV%IViijwsmE_>ISWeA=H=dx)t4dRk)9162C zmgXL=Cvvqy$)zK@Un^?`fH+IwU&A*xX#rkp;iwI6m^~j!@R@yUF-9`i;`^bU*Ulcb zGMXQdOkZm_>^0buc~C|x6ed%pFh*pVRFWKOZ4d>35(}W(GF;730XX|SvVI)jfiH4T z;J^SlMVX{EI3apPGP~&&fD*j1b-UmoG4wgETeTo};@4?pd%hZOCf&?e11wdyJH-%5 z%b=ws)-K3d& z0F&x43}CrTgb87jobynbm{fnguIMFS<}CC#7VDQu^JDxD24+H(9;`&X)xyA*>-PX) zAkme}0i&)l_SvGi18OlrQeSMtp7~e=+S*7&RUdTomMGpQa9^^oH7qPl(|_ETMX1qC zT#wGrh(`G>8W@IC?W$d_YfQ+6mJbji!de-C@2;OtMjQl z!EM*f2sQ!%3G%D@(biQ{ww}G6znN5+Lt{13&mDdV7Oc2@8sML4sG!Qf z3mk;v_qLzCePi()%#=TFXE*s4NMp6E8ujp>c)}2TLP_UIf>Rnk8&N`QGGR;-1kp2c zO<>NLAQ_NGVhofpQpP|cco^W83=x;@;tIwN4sXA){cN3=RO|9yjM{F+G6J-8rDTvG zE=RwJizM5NwL`@sf+2zmvq!V{QW8!4q2k{WT;ki*YpPkJg7BomeVj05<8kVp94$MH z@h3>E3D?8dMfM++txiLLZzW!t=YdA;F_YW4wtcd91+JVHtcQ$kxh5c)tF`XD8BTMW zmI16%mOy_2zgp5c&WzRGKGNz`;jNi7)|7#1i_OtpX^VWGSQ)B}V6SVY>O{&*?y?@} zqc9Htk9uL-lYj^r&J4glNdV{-O+^?r5pXxST*mJPwM3Y}LBn3RU4%Az?&|e>9xqEF zoPhPgIjmm#9Nzx)&*AD@m$5o?4!pUG^ZO(6-T{U)10H$gVQe-V93I}4ENYyQ)_d4r ztueg*MWi=?OCNYYh7UfCqidJ(>d{eYf65st)m9!O{D|J`Z|Qe6Csgp1P-;dvxxu+B zhjR|=B5y5IToX_vc%})lR*frS^+cyXFS9We37%Yf+z}m9%1UoYp9}6bOV(U%Qk}1g zC#s#*w_xQ#9b=3zj{wqMJGVec7M^+auaiv85*V>{iw zMK&#SedOfkm!R3q64XLs3uyY4g+*=IpbZ z=yUVCN6iCq6SYlNIKSv|8cpIN)oa z{w4hAAN?QT_y5KJ4?ggH{~T_-ejS_5T>uHG5vH`6Gj=hI6u`%Pc1sKbeaF^i7#yia z7)E%nCE&Z-UMiNxvl>;$UOx&S&6l0pjT_)B;sP7C30dMHy|<0y658|FrC$9&H2bGO zRBghQ94lAK_S%ZpxfnQ+Tl!4 zZ8c-7X}C;dY=;{zbwX2dWe;j>YtnH11BrRDSpu4AubIUU0B9BSR*5G3NS|#oaCc&W zCJAuZ^@oXFFzW?^&9Vy{jwv%{qR(Ae7cx{(OW}P(Cdm&~#w-;pC+EwhJ_Qv@sOWhS zG?2rb72#W)y-pDLHTP9;v0K4{v%o{%B_?UnWrtIbtG80}tM zMyq#BwMD=-JMTuYw3dEoH`m*N8B9~~$BqjQWDI)v)k9L2^<6;%dn#IzImN#c%RnFIRJw|e7{~<3Q22gO>!Vl%*9%6MVbj@Vw}0} zB91n|Td%&1VU*P#$0Tq^z-m|pp3e{Q!ypI8fg$lZ$i?cph?*KsERLI8bjoo8%kdW= z4eq>0Ta1*kBH(}+2Wi474uBgTu$@Ndd(=uTS=z(U9fM)R;YEQDX%UjF)v$Z3U3mo9+DHD11Y3%A~W6CgsKGS=%A?tkC`tXC_n zR%>L=c=@HTV>3i~A#1t5s<|Y5WQoGMMv09k4bfLJkNsQbEr<7;T|j zv96EVc(qyVqe5|fKHE}TSI4)Pip~1MAuW79G_G|PU#0Li`Zw|_-mg~ZG4C0x^@XWd z32vDq-&-sTDI-V)5L0{DWgvRLxI7S@wMf6&&?=tu9w)g z<%{2vFYvB*I7>RBlqBzXK@xqQX=jOj?0>3jO)as=)f+A;E2yhmms<*;LhSZjzMgM~ zDj;QH*6S4-N}OoRh-J7Ry_r_IZ8uT!=3{9~QRj|UaoMw89=KZ*XA|um| zt7;?khMGE#D@$%lHCZ7fvk2&64GR6?pcyx2S8P%Y6a7)$CqfC>rcFuU{q#kI679p3M(jH(?t>ci?t4re2A z30RyGmvhV(fxxSXjv68m@u}*N~ePwP$M_CVKBtnK2X#hYSYb=sQLB1PRqrBm) z?nSPHjq?%XIaqfXwV&&*!f1sCCo4;@FQr)R?YFWwn{UegK8EO^siaX|CN@hPi{uSNQ{vs@meA=3>lz;I~MKlDj@JxptmcvScuk6 z69$ZAtiJM&A*hzbGg+VN)KWqrnH1;Xkvgp6>we5U4@i^ zNkAHqnegQ=eE}PcxOm@vIDPsI?%cVBlm?tRvxhH#?$fyZ=4I^f@8esZ`4(KiejTUw z_i^#!9=011=0EqT=a4pcasR`Q;o6NGc;@|2;KBWUopg0iV$bPf0)_z+7~3s1l32VJ zb6@AVg`yj$-*;M!RtqJ*nam$)|8s4E5o2EWD^xXrf1tl)Cvck5hG(aC*EgJvf3QB*By4JKf4 zLll>vW<9#4q7{yzD*8njM3FZ|=}?`sJF;8Oq*}}7vR)X>fDjlczG{&nZMB|O55m2= z*QreSy%u6I&1a&poDnh9?G7q}?3>6_aoG?=03WDUkmjA=Y2?t~5Xus;BlI?6XnQc) zRjfeQb_6l$$Py7 zMG*;G+0oV6{m6hslo|zN@qNQ3DFvLNonZEU+ImIJQketv_f>mnkHG|c@4pkA)vs|k z9zU+c`8I~#4hD8;tTbUdFReR?)zPl0)l1=BhJ4KMtyRyT2_S5Bg`8J{o6=7;6{ex= zIck^`4v>+Vt2De!gp@QjB%8aI^++_r7Bn;#1|cVaGGkEupTc(pxTS%PWrSoFC|a7Z zhX!?tu{mEs=6NJZu1ci-!Ib@=r1LxI0-2(~;B=pa5g(ud<~Rr$8US3AnAL9?NKBvs z$P;PsIx*&)60j{1W_LqZ3*RnCuHWgqlnCp@vsu?~Oj%(-y0Dpwrb)Zn3fbBbm|~NX z!|W1`&Pu0-P>Tq}Jz1wcNnklhLUP8B1l%QpsnD6J&}#<3?DcL77ibKo@H`{f4?N+t zJ_H3o#U#3S(JUUHuyF$H#{(K5eAq0gIR+(eaQOGUSdqD-7hX%Wl+jZmlWYX))Byl37L|( zL$GF5$gTliCAC7;j--?T%1A^Q3;vVw8$KYl8XO2%ji}t(3|13ODv%JN%Mp`gCBgvk z028HdK%U_v6ap{}vKI;sBT+gGiIFqo2!uBNfr+n1l9(Su5c-%fW_{`a7w+H3r+)fp z@gx7nAI0UDzlM)~_?vKe^({=(gnTvQ<{Piz!4H2c(l8>?k?wI{X~{H_it9ujZzT4| z@V@Z|z?h`h34}FiNI!Dki~;N=U{9kkC1RYSsibF30PapBCUtK-Vv^LXkVBwl{{tYd z{Z)^|EQcGUWxoHF{4P`EJmQ&v}Z2=-Y{K$Lo^ixma)mL7^mACHz(-F?E z6An(D#)S)8eE1{Zg2x|z0M9-59PWGgJs4Lb-g@gY&Ye4lZ-4e#ym9(r>_7ZoT>g81 zT@}EQ!a!Z|1PhpZ=~}h#1dUSzqsK;vY)0HsItR?#X4h~k;aI})mnjcD$BhWmQutc_ zFVDE#TjDAG>}>dkinWT-=4@H{s$M$(I5h;VSW<^RMm~ul0VrD`UmQb?P5k?MKB(Yk z)|oMzk2a|0sCy`}MXDG)xU9mm1RKn!<2d%Pp#`Z#vrXDA~%JKpLLn2`7xmepdMh&E8TU@Tj)93St*)axUk`P zW?~+N-0GHS=cGOgTXQlyF{EWziTOcgk@;*W_Ffu8rF*plHNei&Z z3|Rbw3f@|1sWqi#Zj9m4-%T~&P+`v4KXVS_(Ovx7PyB7X{oQv4|Pm`ha1yQC%OBxSl22 zx*07IM$#RdgngN^?3tVh`>-qpP)0~hdWUwC>uGHTV2=n#NEimjU1A*SejM|NM1uxC zR72L{Q=^!7wpQkI>W%|3h?odz>RC1u`z^a_q}_LgmKyr+&{`t3IH`Gie@F3^hiGxFZ-2xlOG8S!7QNka z;u1bCu5%=U$dT&Tn0HvOm+`Ub}W1uU)y0 zGxtA?Jgo55E4Q%S9N}Xh`xqX)?-DNa8k_SEYsM17#S0hk%B!#7;d5v3=zSg}_3`k5w18nFJ?R&n(#)wsx9C6fM!rj3@;#I}vAkNB@g z`(sd3Q963;CDMTM@uO&Q@AIO+SdW+W>1<)iLRw{NR)O&sv(H;j34DTb#?GF{MIes5tFx77kV+i8H}X6;MG zG|)nxbL=9ChW zN_u7x7^lP9=a4d|9DWGkp%52lnS+EZfM&kd07#>UPZpSi9LVRhWyHDEjN^_uEn_l& z5~*=QDu#aj!)3qpbV2oD!{4HCl|A^~Z2JQO(%d|==RFCpj;T6?I@F32#;#+Jz@vZ3 zWxvSg4iJ=0%|-B3H<7{U8PS?3&RZ84km?O)PjY}fX<=rJ>wTOV*ZAslzkt8i7qvI3FR z)~>$DaQLzKD5ZxaOj-QKvx@{`lo&)o=FOrt>Xp<1F@wCp`ooy#90rOHYC|QfV{;Vc zMktRvqHSB|Pv=)F8@Od;oSa&=2saCzuW2huZ)YPC#obt6819|}UBO*D>u}3DuD;Ut zi8NrZ(2F7>AQSrej25e$g~sN)(^!1L5iuBKrno{&BPYk}DS@)U-Vy@^$XpFtFKJu` zz~{&!`VSuh3EcT4uirh#mzRWm5kPU8`M0v!`@&@sb-Ix z)n$Pj5)=_d>9#&Ap z;w3gsviI9ece``f^sz03+9IJ_no8TC!3EE2KeF<66I)Dz8V+S0&6c3 zSAu!xeUkyB^SA!o+r7k&eK&wMY=o?3y^9o#&B zAKv@KO>my@sZah2KJdGLKlUy?1itwyh=3b6Z{gtlCA@ub3HSZlPvZmU&)|#S`v)<- z_Nf`~kaaXAohpp)t*u)kEGf#F)%QpyCdOu(-;sMJ@$;7%2>*{!0c9q2CQY;o`3uN3n}s+Iw-!_s3&W zLfM=qA8c)bxcK}n*Cni2qN&JYWs}w{+eEF&P)pMN_Yztvcgggp)U5LonVi+o8AT^A zJw*mNLRDMayj9@`Y64m@545y0@4Sc*K;kxBe(`zy-9Pqw@%w)8Z{pkjl|ORaQu()TP&TCYoKdt|j*|iGww`gHvHEEgwGnYRFp+BE zjmg)*q=bOq^vyIsWGxkg1j7}^EGIZaJLoBeAinHVXs$ibM<&!>>m6G-j8*y^cLHhO zI9!XVA}MRaN_~jJ0Xi^pj-whJ!uGMewNb5`5g&<4@B3`Zf;~o^(+Mb+Y0M$DWCawC zzs%&=7;%Q{aX5?#Y}RtJw~Nryx=rMH-WmEEO>tYlxQ7k%#r=ImSSRtH4)#8XGmJZ9IcOJjni_eSTCTMQ?wp9BKe&C7br_g?zra5O6 zdOlwh0eox)G zaTkP*y+5G{jV2lZk}=r&F#~&n^PZSgNa?eZo0+V&X9|lZ(3C{kLn?4V$VBI|AnE2k2sE%jNZBDn6RLhqC2s+d5ao|!qn*jB@s$3*~a|Jv~a z1&0nPYTG4%-X=)ZV;y^GQtOGZ7GbW-UJW-0N-I-c*V1pX5(*fD#2sWb>tYt%vKLaU zwp(=7%+1*BxflRF=Zw9B^Eh|^K7R41{(tz7|MVZmTd%!>{k=U5vw{*HeEpZ>`o!M8qn7B}wP#AYML_p%#>HZy8!V|w&xBPhR| z|8LKOWv#;R+}=CE9`2RcuhiT>uC(}`F#w!PYSp^GRQFdKAr>*kHaV^b;OQ#gX)#|Z zEh)wL3n-Rv<@HP|KsN|>VVc{Ngne8|+2w9@{~u-0ClxaE%RBkj4OERui_hv~UhbOZ zk^a9}?P>Q2Xu<*rnNwRyCUmS8v}j z;%d2g(*CsvcsabFV3Wj4I}vEpN9os)LvB5uvSUaghW*;CDSRabn?;RU>-J^ikN(a* zxQIlgE~?>Y8=JwKG2%uf1RF7&b0K!S1B(+fpB-N@aiQQUj*dn7DG}(2F=+rg`+5TO zkZL%#+H)fKX<|7A_|b%onVHOHaiI-RH$%9i9RWZ-aI=c_~AuN3t5>u?Kl&1 zu2&>=1X8tWC|BSwn(7!g##@%TVU1}aqcB0yPy&-F^NHHrT(tXcsX^tiX3PMA*>JUE z9}yNT+o+{9!QuHp25U{np~K&)Z4Q8hTJHN#l-oG~Ohm<(iWxx8=f z4I~=Z1UYRah`?gYge_aZIn_F;Jj`OFBrFq!^^D(-%4hO zg*ex&&!&K!N4RWS=9883XVro>`bcIZN+2Heok=z9b~tm28-w+h5`i}YQFzA$#lU=Q zHZRO|O5Q?E$T?nt73~0-;7TF60aT$0g5_4JhE9EiRjRu_YW;=(qPD**ntXeQXwKp- zjjyW3+VeD@2KQF2y=U*Pz=bBZCS)8WQx_k82noQC{Lo**kNwp@kBJ!v2M6-r39Kir zy|uAOS^6&)F%nyCQg@U=g(a-;pD0AFBe9OKo+e_f)3#h^VsI9WywUG-!2b+F%4+?f zsVYS;JRxfz3Z5v_?-2qRD8ez@w>ChATlxSJgtrKp+4cGxB&3vtCIiB^v7KcI!$7$8 zwJ%`(^v7|K@8H_kKaceAqu4*ZhT9pqbl(H`9l!ry!t=lMv%sC}*xOrUvz>7E%mGee zi|q@)j=P5&ynK7YLq}JU9=IRVR_r)p-W7unhGEGqVn|T}t0fNW+-BV?eRXx=Q*6v- zO+4OG&6gPmWxbL4LHMUaxsod_CXXf*mxj{APT$MtT;RSa!hHcq`K6ZVGfI4A()1mN8eHT+h;|sn4y?4 zf{|5;(?AQ!3?=qMVAhwo3pfC_gpUbT+O=IJRxgW>V%m4FrA-gG)ZR(Tj$zAlqOkTh z6D>t;TchT8?;WuQU_G9vf<8R500jgxfC>R+7VTCIZmuzl2c`B<0UAOwP+4_Pb56NZ4=!CW&gF^>itR)#98|&o>J$C~K>c z-A(AyifjjjYzTn3f@qgpa%>0Cim4B45`_#tYMbu~X)xYK4v!X?aZQZ^k9vf*4Msu!jJ3#ZrjSb)ld!Pb4lVSHJuM zZXE$n{LlW6c>bUL3~s*iG9G>6Nvuzu#>kBA-8;C*Z{XWM_EBsO?;>Z$?Q3u2iL?8l zVL-m|GQRs;o(7L=;O+{m=@4&kw%T0>5>FdzrQM_T`bHig{%Ubd`@3IzTl!qyH^xO9 zgA$i@onoZf(pfvm#P-`_5st({Ej5A$5xV*vj=&gx zTFn#5xgasC5`)27&hWyf9}BdwV!D zBz*Dbe;RN9k?+R8@K=5e@BQ{~!?jnhAa4&9dDfOUu~6w@BoX!DL9W!Rj^#Kdgi}Vw zfVgbHOn9Ye>?%Rz3g=ZznG5ilKecJJDiizSTVIY$KvtIm-D6u|CTy6K!T2x%l!ZYG zvaU)(9TD^~3s`GxS#gEwUYr??&jA!6LxPxklKzf@2Dd}9u4ELcPGg$t?|9o$m`4GN zMG;ztYLOsXrC7|gwVncFwampY&V^sC$&Sy2F~qd-elkE)bu&ioaI7seV{cf9M%UN% z7szxp_Pe)h%?(B9B~>wib_qWm3mTlr^@_OUVJ~^r}`@yfs%JpAw4^Hya>tYgbGTyC26lgnk(L9kfH0RY&NX z@qmIS0(Q$8=Pq2t`3tA;(?9xm@gM!*pTb*jyoUX~HHL9@Vj+W(+7%4|4amHOiBLB@ zl+>y!3iDjIl?-(av|Fcp{4 zumG1|Vg6HLcSJbCz&7lgtZim89!Cy{)<_}=AUm!`yz%B6*j{`OUi+E<0S?v$P|j%II2TonQUb`C-g=S{E8pUdjnb^Iu=8Qq=w?-u2X z!+8&9SA127|70av6tnit6m|of^2T_@y8bclTblqwSlxhSRcFFIWAtZr^^ZQ{H@7=< z;BiM_*_5^ZFzdmjnB5eXPe>X=gab7T1ijEO-xhK>Hp@hpr4X0H|mJN&D#q!}Hlwi-mr)Yk#0Cf2dBiush_W)?>gry<6O_(DkUGGY{; zRxlAK%(TK&$%qo!kp5T2TBD4IE1V|t7}>vwQRXGCL=WE>3`h)$mb}l$RIZCzV*O@3 zI??Ep z(F8zZbex8`(;a3xSR;!FEUW*}%<7OFT8ES|vo~MplNHuO`v@6_2?~lhdV%?fP#|tA ztY*~?n~6mTWb}wAORSOt*UFJ-8x#C+G*ZS91|TJ+5aMdGQp`t;$}K@T6^)EPAM3!f zZ-=}EbHXYO5yKUJXp0~KR5uSvrI#xz*6xD1EXIH$yE%7E^XYT%)X%<)Zpb#ic*Z|o zC1M!RA)Fy`U=XyUU*$zEQxwS;qEo;T@exAIL@@<@V^UB9ke`Y{q&_sV~7oO@G z1Qb*73T!W{fPhiOSIP}awyi#RGqcXd{+dXb8MyGkLpZ#36aTLt{EPTI|KVQ&0GvKJ z5KEkUln{v<8P5U@k7+7y4i@Zm3x_r1rS_=q`U;G-0+oO`DY9j;!fNojc%mp!E6txc zfpaPl+OrIdf_A|w;XI-Bn4~fXxY$Ch6@GpG0Pl~-TI*I)WN_V@R(Uhg4qxA@3MK7t1yeGjhOd=oGJ z<`;2z_bxWmg!5<5;QjA?9GM7d7)$>cZbjKr*!a$Idxv$7jBB>^s?=18wkR`Aq0Iag|2bHzCRp5e^tU*c#WQpNaI;u=tVcvMh#QE&7 z1_VtJ4OFAGF&H=Ks+bxrT7rixN?taX_c#a67mNTZ33(Zy5i*`nz9A$uzpVk%CX`J$ zR-mv{BJhX?B&OChVpo&7$num;?y}QroXdvla@0#nkej(VESdYhqrxrObd70dNB-hY zV5VCAd1UDv%Ba{6`~Yb>KHY3YB`~D1&{jmS5P*f8k#+4yLUpRrZz6H>Oz>HW3e65k z1c0NKiZm5d=HiP+NMahxV}*)xGRdsmS?O%8kg>_y3<(pnWp6JvhYEqOW=_L9@z9eB zIi#+(!c$s0)Ye1X4p*EvSAPHi}K8_*DK0eH;q(J>fip14$0>LElAP5#e!FuYAi7QDnX8kKc z7)7tSP8Lkj1QnKgkO8&Muzerx>fXt)Vtj+xr*`damMva~gl5@FdO;?!7z87$`8POW zP@zJC1#vYTVmes)XPGJpaW$2}XJzmM4_u*3KMOfqpr|X>cM@Am;U9+5b`0kf8RV8x zUaFhP=U2fIoE3V*qRn{b!0XrcTmDW!A;GsFLvxUd# zR-MCjkG#Oo{00WNGbf(JP_?=xZ zMKp-Epz&7}o)Alr?;Nm>C}d8)pSNi&JY6Z~mSe((SlG^KidPzIRHMkzLbKpq6~LRa zvvKgWQ6ZjTm>a&3JP z5#Sok=7Lq5MQUcP+A)zzH{yGuYTgOZO%e|sbs@#l5oog_JV_-w-=-4{s!jBkI1QjY zVao}lwm2b`D8=3*Yu7_9$~d_Yf-Om($M8keUW)mlnnTab;9aNysB|wJHn({$Y~YHN z`H`dIPE^QXBa6`LjsPh{7kA^^dh~X*3xbGZlH~_PqITBby}~);^tp35x_uM>^gsQ- z;jxc>7oPf_@5jx{m*ZPy9QU?c<_LId%)%^KV{VB1EZv#iKS8TzUX}u>7bawW*r(o=#<+QoVvtnbqH2+v?K7*c}-Lz^hV zhxOGN0w_%6N(c#{L}XTmkkops0|!QbEK0uNM+$A$AV#7QQWM?CE0Ea3ORzPi-_cY* z=lZ|}04tTaIhFG!Gk~K^;*JpRZ-@ks5(;ZL#_u#Mh-m7Jv0!9Os-ZVVhY&42rjEe8 z*o=^*=OZ1*Arm->M%RSK@1ziA3}$(uOg90AS+j#iTP6+E=A-7qC#_OOGHt)ozeN7L z)K~Z_`Ttf`TqhmNar}m}$=X(UF}5)hum`cM*fJGi0z+uyT7^7@*HQ_P*Q#@zPmDOp zez*2(K&$HU^^Ra_84@Nv(6xGkbYtIQKkPsksS%-Gqf(c)4GtQ7eIfR}Ta-7- zECSY8BA>z;z>ur6K~k-yWz=A6lLAK`8fGx2X;Ob{!6mUxh8`Ho9I8DNqu7VF^AF7X zO_YETZz1xYU2=C4G9SjxEUpp<=TG6M|MMTkfAnwuNnCyFGESX3RZ?cZvm)agX~H^f zffRzq>*Nw8Y?-kSQAiz;3+tj%AO_YoIJTHLJ{%J?MA|!`4W~NLq%c09jo>ps%-v&2 z9TB%7RptLv(x9Dc#Y7BXVvOrG#v$Q-PdtuCzUia5cI9o{IeY~Vu12JkaP#JEeCsE^ z4R6178Nd1b^B^J&!+@L_H*eiS&Kd7};t720W6vUg?ECS`XFrd}U;T15qJ)S?7lr`g zTXW8C85skR1Yv_)D!9TlS}VwV2JaEpTj;N6&9|A-hQj@L?_-QGiFJ~zuZEC~4V;Qh zz!-MMR{Cmwyp35LPX(CjQ=ydk;vQu zjZbL8Eawq&Hj4TV1UD{s`NaP!y8S3Nd{!ae?`X~{JfdQ8>%9S4}>KF*7*(QBILp4Yxaw+tQ zT%~5xEsGyRQqtr}+yFQ`nI=et{wYtY%_5j3f@sQ95hhTWY)`P$9w2m1&G$Ox;x1tt z+N@@<_1<1aXEOiIJvHwUb0u~vT@bAu+NlUd%!;819N5$3O{vi!?&wukMwc=$*_md6 zkt)O)vi>7EOpA+!3vlc}DU5N=IwWPjY&}gFQ#NJ9H1-YV%#0gv`61be6oYTT(7Hh?FkopZ?e}kGVP=f$Q&>;8usu3#7>_u@la@M%jNBoOjO|4Pev>kU@_vSE z8wA`5lxywe{Hz*aS<8U9$Bghf0kiux5H_0Ph2If2eEYa7lk9bLEoMd%x&M~4M(k%j zIv=;jrV)^XkwMM?%^8mcp#~|oW9y~&xiX`+$kDmS#;&al{jD*a&v{#Cg6z-T=!!c;UZO)8&%|t6X%4PR43974nVy&# zlcoO-^}1hsq+7~oGn_}Lde(}RAcvS7-|VeyHM*+O?%PUFQ%bo1;YV?}$@pu3=3mF( z|Lgxg01x>1jqop7O;IE&Nd{60e;axx_yQ2Tw$7-OUl}H(qO$I0wNiph!uVxzE2A)n zVm)Qq`&gjSoHveBsMTJRuzeFa1#@#R0|}S@B)V<;{8hhCkaGaR`pPfBCI`-<+ejTDlaa zMRpOCjaiNDq=b?cf}58a5G9oXTv9*`987VUv6*3^UF7Q=VSma{MCb3vPzVgbf}@*t z2y;v@jZ*JKd1hrtDl@gAM?q^<3X=#DWW!uNGvNUx_c0-$q#Og_$RhM0ny(j97qnhh z50Ux?vklx0V0`QNk z^4Gg|PM%rv#l+6=GIAHbEmEnG|9NUXeNJ)t6;O<5#wbkHs6w$*IeTj=J}5!P%)KI7 zN%-)&wB_p&*7+TlOwQc(i}c$x!3;~2>BxW?lDoYcy?r;qd^oG^Ptb_MjmdIwQ)zqQ znwpZK7#2g=1QEqb2)?O(SH!ylLz_^){h~l_YB~CEZ(%Sf5z=sS_o!B*@2L`N93%D5 zOJtGCEX*hiiR3skJsrk{EP`!Qf5lu7#z zt;yQ23X4!-C_&uBt&57^t-qR!C4y*lMq*H!3L_2eherWl;*M+FEnrEF6;ZC3vjnAi z9A=;~Xc1f=p}-Ejrlqi*(Cqk}QT!*O+NpGJZfaWZ8mQ3J@MSPzk8W!$xIUFWButBL za}1REo{Py$h(KuJjP!Y1T?}{WR(wrHyVyD=B+YS=3u8=ZmyU1*$%P@!5DqhGMh>sr zRv?4Qe%b2C*2?rKxMCogFN?gsRo#*0Tgae}c_`1^F-?e_SOfwF0rurSfH7^c;iT?x zB&PpijN%R?w7#b;H!M77&};Z$rG1wE%V{8rNhv80vsF4kv_)-WD0OVY_DLi?GfOsR zpb9#{sqCYHB-r9nJ9CM`0b2EJjKY-L{~021u>Ef1$c$pWvxKb^T-aJuq0kQi5gg4I z-L{Aw1#GJtGv2OAdw@?+A(}C~HQQOuZ@X=5jL{t3>TQelqsLG5?#1yBfM#0pBK!r3 zr4;$xl{(ETf#KZutRZsPoAoC0Wl}q5_jd1>xJtfS1s33LX+`v@el84#rJ?4Y)H}A) z@W}1k^OTwZ=Zy8iDctwqMSSY#e-VG}2mdra|H)s*I3(=tpL)jvhJsTHzwB$*TEDhj zlL_ACb3IvT-zN~ZIXSM@hH^uHCURw^R3w8Ay&z~*(i$C zK~e&{FL$bPoM&5)m5#jEg+j!#rAHbE5e;+>ikA4il^WZGbtq1UM5icDA z7gqz;s}){<{dIi&;~&Sb{K~K3@a|n84H)+i@SzWW2)O?}_@_Vh<9KE~i;D*<_LQwIL(Y|B|vl2EW*+h8)Xh5-E z03bq$wy!lWhMbViny2w!%Z7?tz|%5;^jt)04HeyKh29B`A4)1%D;8#8P+YkvXsA2g z>TCTO(V%|+3LLS=)L|B@tFpWejP;Gz~>~5Wgg97-LdISl&pWJQZ_v(jIVL>7FTx z(-31Acn`wZdXA+t<_tkjq}!M!z!Cu%O`tzSHi1jO%F%_X#Ca%|0tCr*+_Z0{jIcQm zL}tiZYoj#JYqRmUgx(n(``1Tl^;He;KEr^dO!M?b?~FjdyXE+P^qx}ZSz3Cx#n0i} zDD)(tIt0%I4IR!Xn%i1EEetG>$LdKPJHgEMxp}K!VXyue;LNv(GKv<_O3R?p;u0}d z6qv2>y^S#=aP}1gVjYS1YJsqn+`UR+ATxt1W4i74l);1Sbz&C5BB%M{leHiuu6AT= zhQI?r87R1`#urwf5ZWmaVOBz)F_9hEQ;FDJ8VLQTl-0eaC8t8b$pk{72M(8FEocG> zCJJzxMGzh4VQ2uzeoo#~Y>{9oA!ApL!cq|fIa8%Y8_1Gi**D%$)&uQY$FbG09IWYT zC2giKB&{7&yY@X!LRM4`$mV*W-7ZwuEX$6Nkb)nt)zR9&#B5Vlydl8-sa0q&u{n1* z(n-+9oxzol{a&0p^CUj=5B?g4{R5nP`2Lyu?i8>}FG(~&8t|K&rw;Ma*0EP)OzkQ0 zIKGsc_v#(CgfC^k)b|GqHdA+d-bv#%y4`X0n-jx;49j2rzKWF0MR?!uyL?v!2khxC zOH*du#xBw^8VLv=GK4l6sp2I_t?IYh_~<^dss~YNilI{GTqO8?r!3u;O~46xa&inF z8HVzk{9e?8^fVLZSzQQMIDX6{mCs8&07jyCug2deFWfczX%FgAo8JH8_%aNWM7Xb( zhd`WW0m;;UK{Z1yOPFPg7Y5zyiv6Z|+KY8lJ+_K*w^FnqC=Q+ zla0fbRyTIXAp@1kA-%%>~seZ>8 zr`kBV)(uZ-D64L3Ph4B&#J|REtR^1g_!lhOe5`I#I4qU zVVFe=ZC^&QW6sJLksqL99bs^Fr)d5nwI8<8!y@NXtVcTY*-&<;vtd>XrHsc+APQ zStPLP9HXhy1ST>hWR?jCGIHIwK8miUu)QgM{T>T~Ctw@_=7cq6JqqjY=Ve-zAvQpE z;2Yt5l7U7`vEw0OMY-~uX8nF0`%faYFjICD##+$FR?t8?S5wHWV)(?8*!jFj<7>(| z(s7RZu89&7aS5ne_tbyq?6JK^4Vf*eFiG3?@L}TWGL!(5Tm8-~5V9T^i&LVKdselT z^}l7%+j)-KC!2@4uw7hd3O-pNFxiZ)nzbrs$1MF>B~OPKu~`C&-eY2^uWWO!>x}D@ zIN<1}Z+5R7)>0+&>6cLXWDQi%z{S5==8P~##Yz_bdeVs)^Q15-Gn-gaA5RprX0gm$ zv7}O*oIZ0#T(G|ZAwwH5()MqJP0R1qF1H+g1I}%OKg00_ z!z`IX+o-|J;Is|i>lxU9i9|>liwW7vHRk)3Avn#}B2mD5&7^PHt&1%9v#H4 z&fwJ^HaBkI=?nYd$DhR4UwRo&-MoS)*DDO^0yf(XKJoF7BPGJwvuEWnyE(*2z-F3o z=1aeTk3INay#1Zui|fyS4)Yz!45`nvv1`~6zZqE}+EQesNQ}H5=>DNTMa}_uV#)2?HnlW!( zm9us$=V+5|6?vIJC60sjzU7f4oQ)nlF8R``34Iw-Yr_U*)ysiWe$N1)tncv$o*0O% z5E_zAn+TvJQNmr~IG0)7YcW6lNv#W79=SF1d*^8Ik#&Mi`!hi{4 zl|P+-3?Du4fC@eiSKUtRbGk#^rAqbMUc`16s2UTcMxL+VGA_{n$|{v z3#Y-Q({WU7K5#VsE`+}tlZjotCJU0)PF(Z}6+&aV;O9ptXNsa>slHGwOJwgED{PN5 zTfaCw*$tgNbo_1>2}*?!V}uaNWYSK=6=Bp22?1c9%KDni0ZQfq+YRnEf>2Lp%~_yW z)%?r>ATeujJq;cR6Q;HMt1c}QQQGUi-Lu7#FXA5I@OE2oeZyeFTZ?$Aes7K=Bu0ze zxA+xyXt7x~%`9`C9T=hpc#d^WUV?1CUn~aDE{32*&}A}}NoZ?dban90ClIz=N82%t z_B(a=vO~)(SZuKrlh!@pY<-NQD&W&GeK0!B2@(?^A!pMx44%4;g?_dIwYGHWDc3&^ zFJ1@%DFcnj1PW7SEQrsDi$x4qR?{D#OJjMy5 zF#EalzS!HysxXP|+}8 zy*|Lvul^KX_~g&ywJTS#clr!?dx(R*5qZ7F!RZ6sfB*eBJUYVW=m?Y&a-IMhv9~v3 zb@O%5^_Ows(m4!|d@qi!yor~OY6q|scH1uMMzgDe>34j!Tw85X4s=)eoiI7H@H;Y2 zI>!abQd0c9tFV6uU={~V1rMZWfy%{+3DDSr4p3@EWk^qfA!QY9Cc_n4MIHe*WfRm@ zOL@uUSwCFx=_U)M_W`$#4T}}7RH|-~w3|hC^G+chbLJN)Dkri!7fM=2G?F5bB^Bb} z;F5D|z-GN}TB-bjz0MMQ049xYn02msTbbCoa3eZ1L?Y3?<2{V6EJL*k94P!>zOePk z<;j3aO)Gb7Lb5T1beY{3qi<>|8WhX8QF_e|5!`-FK&FHtXcfDMxgB_;KwJ>~nSbh< z4BaOc6pcV;3`1iX&}`-rxnlU*9*q#w#LD-M2$G&G1;NVPXFn>ICzfET=2LHG({5H9 zvltjgvfk{_d6PvUA-IOLeJ5UMjFcLz`>%e3#RRT?n2ARL-AmlIPgN%hA!HP5jV&gm z%!NQ@W-ytRm5oWhWS(?3lO7fw!bRYa%inU`V>2tXHS)l#?tE33Lc~!A7nSe*rD&BD z_F2we7q{FH`50*XviVvnOnKPFnV2W8f4BnT8ZVtm4V|i~ysDuoF9Y6_(YE|Y~ zIpBiue#v3q-~#(=RtTn{8`SD0YIhT%1Z2)S=927%ffcj+q=xUH!bubRjM`{4`Hn}^ zVvQ2$UoRqt?l7!|B#eA8Yu>1Nj75I;6k;*1l*DP+z+*U#I%bKFWSp1IgE5?JRx;AB zJ>)7@M2ljaJMwkkg!?^zUIX7AuR(g>0+E*e!)o=w{%v~@v~T0> zV*Nob1ZgekC|+>i!XtV$*z4woP*2~Sfk`YWbdgl#WPn)h>$a9TkKAU%5(sHyV#P0H z2C~9lv@x~+GbGDG|8&Hf386kf^h*4?m!gm12VvrjbC)jR!hQSr2mi@`hQIn}{{)Wi z-o@$Dr{&#mz=~mav4GwL&V;PUxR`f0e3IRYaMGiW1QFzNmLQWELlFd)esQ|ZZYMI(+3B5=%I(OTCK3ZzmF+reC34~aCEf6{(1#W zFCtUILuXH6?*n_d(HT##2+wz~LMLkew(w*sbf>mdu!p`MKV4$>dYyOVxw{nPaSX>D z<4&0-ch~;l^1pe%GWXk?1)J=1IZO`E7RHQH=bUdZgAldC&TFXEqUqpj$$xxVXP?>` z&GqT3H=yGt_9P|s+o04ju4&9c!V>_1ClEA-GD29(=+2MrgkJCuPkmynL?u-&%tLD6 zc^jU^UdAtt)LWkDx)pO9ux&)u%0-iCJzyp61%-ff?DK*uP>gyUoB41s|FxiJ1}i=0 zG<94u3U6$XHB>KD^AP8%H7AR2W<{Gz8Y4o~Vwq%jnVDXtsfwAxMA*_ALkuS!9iX&C z_lymIBetMkQ;}X9Vi#);Tc0+6iH`bRA;7`fp;YGxXbFG5vzF@pVml(9Jn*cJ zq4Zdu4G5N2dcSoIF(@3;5Z*gE!776vf_pzbXyJpJ;Um$>chmSQ#}_(-!_er zBdRNul-d_idt`;!a=?4_-75{w?!;>X6G(9U*@@tFz0m>Tywu0Is+f@gsY2`&Iyp%FOb zI_kRVatK`19V3M~#QZ=?6x_+!yH#k?oWvrq4rN|*^V^;ckza?CQ-cW`W5iyO9#(>; z;HnkZJ!Rd$QS__zPupTDwYhaPxi@hHLwSxcT$EVmZ#?8H2_$z37jW9 z|H2DcpSgg?AA20bdX1}B-o`+{eHYH*i=TZ9FTL~38_dop+y!rBr*n9tDxPP_o;`?5i+p7Aw+S6DiuPMspIX`0oPwlr9 zb4!S}mK+wgn$WsJ`@KYnd+)dWkp%^f_YKcjo9*W29EiJp5)VyO|2?6eB$oh`p<<}A zFS;TvSwpHsVwbgKh6)@B0f7+JjihQZ3;Dg%8F zsI+eaIqcNb<<2%qT35^P&fBZlc34dBtY}Hd+)!zzdUdD~WjL4_ODh|$Xp0MrV@CNB zpTKf8UuI~$U-6*?ndYmZ4zVNFUkl(yQo|7}%ZL?S#w5QV(*##YvytA$ZKeaSW#9oBbslpU ze@Mv?59zV$yeO9v3BZaN;9Si6oo<_ppkUS!tof6i zCyCqI4)F%Fk%l+TmXG2QVTp^0TiUj&)nzDbXs*F7Y!EA$PKBuFt=Dqqj6@#hY>4T6 zLymj$PiAA0{n%L5_R=wg4K~BqgPO03RRqz0IGD6BB|HLQ%Kgq5wee|9 zx}U`zLH1w=QW-dP_B>wx>ht(_{OOg@9q7z2pOzM+FPMB1P@p{r<8L_ zZW+f0a-3H^$DoQXtHF!ml%kkMpn+OhJWE=v8go^$GlE%Ox21Px1AvtYl3-c!avg_5 zTNvTOidANeM0nuA2l2pT@52-Cdm3N*>~lD}dk4gf?cG~gtyXyNd*6$1{>ZoB-04&J z^soII9(wF?tX3<$@x~iCeQF=S`@6pfm!JF&Z0_F18(;bluv$N*CigaXwg-BUD{$0@ zWiM3rgx^i%q6DxBW*00W!NM1$6!?{h#f*r?19;T|{VvxxEqHYgp%9$5L%&yF)&$ml z%?dPOWvf8uc&+yV3IDO2UR(tY)mVyHud#s#&Qr7>_=a+(fe{Jye@|0+#vmLa znyxc20C^g8bjEJYSTfkrgb{pWXJ#Iqc_mcHs$0~QvM85#zr9=y5ja6D0;Cqs!i<>q zY9Naf;^I~&H{s4K$e+N0k~T=OnkPR{aGo#>%Sm(+CuEW+{_-8wTK1-hcFv6J4KJO1 zzluiLtyTn~*wLUBy0*s!y~nv&9+Zy&5cLPx*#^pkAVJ$53`+y1qW;@nkSMYt0?)pW$*wKpOc*fVP80;T0>(((Q zHX|fPhQp`3;K(CmHpFdb-~k{)GFe9=k5@#4j7z7e_w7eKSUp>a{8Etfu)^jjTn- zZlPc+7`Jj05avj&r~Dr8*1k_x1UI*ULuE@`kc?^!~&Wo*W8t}Kqx7W#u3%UnnL z24EtFlk@`+=5fmej=_yXBWubf;(jiips6|h^(D$)=Df0=a(f{A+caC17(5azf9(*L znstqRveHwS8NTab-q`@Ozr)N=dil%dOgVci#zbpf@GJ;zLY=O&%Af=~zVB_DB!b-N z0xSOga#(Pb+M1e1owx@u1sP0)9+2}^XYW6QfBbjMaKdLBD6e?lw zQN%Th19L`7BR=%>(|GjBr}4tIyLf8@Tzup)!_f9~9oXo{+kU zica?UV%_=dHpV(R4PS*Fo2x@PD&D3)3Tr2sqDvJ8rJpS^GJcK2_f?Zh-?;9&SWQHn z+k73~mH0rK5vS=Y5M%8z#E*W)1X*TSWAi@U20>-drz=DPn zDZJ?yBqp=oI)juzW);FD#eHJM7PaAedwN8sW4i6|Ckv|;9` z$x_fyf;f||>9=;BfnXhUTtG;Kw32`yq+0gTLU)-ryIc2d9eyR{1^YXbelrI@EQ?xjQM%j=t)PtN~A`g$+%K5jAJj z(L0kF822P60=;94=67B)i#6#62~&#?8O6N_kRcgd0kyS(Vpy_2F?A%J`IRoii^D|IzJ&DSsNcq+$1lvhMZ#mZ-f{ zwJqz}AZ%8FgMfu9rq%#UxEfc(O`sBRbXzc*FU;6O zUMH}OzGX>4KjLqv<>r}+EUvD4pVm>UN z^T z?iA);K^6ea=8sYG5X+5RT5%xEHK0+3o1%xkFbyGCZ9Hgjqv5t0GvXVpM$jo8JZXoo zdDu!X(J-#XgfhO`im22b&^N&htLHWEE;R?hBp4x;m4dNJQ=>+_*OHe&e^`px3hlVgS@YbAwmSTlmag(A$DWfwpgMaw1CxG`f3Ib7NNIj0l$02_Ww zU;jq)2D6oqn zgy<~0ahq6rg~AgOJ}E|0qL$d8<_pVjvf0li7_XzJ3i+cIg9&$Khse5H?R?pIcE=4l zt{Crpf)maz{9wEm6s?@p#rhj4z4c%ri|Ju3GNOQSA*dKi4jZ3wWdGe zZ^Vt&!|+q;=CGdfmD%|9_@nloUC$f_!u%6zm!}CHTzc9Z;ncQFOx`s9Fr3ZcTB3|Bmb6tJff`kaG#;coOyfyP zZy}A9YN{g+HeehC7_GS|fF^QuT_KUCx9*(b+AHJzC|6^jD}GU|108?PsiXx^UfS~v z=K+k0#enKo^VqU{_ioG|dU29n2-FK)In|!DS%&$))!8K7YfM*zAiyRvK z!;BKp=Qv0;U%sr-)}{S6ezUEqq?;lQYPMxbgtQ`w=}wU7*@v8v$(b_IKFL8AC7`6u z+`Cj*<;L``)(XJalY<4o5DxeeN`u0=H>{(MzQ=x1r5c;0Ya;` zaC7~BhwC!8YH$r?#1#xG)(lHlw~;f6i;yTDltp01dgwLSK@ z93mv8g6FGBA!f3aGDgZ6h_Iq)3|rG{%R)hMJUpusmTk%Ces9lKyH&S*ft^8UVvm!v zIZO7Cn}5lSC)USV%)sz_tM63cuNP*`Fo6IbfN>Ao z+c)sWFZ?7P`MrM#{J`wr{?SQwImw z-o1tU&+Oy$!5;4X`p@9pnbWvT2e|L(B@FjHfLqfPkf9!~+P%r~xxLOXMYJna0$gek zofORZt3vv}cGAt1wF31y|5i_VZ{d>jO(kZ79UgMPDLObpWvS|RVp>~*Q z5L+i_ZwV$n3p-HTzjf7hBE8V_Dj{i{r)qh~`4OVXF^77}-xz-_E-cllT3Z5Pjo6yi z9c_;UJCAcH6ypSkhGR<$6y?6oNU}ELeFKUhoamLVsym85+X2KGG#Hje_JeUGjTG9? zuzc6WcD5|0Tt^+$F8{VR%R{eJ1e!&vJGAiG6q6>ZryHVU#(*3~7Y{4en*5EkV+^Bh zqp|vCZq``ND=d9UY!NRk6NlJVjO3v;tqn8xiO4vDe1KW!qPBJ8hA=(KnM>Nw+Uy=2pcdqiXe$3zkD)E*5kt7QBkB5efoEl zM7g-MEITKi}ZUZa?p)(P0)k)#pe4hMPSxz1mmQnQi; z+33qND>SRe^$JGttJxy6osib4Wx~QH$Yd}^s?i7-yaZsZcTHhr$QZ6T%4kGchK&-q zD}p-$35N(4hLEAac1wm?e;GUHtWBIAhNP3+z%}mH>;CZ_#XLW*Th+gCL)@A|z%>Rk zxfaslqha*)!VfD9%!Jb3<~BQ__F0{WjATfrBP&Cmn&-}PQV=DzB_+m~GFB;<0Ll^X z4$9w?jv)$W%!tU=BCfgNs$5nJol%4%ap;;wsj=IOHn7Lgz!v5}3U3j>Vihd=$<2pr zKF|dVb)(h#P$OvA;npQ>Mt!p~@l2X-9_lXV?F~KFv=mJvxV=l6-ubBqSPU& zQu}v!eDZ(o9&h*JZ*|$lA4ibb@@%P9V_cEEs$^*PBq$2bz$$sRu~;gcAKG6kz9JSh zJmA}=-ttYSLWXCP07Sr2LI7x)(%gaxAguOJ;f>FI5{JV99{%We;>$n(Q@C^OI)-7u zYX210`=^jM8=QINv-lk!{s3}*8h4KlaqH?^c>tKsvsxk+R7x9NO}(i&4vWm9!w#pdMhrnctiR zL)eO0fU)EJ$7WU&T8CLxpzgL=GgKy%v%+vmn0333Ixb(PAeYdC$gIkpyTx1N+Gif{ zK&DG^IL&3C9f$dq%?-<26yDb777NEAN9 zbPl@|?j>YQ7@S}%OnCQpaSsa}G;0k4%zT}J#zanEU>kT8Y;-1~>UTX#lQ*|(!%GCI z1pZO+N`ZxFt>C?gvsU_T)*M{#j=BT(KUVD_1($~4$`Sj?s*~vfWf2SmU{=#-=S6Ze z19o6?Zqx!j2K>|FA!=8lUG;g#0=6%Bij9vVXr%e2uMrq9g9%;Z(zJKF2ZM9d>WbL+ z8_uDwWH9Ayy9vTeHVT@ zthJI6XOjU>UuGp!vA8R2g}$7~gzp&xO-QOSObROz%%Vm&^6W$|03cK$VoO^SYFd(E zQBXoX=;h>!toR9vq07ijJWb<#fyoO zlaIikENa=A0GdF`U&LN6|86SlNp|$LNCV=!9S_~#cwxwXomtl*#3YbyTTY%W!HvhWK9lJMxys8EoU<&atfBSF&#jZ(Y5HqcbDE^uzx) zuD<#;TzdF%jH?xn4v%p4>J_Y3D~U@&BJetOa0B3QNY0GF0WsS*=9T^2?uq7P@>e@RkBjSD%x*^etX2Qz&w;vNww$$q&o0iQ|w@DOh7xa zmddfr84N+2$zNNyGELS;NFSZevcGdyVCdfM7Xm;@BcO-5%aoAWVl>FaNz7C(^;7s~ z%!2V-BB86>I%%qFW5mEU%8BO0Jvv-=ONVY7V^GC;R;@$r?LGyKB$a&Smdb32E|QuR ze#6n8^-!?HRK;Tcr3O2e630!BX%?(b8?j#dEj=WbEeFvU5}8Ae?af;FDEZAN>$=uH z6t>(T$BgCMKDhHlWPnxRR$wV(;sJRgi4PE~Xo)*XfXFF}^qT;TX$vF`NXVqPN zrlgvy)YLb@{HyIi&O~+4p)!j;o-!{mYldbmD{2;mix#O`5s9G@SqmYw1B(?7Q4)XT z1$dhj9#fnnA~4q&#Sd=PF{WGRywvZuHYbrMsjz&RIx5Vo!Cj9mSj?tKT>Z*KF#V^( zTnZ{LaW#)+T5VyIUq+4OvGdc?pyrX`%J@$AOya#vAx4o`RkI)wzZR<^vQwb`-UW)y zweh40r~qRY7qLN7w$dvrG#xvjz12b42cdtYV=!Su+-sI4mf5Wx zGq*f~2d0a?_gbV(7y=(P?^Zqb-d;Btn$t>F-p|ekR{z9ak6D?B`)8B=W@m4j*^Qq$ z@ti%1y(U=D?*D#^^(9&~_He&IpILC!_n~;CRZOLT|97otAD7qMvIyYjrw$6Z#)KvI zaEYVKJOrMzfviS0pHjwp$e4}}aqI91n>(*!yTkue|UT zoIW_fsZ$3yJUqm+AAJ@NJ@hc{9v$HepZ`4Gy8I@FVZZ~IF5-PpJONrIjA>9Wy2zA- zg#b|8L(Lkl;X?|LSF_fX76^|k1^}%U#7vn}cGf~g(XF|0wpE68uIo2`+=a*UTBTUZ z;D|*$IQ7!NmZ!i*k;0iEtB|fTBthiX(Si^XQh39J3S3<0Owm4qB^dKUe>(jqbWbxy zs}i3pwkuKBY7$=Fsk(j~sZHVC-K7|n6-F$MBP8xLKhk1$n!-1|@n)T63j=BvUw7w%9;L!=ZFTv{$>x7cKOoXONo%2!ZMi2ogFP={`U4D z)7IDa&AuIiuGoYL16b3zp%^kT#8h_d%=vFcnKMM%Z#{Cf>6QSvwE?wH=A{QccI{#~ z(RfB-SfN?8c*ZStIHX2cuUnqQJV4DjmT__TwCmEPP-C=}oU%8x>yB~Yg^3cDt9 z8%UK)OWW%xB#HZkRlnoHhS1IKoUuZkwo(KQ;&;hBfRI61Z3GAaPnd$BL8inrX$bC+ z{Noi^45O@vG0KXgEa9%rqm4vv4QLM{00K_-HJ0C|Gl(_TC1+`c)C7vzgm~nW9r|74 z$$EFh=LQ*(iZKG73mvhVx=cD5w`l_mC&nG@N4JEt{^G`NJ5gnqaw{qyrwbU(8mPs^ zE^KHfa!1!o9ihKAf9*@A*<}PFx^26#ot#xl*tG4$&P=;$QSofC3YhA8m;hBg#9@e_ zITr?Pv3>wkZgZU26OVZSB(sAn!dc{8G9H)(#FWHcCzAwzTtQ60R|M?~*K5(zEpiy0 z^;HF?rVJqfTP93-faQ|U0CH*%@3qyW(b#}}Bx47MEK>S+(Ec}JL1vrC1Pj%frx~80 z4%S#1#wWFufKby7YpktJXod*h>k^Oh6Qd{#CP0ITCQ!Bc>e-I5j9n8 zgxzn}k5KO!dw;9z*ybOQWm}HxX77v%*c=@J47~TL58&dNecX5UEM9o^4Q#esT)TD+ zPd)V%rfI^R!@C&LfU8%p>R=cb&KwB79ap$`?hHQiEzjVkL&DzWuj0~rUyV6kI344_ z3E3iLk<@y-G91vui;gW}D!h;I9FcE=CQoC;9l|*k_Jz$f)_fuDoK}j%0x_$5s44!W z2eo6OEYQFSezGKNOWZ!f$XoCX1Jrnfl{aazh+Pj|h^p6HdM}VGOQCs*5NtMBB4`+qP0-K-!xN$lGXdd@k`kv{yd^~3ZmXsGZKs`_fhux>ZhZi{ z2%PFJRn)5ObJHEu&cqXrIKQB%tJ>2~Fbx)sPW0%XjYxzIy0I&4xWs z(`j`#?M5Fr28utQA$_uYS(yfM0ugzgrQuXV3*Qdmcw%gg^Re?=Gx*BCEGa`gnHgHMKJX=)3UVg*y(X0Jmgc!$mt4#yIo$2Je#DYF z6#+_3$Rn9=3Ngkc+Cm0G8dGC-{2PMoYvN%xkhnjqV27k`24V32lXZjy_aoe07(*q{ zkifV8WuhE7I5DxN>U%2IImYmixvnM01DWCCDT*w-i;yySmbxp2->h#zGrU+w>hNdt z9g_63>N;jcX)W^XPtD7qY7_ucDm`zWlxn!tpSnUw|B-?Log$yGDI(5x3zufdGkPck z;FMI$RYS_G6vP*6@ttcKf$FvE$7}KZ(g11fa}7xK$2OjpM+~n|jGggC?YpVBPpdcX ztr(e)p}fR3AtBLJP@sVi=LDiGiV1C3*4jHxFlB&f(zl#DQ$pA>09qDWP-3La$ed=D z6z&GmFzKCn@Q4}hePELZY?zQzt>4=O40i-!e`4BcfRMt$Hx0gTEOJlMH7{0x$OTsYXnKK-dr3H~Jlh7qs6c?CyDhxqV^K7^+~_#s^T z;CJKlXFrQaU;8rhFjjz&8fA=Gao7%8I*tQQZHT!Fei(%ez3&Q7WKT$Ei-01Xi?dfu z7`a%b%V#FK@weB?ql|3#SloO`c$NglIspT3%bMt5LO%(a*KoB8i$qnQG3rc560Zf} z+TqXz5_P7l87U+}qM^)xn^ljPkWwmBBW=`*-B@31;a~!WmCo1bCxMo9-2lL1dX8 z<%EN*b4do{jC^4E>eb?!LJQ|+rP07Eu+;L)v<3_ zulwKH_dWWhy`p&J@j05e8trgu+FRc@x>LUqjcJS-;?VP{nW!GFwXl&nDNO5Ixqivp zC56{eQ8*fEU+i5f=^baxV_H~+9i%nhTbljY*3##>8BcGeTTbN!U7CH{4kbg}2Qq+> zT)Z)wn?fl(k2eF$Xe0^tMj~wUB;oqhLTbyk@X%;T0%6K>#2%6aPfZ*SUCN4VSS%X` za!V*c*i{J&=(SHwAxxpPMiAV+$q8E|#obcJh7-1!YtGCi!488}jX8mbT#SSX;>uuI zB}US07e;5A`JT<+!u|SdM!o8-9g@9syjAT|3rl^NIEiqq+52_RT4tfCw9s6*M{~pM zFgo8X(XyTq@i7xE!e!m}jDiDxyNf~J2Emw#P=Y6m;7KQusny+SX=n@A!xsTsysi)Q zVw1uFvs$)?dQRd}Ou>YKQRA!378G_q)>sRL2boCSDy5=9g(l|qG;%`Dz>o+}fAdH1 z#V>vVs|O#)WB;rFJzoFv=Yf0!chd@)C)~Jk9hWX$#Qy$1u3ftZHbNKpKUczd% z#<_eK*KXVZ-v2Q8xnD!d+xpm|V_N4J3Rc{>h$L>=R`HGP`rf|jfh>iGGi72x$OC0$ zinC-^?53b7r-r5nsICbjWY|NNV7NofL?nSi?aehNoT5qBK-w*CS&($U$Quy0r4Glh z$^|vcexy1cn@7tcBG>io*z;|L$6SpgG`;2JMEo|v=zdm*UE>g_T0=|Y>(ec@3+yvS zNAnq|wgmi|dQ00Y%{wzyF;HpVt9BY}S$sHmAgTqvF`D*~&&ItMYWut6S@nBCr!Wg* zxnpcS9`s%cMX<+C9=oIvBwcF)EJa$M8TK-vj$3VS8G?<#EWr$ei-8Jeh(+=@QPNtiNJRwgLa?Wl7MZF>RHqtRSnAP`_ zVKMFVB-R&+G7@Dli;y8vR>8nLROHM}ffZ4eQ2$eL$$+*27RI@NbwS*!D`xcv&W^5= zs-X)^GXNgo&IL+FcA^{-EusU-mLIb@wv zwPZ*0gF0Uv2Py6D0St;%07y-He&Fl#Ro>oU4u~Tz2Nb{tjxX(>5Oa zNh}Tyi5M&D*;K?;_B(EABYDY*6SgckWP}_Z#?Z9*=DTH>ar8v&bF6b>`%t(+XIBYw z2;Ok5rs&gK$pbS%gbT6nN2s~EmHu0V9hIbIlI%-^+MbB3r|N4uYur1S9AA#(Z{xF; zM_w*P6HQSoJx39a|K@eh;^;Qra-ZwEt7Wh1W+A)2m%cdHyT-*vCGG=bn2G+wB(H%@Ho_@8iJ_d;ps#KaQXOiT@nm$^$Nr z=P{*Kv6i;IzXA%kHxO`&rx`7Nw2$5G7GW9i_sxkQ$=UdDL)_bRrIU_>^2YaUuaB%(-u3vc@t5au? z#y#HyL|{r7S8EqE5Q@Me7S1(#Vszf&xoc0}Y_Oex@zfa{+y`X3geeOm9gQfXKB`|jO$&%@el{q|aGM^-EoT=I~g-nsIH$%ZF} zFj+3cv@!TuZ`;g)&Uql3uMP7Ou!phVG~}Y>RWp^=U1&RxuTuj#XHC3g}VB zR4H@~#|DG=A`Nq}GR-vK7}0!Ed^J!68VHFMq5Obml=ngzyBP)Yz1iHS?|b7OE7O_H zf7ex4YCjZx%!-dRFWV<>qzOufIL}Xj&o@11TaowogSJB}y3BXcXt>70A8KUAhW-`^ zp2c*)vB8-6%1y%9p3XIodH`K?!YCtAA!rl;paYs6myHwyqM4cV;-kuxBMc}ZZH6eH zWZD!g%ev1N&HBMT-1@5Dj(7Ke5x??X{~;E)pTM(U`U2+D2322Swcg-kAOAQe(<$En zfe*m-J=*gJc=OW2P=)U8UxnxY^tJ?|g@V0zgoqCrphGbdNDNUY-XX ztbdJa!Dz`~L$x@E)lTS5a_~>&_4U4RCL{-#oYsFluH~k_3BT@-rGN{b+qH>u z?v~n!o`5<$@1E~Bt)HL|3755Lc?1F!cG~L%NcT zy`hff5tp?nv@CfKHhcgr&dF_6IGTWRsa z(K~y?nSyvA7U`+LBxq=vD&mMa0s)-tfV>JOY!JLn$naCTD@#? zE_BMr)N&QvP_u}~4eDi<0n8T*y!@F@;qUxk|0A^9Et=UJM$HA3fecP|$Qa!I(k~BO zeF?ct@8sAhMFBbQObIjq0Pn>y@1Jts^_r`pY>g(=<-HKx zYB~o64G%*MV=EYI1GpeVWvWV;Z~(Td3QpqA4OY6auE>|jz}ATXgW059D@E@sc+$HdS&@&N=2bk-Y5he&k=r1S~R zaiOee-Ou6}uAsCeK!|7ckHDzlkluJ!9VN(`q67|zmQn=;Fq7s&;BdT;-YA!I&5&5fbbOAj zjcB?Nejnaf?Kf_ae-M2j*3-GPjnL^E+0%te|(50p{1Aw5Af zzO+EO<+bphCPHOppjl^QCg?T>#)%qz@s$Bc5J%g7z$K^< zEM7Rux2<{*+VHz_6Y)|O>H|miXA7abHt=ov>}Z#I2G|=kPd;gHIW*-JKN(4Z`O@cj^3$!%M%6H@VIzNkVPi9r5)=6;AWWrOQfTAach`&DKg z9Ii@9Kq&R`b1sOo`JluJu|5Qng5KmX^c~d^kD%FtNYm^J&!BM%$GVB65=p^pyVHe} z!R!%D59SOqES$O;?ZVUMjU$*5@SN#l;_RUJ@yRhQFR}of2_+$OuEeDN58@^WOcsZ6 z6=yN>y=S0;7vU}24l0jVM(jNghHM=5>8Sku@SgXQrLlNKrdl0b5izVauvLw!cCglF zH^8CZAjMH|9L0t(WKoT^1@WOYi6LTS00?^ot9Y|sXCtU@eBs0Y44?h+e^{(TW`K+V znaqBeS)OUNRainY*~Vr9A_HVCh7KoVNB2w*`b92E??5i^1->(E=99#v&#RLumo zX%cYYJ?vyE?Ez3vW>6^?|ay~ zLN%GjjqQnGLtg>FFu^gG^FSm3inT$A5!Bq+a2>7AFiiz-RI5o2ezF#Z(k*A4dm9`Z zX4)yH&Jro}Y|<&j0QQur7-7s1Q?X}6W5#gWGpo|J2nnpZ+N#~-8SrXpYrBipwKLS9%P`7t1o+H}kgCIlR21@m)B4v?hr2gEb zW2}4^`cy(igL=dNUNtsiTZQ%XK6{H}Zw?Il%+$+MRw@CYs$?#W2@W7rJBoH^mcjbHi9ui=YlYb+N_uy^3y7BB{j#RA92$LP8i&bfGD;{eok zgX!iz_~I2TrVBjxzOTgg>=c{6#j)|2kjIib5Ev8Vq0iG3L>pj?-U7gc1SV?O1+50` z5om@%#TGjVK+uPhliI9&Jy35Yr>*6ebNlAbJ*qQ`jM-`qnRW>XFk))ntBH><=}C`tHs^h6A*MKPL{}>h!*%45-oc>Q-m-*($H4wM=dxHv z0)Zq}09`<$zx3S{5U+ID7=d94gOVyp{-`BQ)=|oipv3ir1o1dcEzMh*g;F?4UOq80 zuo>VV+ozn9OhjM~L+9h$tR%fU3}TngEv|M%nff2wmk-c^^0jRTIkYlMOq&S9KJlU$ zpN%({zpGrb|JY42l6%n>J~)#JfAc!C{_34aQW4{_puDEgnS7{-D4u&dPid`X>mzVy zVsEGQ<_Mc;Jy?A|oLC4Hhg+qrG$jb#4bDPBsR}$iq++^!mu6vqRK|m%t(G7{TljyE zd&P*HXKd5pO44;lA$RnsvJK6rmoXQCxWReDD5JKfIC$k!5tz3g*3W@L84g_-&ke_*$Q?# zM>=*0)np1XL2zIX+e~5WCcEL1II8NBIb%jOnMyl+I*O}i2CBkM7>hQDZ6>J=#=ti7 zP>AHC0JsPTF7(<^N0xUw3 zttT?(K2aGmCTU{<0I}2^=_`vSP4@OMk%2V{$YBIc9Al8Le~P|*C~}*WB_W_-f+IsR zu-Z^CHK(&adwW-I={Rb-5X2cE>Do1b4{Mk5wHx+p(u$&Ny(dSN`8{|+G0N>XF0?ZC zyoeXf&Otr#tlTVv{*=4=(mkG=tPOZr5HgdWLA-{cEvsXcH|q$jst;yPU~wQe7z76s zYj`XEB8zJPUwR&nU{f*icg+TdK+ z`WnoH8GtnmRw0)-vK5*lKI0;%0|KFjXjTl*1X;-j27tI|+`sVE5%j@7f@6kr>Aawz zEoLC})UzPnI@d$0!%S#>G9f2UmxTn57n+(^_gfn&XE`*(m0A;EGR+yKBLIT`lKnh~ z=45D{md6PXA+Js3B~*sRSwmrypI1Z)<;U>1AZU&eej0E>#mmxr2X|&wLRoy|_AlGu z$-P{GafIJu`#41ndV#cT1{)QKLUCDcNPC&8#DHU=&=wI$RAsgpl`?%%S4x{Rn^^<1 zo2Zec#^u7!XN*I8;#g<-(wJmz&4HjSc|x<)wkLmXM^I$&pq-qT!C6__xXkTHJ|3jZ ziXQx$F{}gv^q8=o!!7^5>4Rs$9JtWfo7n?XozIDusf=fZeIzmO#*jehJ{w!@k9%O3 z%W=p~KVE59h5dJU2?dZhQq)-KC5fiX6Yu?0?trWE?dQE-UHO_nP*@6M%nN6IBSe8X zuYrRGOJ20^+M*uUZcF+bv@c4EGh9_1ndP(xkv6TiR!wLkz0H}tKp5D^IW8y)`=A+> zQJ2i5L(}N1CaSGt>n5)duokwekpoh;YBGAypsI$kwE#h3a!gf6Es_Y_RCPg1Bwx^s z;b2Y^@+hlPHFJ=f)C6v+nk<3|j!&90b(3ke)M6r}0ttJVx`t^)(}WdNnal!^D>Twh zrl88kaj{hc(@fG@VcBCbQg?l;!!dAov7$zONM&Lhdv=P}uwzFtA;T@f*CN5Qre6ucO=SGW0;TwKiz z!p`SAlR=inTr1?yEoPNZu@>mM4llp*3XY$A6W;ZX5MwU87W;bS8bWX_f->FE$gESg95FZNZn=}$)H|Im!^BR;n4UBhA zhqKQ^I+OefXiPdmV*6B+qu|ubLotptmwhjKM#Z1RWzevhT7L4&N)rr30PqZ|tbji(CMyC?ROu`R2a}|%9A?<*9M)J7 zwpskOL{lL4AY)NYXIXnZOjW~XW2_Y2)%*-GHm$ZW48?g(z@7umq6|X5T%{kR%=&}7&SR4@m1N5D|V9^fHnFm zhB(JmYwL_300GguSkf6*Ujwlt@prHB5rj+g7{?fckQF7G5CTBOC++w^#vvIP5=>%o zG90s~)lt%{kr0xqaIGr*YU-n5%omk9h07J-b3W!bD=_34z>bXwd854W^#TP>%3sH1 z=U^FE2Zr8)E595>*udDTGL44_qql6QdKc(na89*cbY*-uW&21#OsPkK6?TBJ2Jd;- zyYZ%Xei`iXZG7~{e^`89nF_ByI0ZY0_q^v_c=x;CgKlz!mw(}B@XQmpVT{Ga#VM=- ze$VgwS8(!;e-NMg*&oC1hyNk!$pj6%`26~1EaG+Ia^64ohY>VYWTQ{vK};~-#FuXj z2wf15J>+7&4zOO*bdpdZ$OD4w%T{NPHmg&#u#$FT*+!rXrZ*Y{+?3rBeKZ81T=g3b zlFnEK0SboYD(4`+dCJ<${U@(sBxjAHWmv(Z4t{WIP?S|FL)bA#({LTvE|WPba3(vY znKWT6Dk4;dV~!?_(=NzORoT>>l7&glnJwf=0_l$hqXG-#^4Sywk)d2X?_iQh>r** zU<7f9(}#ICByV$fQ42+wke0KV4(qgB>)Bc?Hd!E)*``yUxH)qb%VRFfLb;v_5u3C6 zva~d)pTI%2KmB0xF~$&VNoD080~kZVg^@q&hOC^uu)i@5{B%jetHO=4W}UxQp6ex) zR6G`W{qkS0_LzY>Fzv6Gq4zu*e!8TJy|h=Pf0R5oX-}E*dgZgu8Fk=XC@cvc8hBu+0Rqp)4Sc31Ev-6x*og4W+VF8wCP1*t$tq ztlp!VG{LED&}y*;b~+2UR#LQ`%s{~=n&8EprwQc{3qaCLP*q8ThHM4Y^Q_4pwrN1k zRO<2!JDq}>2INJdnc&4auCW=<~wn`>kh8flv=__+^5zDAdg=V6ljz>)f zb}|Wk38QH$m{6uAps6RQ2*L4m@QAP4KTtj+X)pNixx-B5xwwCL4eKaF9rK&Ul_g-dVh*<*xn6a8Si4TQ_7=32e(K3Q7@4Rd+ zIklsTw2Gr9qmHA4j2lBQb2&A!AjEm+lr|5$9a|DQPKl9->|^As^tMIwjxE4+E0utY ztQraogbFcAD@a?tUuGJt@=iE?$8K2xWqa@OA1|IiBxV-t2o!5}dgRm8H& zLCgLmCTG8S2?S6rjYwWe?a22RtnR9uNuxp8!|_VQF)Jh&6d7P90S|nB10iqrQm}xc zaH}LwO-eci9}H0hF^Gb-95X615o{nbaG9NO(x(WF2+2mGz|i?no@Zf3Eaj_Af(Ihw zAcqJcmv+;bh4h1stYwHAZIQK51%jP#oA4m&V#; z>yblQ`F>@T`BI&O@}W%Ee!844j3l{s+*sJBFNY$p{qtygY17p?AEiClFKFy1B?fej zK4&>or}l#S@+jBD0Daki${^(*`E;nR*CXG4lCeYhP{{XD9yL-%wt1ou9^Cbd)=Qs~ z5sB7|f+qR{qcri+Gu8W|g5sqf3VHGykO62T=c1l5@t}+}DxM#DFzQ)LBwQkYR^nFji3P7iv!#``8r8JjGmDm##Umw!(M=pst&$f zr2lo(z}oOa4iTDWDo+PaCjwRntftyzoZ# zWP&Pa>2T02X_{#QE!d-~B_FYiS~8RAG+M(0fVCB16!4HavsDwvSu}zwP-VeRc|d}# zl5Z9t`cYL490zR?Yca8+a4eT0KxJ(3wUd@%RhxL>(uHQ}xf7r4_Hu(r6r6^7UCsRHvRIw%@xke+BtjI)28KHx2tK z4*8`j4oo&;o|Rot5}6_qdBA4c8$`ZThY7=V2uJ|rW;bu4z6fT(Xqd$jAOS51jy!rV z9s(%H0W~>HjXZ%{gE1qINxWnYFGo-kk{6~AH{W{cCbsbzrwS9bh9z`B(4a9mHiQ*C zw&-E|9sF#G`}Hwi{`vnO-v0al1l;xleY?f+ty}ogFMAI<20rvdAHr9Ey~FXQg(r)8 zw!q83{y8ir6Vz{gFJAum&*E!7@P2&uY>Un3egze&e}s{N%Sm1y&2hL#HE48>s!8S>grDx*RI zt|X6uCAvivkVxyZ?7^@rV9RJa!vfRR5P)iG1R(AMXIUYcfQy)tyxZ-(^s$Ec zejwThgmUVleT51x;`C2`jW>p|2a!F^m}OPV&Q#_@=OXi5F!zI1Gx%DxRaMa_XPi=* ztbaMu#J!G|%y-E&r}V7VrGt00fq5mRBg4D~ZKG#xK~^V(FvdEFqGo{#Zn0hp?T`FP zZrYOf5D8?+`Wsb2<84vS4kptL&QwY=b^|#`Vf0YYK`&ECze4ePyR1*>kO3+qtHd~m z+7QUG*s6l$8LQx()JDchZmo%upwF?d1k0-W!>~5DDW$-Gr0*UC7gef_93WBylA>oZ ziF=!tN77xU!XL-h12o3ibNROz$LzBU z!2J&A)jt2(()rXo#(6r$t;9GKJ`Tl)h}mQ1%y4Y@eIz?Qw;*J zg5XFmjN2B7f}deR2gZ&ms(TYe(`2XRLk^=I107KWH;929M9q=HeD@4&L%w+EB0Sv{ zKtMS(IRI^leR6T$W!5}6I6F!-mSei)`Pk+2m93fh-ZG)^Ponff!4w7G@?B#G>y1Ex zexy`mp40X4%GYmrWHURN5>u$XHJtmS*$*`M8+$TnQ%U{y^Xotkt0~T~{NDkyG#;*% zD5gA^=TYj)2lZMt)9BZ$b7b{inKwV#UTn*Bh7h4(=gAGBT~XA!hsl!|y?`eI>UDy9=4 zfJfG00ljs%%fH50s6Z;fu}NAhAsAyI{!(chujhMo)PZvA& zWFqS-fEZO%N39iozPWBD>1+?6OFfx{XP6m=jJ#$P_%Q`Kn#nZH5d)LyOxn$2ic>W; zs-_7q?#LL{lPT)D0kf0wwoQCaTE^FeSBlbjuxHeD16y0Lm(!Yzg`LidRWoU(@|sZ4 z(lB)${Ln}_o*8UKQ)P8ALECn6QB+k?@J?$X@xsgqfJK^n!LSBE9%oEHfWCL=Dg$;s z7)D+Q0>iZ%n7YC8S)f~4bp1RY2u9Bx0{S(uJG($dqQ~m4*wFc|8E&uPnLt5X#6p}< zhR2>E2HlJvj6Q%99>4^Qnj8!WQ!p9|D)51yuBeoLZFb1$xiaIvXod1FQLYQ=cfN*$ zyn^6ui##V3xfp_++>Dd_|?zicig^%#pWTpi2!*+prPo+fM+ZQS(9){u?W%+1r;bBq7o`F z8bZ+SRgEVx$!gGxK&?Dy$fFKI4a6@)9t89&+aI<_)OXfPDQ!vKRvRu#<6{Jr_#`t( zn{zwyA!^$9xj@8w>n#r!rF=FFLU%N6>P#Or(wafOE&vS-(VR*;Oo5Nf(hiTM3dN)2 zNx~Wh3A4?eYb-=;XgYO&2+vZUXa-XX%n|tt=!zo8^wa1tHAddDULtdo; z<*!MLr;4RYk8_rv08EN4=VCq+sI%_sJs>5E(>ch~>7Gx3ix5qVNT$GfdvsEW=09}u1c;nsAC64hYYkp z04+$LKoczv)jo-{!SXJ(kLiFN2t7i(f~L-n8IDX$(|N{@Oho3jT^$GwQwBp)@%dXPSo$E9Y_9VVptYP|e!7i^GQVuFui~4z8%Q z+wQRUYLR!v6y-0u=w21RQ=25(FkEQEAPV@Jioro}PQmA|89@LPeP&Se$g|H0Xpz00 zpjZM0zag2EIhK4T_%D(DPg%ZDpREesIe%grEc|uVOkgW{Eopmkfv@_8Z;8NybdBJ> zgZD1ddS-_2b47G<66{^(V+S%n5u6I+VF;*?PXss#8cPe);NspZ_?iFu?*VLKnhLDm zRatz)5Cg~0JclRW{x0yYD}*;s*EjpH#TwfW47n+`@Mxe;QwiRPpBi;~ZjHQvP>~Oy zg9z!CJS>en{TqgA*y>=~Gi=wybU}V280s;bOmOTQzMXP70{2u@w0wz$cHMx-S475yG`&?hO)T)Sl zAR)|!UQ!Z#hCF!BFrKjs+5i@u_9)3m2Zqaz!-@>_QEdx=jSpG^!faMXOxe^-Bj>$o z(C4u=S7)(fzb9vqWoT4`W{|0ckG$#>L2Fp~-O!#K49TypRbylH;MXqgcZMQkfP-;D z2vnsTD9-{ioNda$lIWu0QqlF`E0a{Vj+qKRCZb$=_Qpb$1yZ3g5!*sDB9uP_BvRnm z@1jwI-%TK*x^jo(Ns%GMUf}RUVTz&c427uTNffr?Vho3B@HDD^qh*r@ue%g(3<=`Q z2?z*e#zcq8qFG2LWigPRG7Ehm_V9fV+caqV7M^N2ZveLiJBJ1YkcY7jy(O4Rp1pFu zLhox38}zZ4qiiuD5v)v9dwC6z<@FFko5^G9FV9m=7a5* z9-H$ra$y~*${T>p@umE1gBGiI8I~~&S)OuD9AK!j`F*SqD@uJmbU+SQ^p%MQVgJAw zOFUk{rCm*%d@sk9Lo}MV9QSddC(*Ma9}NV7a+?l4P_32LY=7@v0aqKQIRg~^Qb++sZN88K8J(Za5;uOi>+)$h|bO^a)R*>ux|D$Z z^B4ACEE-L8b(-sjg9q=m6I>(3w4z%Qs!M*=oCcBrZv^<;|4Yz{DE_sc(n_kPLqsNeN=y!P6Ctj-?bxjVN&WN`av zf$409UE5-}Jb`a_@Xo_=dQm~fvRtz?_&<*~VeFM>V2lGmCd+S;gj=~3U?|t6<^-PP zQo|C%=i37Sv+A8tQNBnG=_*s(=t%uu?6)juH8tb z!AL*zwhikXejmnJyMM8lm#eRjCsCmfdgm0@uni6`WepqlB8zDmWMaLH`07MbDIIm2 zfPAursKgugAgHUFHU*AgD8j^n$rf2;9`ZV=WQL0~WN&A2mW~jS*dhr>hFVPw3P2&` z%~k65>d=01GGB;9k`pmhK{m1WGR(0^Mz9krnfAP%y(PgMFDi7irSxG?DCL(q;7FX5 zX;hnT5d@Mtcto|rprqbMV}(#&nywAa3DUe6rT_CAR0gaEt9hFrxO(YDN(d!SK`qM@G>|R8Z!zFn|eQ1Ju!DAgKhf z58ieUydCQUkO8E1RFaz>CaeRKJ=ufokcxQ*R3VNbl5JUJZsStUGmN++Ogn%7w_%de zUk3>vn<3RTd$=t_!dNEI4fH5syr+-at?P{27!WnKj>ZEOpN6;T<7sI$cBEk#yZYT@ z=0@`zYULm;_S0WJ&gq=k8#Sf#`7d1B`YBBr9;6nG1}JG`Ai_BXwb`u5VdzHNUmP(R ztyY33^smfU05)0r(c_8_%qHu(nt|Oc0Eylf=>IK?8B7`rgSKnYcRk+ur~gCT`QSI8 zU9GU&>5Z$J@i5x9jaqL8VoKJwZPsUka}K+Z4v=y0o!F|o{8lv#@M^sVGvJ&HK*nHP ziLlvh(Dyy8t+3tgu-)!pOg>0L!`JJLFyehGEBc)2I&3!ELhafRVb`|UXn6q05ZYab zw(FvHj_@WP+wCqkortjAwdi{%phT#nZ9DNP1TlfyIfsYm>$FGMgS(6Z*hslCe>(-asz7Y~1E@3msLwA-BruR1(2%63#9K8Vsp(azX`< zCcK`&6j5f~mh%n9f~R#%={F9Qu1%}acXG3dGurxz_aDHT3iHJRb<^PV>uTGExQ&{@0g>U05?>`jdKR z$$@iI9v`l6W5J~nQfWFd*ccM6OiK`C37I-u7%D=z-OZe|4L7!?=6urA@1>*0e92_Z z1NImiz4Zq;-tGs9KD+tn$OI}-GL&x;Gpzq|;1_7nnt@pXbFtZ(eMDKyp5!|uj3vr` zi|tlwPi)g3!;uo{?TydcMEU~~umV=|iv*P@ETZEoZ3)XdjF}1pQ2<~BfjW8R5EBgX z{7lxMCPu$GM?*Eb)}uj%yGIRXlR5lD18Np%8{iA~UV)(=>?;t~xYaP~x3TgSuEO_Qo!m%I5IogAKZjorP5eDtKw6<(5U$3&8wc$z@ z`jP}UV83q`4)pWV?%%Y3@rT2$AFXeso=eB!rsa?Pa#g>X_H6|e>fjjB4|HVM z2cSW}57H2U`<-YDX4*ICcggQjh$Yv_MF`26YJ3NHy+g|Kq1@x-Iz-2nL_o+F86NK? zP1Yu`2e}@>J1wH>odR)T-II4nYWi}zDcF*aFTBh42}{|?voYXXp-;Xa*&ZY7F5@Ak ziP`wYn)b^n;*0&r*$%QwotN1if9nRI*(`cOn3pyxLZ zdl~mjx^dZ8lzHv)MicVoKi{A&OquzY1_H>|sI9>wsOA|kW&})wHmYbFiloI56@1G4 z4Oxh%ew7$%_$Vv_>4`txLE=2mNB$Xv%p`)tO?)Xg5hblx=5awX_)?W}Xhf(F)p=m= z`kMeWmBn_m#dfoU#|2Jq-Nu{V{AO&{TWq&m9G@KH!GnkR3UL*ennI01bmVDKn#pK6IZrTlQZw@LD5rV|MyPhCrq9dMH9KSr@-z+{ovQ)> z8$?-IB2@cBLRDDWb4rx=O4a-0vy!CA8MzUvL9j=QEKLxkSwA7t(I{Z+p_Y$U!BC~; zq5^Z?<7Aq_p&T6v&AQX8^vr*cEJ`dy<; z>@sVwMb(H?vFZHG=8aOn%Z0)Dm+W~$Sp@1(hC_K$ia!1*-wkpVRrx)z6w!Zz^9<)0 z#sJS~Uvso~oe&NED9q+LvC$iqXP3bK^IkOb}o@PUGdS(eYyqgu%e8%x6=mb6E!Ch)nWnB$eWcy9RFd1e^z)NEjpa(?0zeu5}Ll(;g)q zgdsi3FGn=@$XYKhbgn8}%Vz~2GG1kap3jVN9pJj)z!5QDS(bxucd%75c4XIsT$}s|kOB8C$anID zCparhZ!l>Dcp)^7~EmT z&j-$?u^&!-uHnIV7^$QF~F~X?sEWuho=wm z&Ud^M(`Et&W3^smvsnj|G)7(5m`)~m%iF#bcW#~Fg%@7H=U#n)v->aOoz@m6DU77e ztNqc}QpN(2`gF*(hs%3?7uJ!Dz8@3@K&&$r2*@+99wy9)F&<5!n=JoKg6WC}!;=jq zix_TMzE)M{sO=(7#_s6z(XF8P?HPWRo>+r%u)bb#yE2M%%O#vGf$bfP9Xq& zSwew_JiYk6JM5?AieoR<6U)n+%=to(=U!-H(Crq~B3UXXHO-9C8yv0*Do|Fmnrh@R z<*y?LC}*@O^T`mKJIIpT`f57>8cbD)i{~q+z5^Isl*ioqq>l;2n_|Z^0-FDZ5^bmK zpTtb09jL1Gdax8kH)s%~HU&+T& zSj$tC-iyF(K*0!E-fx{7hP(e+w4eGB{POqxb$q;an9>Bkb@0w%GON)U12({OZ+k2L z)W7||#@GI~Z^i}g;>COSF$KZ5Yb=gW&@{mPvoma618WR=FV2kwRTgzMQ8DuwNTcQ+ zs;42IDU7jjz7v%I5ZB?`k_jA{+A#&UO-qv#)M^P zFmhj#Rd(QX9V!3P1eY{C|LO8`Y`l=m4*KilzuwvTh$rlgT5@%YOY>bKa9>^D4cc}9 zJh*9rH|@(!>!9)IEPeUwrR^b2fxT3t`EClZ6!iQW;XwM=eZH^1xw1UT(c7cseH>u! zCjHLqjQ(^KNIuX8KX|o3gBw1r7lJH-{jwH|2Aj;`wka6^beC+qMIP<_6e>=lycw$^d8x@pZ3i!25XsEhT?oKrrhgQLWErHs%>L0fYg_FtWJ` zBG9Ts=-AcNK21|HI!!Wq{rh z?%lhG_k7uVaC&xzAN$cCm8Wh!qnXX|(!CdPadD1!zvs*Fju&3QtrtFkSAXg!uzB@! zAYv&an}Q0ZZ!#T+u^?kVe$Xk+keBO5(hR44Z~&>kFlF);g>k8i1~Hr|pTwkq2a57s z=5V`sF>BD5eEkeM>?u7U$;7aGL{e8=-YJC$6Ag_3ny?wuQ@m}VYm=y zW1|>URUij6)?zU;xP3H*JzrK^)XYSAH)4&o!$pbX(}Lda>yUJD*oup24tF=qF52#0IGyj_pi z>Z|4Oo0h+y{&ii~mzdZbtYdJ_zTx39!G=`K)fx&}>c_6{P^nk9AZMXcj`-9b;>U+(RAh4VKhHa40WX6?E`L z&au|=pv(c#5CDK|LUMqBB~c{4K$;*QO$RiqI?M~@a4JhSQb?bj;TfIJYeYi9Gv-9k zN-Bq`T$JjZB4IW$U)f_6G+H|vhZ7Mi|M0u< zAN+6s62AVcK8SPgaj_#D;{vO;M?F2l$*l=aR~z(fLF}>Z9ZW@{;sy>+OL5rf;pLC8 zu?%uw7J)438U{y=k6eSqv#2ex9`HGWfB@1E2mA6+HUs35JxQnYnP{FxB1RrcBIGsa zo($NS(%$%BxSC}?nBp4T_JF0iq=Lr~3@^!gtx_L3Z*lq*`3@GV!rcMx_wZQn=ee?d zkCNx6;ZcO88*4RW+%pa{St)(^OP59sexQSC_r@$HD1W(h-iuV%n3G2mLPJTf`y`Ln z@<{pc2zk>5#bcOmWMw_FDaNoYDG>Vl)K$giPxM`jE0OTusHYqRX{U12KsTQ9)t{JT0^E zbF9)IfPHNO9*Lu}a#mi6if6<*=F6Go5g|!6YJ!}?ockJ)`iMQ&7hAN?JPUMNP;l(n zSa||{?ZgSBB_D-Y&NOwj1&v8g@Cf4QabiUts9fos7$p2(@zNNVqG5DuIGj!bDwB;h zMA&Veyn>`7PTBZb3f}&+Hdvq1=ujB|UAx8cY>Gen@BbzI?Z5G#<8S?y{{Xk{+{Nte z@4&-*uVFr&pzT_G_T!(y2R`rt)W7sgXxkQD*Wu2sTev%G@Fl

Kq~ePF`Y=c@g5+X9 zjqsMeDFR{?_6*u<#tQ-6nD=B^fqd2pH*R+1bG~*H(AKp?O4Gi`0bVq*iqkHa%;wKA zHZhav+TgNAFc``cE%RAMXoG>yED7ykE)2k$>$5o_WZ{Ug2#s95)qH0J znE8qbsFeO+ybX`L?HMj;~Q*yA8)lm*z?%@x=$SnK#{O+RDq8ODL}LL zR`hW*aPt-F@@tbBBm}DMT@-^7s%|jcE>Lc5L%H;G`Dx}_c(fMBY)P`MqsxiXDWg?R z=f$2EWLt)#CQi{3*As$$I@;CMYY|apS7X=rc89{vzR@8H3X{HKh#1=8Je#(&4p)(y4y?_35 z_|EVDH;m6$Nj_=>aVtR_<_7G3M_zccp zIFE)E-oJVsH{N{{Kl+FMFZk4N{Va~^g~>DqGxUYE$oEUYS^z4$ryLm+RvHv+T(|_o zy13a)PVu_!nU}C{bJ~+Wl~Q>EGbKuIb5I@d*0(FTy$;8ce59EnmqO;3_)9VgmUfm&V zx2G47Sdt6yXWAoJLkfXXFiK*ZQU~7W#(~oxXf}y299>P38Ck#YaMckS5lbA2g26G5 zX0RHMyH@1UcE@f$=%p3zx=!5@F1fAew2p>(AW&)h=c6iS7_()Y-q)}cL|H(TB~TZJ z5D9^zkd~JvBrYUGA@HJ==yWoh$iB0EhFk6zL#?q@gtlqVMfrQai zX7{}u-^&z4&*q3Iez(O{Wo`GGa<|V#yW2!9w#vZ}Cp^Rt0Yx-KvU%O|sbt)WAiLT|YZ#k~XN+E<` z$edh_f!p7rsWeS@CzmlMi$1-?5bw_q0M@K^f18~Gfim-73V}#7S{|k-w!jMlLnM;+ z_HEtua8S{nw^h*QD|GfdKuV_^&m#OUvoDP>rj`qHzga-dwxFBZ%yLnJ3If%tRo4d# z8J&wa8-OH$M{CfW63Fl%%(2Bo_ZEypSjX{Va=|fbo%yscNUV`)ZTHBS2IFjZ(ON{W>mv|Bv9^ zFMba1zy2y%N|a><2BU5oltqD0f9g{hZ13RC>lMnP0y9Gt1z0Pbe*Pb$+S?xHHp;!iV_t2~a~UC)PUwIHP_!sOs8$1LGHRV3 za^=o0M)C1&8}~7XoPS0fqoD(g3}Y~ZpM0l)i~cklMz{fdi~<+MU%(u?y935pz>fEe zW_VUe!cXEMFBbtcTPtA~+hc+vI` zM%ksqI7sW0E8=$g{Z7zag0up|#0k)`t-la*zDMw=d{0rlvv(P|;dyOp(H{yQH9euqVzrada$VVCc91fHhlf@FZ4?QG9(P7DpLb3$k*%7%;MVE&A9IBlB-`&dkZ&0#_iRUQ|Z(zs(E z5{#>k&@OGYwRDW1VYBACtdXQW6B3r%3h3-aXx+(kJJv-$)});|dkkHILSQA0C0F`} z@H?~v|G3B7?lit@UFCwp zdJe*s9~1*b{jtI}gTU`tNx!ZzSe2>6K#0+zM!rJ$2et+F?ZQ3-u zXO52^poYYam%oNL{>9H>Ha)>h-}M=kqcOBrU}l`Va0zO;03F}Qv(LYX>GTv@X^5hP z6axDF_i#L&q8twJ;g5U_)7cEFQ9;oVH?5=n?s~Yz5K?0I;5?MBQ4WW|e2GF9n9t?_ zk3ew0c;)M_LP4RdD#)^gEF`2rvhri)g_}dcIw#k%MN!*MnL#i~jos4~ciO^WZn~O7J z0_jB-V^Kc|MxoHmrnvL#uRvB6SZfS-cdpas9i_Y~S%?tP(!O2U@mxPLp%= zHJxK3h&&!o3u1b0`SWOQD17bcjk{_7+>ofKUvAtIULgAI4khw=cO}I8JZ%Eo){_-7 z$rf*)K(kn<)y1Wh6$=%&GPKE`mA#zc;NFs=L9=n4V0*TBAA~_$*0oxES!Rx=zvR*=4 zwcEUvx=IjWt!XW;iB84bZvwCcS_+MC3m_m@!WBYg0)pLtg|l49PX;acAUh6OsPu5LZ8*nrZaIVEhu1j~pF zw|DXO%fE(S|H`jmv^9war%SkV##rWaIGjKV6N|blwT{DUZshk4&tYqK5BnFMKs6jg zHI3g?uKVtkMrUOS5-{RgZUNx9bEJdWlLq#HYYZMW2%rY09a9D;%|*b`fgC@4=}bc;_9>a_5TL4GNt z-zK|x3&Yj;^pny@DAZ{R*X=QM3>7PcQv*g493XNh@{{K8IUm9{qn-N?Z$xy7prg8- zd8>}1%M)BTGRB1!h{>LI!UTJIM9YL0bPP3s#9$-&>?@<=nfPaHV9@!%DsV#{<2CQM zL17M^d2V7Yk`)p;O!x6KdDZbV>B^w+KgEARuyCI)$S!>KX*;^=-4sX&=tg0F?>4kj zX8&mgIT)cF4k2a4_;fLA?sqKX#Y85jC2l^n-4kogVBSgGqBQJ`_X_y@a1Tqb&U|gSzBaR6DgUW09})|N&|l{s1Z^@MFag3@0dy={0untl+l#?H#_(}6@}$!u*%6&R zkvb@eyfP~baMf}{ZCU1!-7mR_62{0Jtfj(E=i+3}M$3Re;M-cgap*NGGoU*&D1ynx zHDS*Or4Ux358xZ|Cv4jgU)HTXOGquf7$6-fasuDX%r=V}TaMP{a|!>uu~V6ah-teE z%--hP{Gk&WRj&jmd-hC3CiFhNbXGyX4;jTWS4{770^CKPHi6X03yKx0!4O-60zdMH z{&&z%y@cug2YCIT{5>4sxrM=G3l}b3!kfSTGCumd{{X)7+MkOrZ1_-DRSR?ie>0r{1Ms)s3>2K?JQe zL?LkQiF00bm>!!$1x1$i(bi>x<8^OUNOnx!S~bHM*0iQ{#|frLh2^Hh6GvDfDs;%z zkqmRJG9xr7?9>|Th*S|_0@v0+VnP4y0t|v8LPG+|@18wem0Yl-DLS2u%{L<@;f#=%hX#Vn!8{vlrf##iwZfAK%X?xkni zg|BKFg$GtLc0^E3169`$MS+(-`5F9?KmC8l?%_GiXH$Sunb6?SfNe}Q!Unla-6dM# zcA^s$VGAWeU>9V|mKbC_284^%>;wV3B`KIfCX7*r1btY7(Atjg>3H=4!C1`*0Z?>0 z;Cj_&JZ--tFxDXLfG(0XDy1TmSVPQeAyEtA5sz6O#<#1Aj?@?csTw8*0HFb+20>B@ zDhd;H35GZtbl2ZTC&H(_MkiK-PhYoz+4Qx9_Q+ zQ8`P13r7ac(~b=H4^$yFbpq$=$q&6}0#18TJk834H6OeWhqjNO1InSf3Ds0 z8$w%(I6FA*P9mDC=%!0$=;CX5g)KtmS-*0Ni6hj}`^)tnpFx3HF24G$(9pl6g2s-61N>?Rqx)ZtTje^2PVVHzYd6K5GDVj z)$I0p>;~t@ka+6}(l@SX?1rG?^}@l8 zneEY;S1kB`S^EoY^j=%wYYQye(-AHSQo z*Ok%LHe)&t24ghZh7iET{Y#i1o#M)uzJ?$C{vXD>=bi-p)KB8@($je7-upPWH^7t6 zJdZE@<9~=H1kOGC5?CvUa)fI)Z{x!L4xZiL!tI+k@#{bP_pp265@bP%8CDOqwB^OtUPdEoyV=9MYLGb*joYgo>v5Z3h~KJX9KXAC;W%d@WyM(`kTYJ$YD z--Ab=mrc7W2dv9Ncs^b~8}<7Uc26*c3dMAJvU)kPs|?MFd7vbq)C#3mi98Y0-$oh( z|3Whgtx>RUxuz5rZO!3=Ng4#Jm4bxHlHp7qR~?XU28@2c{QS902y~Ydh-Q$pcUsT7 zRU)!?)2-3Rh~(QR_dz2_YkUz(P_02Cbe`d^-J2cKVvAYpC?v1{5h;M^sb*vF9Jp7r zbv$I}k+L~lRe9%JTdt;8=^M;l<0sz>-U!#e^kw|g|KmS~S}vna-rJ?_?>%)27<}R4=p^TN8nNLBNUY-`H>|ir z8Ig~F@-&$x6I*cSF?wCtlN@by&WObm+;{&`p9N0FFUQ#eXtkEnN*gm|7%b)ySxP7jca~!{a1rM&i z3v(*GsmI%zb$J^>bwxY_R7DFMf6aH14<vQ1eU8$gL4+f zF2`f5kWStnS6AL+=DuP4L5)K0n~UGH+Npe z@$d-CnL@ER#4|5GgR58G#bkRA7cX7Je0qwl^OsN$#(41H7!SVjMO=I59bEjxr?GeL z5X(DP;eCy4WNRVfQPTA+NLOci2 z4%{SE@hXJ5(aRj>%vTroH06&c_@3b0t$Z^aZlU8GNqMovlj)MhI#T*5;MAZ??Ymt;0OEY_h{6JbAV)!hwOJ$2o`n z{HbRj92!Yji~Oj=KTV=9M(#SEPqPW~(UD5WhkLSZ3Kyq>~AEj{B{INfQj{_Py zmyPA=DJJJG;QRlhKY_9uKsODY6NUC!=4}IRPexVxBS^kzed%ZT@(aT5)`Bb`ndEo+VN)n$B%4+6D)#qGhChl2ZyhQ{qn z=ZhZqLKE53tgIAsE#hWaCFBj76 zHCdJrg7A}n=Rd*MzVtH~jQ2njfsg&*$8mS}O;kg|$+J_ue&b)^xzlHH_}q8k>Xobb z_;-9K-hcl(-gx;N_|zvq1!fad=kTegaa#${y_@*0f9T)C*M8-Ts22-^$9Rnl;}E39 zcWq@5qnR(Eht@rrOkBIe^9L9Y$IyZ?yLHDW@E|E$0VwT@VAjTp+j<(iotC6WWrj#v z+@V==R!sTWdc+o~*phan(MQ}ZBYzuC!R14HWIFmA2-=N@b#Gx3sL9BRjSwb{x5r-{ z``yU}t$E{MuI=u1?Jc(dvqdt*+6(I(nMAXF3cfrSEx`>qn~2XMJAIF8iCUc@<#fe4 zg+|W13xp08j<6++9;0a*ux1ohiOJ5c)pi>TjCwgoy<8e)1Ax=%4Bzz~AIFDYd;yEa zqP6a&5LnhrT)A=;H?CiYDk^9jc{xgy&^xNGzd3$s@%o&}2S{mSryQcK2}_3c6e}|lqQLuuR=X|$vAdC}$>js@(=T~Nt1u@&asF_ZvB9;| zO`#Ch^Me^mTV;qWFx&zLyo5eE2DS!iCjpRf2H;VzeY@7|sXX?}{0O3+Vlt|*J*iL& zV;7bj$dWlN0lV)=EGqhh33pjV<{CMU&RNO$z|b622lh}z^G@0GL8)Q57j1c*SlQ8y zjZ^nCt=YFRStAmWMIwW=0(1lD29gSsmB5~?3jzuvNNQ*2dhC!h9eolJ1=R!lgPj-? zm`@FWr8IqXW;W^=7&NenWI<#?u#HtcZ>g{!P#Odwa zIyDGe+S61`YaA|^Z3=ha(y-sjwWMuL7B!&*!b2{EdZL@?IB=2fdNu`#m4WSIhc{&k zd3+=U+L5p(qT`(yRMwt#v@T|E@+BO_{qVyRm)TP`6RG7%o5Y1m=sSi6til zSP0yI{~BI@{}wL4^ifP-e;MWNt0*R0CUKokdGdUEq;H?a%T|#v8VgLecR_-n8fD}~ z*3e3$tV$eSx`^G~JzT$f4Rzf>$O5AYu$)bNKYgrt%jz$eHRjWk4=>W&|0HjE>JHP7>gbJAO75*!=>k*$MnGwmwVFs8*QnZsBw>_ZB8C)4q;0gih>t zBkNui>atVP!MPcHkO2PI}nBRTyRAnQ64`_Tu7$(UErt<^yOnS=;+)@Gk~!`m994(MWpa@k=0Hf+5H zBCwQTS%Av|x+p-h080s7NRW_VDMFxMFt};Vx@K+Gc@%qQ;|6rJbx=yo<_-QoKl?Q_ z)iw&ffUYJO-g*stTLUbY4Swq9z6`D=fZ8m*o544XvMf**(xy;0W6#M`9nG?HGpGv7 zTx4nPsP!liiAhyeK#HKe^NNO!HpV3hDNt1fNV8Yuw;&eWh#>@_EDKBTB+6=l_w^yl zPy8@=XRr0TZWdOll-KSH?U_+BW6v%bHb7e^sP~`48}Hr0B0*rBc z=d6Q4RUqOISE`v399>qni`wta7`t`V&CHNOpezmEaacAS-lgrAwsdAgU&~VZN@C0< z3z#6zaD6Z-JlUQXyRc$H5UL8`QlhK`iejBr+rvSQKHLS*qdA%ryG>Cn=2N!jBLRRy znObYl6NSKpHjo;TkE0|w@R{ygcdIuB z%Ms>yW9Oj5E$(|}1>}2WbIaDW0Loo-C|c(XqnL}XQ?wSnK*xq%D#{9@-3baVtP-8^ z#@F6Jt!wOG+CwpsI6Tm!HJJ?hcrNmtJ}a&0-Ffpfb%_{b0b zHXOh9b)4H8Lu~D!QH=@68fQEgu71XFJi%mCp(sszRAbK9=CdhoUA=|3U-=r8Qm7_F zfPn4&9ZYt&Knxro9pm`;1dI6sJG+N?^VKioZ~hnmIhLnWRD&^OQ9x^Vuno+or+EJ3 z--A#8z>i@upN94zrNbu2UpDamzL8Zm0gwm*f9*Qg*((AB7H$Bnl^OxU%D%>un!Ql2 zZNdXh8nr-@4dXW}a3Xua9JG`0rknyc7-U~xoFzjH&U6ZJf(87b#yoG%V#K*?8Qk)F z%RzRcQp22^JPXEsAxF@$bx|+G$Ruh;9P2?TMmZQjmSu>n3q;l!8v7TYz{TgD$MM~J z$vrm?3z8`H1KhcL7t0PoM@otLd=5c`-Q8{M4JLS_EHT$z9(--EYu$Ir|1o^DWgxh^ z5KKTthDk5#B0YD_vnijF(;L8yzt&DG2M{?WQ8o``m}B8Fa?gx-!ERlT8KfGJsx2Z- z$CCw{PPyEvbr2#n5zr{GR$d`NY)*Pq({vLJj+*CMXayxuM+RygmQxMGNV;$@U=2Y8 zr8Sg_SRd9tAQD@|%WP7i#TCJB~o_j$$wMM8uC%tDPp_wXID6;r(5+#t1< zShO+xX9r$tRo2bSxmL=)=Q3_6Z;rNv-Z6C&He*lpG=V*l>TC~n&(_9Fk>^*^vs?GS zb8B-a6kJx&WeL$V5UN43G{I5}Ax&OuY5oKeNEU!J{b|SqS!G#4%Mx7IU}bO%FA!Pt ztZ8f3*`g>gt!sSiYhTA46$)r9Xn+gqCcbY_;iysgrLVk&ISu?t;by~PDs#pf$soi7 z*E7%@BiVR5IwjUHiJP(+?OJon*nT3$Z6=l-p)90V+%szoCLhJ{$G#6rw-ar#s?myt zw2|~r_7vVJm<%Iw#EifF_kR^^eI%3VC9CX_0#b@Id6GE{Q|8KXc zZ1-F7cy@`AE9)mhDccE10YDA5vGd-WxNtDRt$S1arN8qPKokHga52RBx9;G=!36JK zy^Fu{KYkvxoPvuXxaV5RfaE@Vf6(O2}ehOwX0WFGjvl%`B<}-YUZ> zpUBb_Cg;#>??>Mixv+u+!66hnY3+GNwN!BNV@VRW4!2OxYm~A?t!kV*cOD;m`s1j@ z63gWRb<-F{>S&DR$q_DWjdA(YpFvqws9*jfMw+2^c0ob{TD4qV*fQKgO5DA94Ofru z;Qp-}xc&ZnxOe+~+_`ZD*WY~|$M(1&0N?!LFW{H|=}%+t!U2k^z@Vz|)U!`x+0?l9?p54*|2=&6_y0%uz90F$SS)6U ziAb&l3b0;5>jM6E$uk zY&u}^?vFN?zv|)x#NLw~hwS)B5QBC7S5Q^43;QL zg<7Y+Zmtff2Fv*zP!04_K@ZM@iqgcSc!;ia;Yn|W<9I=5`W4Gq9rZb*&w%68v1hgl zp$-cNr{#02AZ=;HxwsSX+~1)Kni{-V0`(FiLjYO}aNQUs13Rk#i;zv@VYa&^%3v@@ zq&%vgC|n96_JQ9qM1YhSz4Hckzwk@g z+8Uu?MqvZ1N+BSHKp_ZH8r86n(waj9N=h_Ds7a!hgk>?nvKpWs3^Co^gDT4Q$xVL; zJ=9d7DXDCx^PP!q42G1S< zX!pzo65d4cPJs;`5CsseC#^MVWMe)XGI zQ0h4vDzUBZ<9lJ0AKmJ;p7HBoS;_(-GlKx6WC+0^VvpX|7xi)o6Rs=&J9m33oI8?$YOxqJ>yPMjR&ZT3X|0Hd&WBbSSO~CcYFALGtE%`-1`_yC~mOt?fZG5tP!H&*y07Q=_nIG-?3H zcWTYN+kg-P%en>?Aw*zIu$;iwr&D8e2bx{`o5C9B z=vvoaQBW(DMv7euOxtF1C$Fnol4+&@V4V-6mB2}vI14R|+Yo#%R^Pbz8G~7T3)rMc z>U3Sz& zRwx;mj2DJIC1K6Jf0_Y`6p%L4Z0DNh>@R6E(6!?ONP>ohwsszm8m*qdkQt}aE0}fw z+aR?ul{>S#EM+b(t;|Z-gij z4_3kltYQjQ)M214;SkVk;=ft(t0ezNhleV$_oatx-=G*`qzWufN{rPpe#_CnNJ`Qq zv1AEZ7TDb$qELX618mKYLHCSu{h^1(zIs{%50-?}ny}Qsf+cE}U|}rPAPQ(<+^3|F z)|A#%DhU7+Bohh%^-+NzxJ($b#!@4r*{k<{O96n4_M&Zi%#i7W8Izx`dv_z{E6(aZ zy$ROdA2}g&Rxh}=TH?j5G070fr_Q1@Z9FwKj zT5H^X?>1)l=D6_uc}y-(aO1`e9Njp=Q!hS+o40O3kU*m}N-3~+?mXUk?+UKG_6k1v z*&jo5cp1~Le;$kZ6r+Q4*e!~5jLD3ZBy%`-`rsa>M{`_w>IoC?ff>415QT)0hSwE^ zM6+xFO(=>2NB17!%3JS(3c_GKLLmy2!wOHm@C>#_6P!#>v21EgPpA0iul^deU{qDe zOhJ*H>PVu;B^(rZsWz%-?0Hjs5X(CDXGfffuw7Q!KRrHh7SviRC}rYc^lq3D_lvxW@A3o@tB-aL$~ycWn!Z>I&D zz;%5qh+(ulY|ZsEkro7C2*S;!#0^YPK%?Ns2r&*RFaT5#2itby02U<*=bPVw06SaV zanl{bICYJVx<~{_D`2_sCr5AaOK-aW_|u9W%ILyVV#(0^|Z+z?iqD&znD@u`AtU^F#ZM6`FG(9Z;%MdG`#i2cRe$Zz|~X27j8-{EJMLg0uy1s z3qhcQAfzyvxMbiMwPq+Sjc1f%;I2eyIF^!44Pfo!KnUkx6=_6>6fYJJo* z#mBn}(Pp7sKjO94#iVoe*HxY?Lr2f&(DlB9E(JoqCA%yr95e1t%~HbD?n~Z=d_1xV za{(t4R*oXx*S)f0qVijroanDou8c^UWf~?1Lp->54PX0LKY`_ZiF22p!19@042D2C zA}kk2pz0J_5U7yG0$Br)l*DI2Vlic1(xZ%OB)eji*dvR=DF3u(ERGhaM1#S200v|4 z{2tC76c9s!dRb$3GQ&uZFdk3v9UnW7J4dH@^UXK#;!{sR491wVu{E!VadA}Q-qX+F z?KfVBKDv)W$aG1tRW!g%Yc&{Rv{Rv|N~p&8AnC@Om^Z*Ak?!X=EyTbSLw2c~Brg;(gOwAA$)4v2Yki9|zmH*~%_Pe+38u2$3RNcgv|22>@&VY+j?cFq6_Qy==i!2w6%5 z2x+yxcJy4U1({RYUe_A?ppaoA1sPLx1r_23^Z@}$bmOIn-iDR+;G`2zu?q-wom5xZMk$@mLt5d&M-m9XFQ-)9BVK_L*A>J$rXzbC7@gYjc9pfp$rz$#RPjrAZ9CO4L|H98Os z=bU5sZZPx;vSlbYzyh&fP9Wigi0$`RTwux7+OvMB^b*I#1YbD++i)VcQE-jAnBa+% z*YP{9zKv6@aA&ZCxg4R;Az*A92N^ujIIAOzfa4t4t+r=B%zUw@o4)V8X4b1NnlIA% zfOVW;^+DQB7iWW8WyennICJoRp*Lp5x?~zj3?$0>n4+zpUkMKMe8n62*qdkBTbYGH z+H6g+t=o<8I`@aJQZsCH#scz{6?(6Tph1wT#&ocUtNY&t7fVHx#KH7E?4P~|SWBq* z?@Z9qDGA`T0p^WypYW^3$peBx*7%MjAS9c=*mRl!tr$ueE5B)BP{h*u0;)bYl?Ye_ zh2@zc7f?3@CvL>fqXxxkd!j6j@*~Du4_Q~|^WA7TMJ(~>s`~P=(YB++hv0sPLud9w2-%K`_N&cV^^#oT7{@dws%JBa7o6;%;f3E^&M@u_hBg^%gcWYL00x5rMtfTrZ*61u;5-g5J%RD|4h}9{#KDCp zu)VjB{ljzEIXJ|@g(px|70x~JB)czq+bl4tL zvmJ5gK8Q28PHcj^)`zfIh2301(Z-2>o)w36Js%5VZ2gPa`Vr;=wqoa+(Tza`8H8l~ z^PD+Sca&qts1maerfKD_b{j3SBWw8J9?|Sh%F}1p@#9^~uWz1m`r~l_x;f4L6MZ0~ z=z42IWmglV(FX*0P9{6$m8FPEXBa!TJdT5g5MjwnVUT#*n|3Qm=%}eic#^gpjV$X) z%(L5ONJ`B$rIf2T(}ob6Y!Nd=9NdlpW^+m;*7`N15N`*9VG=chU#=4vlNSsJ2~r9W z0!#&@vMj%h)8GN|2zRl+ttK*(q!6y8gr{OyV(K=K$$FANcAAn{T-izmYdosL;9-F6 zW*04~Cj1V;(^i)y7{);*veM96XC-k`PQkhI%k1C84KDK8;T&14fmoGGwg5MGk6|l# zn9B+iy}*yZ{g1%foU}>^%rM7MIl)jZ@#F9O6A*V`K}x^YkeG`C&P16+VAwVR0mgzP zmXJolL&p5DFCgJMVOj&2iz;F^&qf>t7!3p#vb33lGOpbIATSn?sHq696lVakb+A3{B*BuQL z+?8yJt845AXFnA$xuq!4kU*gpm=_cL`h_2arV;`gwH)A+SAP~4k6wc!iK(nmvVxKo zDp8%W_BJrA$+PI%w|VcndK<6Xu>J_f6;W8rr;Qu)8vwcd>sJypq-y+ujS09d49y{W zwD$EO#lA8rduAP@-c{~d+M7QgA@V%5%1UqwhINXLynp#m*PdvbpJlI^!$x2<-ot22 zU~OWFTQ&kj!1QzmRnH<^@(>{HAW1`)oV6=JJ}yE%Z!j8ER#>JWbhb=St!Qi`x*H_} zAPNy=Z>>=c#u$w!XzB(^H<+Cq;r6X}F`YfY-8)xs=kB}MI@rVhllwS)<`7#uTbQ5D zas1#I^}Io$3)~#uz*mYdqZ*cY@8}&&FPxy+sqtm~Wt7LSL!U^zFh0P=@BB30c;huZ zbNd>0$0O)F^|Hb7y$28^Fy5Y+3`=E& zgY$=|>l*iN-GyQer4(kzQ!oRgtr18NBs5BH5VFO@qe&g#vu8FkGe~70({O@MP1gb5 zx|S_34?;meJ(~dlX72w7ZABiIU8z#L2etXfUJbQXsn}%}7nB-My9|7LDbjfx|jxG8>K%J%zb*KIAr~wm+>^ z-E)|L6AFpQf6tk2_gvp;H4&j{8gOk0jTa8QiE^u74GE|e)8(Od~#rDb4)F>-4|cWmQctA`lKC=LXy4V=vHMxSPMwWeecjfOYs z^@apCUe_eTJOai_!DT-oGWp7Vk*lPJhlEVTXx$^bFxdLVCW6s=O`umYx=sYX@`U2$jz=x=Dyp*fzzQbGtFq}y6EI*fsiWd z@dI1Ma+kwA*q%wJF@#Luwhp}>UH zdm;Y+;b1N+Y%iwxBk%ky_Leg&g~WEVz&Ca-;=g|Jd-2rl1b_6+e~7JSfqI2iksG^~ z+;Ar43Q&_k0}56RXH-^%vW$QIQb>!#f{@lBr}wr;fl!NLC9M_!Y7iQdRxxsRATX9J zKxJWR)v8_7B^eNw5P{QQTVMLU0ih;q61$N(ekg^kLZ-16Eb9~vT}3S+Fej&|I9qB- zvu6oYYgZwn7zZQGcx_PN8>0)jG`o#I`_=#2W)v{)dEXoeyfZw&^CwsFV_*LpP|&DI z;!auM6)UVff~eHrVEY+TS_1IAP#jt@+zvdF$!@il9@Copo$ti9cy0y9Wz_>jc7?m`odW7&e6g;e$&^L(1FZsyo)F0&~1M( zn71iuLpaW5HtE6*`4*jx@~N}qK4hI~@ePze=Bxrkyd!TJLq^H<{`FUI^__2EvAl!v z&Je5#N;eQB@xqHgf~~C!Xqu%z6!2v`J{&Ikn&Et7>%=&#htz;zf@&00V-*BKVE14L zN@*}Jth+7wf2IfR!7sF-3#*-aiU~chIt;gKyF(W)1p`aKu`2EF<>4Q1G^SAsU{_Q{f$1vI2 zHLhi>(JU8u|MhQSc60<;7C1b-fWvd=pyo^bz#sU-`2OGfI{(JFsm8ic zC@kkQ%ui3fWdvA8dzZmbkfVW#AsFp7_Wy@(UWdR=ez4Zf(I6E0unPZQG@MM(EsnE| z4dcTPC-mqRHtY(3N5QX<8F5@>Z4qmX;D~}5o3jpZ&F)g1#MjK6bK*yzL#kkCFF+Ck z%f$j}F*idMJ#JhF;vr5@t1rpP*6D#!ls?V=7q>)p5Fo`CiA8nxof79m(-r3@ZA~|X z=(+;EK9VA35MzNOeIsExdTKl?Fd!s^kkC!j-;pygE~|J|Ap}B*&&St`RvV(vzGlbs z(OTc@lniza~wF6P~7Wez&*Ij*=qD@9faELiU>l)WI|O!sNr)n%~9`-g*TE zD<}vIS>euw7xA_Ir}3%NYxsTFU&TpLVxk(nKH9;nPka;&i4Lo&#|I4f6D_~b^F8f4 zm&Z_wVUvZnPLfXgnFk(tm@zPXsS_Br^*?usvw(hlX>P0vQ1CEd_b~^H8HbYdxQam6 z9^}sb)uM^5`|0(B2X?%8ESy9nvmMkpwjc~Hf`Og|YMA$DB}6gD1TgGE_FX@z%Rzlx@A@XQP6e5NL{f3_#kP`+ORfQ$l7Fie0x zr{EY(#(3wQZ{R2X)}KLDPEd`95Rj0i@uxpH{{#pE%b7WbIJt9zE9wdsya?GJBw>5F zjft3GL?d8Mxcl~9G)04wOGpT84+khmW7I_W^zZmleD3O7c;%n}LwxVQ^;tU=A##^? z^FihsTX%N$e)kMfNT1?eHyWx|C@SMl$;>DR6)rw`3FF}ywOT?Gmj@Uyljys~Ay9ELpSB^| zZs@dw{SYh}y80LmxH~QG9Ew0)onoW)5V?S4af`I|$0i6i_p`YA<}c9(3Y0pX9iT(m zkO}^#ae44gc)y!gtsTQg(EUOv!%U1$jpkEw@sJ9J&N>COQW#FQu(h{uluItHVt6F2 zs$;|Z=U|mVM3^2QV?I4Kg0dC%C^n(W1)`oY3F}~ufYTZdvnGZ$sVEf zxlkn0zCQ?Xym+5L(0AS8Jgi3hT^e{Mpvhc~x(RDw(l${Ug{TJhyG37JZyJ8k&;T_W zgUb>^H0iU1V6EfU8r%151{`jdxLXb|7Xl4QoT?J{%RzsqHUQ^pcXm{j;qd5vis<5I zKBV;`~#9_jV7)Z@SYM%1?wfynBg`fH-$yi@tZpCDSOR{AVksOUCeGrMRD}qeF`CQdUAr(lM~Ogm4g9h zrzdD?lLpwyt6FKZ9%O-9Ysf(bVKe?1H=GJ2OmJQeKrQE3&gYn)o>g5#mY>Ik5 z!}8<=)BE@F)YDI+zVQyIsE{WKfR$ZqW;EO-NR^0pXd%e&Y2V@eWHb2VIaMNR-1Np8e=2v3qb1&B9`Q%3tJeNjDRm ziDN9|1o=(-oi?yivxlB|vRrE2@UaZ_=rgnFw^!UAZt zl{PjdTV6e7O<1vIX~i>6_oU;8qUZAE(g$(Q^+$zO))-w&mfRh7K?)=B-dl?0?-;z{ zGeH1m{Mq2lIJT-UKx;^cSG9s5TCsZD0e0iVO!wQ>;hP`}&~k~bZ+yjIR;Ane(Q;ri zbQA?3B)BM`iwb%)f*6i5lLh|46E7xmi3Xu!Mse1lcyYaUZ9J@XL#sRvl;d#;v9W95 z2LkL42|i%qyUW7oUz?zB_qK0RBu>+MVeW%~f*Gf>z&FRcD6FMUsWl$RGHYRgN&qAn z6-*Fb&6JqE_IV#mGJL>x$r#GBM6k(scMgs|=g2(V-ng1?BOoDA6eWtPLN%yR4FhjW z0Pf#8Mm?WJ@uSx93Ecy=>J29#Z8F5v`Ri<};4IKZ|5$4b$6FY0SB3^^BV$Wp%)^f! zJb-2m2%9=S>f0vnz*=h*5`^LrC#`n@qgM0VyVbLrB4HUxyyBBv&>S`Md zT?h%S8=PLfj(R>rH5%ja@I02RA$5ZR6lxf&s{#xu3Jl5;qd|pI7S78$n(IJegcP7* z36RNRQw;{twZhH!Z$b!xx~@S0ib09Jiw8z=B&B_yaPRIt96dNfy{s`DO>po29sK++ z{vwV~j-WN;+2=oso$WoSruO3~IJN5SVtw6ybxn6xi@D``Lm|UPs37fcZU~jzUYXtR z<~f#WjFO>g8YpFWy>c*sZfexC8J4pt>e(q4vzbvU96vz4m|=c=gnB+hJ)dH6a*TSp zz~bZxYH93XRnwqeE-?7s??FAUK~nl83i(J7REMN0tfD3mmx2%xOWTKJu$+(p=|C30 z*@{4(L8rQsTEZ6FXZ=3$N{qCjU&7pBCRXa@HeLDm zu9=RoteZ_AJ(60=g0Mf^KKrdU#*2gVHmrwSujDk!ozJ>IHl~bB@NQ2|&~}zo3`Fq+ za?v8hdT#lesHxocXPpAqXf12ji8FC*#=< z>QlGsgBrDEB_JiJsWE!%TUKe@WyxbJwU!M&m8KA2S>pH;pTg0_%b?}bzf!>9I7z^` zUShPN>jX#t$367h@C;T7?PxWwXfp;rm}ykcM(O*wvt*0Y?V9W>hx4BstV+sOS&lU&3aQ8Nw(Pe)90Cl&A%KE_osw}(bnI9Xkw;F<{- z8&6`BGFxPU*bH7aR)!)mArJeeoxRBMUj~O$l(N|2LGK!BA9GvOb|U4Gh`pN+v2_d} z$LIM+fLdd?HNn=Qu`D^hcZz%0uj2N#D|qAAzJWW}-UHcqPoMqqe+QSJ{}84pr+%!= zT!#J=1AhP&B}K<|P79R26Q# z_d2e;{!OT60a=)sBx z_%e)fHun~h-Xq6xQ~w(@^W&6s0syt)wk!*O_$Y{=RD)|buS0K-aPZ;_ zV6E}1zw%3X?u8d{sgNj*S`*NWvZ^p1Z9&yb)W^rD7ju+D30c{6^O~WppMWE;qAH-3 zf-DORMiqAV_b?a^aQF5dXnQKUm@QB*78nc%Kv{xWV|!;CldUZrJvf3=4Ynpb_~PgP zDgNm{`u~AhW4txSpZL@N6)u1G599v*yFR&r&rM18a7f;qB+vhQrd42MljZWppHpCOZ zZsEAfd!!ox+$fY)g~`q?2BR@#Swc#Qdbz~>^rVy7mPD8?YRs3ljl^!NBNOlw0A{DB z=m`3|9`bflzAod>^jFl9^sZ0;+I2rJMWL-kSUnrv5b0MLX7ZiF!~KQ`NRtS#8fDiR zNjAlqMH1SwOx-Q%pWjU(E_ail`EF?$Cf9tG88Oim(t3&*pV%k7X`p3XV=tXHOK6}W zfyZG15trPx!`Hn;i8j$OsQoL;2_@}O=wDq7JDz^9)7AxiVi+7AjlDXocZA|~Vy)!p z_yLN=3>T$9K_Lz00>Fc&#*74BKe&L=a=DSBL5eJpUD8v6(2WU%8VkWa5aLvH19>8B z){JmjTvoiqwp`JrNML};mZM{KDXug;ON8!nk_QQ-8`~~27B0D9u+fqxkZJ&>O*C-v zkhxymm}>16D-RErxFHBZ8^4!n=-ry}sq!MWqj#SWGUwjtmL1emH4xfx3IYtW*<^eb z)}@n}Q8hIh))+&BW=ni-E-_QmLbv;-&wUl|e(P1d{qnEjtyjK@ll%8^djB3snt+6=UgFa~{KI(R6W?hR4G|4W7074} zGkePigPB(e2rYKK=TWEJkXEsvA_cMIYd5E1mbR0&G}1Uxo7HTi-$R@7lAzs;$=(+J z+28$X{GI>ePvO$D&*G_PpTySAHm<+-4$eRQF}(Qce-lL^0cDiSxrcom7}~_~A^)9} zP5H~#CtC_EW=q_=c8b9^P#p|FnjsY+Y&lE}O|gMJC27A)Q9u+0e&MJ7D}4QPKV=TR zw8CO`jK%B(vKV2!eTcHEaBzMfhnEiV=C9Adr*oVhPx0=XSFpc-6Hh#S0fRw>CojE# zX88bjuYVJhohMPs0W?k^6NyxtY*Tiu2h1oCrROF1cnCteGjfBUL?JLgo#MtDH!&Dg zxbWfyFf(@dcCq*L9^QHNZPbezi}?b#-?;+`fpae&LRSo3H@I-&5)OX&x8wZt&)}c_ zcmECE`1P0Z^s~=GG69Vlx4qE>H{QR3zy3G>6mH$Pg43h>xb^;fI5>aNq?^}feXzFp zv@k9+x>hEhh2>Kw;|WH)W8A%W&sfJ3Fg-cN;&=wNrBRKB029WeG4?MUV7iz>A8U{l zm`~@JAI$+WiU`dDiw0OI_Shg}QJ^B(Qfa&G<1s~Mh2Uawz=o)buKC4DVUcpCR&Y@{ zOu5=yx@#C3*VId}GGkJf1r87PASFR5jl1u>4%IYPaZrG)+mVzdin8+bA%%>7vr(R| zlNHRqcfCxb!U)uG$BG0-ky}MG0Eg=-dbN`!>yo1=f50IohXTW}I$xG9o9ft<%u>+S zGjY`Ta3}4sNfn}#V2MO&10bAZpJqWX!+t0wddY7g^7BVL5}&WhGQSw z!1e#E%%G4G%lQn8(-T0S2O6_eV?l=is9J-ydEVt9Ud(40j<;~>+2#>!BgiC zaQWOGmUSQ;&MfPzU;I4IpF6~2QHOUQRu0bJqjW3`Ps*O&8M#AvWadS?gc%DvD<4-* z_7x*p7^@o9YPT};X9+TG?R6+Uh zOA=@^*rp}@B{FOf+I52+ExlxX34j(54g*HG{!H^nX`u{&ixMOxhT{p!vV?XPU3HD( z_!x_-!Y@7l@o)kP_|vDnsb+l1Tl}@@4@_FI+@heT6R8m2ekd=USbITo)xZ!1#-#nA zJ+;+(^@Q0mSnYCQXGm+1R-lM!Stm<&)~B=)6kR!;OK$awFl&iHjZqX!AyNTr(*;Gg zUp8Bg>>P)VYeZ%ZG<7zRk!k zjk^$)*Y%QM$8BYbh5UCUkOl{R7dXsPB9A=Sh{zt7L~}^M&V?QP)c^2T@jw1&f6`o( zLzKfI>ctYM1{m+`Ss`KpQIt^_oy{QKguGRnvYaC4&j7HerJqKBCVLH9=x_cEn`%hr8 zs8N<~&`Zs)N#(&+4Zgh9cpvU_3{kDK*i6l zW?$Qva#E0fx}Z66J0l`s3+X(e%i}N@DLeYjomoqgS6Bnyq$m=+QVQG2;KgGTz6oeQ zULv{E-2ijC?8eNtFMj3+~|f)w#g z)=p-;}++GL@K;ApP# zTb~%?GnYm@AAc9N21h5zn$6B8;v~&aDYPL{+81MjOvMuy4GY0WOI9M$z6UI5%Mlxx+_x-) zOowA-O)CyY_VlLL{GUfp-tg96kBP&hY$;dFR0tF{J(dsxH7PI=Br{5_AxOfjyjP$h zAD6*DNbyZLMPTdI&azfvb4tDu*th}80-Fp>-u&=`>9q^X8}N zf_0QpX!To0V1*Bg+?dMX++ImoMk6bP$p{5qhcf_7+CC5_=bkVEL%qb)&pdV$2Ev4nB7Fs>sg1dv=K zkasoqGefb}pADeRY;-cLy?HqySmWg78yatvCImwxg^-X%1tE=4HJeV2z$i@6X#p2Z zy=(9dE*A`p#=96)L(i^Hwt(4u+bC=cBbZmi3I{K3;lcfTSS**A&+cG3Jq4CiXzjfA zj199>G{|V8gfL?|o@`--+}<6ByEFaHYm#i=PzA0_=?ObX_i*uF(|A_znNb&%CewV zI}Lhj!rPz8ll?X0W)J~ zZx>HK{UjFC8LnTuZq_EX4{UNe;#fs*5TE(xbcgi|Rz(}RB>JV=em2Q|WEC=T{f`sk z;<__1cKwRqw);MUB9MVpMvX-0-hRaQDSIa;yRC9^ytgR@<5;{5ug9N#Z3P0e>tjR` zyxUlh%)FvZPMhu~C7GP|ptr!E=ESCa9PR-@_={s@wCZ!5d`ygu-k4ob&g7m!?>>+9 z8Nv7s<`8cPV-gv!3jnQk<%EuvY`9TrTXNEVvX^}#6M1*Cy9c#gLe;6FL5u{LPx0W+ zZA>GiT@(e5kB>2sgvoG#`wjcFR!Q;Mo{wRZW!*Rd-120uib4Rj{o%5#cwuc5zT1}J zPyGR~0(292Kb1J5S;<`pPvBz(1K=!ptOYM5x|Cs1q@eS#5~mYkkwK(c~h<95La%0y@5qjUk4#Hr~3r!?~?b_}ot$@J2rNc}l0 zoZsxskN$|@)>z#TbZvzS0+b4t3CqT;p=>dfJKICNVdq+yAH4z*rC(PU z-*y66DP(PkUsg6MyW)8QH{rD6wcaHgttNsOt~YDR+9E#yc(lU%-j=$7R*ew?nW2>m zV`1GUnFvyAOcv%ecBlxa%iNg!Ase+ZQ)^cy<=5P%clRB_HtkO$QRgT_Yaim+{AG)^ z3tvUSaLFDBalU`DKE+lNf*B>;9%g_WBLpR5kyh$BREjQ;GJ+CSV~j>)%;s}^$7jA9 z|J&d5yRbd1aOsIBFd2`bni>ywwy;=CJ#F--rH&=+?5NJDU6b+K44>u33dU}F2xiS_ zVb+bXr;&Z`zRB1jKFDKlMD6!JE9;qK*C??$;m*p-dn9!bw~S>M0FJH+fubzXEE~Ak zLW!i<0fGc1H16Mi8~5&B!QFe;asS>`+`08GuDtgOmd$;<^u3p{e|`_l8u#wrLsM%k zrwaezXZ{R+e(Nt{IG$iU8R7W&0haR`Kla)G49`FFTQQy83**A(K!u2)nbFh@ii$DX z8k%cLL)-o_Gq(4(QH=*C#s@R%WrG{<-$c`xv8x6Zo_P8qhzQHYJ>N-lo|DN!tWgvL zj7K}z8WV=29grlDFkH5-o#iv5997_fhAbsU+asu@!maDK4PIdrzhUpv9=4iobE3_F zR*bth@0#*7Ktkbk=RR&7+`&7G8`v9YeBwhN#V>#17f{(5m82nsLSbEK0kW1CWZX8R z6-8iZ6-}fd6vGm%wU=eK_O~(G8ksAJ0 zhjf}oWRt}Cqydr5ZuC5NtnzMfr~1j$iC?mJ5`tScol(oX?1Hk^ZaV%^FU~x^h6Ku% z02%JL+d&{S%@XtJDb%ut$}Acdig3&|?y^R$oiGVVp|NNfGfkK`-0SO~)3*?-r*-gnC9rR88a)Sby+dQb;o+Wy}j765g$&rjf+v$sCG#;>RbL?0k zG$#FS!fbk$%bXWUt4NSA%ADL%qUn;SC?qTM7GNBPJv?kq(0uI?ol@GmEC2~3=uUB* zorBg57;=pneAYrCd@$e~Qbv43+|%(pCgw)rn_5sj4$y4o=U`H!sA?$9D5Sv2tikCi zp^(6K)xbF$#C0o8?GPv{p-uKvMx3FTptzmosH5ervf5>4b&)YGZP>XUbj?jpSNck` z`<2;wrX{Ap-O$2jo$V&_nT~^tLK6*n!qHaw55yga~rBk0Why-d)ki=*-;lZK+v&K>pPV0>u_vp~s_KdFq zV5L)oscp=U)T%Tq!k&tIoY@8W4ZDODqz&@eVX@iS+E9?RX50i7l&=|kcI2@v$&(SRAkQZLSV2j~gBt7kqmz<@G z@e-}Fz9|G@fF0xDnBSPN60G$Cn~X!Y&n8~cY8+75Co};iG^ADtb_nLPK@{qd&H7A$ zVHM*B1gEhxn8*Z^(+t%pkPxVs3mo4&Mp0TNzh)E~UWa1X=0!KHGPz@_=pW6m&#^HqnO!g|Wl-4}JI#;r(xX74pGNR9jn+q*1V;t)xv#P-X@<+MDCcDp=ex z!%RplatN~4OJ-gJFKTceEL|bC?%`IUNCXJ0WCL8akz8#q(A#K|e^X;w; zDZih~2Z66}0rokP?@Xu(dRRfjwK=%Rz}Z3TwX?4SK0fUQzeSc}jE!bV0wgx%CH zzS2@ObV0J|?PqLi64T*6NZc#(!aJlij~Cr_fBdzsrWSQ-{c>ZpfpfwJkec(kE1SG$ zfDD!ckT_VmqjH^%90_}58l9?=Tb#CIc1(>%)xF!r6bes>6x*;o7CB1_i{DQK1A@{? z%GubwhjBb%^gO$o<$5$ABFv{#)T&#hR0_sB%L4B%Bq~l%5P&Vv;m4p!K-wTfy})^N z5c4HDpy^2Ze-!S!Xg~OhabnhB-U`2I_Ga8Ay^ z0462l)msvO>&6&6BZWWsksBD5Mi`6hZnUtG_d7b&3;hq7G6{-B%l+)(fLh-)fLd8* z3fx98E6QlyA%lagOKd9}(^=Y=ms>0JC|ol7u%8I|aX&94|@b&|ZpLre7-h}fJ8pz3)=td4~@2tWSMsvUxUvY;^ zLY$c<51rM=J9s|Ta^&Qd8q|r|)B4!scxS=w?^(V&lPf%}5@1OCUYfAoeX)7(SwkdtZVmV>N(#;rvAgfYR#>vb?_B&c zC&9$c8URXGCg7mI&nTdwEQJzvH_2p9(qcL`Nc2UR*T4^X9tPmSE zTTE(W0nk_`u#iTuS9OEsyhb%DL10wF3g-?FP?Z&g5V&{eJ{sMiQ6}z;5CYpf+Za?8 zSTC*XaC_AY06W_U_{!IQ27m2u{BcN88Eb{%mI?l-&AM|z=bL2%RV!435_+LgFKh6y zFm4V6)QcMPqd9o4G1;4d3WBaRxL{~$_>87*usm9V8;#-sIJ|HP#Z6#udke*Q0%)h< zbbB2DYm;I#5_g<%YdS*l4P(uql--Yvqr3MpJDFp$yM>*@9k6DcJAa7%3x{~`?RW9u z_5vgXj_)61`rs6U@d*1D_Q7E6?d{{z)0gn>JMZB3^;^Cg?c(g^ZOKHZBz7QzEE&80 z7&S$VyV)o}d>IU5qC*Z{dC|Iw zZZmXOoJK03Q*>WbipSdePVn<;tqqL37AolS>YIEk04`5!Ep?X zR$f^X10ZGuWNZA=Hada3i}t(2ojllPyf0imBEnlSsJu#Qe~ovGu#B^dvK#OD+}t!d z&|{DPP+7G9P&I0zSi@!29tffE?TB++IXjB)*(D28ZjIPL+yL z@4Lo9#F~%}dep56r{wW7$*>#3KmsQ<;U`}npsH>B9x^B30|}Icz}`?{yHZ%H&;mwm zA=I%^9ui#riMaL19Se|hLt7p%xBQco%n3(t zO6w|;3*QAhw^j|(Y}4dg7lB04l8!NT;64Az0Y{{qQ=0=NAj$v$&l|Xgs^tRZXo3&@ z$nV30yLX_q0t*RI4Zx~_RyFbiE7LDSpBq>u{)+i@ZVZ6UqNG==ScpQu+;fFZmuULL zs6YvA%s4^&6v4+%W1C_z$s&g5zxF9-lAs}ai5y0X|1I9i)S zG!l%$rA22GLxBbwSZZ*?AW0A;EzOPibfii!qact_O5yZqimh#p(bf=3D>RE5N-3yD zU|BbK^4ZIH@k1}-&h0yx&8C>1%y8xHt2j8nhwZ%`j3y&I`@*xRmo=`u{VIS0Bo>{UZlRSBnrynFL5?mu{d zlhYH=JCYRG-rYu34LmMAesE;cgg&_A>sIWn3$m7SiqB(~-&0^B7}s>2DHr;{WOQJ+ zA6&ZKPI;>fy0S(*8u%E4R>s!K1b^>xjo(nZ29WBDT8ah$E4hhS_=tbE8bH~FhviUK z6c-D1zv&=xbUw>_E1do}F9b%HtkO$yQ-lVzu%{uG!6JLYOZJE)e!+4;Owp!T)in<0 zgn7$=uBBnflk;oqelu_>?X#oRV@6<*R>o(Laur2v=m$t&mI{3(f=~I<;R-{o|MOn9 z+bLlf21k(H8_vDJB{x{N8a&_BRb7lI#p)J$iwasjwa%S3uHWgsV&#GR-f;Ng8F0ey|Y|87v zXM|Mv45GxNffKrJo)+L);RV5}Fn@vwOGQ{HktiD4t=nAi-LPftq8_>252DO9bv*X+ z*VOkLQs+7)h}kzL)`vNrT56M;&u^&+|2@98v`d>e0*VQf0psS0z+e5s(BN&meRhV7 zL1Fgtydf+UVcr;*ipK^UZ&foe49h-%;Ew<^&6C5C=IF+l?K@N@>^pIY4yP-3Fh+}cW%6cn^*n@ z%0Y$03x}A`X1MkK`#8Ap94^1`Ni1elV^(itRB6p%1&ER5`Yb=gWO*-ZnMBsb0AOgB z=}Q38rO?XwR0hCWqZ&>y+1UjE6lIB`Gy-!|oA@5GEHD&=@nnd})&#TZ9P`-%_0qWd zZS9UR99JN+RtQSt?(Mr^Fv@BRr^i?Et#AAzEaxZK+5ZT(cAtW3<^Y@`RA4Y3VK^M4 znJehJ0c%FdrDbJJpF|~4aADS)07N0677C=uWZI}ojCO{o7Y#5oeI!XxQ^VM>W)xCl zygN45Z!=)V1&$Xrl%7Kr185e|HZxzNP4ZF`e6qI6BHrqq_-kx9R8vj?QAkJ<5K>~XT$)ULQClgDQn=EE zh_dDup7HPOVE0Qv8`=6tvNrT;2f8Xtw4Omo?ouYK7d`$pgNc;VcDB@6Z;}8#kF9dF zRYC1@VAY^n3_Xm2YB)`7*CDK(gAp)$ z#8r0;pIlzKdo}{WsiFahX6`KA>}Yo0G8yquU3_P5JrU37s$RMvmTtv(nHTB&#?K@} zo0Ye*i+uJ@7pjTt&LQUe;%960Gil1!rL9Y`iPu0-KFYT%G&OK@q@-=Mvx0 z4@3bF>hsk+mhoR->*}kaU5>i?vEYc$dkk${wG&*5dCkUS?fh0i_D*10G?rX3*+1(t z@zAh>5nTCv&$Xl&!-GgRqboFrV8ZrM$qZpr0jtnmFUU#`!2{!DMuGq+ZG^|j#4J6_ zVT+sD&t*>dat{_KE5|)^`@@%!b}_s}5n5%2ZW`z&1ki|G)$(FoR?Ssb3~?Jl_MLng zbM%#r(X89sO^zO|qT0k&B0wupJV2z;!1&M;tScYKM>jDUVT<=8XFQ$LL_;55`^Fb> z_3c+MnH-`R46t|Z0?M+&$90qBLs%S0fyx{2y0<9n`%G|ad7@gRHG4Ct6&|< z5h;uID{Da43>pY%rEz?F4k-(i7Yh&*Mmt03lM~bn#&WjA$;~Ck`x50qdc}|9r;6bS z_wT%iuYT@-!E%0z2Y0XF;DSkKxtN)x-m;WnO&Cu`I5^zJOaBmg^y#|%+3C=ZQ)u& z7iONyaY%TmTu@jBWFHV1-QLz2Y3 zoA*pyC?PO<>LuW|!tE)*n3`oN?{24JKBn-QaFFr4gQINmnGIU;Q67+E5?oMs+<|WS^u~214uF@4b!(dz;ygr>L81U5{}7XlpYIsmEKUWxcDBc>Pq_1hXch1V z%Q3l;#`!mRA#JM@fPf$f^)6cW|E=gr25anTyOarMQZOWKTXUPEd49;^H{qxIwszk; zk3)WF@kdD4Nw1p}wSVR+x>j8gjc6R>yGA?W+S06k%;PX;QSrgaR-D>;#^9X3z3)!n zis7}3X^qIyx_;LF=B=w0VImoyeQ}O+a)xuA*{QCV~gkW1%wnB z3n{LRGnzRd_6ZO`Gi9g+Lk$#!6nN^x7lDQ_ zU7TVzUEt1FAE25@42MHZc1O5y;R2?!2Usj;D5_m-?MTd*#$@LZWi*8bV|OS+o3+wVLgB&vV@!63 zV6YAJTw*vlhrtji${{qXRPG@_HyYY9CnRhDMjLy8gc%s!XsD$Ejg8Xa!Sx52A1|AS+?pVNLZxeqYC~5=4ZiZm_kxje|?)Fxei1 zK)Ch(Et7Fa2rOm`D8<;?+lG`9nl-kzw@?iSxOe9+mW$e?5nV1(*A2$oV>=hXPyfBY ziqT|@x?W;7op}qAdRZH*)q0BG`TPDje%t^0-^Jd&K6`6r_xBPXr+d^|Hp@`^OlMOt8-b{;6j`LZBQ?Pz*;XM`IMj z5oBpn!^*OPCVWnT_?s&fz}F$;2yILW>+lR$!_DYHY*%v1!phhlW89 zxrQY}fI2s=M-S3o!J~#3$uhT5o!nu(-0`!;>qPX;BQ(}QaYS}e^c-vjfofg2IU6hs z0?cX8y?ErtQP$*D-GE0^@ zkC^FJn>iahH=ZkdV&8MzLGsSJmDM$B>&5mio-VGsYvfwv-%)jM*Ezc$eQz-~4xeto z9c{cO)&S$|mQS%IgT!hJgvSkWd!0fe&l)2@kdMqB1D=C-6?-M9Jxw5C{y3qiQA11~ zOm?|fJBs(HBf998fJt%2$>Wa$oL=w2LO=?EWn-L7PL~g#;lg=)Q@HRLlnqvZjs(-k zr4&f4CLX&oAQZ^arKI=|Oz}X;ug5=jXKYUAg_M$XwY78kti0IS-q+M6rN9ShsHR5Z|^?95H0{q9^LyZX{t134yR^&yC`WMN!VdfM;Y z`W!vuY{UYO9h4Yx^8grEK5bGj5{$cpkf!583J8dx@F4gT>!Oe?nx(XYEQi?L-+_in zckcA)&;UuG7!s;cVbee=Z~ykO; zuZB4H#M3CtF{UST%ubK7vp>OLJU~+`%;!tg%LXI_X44tI^ows}Yj1-6gFO_oz{kJq zBOnsEd-pDyy2fkY{1!mKxeJFVs{+ry_!M?OwTo--y@tAO+J`J;X%-oIN4p?U(poeS zAW8vQg=piNHG~uxRs+*l0_G=k+`4uP3%xLMiXGCjC?VLSi>&7j?!12oYN(*<1s>eH zg?EmR@#c;9u( zYwya9aIB^8f>1X#?%X|s+7;kN;rvHGjqm)?&tiJ_$P4ZaKxrF*(+1*X)@W3N`t+!S zzhgja)Z>w{w#pPCaT`1&N`|<1=6jJxVmC!>K}I0(AOBBb5AcCV9PPK$_uP+dM}kMEf+au7c9uPMj8!2~Z{#L-a!8(74a z6tvgEcTZ?-Qx`d3$E250Gwpdkr2&?bz;PA?7;GcZQKTFp7y$ydO`9kha#*#^$Oc{M zzHg{Tp3=xIc}ajKN`n$*^{yn{4`q64xq;qya}K?)E~jA0%1)nXk4vwAQ&dV;RZjTx z*Am9Qhr7yexj^EZjG$RVX=QP|2Vk>PC}y-XH{=VF(K5rzL!@+CX|+1S$Xz8?ReRQ` z!D*8jO%!;DV9bKut}x!CmM9YW{L7t{CUInhEnkEI7iPC{;^tr#qpZxSi#F$3baDh5 zj)0;7s7N=m74Va_Mo!4yh}x_ilWyS7uMZF5^x6yXk1X6q3J0{;{iBx~74`urGy+gM z9FJve*3}v61=ga+#|taV=AQ2k@Auqr zbk;|ax8=I@yn;eJ2KSe+HUwz#2o@PpC;XwR?jCQ3xwmA1gn*(1wYQ#kI5Of=ll$%$ z!O^R|_A~p&FGCLSW}$3(MsK zswNOh{4YQ8ALDd>A3yRV{{epg@BV9GGI0jnfu<+~N*flmS(+FPRaJtv30j$q59co( zf=ECshL8f&*%V;YA0oou!7el#7XbjMmo<)#k8I3>NTh*T?@|)#Sp%sTsI~?uM(n|NqqedGu~ede?`2s%lT~@Egy3&$(02gVbt?R+~mN z7)fD}2`CQW5F7|z9ui<>$t&?%PHbl-cD(QePK-QYA`@E(SPqCrAY_3+s9O@PR;%ak zd%OGIzSEhf-}nxDsH*%?ReO5(`y0+Z-BRkT-+AA6@7gu(s;8dkThDNbU-)Og!jJ!# z|1I$-!T{wj{tQ}IRJsCVNz#ms%^iYig3$&cMJ*%A*u7)?JyU9s&FTFcue^>?mc@KQ zB4ZGcj8ev<32_qFbL;+{dpvynh}nEr%V{!-*xKD9juNDFnjOn|!Ob`Bu*et0aYh_P zXbroUQX;9)Hb<$L6@MHpIvnPDm))$TyOmYq=6yH%jm1Yi^XBP#jUTu`o9Z!Ne@_0cpJ0|cfgR+581pi)0=>Z=>2x%>ZKqi^v=LV=-hZpMKF}5`tj+jMF7oH^b zmBxN6dQR{sfT9@|J9I+VOH!OoOb*PvX*1) &24bGwQ0#$r-RBm!-99r8qq)`^s8 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�`mdcJFnh^fJ9wZuUmu`U58gC65|4Kd?g{0zP)$UG0@Zd%qZ z(`y)r8xphoWs!H=VKhf{N&{Axfb|&m8~OAp;>z(UC`LKSqb=x%{Y$p*`yF=PSSV+V z+CQJUtZrY@Do1t4iI%lSn zPwNNFbth)VklA^!9Z?FsX7>Q_hbR+1XHzFsAUGJ&%$0`hG=4@*7HP7nZJw#}BxPlTrEBf0 zcXACKur)pQPSMQnvEkSv6G6vcKy9?13DTYMP}3|oUz5i4P87x64o^NV6`Ezc<})vm z6||E4M*DTvwa<>;_|o4yx#33U=>Pwb&kb@)ntwGjDB9NMdWU_#H}!enMlsLE8KOL3 z?^OoS)Tr6Z5d3Ru3@DSIXb_crenKN_;zrl-NO`e&y zG!+oj-~2hECM2|NuPQM#ualudg_>{M(O8{|>G#ud@$B1K+zbd2%)t9U`bm8J(@$a? z^JH$uF{6O@uG?8_F#rC{Io@;sytkPPhB41mjR688wsK|`HC)0BdOf>bi@zWsKDVT0A*`yrhE#6QQgk3Nq}4?TkmAO9KL`n`V<^c7!$ zi;sK?Kl7Kr4}Ss)zkhKKzx!~BllUzd4-awA&9~sT!uS*zXPgmo-H(AeL_q46=#~dK zIXyZvKlb0(XFBI+7iPBIW+|M+1Y*Xxk*Ef;g3nF6(pH#!?;5h!zNqv)QBArL

srm8_5R5;OuwIJD7EHC$-DZ5)8{NCKZJl~ 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 Kv~9Jv5R4xm!S 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

q=k(JW~lW*j4=D|H>G_w9H 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

o33&kIcT(Kf4oVG|Z7Y2N=ka4R%r; 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%0Ap!%nbuRe|h5T(aXlb0v^B<#~Q(ojI7m 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�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

RuC8lZrYssb3*|g4LQiN080B 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 literal 0 HcmV?d00001 diff --git a/app/static/img/Style/bc.svg b/app/static/img/Style/bc.svg new file mode 100644 index 0000000..5650709 --- /dev/null +++ b/app/static/img/Style/bc.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/Style/icon_labels.svg b/app/static/img/Style/icon_labels.svg new file mode 100644 index 0000000..3fb3743 --- /dev/null +++ b/app/static/img/Style/icon_labels.svg @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/SyntaxLogo.png b/app/static/img/SyntaxLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd524f2c4aad7db094b588236b1d9abb8cc0201 GIT binary patch literal 43551 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%0Au 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 V7k2u3Y&`-$2Q7~6%QJH&{|6O4)2sjh literal 0 HcmV?d00001 diff --git a/app/static/img/TBC.png b/app/static/img/TBC.png new file mode 100644 index 0000000000000000000000000000000000000000..6374d764f38ce3df16f062637c96ab3e6d731d21 GIT binary patch literal 1207 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

-1eFwHvBy!1NR!y~l)Y0N%j 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/linux-penguin.svg b/app/static/img/linux-penguin.svg new file mode 100644 index 0000000..5bb67f2 --- /dev/null +++ b/app/static/img/linux-penguin.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/static/img/placeholder.png b/app/static/img/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..9449ec4045fb9cefce531066d14d130078055984 GIT binary patch literal 6289 zcmeHMX;_n2+D01{+^8rb6(KAVpe&VAG;C>=se_0RAO$24!ZJcaKoTekB<%T4!Z-8%nQMN2*Zi0t@0II4=Y7w6p8L7a z{oLmyyV2MEUYkq4$5?|s~q;;$IG z!q45mD=OFHeh&RiedmWn+X-qD?89|DrH1dt#8fUEdo)+eMC_3LS; z)+tBz6oz5Qoxec-d;JGuaIL&LkoLvbE5C;k-j--+X))#}Xo#k$sdxO5m$&NXhN_R( zEq79L(8g>ZDqImci5PE5JiQLGYu6Mz+s}{0ue160wQyhEc+qK@i#B2VQEflhD=-Ue zt;g2{v?etQplPhZph7y8j3$O1)+-pQ4rFYt4be=;emM5^QV^SN`MzFBr3WEhbw`>f z7KSIXcIR6nA05)GV;s^uOALi{@?#(=pX+^rG+)<1>OfMSz)-1|Fb`R=xoGz?C!!+q zk+)ju+nMQ}!n)Iu<~u#r1<8Ov5?+x>&$ko*QC&RU#6WLgS*N&1t*V^<>j6sM$TsZiuW)l+5>-`oFel zN?H}lQW82>AT2qQys;96a~3;nkG0=}8GPt*@LW*|Z)WDHpM9A=4Uc@}L{&vzi$(fq zs8{;%T$t-CE4OiGV&wKKdp(#Rw>H;rUC-{M-v(TvOpua4*Gm97yF&Po7*wD4T(T}% z;7M+1K~e$$-WgDI!h<-?CdqpP5~fu~Bs$qlbn=C=98%V0VziWO7T7yK+E~|TIMO(w z@8k$)_tG)na2gNmB?S2%(u-3my<8R=*c68rvm%|*1?`L?-X{@{A)0vKt|)(Z z2Fk@@^G$26P&ZsOr(&}$ZU6f5k&`2~nV(jdW;6W(#%Kpf@@T~(FclEtAIPqhU06ow zpqnA-7>C;wzcAjTX_xdWy4a0j8SsRDvCrG-$4f;UcGZ53=Icwd0~@Df?c{N)TcO}< z@0Iq?5wg$wncFt>gzGxO%XO?LjBl~7yI@pi?ydnY1H8VDCF+C>prhZ`@o9Jj`{#?C z^ zg9*HJ%sI|kpM96iA65n3mx+^Y_m$Ni^i!|b|Go4c!X4M)cJnG3z(__uXwU3_R{Wt> z-N^5p^l$V?p>xv#r znuY=+$M6zppEEI3tXg_S!?5^eo66&;ZRqUo97)yv?fJQ#v1?K7p`+W}Sb#e8PFq=7 z-9&c1*0XOM{iDLGdb;6in!NXtHfmo-M~7?`*GDESa}%aua(Z7tPQH+*&yjfSf&6Qb zlwbd|8vwd%LN1*T7OddZ{k%ZjYOr{ApltPVO{6?+oxNApkO`9cG5))U#|1T}fvq;f zLB%BqydC~~@p(DIO^W@Ci&4Hzonz;El@S|X0kzF4_S^A~tOJ#%2~SaNQ~F=t8oGhs zSnNnTFuVu(hz#x9f1(sDQ!4qBry%=Yp2kCN@L92we9Uuu3}NPcT@<#t=-W42{~E$4 z7l=Y$VRvnC5oOeoD0Y^=s7lDLn~WH5hBw9V+=fP5lM~~(T{*weebS(UZ2}lU3`5?w zU`01@8Ozbr0XwNT^LYpQ8zLu0W+yKd*?6(HrRvmf!@l7-qMMuBjSMYB1idFDuPTsc z*9o_>DriYqzPaVwcuXF|nX?5i=O%(fioUer;IK+j&qzESb{h%iKK;+d`Qc7>$(K&M zDsX!)6*}aNwK76j75gF_eyKS8u(GC2o;0_28-z>B9_c%UEA-q` z+|C8F5Q~5yt<3cs>J^l-@I%*_ZSW}`MxYFccYNNvhT$^^T@%^_u{B6 zNg1jG`Y4M_%Kg_iHBN3~qX`{A;CQs(M0E4o=fN2@xAQ-cjdWyBcyKIu8wWj2B8^BW zJt(%^gvLwlGOyhX$}gKJqc2!Vd&q_=1bbbS6n4?)IWHSVYXTzvQn@R_IX5TRltOl~ zo6A8fgDUt8GCLHAFP?bJpx!y+J=9#5efY!^D=h@BNNPznGwb1MX=1Ay)NS6m6GK5N z%(ym5D?f@w3`B!O!_zf_gz2Td@G5?mOo8rL*G5@@e0G-bQ04KtCR0m_Drxtjecvnf zQ=N!cZ6GO*#J?mT21RhE*p(Q15RNJ=x^R#Wa0R>?HS-#nhadXEcWSS~SEk$IWme2R zLFOIsvAY4yCj z2r9AvE<>TxrbZ*jDvV75>dU|ZGK=4^lG@>$Zh@9zi}30i_w;unk42&vZCI;qG>*`poKgk<1v@S_mXeLx%a2iqoi^`02=rR@KtapePH1 zg?|h3S(5+n8~X_sIQcA2qP_>Y104i=)qmH}w7-9H-&$=m+P$@OVScPhuy0McdW3mc z@0lF#S)fFMD07z5!Ed~AlS`{2-l}fQQF%n5oCw3#Y#ieb(lxKMNoK+H%wrWwDwh>i zdQ1t~>(wKR=)~H?T}f+8VXeE3b>;H`qGC%eX9zc6;&BEsAX-GtQjFGWHG7rynUDgrpb& z?{}71d#U@fhGmp!x+jO;U4s6i)bHcR&2@PLbK_s!Ua`Ed9a`{lD5f=^T`jUtFw)9 zxf_0SigFBPiZwSg6Utq<>O!g>f6o{YC2gbo;m#32&T#8Wes>J5#*K+6!|`~t+Vb(P z@0aN)^^4LoaCp9L(#i{y({qK=6Le#yr0=nlfHyOEymaHUU!GwWcI@4z+NO7IF{an; zwlQhBCn55tKhd1^t5irg6D1azWR#$Tj>jZmD>w}N+AIudrGPcvm7;>|a+_jS`qlxh zi*p^99neKx(=I-aR1u*C|41c`WW z38>_IJ)#Kqpo-^jVB^wl>mt0>kv?W6m%A2XSPKhFocR3WwP)3L8RE=uH@If_um;3J zkZ-rNYTwoLk=l8s-daq6OKy%}!N!TmPu~_KSOyGL!ENlk=*oy8730$bm?y$G$*(X@ zCLykqSr~7L5PkObnP^{X(Eth4X?3v>+NaoGzd08u{d5o&A(_fRRE-`LhF}9j1`JM` zri{OqR77XzK7L6N7&dgG@zPDnYKvSBQYeyZM@ek1xPoJ!>WX0Ju+Dm;tP)eYK{37w8Qhq%@ZH?17#(AnwW6Lbn1i;2VF$$pm<^ROksUt%l%bKHt=e;1|_86>6u=2 z%#phnWF*c&V2c+w>Ym1mPzN#q({m2 zVw1*&MQK^=N^6m6v|iJE(9arZ?$Zihjhd6+s*UOt*dY<#dPmnHs|<${v$N2_$IC_{ z6CC~1r;nYM?ch8+6U|#f#!vde%m1!3^pJjfY`R9}Rd7aBLhabJLHeRhLYuVKs zRHoW*+0@N%{(3o}`F0;BHd|23%Z`#udWt4?wu)x}SQ9qRTjsOss>q5lg`>G`GNpcN z)tGhGJ?*H|cWUrutFj`AhBmjR)~!0ArC@?|O8$WySF`2 zuK7)w5=|PzA6m2DO}-BqrOK?qsdSP2N&>1!jIh*X|n5X}nF(Jz0t@5J!m0Z$G|8SwNkUSB`|vkF1G zI*WMNDB*E7d)dz`BSH4&mG{m8SS^E0Z>mWV<*fnRm0F^Wj#mHGB|`G|H+NQB)c48Y zyGAmbp$8RuOH8WSS^Fv@UPqY1EI{SgMR6Jhn+boqL=1^QS2n|v`}QZ-fD8P_;V-|D zmAl11Kej!*78@H|Pj(h_tl|rsX*q0eV%}5WP#|F=Oj~Ig%;`i!#F)>zN%gs|!MBHj z>BQLBrvA8^=8?Qzbzg)>pIm4T^89$*JH|7R*$BJ9qKbq%FJ*AJdZk+?xE*QjJ|}zlU#EdZ3wpe{Fgc zPQtDUt1v$d=#>{a-J};G%=KoB9yrLA0 zL!)lTohVJZX9&}_0pf9M!C9&Q2T*Y_NS}?Ldc7`%gj~Dn)_OB(;8I<@YAHXYwwPPd zSyvexUGo8*bUzDvVz>M#!)41Oq$Bu~8>MX{a`HpsQcWtf1uwde> zESRg5%GL*V0FM7vq!!N#4E?&QQ)CFRBAj0&TUL|*rWG^!`=-gxV5nD zebVM>`HV?uXkcLR={EA_PnJ^!HW}E?iVg=t{ff)Qd76=;TCp+WuRTMqN$X6KiXqU9|hfZdPUmOkX{wS-XYfn85@teQ=1sLn7 zuprrOFnMVvQ=P>Z-l>77MtGg_>7L~NzA)q{nqvHu4Z zy}VbV-G*fSF10_ow1t~TGbEdK&i|Z14tV5qy}UCrheJr2JK(V}*e20d%T|@~G4BI(wDyKXXfHWdHyG literal 0 HcmV?d00001 diff --git a/app/static/img/revsim.ico b/app/static/img/revsim.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c76999b80368600196d23de96190ad923abe1ac GIT binary patch literal 4158 zcmd6pZA_JA7{|}yEua@L(?djf1SBazGZ8BTQWLVo)~V?hX>F~>2XgYEkIk&rm)6VF zzNEF8p=0)DjhQdYw<6s%EiiB>M>I`h=rU0hxcmPY7kfNAzO_F1xS!{F?&rF%|Mm9V z!{_ts->9HZ{|9|zQ+>XXKA&%_7$r&t>s*Ud27Yej|NIIrk{GQ)tcN(=N5gDvPoyuN zqg`fa`|yMRc#$A(5{V*7Bu9aD-eZS7``C{ke42mVUUJ#G<>%GJA6hqyTg7dH4timY zcee;^Erx5+M>|rN_{jx-_|`P}hKoDI2*GFp_pI>_8*JIbUVM1Rau#JanN=Ux?AGJ50~ygpmuF}Zv5^Yi!S<>l>4OH146_xr14k3Kb`{`4PT)RDO( zzesIrktpcR?Sgoz8~vR)EH(9=MT=_szg_>G3q2h=qqTP@O)6~OwspH}Z9U`~8X8<# zS=l+QFA?;D`qTfQNE7(PH~CRxyZpK_ZE8c0=yQ%B{wd0L#TVD zuKRw&Mz?+24wsdc)lybgej*%hcYho^?y9P)&L$-#t(M)3;#u)Hdjx%_?wkkYLtab{{zkbK|oo?ldPh4hZ=9${sHGPL#+uVW$FI-GaOstp9YvN@wPdq7# z1#uHUd5{lzk>BO=j?|`a(+UeG|FG-l-LAfVgIl_EnLBa(Pq%h$ovW;TzBd#KbFuuZvXz@TubvocO-n&o$5O6 zy1Guej*bpj`+2Pk27?=9Um^GwuUFgKZ@w?iuIc4v<$De^HOv1RS5#EgR$N@%SovJ# znZt+LT+jInuD7?>H8wW7f`WpbvL|n5oxRsm^ElZt2h788VRK%f`)PCLJoW3rmR7fH z>GJ+SAZ<%ZO3JFDqAACke{UJk?(6Myb#-+v5D2W4J#+q$7%y_f)n*NCzCFG{@AsXj z^P*(#+<6C>E#__c@{jsge7v&%>#x3Xoqu(?^XGb8cXzj|sj2x}=gq6y&zy1gayD>A za8_LD`)2kyb2xjL3H#1+V&h^9OG`^PEm`vBh0j*4?%%w5i`%zvzxv&-K6kpa|D1JA zO-)XH*sXo#Vu~PVdd7@1XPj$xrbnJ@XxleV-HDU)h(9@VRpUnkX@OTX%WqE@KVg-0 zHdV~7_+|e5`G*%STzFEy9T^!JZ^(ACh<2VcN6a|+MQZbGbtgV@=RBZZLBScp8Hr!& z`LLKC6BF}9e0;()I$J_bd%F16-w0P1Ktlb>JM#XX?SJL-b1SD*SbuR)P5r~^6%ab*e45&OFVU24q? zF~{VLhF4pU1JBfgci3QS`qZEPQ$J$BH*qjW2KA*s{7px#s2Ta9OC8CFywHfI&6-yq zd-lPF_R*F)M~efF>yAH+`__ysgf$JQ**NKMN(ny%aoUA#BgV|}nVh~;u%W7uBv ybv0dWz2x%l`>*$xIJ^-aoOAuB)yJ^ds@i&4tmpp&^BI;uk#Jt~>3qJ|(f${t1aSHQ literal 0 HcmV?d00001 diff --git a/app/static/img/revsim.png b/app/static/img/revsim.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe882a1eefad842c196a5d01d26588109fd7cff GIT binary patch literal 224138 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�J_0zKbmq_0)xqZF5{IQ2#3k9UYl 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 literal 0 HcmV?d00001 diff --git a/app/static/img/syntax.ico b/app/static/img/syntax.ico new file mode 100644 index 0000000000000000000000000000000000000000..ef302ba26a703132fa395deec5372a6f2923d97e GIT binary patch literal 117136 zcmeFZbx@q&lQ%jz!3i2%g9UeYcL){;5(pMtf-?goSa1yF(2?Pd^X{5(FJ`|3ZS$K^PPu5L@s! z4EAsDSuv3yk>E2KnSXyT2Z4OiK!Wh_{M-9dW(Z_H4*Zht-`^8}-_{{P2*AJh*Rw~3 zKv;W`AW=G6%D7k*Sm4sQswxV4_y2n@nD@6f^C$)Pl;2fVkbUaA_$SB5_vu^)LR#NI zscl^GVG@tyhftYrV#*k7E|IvLgZi9#_YJ13*xCin?2{!Yp)5!7-oeKU0^%<>a~=Dc zVO>uhm}DsE#om{RqsW!!bB!Lxmxsv46a^ffPTWew(-eu9Ecdh?N?rtv`Qh9DuU`t- z%{sy|J%_)D>Z^*S%vgl{_JdQ7)5*xza0@yRAPx5q})!xwsKpXFbGzf()3WNN=Q* zW1mUy`n2`e4?_3(`1y(S_4GVmym;|hsgQTrlE-GxtC@*TwPcEU*Q*(o4xQ(hml(e# zsuIf{6*{^Zmyz^$Y%i1?uJrPrEsq>(T3T0HYHCT(8@Ri&w)QwVk5uA#R@iq;c>xT9 zU|)*X;K}%|%~f@2|F)I)S>W~leIwoD$HfX&b7XsGSI9Y9Mjxhj^}@by)2|f`Z;7E( zc{G_}Jm;EQ$stl$C_7hV|s4}S)$IP{D!=aiH~=!UvSbAh#+_fZff?J^42Cy7{xYukk~>;$E~9G zg^3Gah9Nml_$#^PBghnT>jNh$YU<_5>1hG-J@iph@FS|$M{SP=e_6xcgV&qT(9r!S zq{E|+lXv}dw9?7c8mmdJ*>LA z`Y`i7bWW$Aw@9~(dw+j_Nq+gg3b3KOF3AyLI>|rQ2{BSMk+sh%J}xXQ&_+i^H7S-% z^@cZB>wZ&Q^IrROb#>*O@1ns}APQMMqS_0fXh(}29~xrMN@Guiar{BhXTymrVk~Td(EqZx*NgEd%+a?b#{I(_^jH&43$HcTWB{em6 zw!y(~rcb{0_Y=|5YMYr+Jx+emW*$Fi({0JaBP4|0IX}>S|W;<62f9LwkLm~Q7my}Z0U?}Y2L z+?>j&90#9Ip7NmZZESD98gh{g2>2R z_h^Fze$CJCB22(yfQ%xU#qOM%QxRzg(S0f{{nZC-3p%rZ#&%csxwtsI<-lJUoAk-i zRnzdt;NDlP3esD6mRF~h?qn?&zqe@-zR5w?=e%NKV*0ykq8NeA`T6ULP%NT|= zeXdFrCoD*VGJ1Y~mtj#+QMBjE%#V|!KB`x3Rkj=yeEH%w5Ti69>i6>U5&WWWI zu5p+$#le9G`5!B;({h^ z!&{bg z(Ltm|CBYtgdU`82mw!8)1t{JHReY$cOSwL1$(x*VU;5V8KD}p|Zfz*3#PU!l1R; z8ruK)@;!4jV&sC3yKR_RG*oysFnP{AAho?+$~(wMP_uIx7ZRyEkaFIHL4(R zq7**-XefX?;Of-KXJ!lAZajDEawo4aKVQ}a>T5?1e<3g5gMXuI+(`K4W4Tpa$s%+R zuCK4ZGnyrQsM=D;hfDdPHz7;%(+kTnQTEuyBT+^mA$Vpp}E2t%FZuJ|XPbop6eW0Bbw zqPS5)C5ZZ51t|E-%F2R2zxK9JQbM=5J24s!F5$g$iW@ZICNU z5t|2*yiEP^X@9S7a8UL0vwDiKuFib<2y$B5bkju}K3ITBLa=eEYTh$nfPjF1a2 zizkx|c>;75pFjU*R8>`_)zx3yn<@8$ug4QomP?FSC`eqU&XOqfuBIn;M-j2WC*pIv zcfHtm+Xw3)>R>B`2eL6ukE9X8b^0&-sEXl#z9t-X|dKTzKl;56^v3+ zxwqFBpMsdb=ZSi5UpVrGW7n>ebV{Da%ln^{P~wEg?CtI4l@i|0R!MzQU!oK$|Y=cY>-daom`>RvaYb$i)3PETdN`%; zul)Ej*QoIV3-W^lMwz~uV#&GMM z>L@DuDOEU8`io~QCI+Yd=xu*wl&)WaQKS(3gFv2Ruf=ZC+M^_NxzjA$lrO=z(!RH6 zbHpqBka0l)fzL+CyxEb47;8-vEHqz=N=nF>n3!6%Rq26`$2A_bDjH}=D=o}jr zaiHoPr$0X+HUhTW>p3o2vS!QWjtVCeeAE+bPlCjP0sr!IYfG}=^nK;M4{P$=DRWV% zW4{~FJnYAnno1YfhnhWi0Xc)V)a9GZTO_-XrGl5zG6G_-LHFAyAVaC=<>lo_C9Vm) z^f+kT#G8r5bXMVRdSsiofe#XqK71$~MNHhF;^(ceyu7@Obs9#py*DJc`eqX(*d%Pe zgM)(-H%I-`4V^o??U+V4x|ZM74rcMAr8~i3he4QPY%tWm1FmJg3fKzAL@|=nKA1c z0%DMH{eVs2r)hNbIyZXXnS6C>YF=biIi~e#YV@s+&&{Rr4+wZfL-WGMCZ)QX*Gr5V zc$?rGTMOXGF)js&ZL$Jl$Gt`3+v*s za4D^rpEq8egl<)8FYuce9mk zsoB|72B{GWr#%7fV`Ey+O#jr?*SoKEB2nS3YPVC+(v}o%f;@a@zQJ{sByVeLOaIw3 zIR^((W@cuhsp9oQI6gl9-`hi|#ppAH?wU*1Xt5ekBx=DZ5_uw(jMMAa=Yh$Cbt*2l z@0dec4uc!YqJxBkSO1=!pVzz`UUFJ(m;8?L%DnfJK8vXL9@GAu`u>a0h8$a4*rjD< zAf#;!`96>}yg|A+pPsoq`J8Rhd$jHc2ij8@L3w2Z! z`j9(b(v_5VVQk zi*SWrQ&I}M=y*~htZNr?F;y|p6Ybq0M%ml11SmM&-Q8;nJ)b>!P_}&|{|SC^c6M?y z%w6risT3aGEzCN)wno?Db7*^Uu>7sBPuIYpx6Gitw9@J6mt^Y)u$9dJ>Qp9Sx> zTJnmB$jHk};^LkeR~Ul)#owiI9X%;Id26}x^YCPEt=;&^CM`lm^F#dWHJYqZ(suKi zcm;I@I?2iJz@rU~k0TlRyezqy5Z?C|o54bk2mK_&iZ{ez)Lc&Mxe!Ir>6RU!TN)JleWNd@OG#iiKupzPd2@ck_3C9-huD*Y>V( z-2G3VOh%S{R!4s{p{2V9mT_g+K3@0fxaKTiEpr&N7Rst%o(_7bQP73d`4Z`SHprC~ zN~Q*B#;cyU80sqK>)edziVx4Vp9_xVi0|jEV9EFO_1QbsRlhPK5)^#rw|c#z?NWKc z|EzewU;1`e`}cgcye3hwC0JH0Z)wyldpAff@&{3R`g|>yJ`h2^xUI`w3ci&&K0G*B z-?u>cKc(zo+1%U|5EKOad;~0|?_A44^9%8FuY%Re=PmH5yt~rk#m8&d`Rx}v1e|zl zlN>NGeFovpq0|#$%y6}1L@#%6+|=&1TrOK9tgfvd<(INQ294t0lyMQ7frCnfl?}nS z!{LDeOiCdq%j@$$KR~$oZ0f`EIC;U88)?l=1b$Wp{a9Q!)%jc~i?hJ``V%t+6)ZRE z5eyvao`91%lkjH!+>kg9D^s-eeRgPBd%5*y>7B~){#Rt@POG)jQQPD;w-1$-W0)gI zSRs0r^g0ioC@p$FB0xt+hXZRF*dERDJL-zpd;a{-@$Sos!{h!Ab#3kV$qkIew9Bs; zWw+~EMdA=@8b(-5OpIgGBM_nua<)qFw)&tO-yY-!9GF;etYF>Xz*|Ob^_{45H6-Y@ zHEx_o^CNk8#&$lJiKP`kc(^m3w=>8>TLKbh5FQZGbD<@9cY=1~W&Vm+K3Su) z6p`mjScwOawG+%va!N{$>$ky!NzY7n7Z-iU16GC?>tFfpek7}2aB__HpR}#LW%_IuS{XsoKS;O%5_Wsz} z))^*K*|GQQ@Nnm%13?XTAeC5=<4`*xT(9(sH9ImqQbw%Pl81Z*Jxuo8iWa!UDVC#m z8&yv_mK<(w535Q)ow3L~XN`sOfy=^1ZLisrT-@-FzDf@pIozyv&2G;d$KKm%ciArv$7F-i047Mw8Tmoe5Aio{{+jF99(Cez7=XB9{eG143G!{u_7 zlmm2zKDZ=MY`>Gx5=&w+QJ(BGD1l1*%i0BVoU@<^O0bHS-ALrIN_o^WD#QrYOFSx( z4@GbCl&+}0j@pX5fcwd1s@*8V%KQdxYlE1lFDT;f7bYI!<=VF9UeLX$2)`;Y{QRgUgTlce8bJri-ue$DaQ!O4jV$c?Kd;Rp6e1S+ko zlamD1-t_}J;G`0gl9FH}Y?|+SLnm07aqBmvGjemynVA)D^((5YkL|6kH!C`o6N`^h zj_QG@Di!NxAy5cIaqI2xA1Bt|dkD_!xh6A4Wsea!TGloS6Q>rw3J_f6*w|QYl$lOS zzFLW;`FXfSzKahN!64pR5(#j(CfG2TIyP*YYo;xG4(fihOpX&h`!XYyDb9<6l2Thx zNN5E;kVX}f!^d`%q0=C&7ioh5A=-C7^Kbh-AC4YI?-c*X(3i$4yo@r^4g4ZcA(Jog zfm{DA1rh~}8+n+LlCp5)*MTL$u6hWPnOKe%i*U7h6^mCi;*?b)Rps?svV9?_wxIb+ z%Q!p#k&tn6a{7($-NKNlLW=~mNvknR{Desq^obP8ez)@8C8~yubY^yT2rrnTLId+{ z=5aaGBsC1%EjB)WI4-fmF+M0k>j1oA;pWy>#kDX9=BJ=YkHW%O^JuaWhfV0dRUZrD z3GTf#(|Pu+xF~Ju)vH&BhO<1lvBSW6Amp@ERIPNv$Gz_yh4L;fjxW->(4HC^vRCZw z)YsQMZU$IjNvi{2C0+!(R?AAnMB`pA&Be=H&2e5Lx)2U}zn8n2pc)%~qI}Y=7<+SbGb66YcEm>|@r^&%EMMUKnd%CwbF{ znFB092_R=G?U%X=cWP4=oP&{3e#U)^NCJzhqM{7P>sP~-T^5Skq*8YX2wpV}L0=p4GV(>XaCJDY zG~Z6x|MbkeZcxoiC$7bs*9F6G0E04V@zAk$Ea*jwiI0sPjAPj3+|yzuMr544w6ptL z9Ut_AHpq+RyD|8-KUik(J60V=v4pm$$1xK~V()tSz?l=l?ZJnGgX1>${IETcULm?8 z`?RUa@BOIlGt*m-&>6wbuu!@m?3mqXvIKZ_4a#0BvbeNS=opX>`+Iv7b zFfcHhc8jy3;^U2|2?s2q5jZ9gR!&ZOF0Qn+G*al95!VsYS{|yb3IXc6Wk5j7*W6&z zhk|&J@1_;AsbV>m##-T*e|M7e(rG<yEWD{TRfD3aPv{2osx;GNwR z(P3hv%8D$ltOQS5ynXdXdSU|t@e&mk^#t4Evw?t8p~Hsn(RYqJK6Vrtg6%I}4%F8d zhb86Z!>-g3#AZbgeL>C62RoF93$wfW{QTU6$lLzwLrpx`$cRSUg#FEz?7Ezs9lyDj z6+uE;8L1GRn<^D4`HeSkP+c0Wa0?3y9mo5!qNtcAj`GlCS&32eYunmxpVF~UVoHKk z)(d#1KsB`?y97e6SH8aQPfk2)YPT@fF^e{!-btUP_Rsv;IoLmym2Iqb$)BDNJwvNV zA-Ck6EM23KC3t}*D>A*ZB1I56Bp@d*APTv!m!l@U%d)7lQp<3mOXucg zNuEkpZtj?-@Nx_=iX5M~Pw%|x;+@tEL6sU=mSD``nXDIq0Z^_<#jF|lxjKeOz&VxA z4|fdop3`Llja~~a|8Zjfwm5L=Fsw2kg~LTkv~u)l{>n(XRIGJH=^};FQBBl^4lplL zK}<|cg3!a(2}K>0mBKT`eYh?!^=UcC&3Y}ukF}38?~`$FZ$S>DN*gDq7~t?xCkbH! z?8XrS>;puo`GrAO%xM%>D$}Bnk|{qef;ZPlCM;+mGFRJ<#;!=?)NLFlE3Hw3LT7=Z zpc!=e?8B7%_QrP<(8GPyR;rZenN_^RT6f02dg?GgtdfdKL||_ z%_m_MJJeuoRQQN8FgUmi)&+l9Q(8b^q#jh(E<=ZWgYOrfD>CRxgZ_L!Bf-Ib==0OjvCrey(ik`dZ`95L#dmzT=smnPPI$-;h+B}Ji+Jvk5`5p4Lc>!UR9WBi#?mjk zDAR8g3BC~lmEMVt%o2&^9Bg_VPVIW}L4%K(IW3<(?ZazLG0|O^;<&3BPSdTN zuxH}tj-M%a1$l7X`}gFFOXH~i?1UdM;dGM>g~YN1abFu6Fl=IL`(75DlXQ+IF{_(f zZqTWU0-N|dtuM_W^g5HMKkUm0ndokinz;AXpw>%!`-JB$nfJvMQUBA@AC;%6NR~uL zQ^m!_9T?@43rbJpArMsAdHg`)3>JEP92_1A2@UTvhQkN88OJE(vFM;)Y*K5B`;K%5 zWTFnP_;59OA|BetIRIh+=i&?I8Cg*3taQStdk9%vS{lFKgv3-OLGU9hP*)rn7-&2J zDe1A%i|;kB`t3IJvV{Z%Q}@aoUD_{6Yiesnq3u1Z)el+|k$&I=$`QPI0xtNjfc08L zB=%F(l@SEi`;Ke}*;yv(hXjB=B<|ouOe`$wWM;Vtg|8djRT`HL_|#$pX`HULo;zCT z=%FVt8i+Z1d&jG}%5BT1hUEnK}K%&G^+YON5 z&@U*y+>=(BH3W)@>+4o!?B$`QaP8!$`5WBA6&*?sY-=+>iOl`4rm()D`4~7jQBzZg zOk!d0&*7hMq7Ki``O|wQ%+LnN z`zeDM`?|;oY2iW|SX@vL3UF=dcIXnA(=Ia1a^^C`&?X}ik?8mDjn&lEn_m8@ARf(9 z2B03m@nT{xgDiCDCx_&6=rF|7TkKXc)gE;g((oYki!5<37nGD{ zcSH>XLKnTEB}TI7SGfOBXvXNHhsF7H!ql^q~bv6b1`X2 zySZt~K9tb5E3s%`9Y>-eK<%QBE?6Bie&=OdfdU~wwc^*qEcar*1W@mMwKWF7zD77% z-#1bqMR&w-=vx@RxS6WcFZp}7jta_TqTN)6740E!u{j#&=lYvG?HEOy-NFO5jU-E8t}Mo?Z}_eS$YIc`&O7gqq@#v^pu>z%(3SZ0 z$|`Z_v(LX)14McBR&C9@Lgo0HfCd3g`)Xq@=-OZOyaA&d?iuOi?RHRfZ z!=heCbYxs+2^stBdmz=QVU2bztOU2jf67nc1|?I~mR)il9-n_N z%@rHcwRSnyACM@zcVvzv!nPqcbkQ%WW*mdi9qK<67$dLT!|+)`&LGbW17q`B(5EAu zoQGO{fREpZ@&8q!2SGKnSKZ#x(Z0G|`-689_W-bBne zO2!bI@{G;#fix0a@WpC-P*HKQ`6D+40EaQZ=kj~;g5h2I6RYuD$&Oyrt>wS?A z3QUp#uggWRd2k1a6p!Q8_`}5k9|El7bD}C#F-uWBH?_Roy}g3`{E#!sS~)4_uuPxE{$L5;_Q|Dh3kx zVhv!~NY0t@=PkK*uQ7{P#SV5xFxBx5(-68D*^6nZ|2iPJbAt)I0jqZ#X_%sZ> z^j*XBkEK}ea>I$A_F7zet&$Yvjofi?aDb^#eRMjMNu6=Ll`o=IEEa`97^7dTenT!; zrEl{<8zD4%h}+<5y)%}BgOAT|7YAGT{ZWiLy5pKmv>@+?Hi_27Cxe@##CjeXKO(TI;JQ+550B=fC)$w`$X?jlsuMoIK$->GECH{3+}z;L9% za84Bz3g|!JkYJ<_d~9e)2Z@$Rhm~XjYtsAo0xz?X>DJ^gGjvPf!=D&H!t1jl8m@oW zgdz%@;2}6*Ja-9q17sMhxSn+aYP^0*@bM0eXn?u1U>yM3zSn<7e=p9w>9S`M7sp86 z9pc2hqaMOoG%?H2iR)2O*RrCj#X&S7Z@A^rn(H z!2J<)p_&SSvZhFm)>r2xHT}X^INTT23eUeS-ItXR_~I0Le*Sj=&|)>A_U&GGQ<#1f z1_q8SM^EwE$7jmEw%U82w6DKELtL1)&|QutlCBrp9H3~zjv)r6lMY=oA?p~;S@bMJS=GsW^uk=WMyY(5EWh6)L#{XvjVqj zd$W>NJhdwlv_}l;3`tqHZcMw7OqBPE8V_+z6S_06B?BLIUdG{lZM_w;E-VBDu!6aO z&+IrG=(LwAk6J}ztB-jpD4jj9DPD_EjbHr;k(FD*5g0b9v!9S#W9(E8Ns*b>)iE9@ zj1Nv5(b#1bP?U!%Y6pX@^l5PhMApK*%eo)k%^}m00q3PuP*gH!RGwjA#CE{Yq#u7} zImEy^nhIfY0pqxl1~Y*BXGS4$}sa*@NhY z1nXHR2P1k7Y~K@*2p;TGeM7!sqQJw)o%pVUFJoeIDZmz_a}&gKmvKTZ;S14CX`6<= z>sgPCL{SvP_~1^07qR)KXWe%YxJ*)V87%LE^k0e?=ZALo_L0%iSloHxCC4b)qCuHq z7%wsKmiOI67&eUEN0IC`qI%YUd5ciFg0p2Fq$K20rnzd1Mk+A!_}G1Dn9SGgOtDix zRZ+M7AlHR?I5Y<@f{|g2aGDC%7b8LyM;OsFk&>MJSKpF*as?%il#E*B3vD@FLVCKg z2-}@LuY|;BCZ$d=Ie04fEzy%3kJ68QzdwMQU~5y;<<|E0Hr5(SC!xjA^&i*Zp3A?~ z>D;IevC^y-j0uT}pP2kYxNje70QKZYgRhc>pmmZVDI%RMp8~}7FXDFLV@Hqdab7ea z4h{!U+deLDZWg19=z>#%X_Xd(n>2!(w5U{}mf?;3XmF*?TJh)jtsw1snVhVjVl!Zv zB=Qsx2z%@@v$Cj1M@KJ^4^hNYwxIwndRbY2F^*2VrP2g|)fAgaFx%e+;9@T=nI~gH zoB)-{KGXeE#UifMikeR1FdC_PXi|)W+QSGeaBFxf7;IQ4JF!?u!%EU4EpE){js^xZ z6%J&QgkSQpvLH=<*sLl|A@%*ok3c6cuT#|iC zO{Ji|{>+CfUH$xOAuIwIX>wUv*of0>NN!&qtd2ye9#HhIz}^Bx z+Y3!g!6a)|WE#j<10y3S=QM6S6UZy_(z4FKcgfR0-x?lYgwL&&=o1l^JK2?^e5b#~ z$VkY&8kF%jG@RY|_U#)26m2f2eqN6QqK;j8c{!up7Oo%&&est?>iV^*^5C4OK!G>b zo11D_lm>GrYka2EFq%R5X5#c>3RwGs?Cfj=2-bsqCs0fW0Ud%p$_Lh7uu5=TTiWvQ z9vtKm5K(b;9pA#H2gfX4F?MkY5!h$C(0p4VF-XH2S%l5aARwiAAN*)qo!mcD6KYIB z!UZ}x#5%)$%XXlfCR>RD*^QB-`x)IKtfWkWc0F?+tc322i!SbL=p62DF7pJ)asC>l zq@&%`1BLE`A4fB7u=Y#VzL42-UFcb#n3(t?5De==G9e84amuPn#crF7;wGK=qrieM zLBMsT75`grZ`)FT4FYA}53Ui6;xD7K+wUz{1nIBc>ols{r1YX2XcY)?$O}-kU0q%S;^1Ho=&#Am0#{1 zxdXuTtU|9HY?L0}Cc%E*J4c|qs?F8QMdCFUFzPIzevUxSCvwLEcgAhzv?X)(J0C42k zXE}lOT&pOw4L}p#Vf56J;OE!xdO>Nia-B+vSX*0r8RB8<52)(npBzlSM7_pXyL_nu zAVXqO(qJ_}TW>bwLWUDwpq-Z~>a9I^FO zGc)@k)`T{~k;%en;6{uX%$6*-SAc3b?}uvE0Y;KVpA8)wH@9nS?~5jB1?Mtk^9rzk zs>;f+iczr8ldr`IRR)HK1LCzxlG`{c8;iWciM#Y~SUj)l3YJF$X1?;wD-@y}J-t~j zu+V$6gzAH_F^}dExMZ0G;;9}khbn= zkf7ibxFf!5wKbG_=d|-;O>xc5z+lGu{tjOoIz20;)1nMgWz^*4=IDb9%Zq}~A7x9xzM6uU3(fl4Igt7JqJL7#`9zqmwEeq?uK(9)!-wSK|b8CW> zb3$2q*iQP|+DD(NmJe@K zK{-PmaKk!2&+U_-O^lC@7M7JcMr((GkX&4$Il*yz4sazmI3h_=;kQXzNWgK_5?ntd zrMtTu9}wXJjUBB1Za?qYk-8A|YA!DfYceCCr5y)c>O_E>fCGt*Qk{VU=@)c(I@n7~ zo*o{0piIG)4e|qtE?kpsA>Z+rZPjKgiW#Uy;JBLxjQcLY!{dY{1?PHM0{&gOL_|i%YSss!}<5&;cD>duZed=6`42GMkhIQewRyA zN0PCKNn~0&P%&Ht?h`OJ{<7z2mF&^QoSdLNG11%KO8(AvmkWpd zAUy(YCZjUR!&{C3SYBG1nei@dYYQSc)UqnO^F)X*{K7TE%Y1=8B9_A?1XvFYyu9w- zpc!Knw6T#z7+s&4iK~}0A4;0 zIt)Nljh}y8yT&L1lwIm>fTi)Ec`&o2Y62EWb}Ml?p)YMSSNXVU5HT@1Su<;KON7I4 zNn%;^D;dfXq}oaMFRQpcfpf4_Y*yFJoBQ9MnXb`q+!>_P^Jge@=}k$~ApzX@gM z-G@0}T^=d7{)xrH?_I6^3`jt!Nk&a=oSdAir=C7&*(#n8m;52mSSYAoI#$zRuFmdy zsTHUuWM_}ubG<-7sk(C;a!pcqf0jI`04n+ofV+6pY3<+TQxk1@87&OOxWMx+= z*|b2Mtqu$xx69~M{wh(RQz*Hw2YG|0fuDoPP75bOSu2YJ06>wSE0m?<;CQDEz2YY( zCDB~g2DLHuUR7o`fnXg!3IEclA`{5C&dQ)lNmVi6o(Ii1303Jmn{T_gBl1}dx|pG5 z<+Vq1;Kp@k;pC#Ap(+08hi}^8(&f^?FCs$TN`uP-TslBbGA>##g3K+dZ%8MHE$}Qi zq<81V505M?l7q?~b&dfS7AYafuBQY^);?C1TUH4Mzv`PEcx#mZKCR$3ZV6ntBL z5dGYmm`I6h5DDv%CKUh2J6l`JpOuce+1WRGXwTcljAJ*r#VfRgt*_vXzW1hfvc*A8 zP5pAUUFiJl*BT#Jj{bPs{;gyQ8sCjgP5@v;?;BO5S;5yo!dr&L{7+dqM@QB8EFgD# z>9%iRZa$FY_#-vsq^ZeCHNYQ4C^}dgC0H@QL-R2am^y-yv1fSCvLi5~SlIr|;Ug+= zN6hMuCN+(Q&wBa!Mvgc8MFW5F98yX5eM&AN=mp(!$Sqic;^J8w8xNz^quJQl6u)3u zQTAJ?dP1IMW{J94b|n1>QaC!I?OsCCz!R~W*gsPRoM%ME)NV}*Uc_Ms0%?2f%wyZ` zgF=V8PkxqE1X-j_JnNrPep=*fks6wZ&}GIlJYb z=Ju-x^&M(U#L%u)K`;3MqNJwQh$*qVs)UvY zR+h_>ikuU)41lxnd7B!xab0Qn^&wQoD%Hs1Bw_=aDyw~+W0>?>@9I&EM#+>F-y`0P zn3~Dq*1wQ#?CcGEw~cS^D}jG;Kfb+LbZOv-CL)b{Q;Xu}>Oh^tZ>RN4POjTp4LgDK zL*Qb-I=$gdDmh|g)&H`uitBd9FNH8ST3ThFC-{6SPwVoT0NS#O)enYTxA+Glcro{t z=!m*)3n9=FanpggpgmZ2HF}61-QkpCkBarq@a0qXh`aStI7%zL`>$HTZKGeeOT)Wh z2ffG#J{W7reW(7ndLJLr`u!wCl|6d)qLUa(G8HscY&37^r?h=?k~JbB)p}9R=mvP` zORlcAw^vYB&Mms5#*R#4$L?h$*y(CoiNF*#cdLxDa=!sH+SB8_U7`+(j{UMz{!ObJ zwQ!-D#m%Zfqt`NY#8BAz`Rm-Eb9_fN|8Fi0${OGDG9pm{i$-K^1-SCdA)|KC(voiH z5LyoBa3?l`?jiD9@%yUkB&{mpK3-l&aG#FRwNBV%Qf~dyA3~D9u8$dBh`YUh{q<3! zwnKYJ2+~*ARV6JgJkM=k(@YALUZ~zA0XRZT4$H^(yg#TU-aeU|f+ihboS&cMxI+K# zO{|Y(qaC=3)EH8#~1RsM+P^_%F35BRl%yBe`y5Y1`WG3AV#=HvG^JKkVJCE+JFE4Esf&C(2J}C zRAF~tiUFYA{URS{yrAd)72R=P%KAHE+Y1Hc8o(>f%n^T@GgnR7IKJx@cU|tVuJBC+ z0(d41z<_U+EjcH5MWc5Q5ACLk8{C>ceEzHxBzVQ86%adLJA55sHY8dc8;U;%4B5nnQ@T;8t3nY+KA}4B*qUP zwthTGa@|P(z;U;?dTm#`u{z@&!a{@K!oa7}Fxy7VXSM7@>)rV@=M!3jDidpjv%+8Bn&U|mkW%i~wq9V`w! zy$NHwdYgQFae98Tv??KQT{xQFy#hI?Uizb3KW`^i(1!#8d_G&cxAs@Cs+UNBQR5Dx zC~rrj%_K{R;Y}Fpm14+7N5BPFZt&F{Xd{H{>2Z7!%OruiDx{*g>4Qod+8U)w;+sI* zg_EtoH5A$;hCdp@;%ligl(q5E9hsNP79>z~8-2v4d|8b6>Nc_?J+U~*yO7q$SxpB&+q2a2$Q^jsp6apI>QsdCmxClVe zZC`LIZVf~d{%q0%xLPam3@8G<2sJ>51<-`BYwMj@1RnKMgMEP;LU<8~Ogo36j2R}o zkRM>-E0rFG4xt!C^uAbMe3f2(y7~^T&qu9DDfX90=j0Ji~+&!h(E?!aX|qCCH&zLkJN9r1a;6VjZMZ?WPALO zl*>#-NokvyEhyk5BKeok`EQeFnHQF?>fC=GS$&LfXSE{tMTYyodbR(h>a8L_C|WBh zD)tI?LQxJGBeOn!HVgqw2esj$_kdEeupmm5r%<^e4ca8SP%!M5=9J3YwxU6G-G=2z z_0K16e1J*If}b<2?W0;Q>fjw8ACF`S$Ab)*jg^(oM~fzuZa}1yUmzN4VZqI!oxKK+ zBFdKXjs{S>$JObsyhZb*M^rEsDgWWKgTpkH$x3Z z3T&ybH_(TZfNu4Sr%#^}qvRpeAU~8}&i(Yo_zBbF$BFOXgHCD*fNX=x7dYkfW{keq zczjB;l-2*7t4~S!5hbNHAOUve)1zNq@6!HCzx#7o($bRkj*L6}YW6WdvINGB5m05d zj__l>2`ZQzJ3BjH;+yXHf{kos+`LB$nN!f#`uZ7~y*>pofcvU~Ri{y2Pv(HVDj3?*onIo#WsO z)ASF*X}@V#W7^UOb!K%|0R^sNdRrF&7#1}lIy(AQh&U_&bIoIu)e3VS?}pU(V|~4# z%@kHGAS0kgfiL)Va(4ddJd;UsWmZCK>oo1mgU!{^2Oojw5@42=mhymB33evCFWEe~ z&rTT`JGm?wlh$3Q()Pkh!J`$Bi14fkzdS5Os$>=`CclRHTP}Um4g&P&c|dd-1;C94 zXq{G3_P`R9VV?Xg$3{T8_f@mYuT$!HDwNp42MW|>TuNEYD+rJwI-oBc8L7#x(m4oP z=Z~mY$O&P2a`^#PnD!V7Ys5!*Zsa0ZR4!otL6~_;zW_W(tgEY=FCXoY5JG(N1WnaR zL+)8AvG{S}#eh)Usf!eH3`0f5A+kU0Ac{7kc<9yt`e_>f`rkKf2wH*Rkc(tKHeB%R z4~VLwmO`bRWhg878+QKzcreKQlSBUPg#=;bg8WPV{eyr0`9}l)Xy6|W{G)+?H1LlG z{?WkyNDY93I0OhD5OB)kh<;5UGEE&jtRa1A_NIQVIVDObV*GmtbOuYgDZ!TCQxjsGpC2-X4#$ofzAP@grDC>X7Ac4N`eYhcz0wBMD{Abqizw$Tt_Rs_5-rrFD4^i{~R?`4_ z#Q<`@*Q$VA0Qs+6zyHc>-P=Mdkf%V<{4a(3udBav=Bn=|8PZr7v_ax%H&DT z;DH03E}b89Zn*w>=eXmJ%aq1NlHm5^qjM*ma6-Deu#qxqELl5-MAMHs z=9sO(gWwn7q(Z}n4V`PQzM4Avd1uy)>CV!{i<~7EKKV-*QtLos9iVz4Ru8171D-BW z*Sy%fmxCwWlx1+sxSSAw|26lI@*fN4yZlJXx06mf$$6+l2WP_gkDaAU78|)s_7)Yc z1M^Di0jmQx9P!q0=ayS;cBHE*%Jv)gThufSpv+r>0VvR)U?KHEWLr?mdLW4oNEg%xQC*d)jNI=EbacmN|3^9h2quE0d^zpZ zQ%$?Bx_H^rC7$fl(}9wHfYpUqUm#HjOkcqC2@`c7Revzn7l^J0Y<++ObmvsclcLQ1 zxW8GC4=CTc;G1N8V2h4ZSWv+C{+Y8JxeG@AQ97_VzAcDq2fY43WF1htF@e87XyqLi zPGN86tu0!l(t$znrq1SA2~e(kK+^hNW2&MF6Oi{(zW1e`{G)WBq#a042U7P3lj%Ta z{lPFDm_K)})4ki1j&wZ9H_&Z!l0W5CTi+u|c^%G;a9-;DBJ!5Zk-Y_H-z3xlfqI}s z2TJ;aRb@;Nr2}sa=`RapFNy_PPE|xQS(j;g3vSpt9Q|bVEVfz6o z`-2)AhV=(EK8$P&68i#ajSExs2dzG+9(ebi5zc9+off47zr(XrtGf_!oG8hvi>kpQf4$Nn4Fn{hGXY{C%&dH2xBY3o$_+6^2 z4nVuc_Mv6NTbOhh?;&jIZssp40nomyB9~e@N z<$rCI{Mjh)tXRH0hHU6SH5n6F9eCln=R&^|mw)F~LmkM)+rtsizdlR{uK(*_nX_G- zpaWhVVCsQbUogHeka|qu^#{__fvPYjP(9G5P3tHf&^+;0)l3I8hTWY*J6;Hrzv4KJ zqeT9y3*363JaiywI}p+zRKIK=VY;ib~lZ^sN=yzF%0VdSJ%1PaPb{MCrgC z)lmLB=H})e%eMWgng^Uiht z@8pvc=+e0CoO8~0*tX}~+x{M>cduT~_>VtISSyyUlvjUHIw2j9O+px-h+7TnRWlvX zT;^UJKyk)VM;-M=SheRG#AZlDVWBN4K3wk)$Hf`$2E+8zg@`#fz-PEj^^U;Un;`AVy-AE>5g13eZ zi=zG0YAAoLY3X$OgE{u-9{9gLOa@o7X1<8^xs1mI%n=WJ^G)ZrTW>XEsIauN6~|eh zPLF4v_H-b+Vq+z9nf~(>h>oc&|aD&4>;g}XQSlNx>c(Z`KRa) zYR>58mtJx%zWCxOK2=z}Y!cG$3#8c}?1y*22tGYh-GuMbTbEFKB>sZ?#nBOEbJ){g zq5~2ALG_W&KkvLK{-lcEMBZP~7EK0kx^`HP(?59(U+0~`6W~Rz-{#)Ts5UD|zw80a zQwL=0AiLFIK3vbJrt%lrTYx>b+;Yp);PHZxvY9%3DD``6+o~Ivj$RRsHgLF~j(;yTt8r5f!ZJy>{|Hz5(mmGTNp?yf>+c26Hr}?{g zvGqt>2h!*d-rK%?SeZ7E-wx1KUH>$Xu`kCOUxqyX9mY@Dc}O@+w+097zWeUCQkLJtczOQ$=R5QHMn3xRL+6r9E{WnpFn$qfwFEnsb2+UZDBZ)< zkEJeH8%For*!|f$Ae9cJ8WYT!Jm0uS{`+?equbvXERlcoeu7lCLpTWvmQ~m9WwVeK zl(u-O@2Mek#Dl_knMT}vo;k0A=(X91?w#t?siVC~{|M5EQ>(b|zeER0XFJrUb*nJ> zud>8c^HBY*-QeYk^ap2XUL{TZz;msE+UCmm)4XN_#xa9~^lI){dqn(gKv{I)u}&Ss zc(Q?fHy1lmm1A#?={}n_^{XI1L$2Q^ZlB5!x-U<)GrKUBcrt`OXZoj86Xc(k4up&e zp6%HqO#X`7+ec4z{wZG82Mu=FWtZ!yPk#;LDRIAp_8{ABe7d~cjxk}!Fj_yIIwe&8 zrO|=DeO`@{|Iz6ZS`D6)OtnAyVETi1!PE5tzJ9~?nN_SDThnIs2+(Q9s9MJrwJQzKZdqtmLR)r7^*ttQTJeUq1u?1FG*Elr`}zykDQXY5}yx$>);Bjg9?4 zO#aDi$+{ZE`48q_|x9({!|axxw#z5T2<=$1V+ot3}B(zXM3pSjk!!tx>R&lfU#&{iWK!EOG!FqPn07m=26hQB?TEH8Wer#;5*~!%Y!2x)2AQ%WXfGD2D#mknsHNL^$ednDFd<{hJF;2_pOo*?6sCu9XzqYE6 zBFb}Ht>BH^w}U^b=YNmjQv(0aIp-Yb?_Im%D|&{vr({Lg-m;~c_?{|XzeAeqYtrPh z1lrv)&LONUTh}V1cJSaFu*&606t7IY*5l+$av*+&v|s#l_LBe_%Ay18 zGhY_wi_-N+9oH75>32wD0`2u~-u#wiWh$%$mRFf9k@rDhUMjh3uk7Qj!Ky#^#pj$a9wHJ<$GhL z3fw2ByWIYg~0~z=t)td1s(fxdt_bYH<#vjaP@&bLg2h@Lyg8K8r zhYodCN$!3i?@V=|BKw0=IXmiax8ELFF1Ng25gxpmh%)11Q1&~cm zMERR~pz7(syg75s_*3V{B`X{Ez5q4(yT63;Z;0Yi*DhVm_ikiw5cSuQmD)9-I@wBc~g_;8t6?`@>A?fh>&)Mvofh++7)M%l*g@+IIzzUF1UuvChb#XEBFOL8ItsaE61B&yH2kq~2(gBS-df^LN zXF-S2oFr}|_eO!uZO?X@)EIuW0|~r558sYD8^Fll=zv@ITiM$%Ob1HQA51kS_;B1f z=l=WdGv|MY(VHah7w+{1N0o_Do8imwWE<=&|0NsCAco`r*pt2FUjaH0924k#@K;}X z1wXt^6X*-l8*;srxVu5MJ-a8{DhF?F3*noY-${^tG98HQ3uMq1_{IbufAo>l0e`+a zmn)3EBysDwHx!%&s;u9FY|Ayx^mF0SJP^lY?R6?DDst9Xc?U!K0%h+HCax36?|2!$ z^)D#LLtu|I%U53^kgzze^ZzwSV4|zx2S$JQ$X7OrY~++qG?L_Ev_`ktA+4_XdZScyfN%+j$4L*ve zaWc>z`UKg#Z9zu;L5&Rq<3g8_Z|Zc%39{y_dO2e;=AIqFrJTj z|NTh$uPI)gI3BcZf}IQShrTg^e28n!I4sYQIO*jFpfRZZ);+P6+mAZ*{kjJEuJsaq zqhGFGlSBvHc>pVS8z$)w%HCW1wS)PET>qE2Zs4GDD`{;)VI0_!zTar=!|+2sv%g%k zCI;L84-2i#gJFmc$c|6x`tu3-{T*=~Ky^M(BaF{gHLgD2*pi?e+R_*I?C7`lA`ogE{) zfnYxF^<2VQ--#6`bDLA{_SuaoiT?NZJEW0}U?YH02A#yRceWCI< zeSswPK(PMjdI9TpVR;bOF^s5+jDv=nT=&%B`wx}B)?OmzpJ9LSL(U6}kpKA=DQkaT z&~rQZ3Ty&%z~<%hof_oL_4sM<hZxHN*{1_kO$gR5&Ztmbs5Hmcinks6tBbL)j#+etN=^EO7K0%v^_Uz>-_Rp znAgxcq~GUE|Ni~M^0sj!$!~ME9hObSe)Iv}q@1?QUa0RQTnEC(0=9jK8WU(=N6VHi zz4XKKEbln&_12k9vMG++Q{eME)TvXaWHc3&s!^&QFG;s|Y0#j-ZDD+G?;i(hEa-!k zb!eDmOrZT^&-UzT_UVP?Szd9MQ-A5KHuXJ1eNQbf@jbN^UokD3H;>YRjnLG%dWf@B zRBoG_o7<2!;GaR>%a_xvnKR?$ULHCiJ7U>-%g#W3v0%QXz1Fw>5PL=5A3ZwJ?~HFx ziB}K!d{1dFp=^^P@>YMa+{P)Tl2Z0wlAnXTBaS%YrLeNc%?0_sf2#+f-@hFnSR0YB z&|NE5{SGDUGcM&G;~_(am^#VN1K;m4{N5b>f@mCY@KHw{ z^@gvko*p#C|G8uoCVLZChA~0(o{|jq6J)Z_JPp4?Iy*3o4{qG!*{g~xEoF_hcm2a3 z{-C*lAH&M7?=e#TY8Pys9}z~42~51(7T9{g3;j0a{@;Q91hG0Gll`SJU!+m{%r!>T zIWu8=aO1A2G)ZMIW7Po%F(241tla9S$xnN!bs))@AmjZ6(uH!;0k1De-@*KL`-BUz zTeDC*$$a{AjFp3^FI`- z1Lfy?YVxE>j>;Uy3*yFP?^CR_l-0M{mpNh0ttRvZ#fJ+oxFG46Q1wG{9dP#(Cm9oX z^}lTwqIAHwuPDwB9c#{s{lUb2=EgU1l5wGY80!q82>Jg+{N^?{sPb$B4ms$cgE~f( z+pL>t+?K2@sG2&EzAsXpKO}$9Q9K}iW~F_l+09t(fcD=sj2aJ!C-Mm-KRl5-5YZ3x z^djv0w{iBn4~Bs~B}v^X4)#NBX zXuhUjzka3GfvPqpP~S%LNm1o>U{;+;Yp4 z8a8Y=Iu)O8q5hmOetd!+B-eq89TTXHf1P%#Ns}h&$o+T9+#YOhef><7Ogf;wS`Aqz z>IE;>C({GX72R>i9nQEw|FGh8U}fn1kj{4M*`r6g-@9~UE@+quqc-Db)hFB$9GaJx zcL(zWUrWxZpmUS;t(pEoSpDyhv;F_DFgO;l*D1yX`qtkXKHRyJH6*PUrlQxqzZSVa z1l0c3{*`b*V?)gk?6=)^+vVds<~{heDIK2X=jR(43>iGw*knZ21(E$h>4cSeF!ZY-?T2mLSNk<3lGddIS zy6dhpHn{44eau{o>~yS7MCw3bOrY`qXPnvg-stztm|f>aUv<@0j@GPgUKxa+@@!2Q z*JUQ{=%-Z|Xus5+j1m8IS)cOHW zPp+kTO6`Jd3ABc=7i)M^ zU)q(u2Y;e|Xv!Kx2kMC4$ZQ1t$VuqNJn%Uv24A}2Qo@;F92fxp4zzcn5p9jm=B>$d zbQHf@{Yh4W^g?|H>4wIY`evmg7P?lv?&~={Z{Ou-?O!biYB^BLfm#mKa-fz2wH(-d zIN+4eUtzttbc*SD`yw`oU%qQ@vmLM`LYFypy=(Kh?}Z=D{hWOJKvC>E&tAtab1Vt& z>t2Fu-TS%j^TqCUPC+c9$X@5it_$sTUhLXlx)j^wZ4qtqbSBO7CD*YMxzv+N?7G-X zFGf(wb&N$xt_zfb@4mS%Nk3MglKf*FE1@_1dXq6$kE{%My)rd7N*b4{B^-?D+!szGb<+ zj^!q{#{P<9k9(ht`?`1S-nI&DC2YSSo1DG28e;fJ4mNqqo+3BBJU9D7_d4Ibb}ub? zmU>H0FnfD#v$N#boL*!s)r&&pDnD>S7N-!rN8{y+#JVT zmOLK2w!DC*z~koHBhJ0=5$E{71a7+5`R1qjXV_H`xYnf`XYO;kA&-Cj+3O!&lI(Sn zo2R`l^k3_Pbcv9oo7PrUo8hJiUZ8iZV8S7SA%;&H}Dd84fFxefsWu-&%KzEv_uA zEjU+WS9IUK_u_xzY3Gdr{hd*qjrq~Iu};zWkDc)!f8>1d-h0llH{Wz#da*ZlO$GQf zxyd;NJEve;T>lPwfGTmu5x&0~fVZJ1uH0Ie)7gxJ2Mu)Q&z<8eS+o!vEwFHbheZqK zI~EK1y>R|K4-5FM_ud*l%()x89oA`ry!eWI&#f$7An#nz3j7Z^78l_YvUjf+ocZ(S zI!hNXGFU>W@@LEg&bnJbI>L-;pE_MScQ*D5HZQ`BpaZB-Hjv*=U?lL$eKvNIefzxX zEM2nLS>{5&Q}JLC`e1cHq4vzi>495*%ZDkGCOWrr{+~Z@em@JerjzwQ@;Ml+0EPx^ zSe=4LA2l|k%a$&6mM>l6EECGagOcw+ys%~Whfj6y<|uDV2Vp_B3r`+LgYRsfvbP&G za-^}%UQXFnew96K9^g~Y)(44tkemnlzWTiSii0hH<-sQCx;UFWApQQf?6Mz}Z?hHb zTa#`2@})u&9xV2K3vOLt>VvrYu;g0^s}KG1*Kh4dP3@s|(gD97MAZe7yUOb60e&-VeUL5>TC!Kf(na`e7Ik3H!w)}vEc=)o zLH>W`_ie?p)>jLou})>^{7v&4fsTW`Jf;q2>PV(Hd?SIJyD;Map#U9c3N zFC(0G?b;fDjrN^%LY?iab41c<6U2v39Sc2PlK#V4D!-E5VwYWZX@s7AXUieKV%jI- zl^c572SWPDwhmDE=i7z&8f?>3E=&d1vxk?iO2Yu|N7e+gJWg{O$(II$p0&`6t?RKbt)(ng?#1 z@c!sg{_^+Cq#$K@w(ib5?~JG$ehRJs23M3JE&r=qkmgdAUt>ute;bC46EvQ-{33kC zpIDZEo4SlV%Pkwyy2F;GS+g5W{~=W$dF%)8`^(>}+=!{bgedbapf}KWWcv3*nHTZ; zhY91wl6LWJ<_h$Vi_R5DcA2wc9FqsSgP$~}vFOtIvDmyp8e=8R9ohE?Ta=loEGGbs zb-?-H9k2m-^vgGl&Jm2BH%S~PXrGrajpMRReyNj(#+|`EV1y+x=8Wl? z%^fjMaQ^w{+44(=((P}Qx*VCl2u;U=KHyhiX*Hq7L-MmfhjvbLCsE@?{~V&fK2#sk zm*((HY0K90*rnG4H$dAoAAN>a_1AB|?KWrluwj%pe!QG153alJT7UVoIuDW#uPF1@ z;2!WbaQx7`(PN!D8DEgGxsxRGCTYwezVzaY{`BXOm&Oy7_DB8~gH`@A>-V+SUTell zOPC9a8!x7sJM!~@ea>E;NSmNOpXv-ZuT6w!R#w5uTQYyerNz*sagp}je*Do#oTE_U zBh{4OKW1hQA!_c(d<*XUnSU<*{r5&Yr=NbhExW=Vm00$@$$z%L?D7FTb@JqrvjlAU z6{_r}{JwdE01xckQCMB@>MJjsIUiqsWBIKybcO#>kL?S-P< zDh%a8_}r0y{?PJZB0lz2XWG2na4cb^oV`iD+kv?*9gfZ_pZ@8mu3!0;vGWA*C%UqX zJose7c(Z<}bugP3;U>@nREpfCXyn}w7@Fkocs}bl#Vc3E${+Nh7{&v>fs${*ol7_K z=}V1Ihk*kIn6*&$cKOS#->X2S?z<=d3vJoerpc#is831B-y(ts{`ydU1hv+u^GIy^ zzVKUqKL9F4-)-eW{&kVbBFRON@3xq~zVJ7G4*;hC%lax2LeE>k z(EP#s@0;^JGvR^G&}+?Fhw3w%jxSuw@4G;i+-J|+>{ihBljxQ2Kfk{jKM%aR0DZ9j zrL|_L^(ys?^u7;k`8^n%0W_afW&fC8Ilq?V zBD@c1O`ux*(a*X~@)P>M{<`ryl!^yBuS)*I?0bZ(zzv|vjnh*Jf%12;<#->vrBJ_1 zeji)tzx?socL)ao`TD4if4P+Zd0Q6wsS+?v7`d&b^zUg&NQ{@=-lI@GEJ)-p3lWcQwvLne4Wc@Z=4PU zd4LXR?!$dY=dWIx4jnwV6VTbt{|5GbfA~4^*|K+uB$2i6<1IZpgV6dcPR0Y-1K4*6 zb+&jPa5AWGGvaq0&;T?AgTXJrdoQ24j_03y&bg6wZeRR|{I2NwU{~7fHKIXnn%{SK zG9Eni&_jN@?QiLW&Tjq>@awm|Z|1i&x3BS)#)_&>=^pm{Cm6K zK&T!B+JruwV|@6;Yz6XQNBY6ejX&N3*yEJrR4!<@M_*5aOT1X6;ys@vn}>758Lu<&GKEw zIHlr2V60@vi{2cnZ_dD;JEVD&Mc7NWY178913y4d1+pM#H|oN{mIvzRzSg&IDS43D z+|gLhY;6*M#@agQxUnJ&PhPoo>(5xMXX+@p*ootpYG&lS(Yx+84SarSSLpp83XR~KJuhM5| z&KzTiUt;;oy^XS0>Uw8@5%uudcr;_g!O*tO^1z1TMGN+CXx^yT3%%G2HNY9h`nUQ6 zYCm3i`DI7vr?zA7kj~Gt?*+mix$X>h3glf?E~N|GV9RC22bt=_n;>&K~r!F@$yGl`&Y|>taBj5zd&KkB>~k)>kW0u zf^gFgZkQJf$=WNQWL$~=^@=tyu{se9U zo}Y+=YW+mOj--F|cV(l$A7}_p1jmEJz;2)_^~p>*T)O^B_zIW{egYdoaBuZG;=TqS zfDS{((DKHKg;j=;1(c% zuv!13ea|JYtH5GlXqNrwHP>9j9>A{7Tl9IgXG{BbG=?wP*D%kSJ#&ULZtNK23!r7o zJ4}Dbra`E3oSMx7Kzkk-0}LN!W7oAyXGeRlwV&JC;KkYEvNuU(@b6dD9)6Wid)J@p z-rd-RxoQ4RcpoVDVvy#g;6K3dO=F1#?2nQCSj>*l-IMRyQKnl4m1E}gY0h1o1I7A} z-EZ2ReAKTi^B?KtfIGnk;ON}wDV!g!wW9<(IO|s+;8VbF4;?25-=5Lf8D`HITVe9i zp6PaFCY}UH=TAWX2%HWNK8T(yj@uXRFGHMdw=KiMm|uvvGN3=!7l8Qh$J0-Bw=(#R zJR6p^42;$G<-7Wq=-1hE;=8w>lixu(s0{iJv`=^3m=BDfis9HVX%Eh4?%rMVJw%j2 z``7>Wx7%$Q#-meZEka$&a3%C>|F0QC$J-dk${^ce*_%Ib|9$2R9L6C2J%i@=i6@@m zT+bfPK?C22`<{co2tHwsp0SF3zdR-#x5Boj1N3iFU8(s1?XA}Q(PC_!pY7SxoExq3 z`LL1S@&&TM#n*aY_tidVUvS*F;MPf2m+be<^X0N{oPCRbU{1Kd^4ENg?4I8lF~Y1@ zDbB?|2%iRLu$C%&Hq{}5`V3p`v(G+9l15+dt8CcTy%|}CVQ&txX=+b4ub2IgJ>Gjl z*A(S#?W^@0tOCtJO4~#Dur2#|2kO1HZQCTa4Q`#Jwt=y((w5$q*II5adlHXCAHI|h z0PQ8~33QG`+JA>0dg%3fU%q?%?Q^hBQvXBGfg{pRJoSThINRVP(i{Pd1HBG0*efN>DC+p>!lhUOC_>@I3e)7&>H+p#I0CiJzFhs_C!VK1N6x9)9>COMl;V z@-6E#*p6)hu7uw4z}xdE+xcEEyx`2`Ji^$%kH8){TLyO@sJ`dvpH4MvA#T~T>I(~+ zw*<|>Dq!~9Xb!h6YmcMl1IYAK!~048F@w=1x372So$c)2otdPWHQgcYBfvCEx9k<3 zeDX=po+PZF6xLt$k9#z(aMN2$SRQ?!P}L&sE5Lu1SEELajBSMW3Th2l>%T(WJ|f>< zGE)YgwR>kI2Yt^EJ=DSMDXS?wCP-3i`d)*SQY+H_b~ZJ@6$sKPvCC#*_9oU@0(XV9JI->y8OF1xd;vKQ5~O zb^fi=aq&OG$3a%t-Qd&R;+1Ucr3b5hwh^`r3Hxb~gZ5R*&QA6q>QgEW7t5jfevow= zbL!$P$a97A)!L@Ft_}aKolmd~Gp0>rex-}Cqw>+L{Qz%+^Ff8#h*KB*Su|+vUOd(s zbwU|jyM%@G$7Iu|{ik}zMKPhy>)Q{MRh2V-9~rk39e3Y-cbpxrErXST_GN0%xt;|Z z!B}t+sAyZtxH3ZjOVVBKg_oUxXCvS{yI6I<<`MNAkUg~43**wMq>EhWe@k@9cSC}m z19o1LgKWn24EPpgw8w|%vpKIW+kQj;%h(}U`u%bc{o32=(*I#PeCF94a5R_(z6OV< z^Ij>Q(fH#<){^lB^@OoK^2*?|!IW*Ko&n#29h2q5{XM`_;5T63TgdOE?DVtH3o;ie#f!P;Gm;-hJ7lVF4cJk&~*_5bFaj!=bmb)(H z<>mc_bT=5ERrJ+W21~zRkEXcwkEM-JcF>~rS72#0W5Z_6ni)Tv>SO5J(f(@pna2o| zu`}a)*l}&gH!w@-TOEoj!y?M3XRg9_S9X7vZp|6#e0H^IX5YX18NPnfz&GA7bMrhe zJNPRzCNlX8@>AJ@@#`k>X$Jc%!))-ZF3Ap6ZG!sLvMZls#$QWQ_Vv1Am#r}}_%A5e zg$!h{12WKgx2B#~A1GBBO#2qnPx9TM#&koYI&*}8_G-i+vsgL5)KfRpkS840+zyJOhp`YI?5AEw8J7!Emo#fx|R8j`F zueZ|ebNg($wYR%%o3=*(UE0SGme;&zP)c>FkIq02Unnn)*Hs6q{+IsSddd41BKmq7 z`{+Bq|Ni^Ucka?Hd;14Lw);!DyY9Mc9_?Cx=r{I+npbbyw5ij*TQ_GUa}U~6tG>S- z3#(tM{g(0@rhW9Yk}XrCd7k{qx=y&Wwox3;k*%NHf+7kGL9q!}VrY#GwDFDNmp?O#W6Yz<8yLkr_}&70-l`~z3}RK zo)6!gY-Iin?gah71n?P{1!V8@Jh&c|>$(W(?EoGCD}i$|b!}6|)2&;#V*gotM|(GJ zzx_7s&o43SVmu?eqc?#>Q0hO{<76js6VSMqeC~EezVl9OUBz9S2(B~Amr&0hJBiJp)@7|Gcn&jVDNh*2?9V?-ABYNJHqHDFM8rbJ@+BzI^4| z`P~E>?D~eaC(?SoZ_U1Yw0C(BOclH zQfq_K4x0krpO|U>JfBOsPUqcAQ@x8E_Tjl-dOY(?!utQc?b|E=S*g+}&3*K=K4?Mu z|2P+$M)?BO+N=M&ln)v1k1b95QSXrF{@@89A5-irY;D#U{cCnc4t$#z;ID}1o{UN> z-FS3dK432Zqrpb?f3?SJGPZ`+Ue8;16Ayswtaw&9J>7i5o+IzZV6nb4&8PP5(+55; zG;5h=4VJpWqrtTolx^1~mo(Pe-((P$Y|1#^+X}o2%>HNX<@T?Gm8^lq&XTeAa?@Dv zRXfFd--ClwW)$)Oa;*zS>f6`)gnvEGqk+0fG^mc&`kTJ_XM6TA;}hQ1+EwWa4n4fv zLF32Kqegjt;(|2TwLpziD(c{YpiPL3PgkEGsW+xpL)uyxAC0TBgTO%fUT3`%2JvO z(i+s9IUhUTH#9J3Bst4J2YnLx8|wiMC{6mQ-XYzo4={(|p9d8U^506{zk;Mj=G-sK zm`rOEQ}4U)zJz%X%@L6H(kS}rw;aO#31BwAOYMJ-Z+4K*#_-RlN*3}VqrMU70L;8P z;ntuLcnz$(jJ=SWAK>>;P%1vqp54wk+|i!WAPt&Jk#3Tm3D?`e))-=%-QyX?rJVI#OO zSzZzMa@mL2R%K9KALM~#VZRCcUE29mOM~oOv@ex3z5x;0B#qvRcDt|S&<&m|pWr-P zjE2}8qFF0;Z4Oi)s$L>r?Q_39X)Z}_)~Qpc9{sAWN=N(WwO?O#Qt-PJZK{h$V81Fq zH=3v7orR!O1rLx^hkn>e)Cr^D#d_)9RoGd!YT44P-Rc}9ts!VFLA(N*XSx}b_gZ)z z_H4_4?TzSlPl`4Ij3pn<5k3!EfCB@xSLsVLT~MT{gIrC46fnI|z|==R$m6%ch8>FX zHsu%P@lYNQ|~hf+%YJ4UMmL4j5zK_mqCvAKzczwN0CTH+Rk) z<15+B<2C_6>1VLtclv#NXVj7s2$BaYbbipwwmTJKsq+o;LkRj#_Hs(8ihW}6V?)H%{`);6Pf26FJ@y>PNbl~yP_gK!_ kyquh3PDv^fSVa=P25Z5OK=+Dyrl?))8FQ_B#OvMv2dz~^lK=n! literal 0 HcmV?d00001 diff --git a/app/static/img/thumbs.svg b/app/static/img/thumbs.svg new file mode 100644 index 0000000..9c9f509 --- /dev/null +++ b/app/static/img/thumbs.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/app/static/img/thumbsup.png b/app/static/img/thumbsup.png new file mode 100644 index 0000000000000000000000000000000000000000..97f3edf6324678d90f39a04b609d71272fc395f0 GIT binary patch literal 4447 zcmaJ_X*|^H-yX&;N0um}nL#JQm_dv!V;{|oELkF%4TD+Cj5TCQDcSd>?9*~cN=hR} zB1^UwWJ#n@vP?PBqGz1{>HMD;&v|}t?)!UxuIu_P_w{>opFfJVmy%GD0000|Cx82e&AO`dQ zLn)Mh&`g#K>A&^s?KpKn2 z45ZOP*4Cf{7#x92-HtW?B498kC@PbMqY_9c8*>O>LYGV?n%KbMNF!rgeLc7x3zU>HKI&|k*Bi3>9fY6mN@5J%=O&J5^HGGbs z73hMB*fjvsr9yp|@OjU?a-?M#(o)=Q$mgn?D~M8RS0|_wwl~`(3=c7-reGKiv0G^? zF%g_6rh_Jfr#N?4KGvz-{T{k~S0A?VZb-FHPoFYsz`-{nu7iqI3&)lA=N`5;Vg&9uK_5XYkpeBk;A1cFOFzZc9Rb?YrLODvQpOC^I zANvjgn}Y2|D`nm(e%{-5qhZZIh!ZY1I%^)yQoieL_CoxsDv!;@#gbH1^_2ny@!^dh zxaPXR(I1wWp)a0uSVey}}ke?@=v zQ$p@_R#3K26HTOa^wxEeIWY&q{XRIv6;L)$lu%-4YL=EL!!?vm;cBiv+7UhSNY`%p z#xN`!wQ&pN%I{=Tu$pv?>zDZQ^=+o4@Kik|^5B7&@grbhs(Q5^K=EK;n-@`HyAwtM zT7Z>+R_uOm3m4wkDnPt|D}fbR`SqI@X;m66lPAod6X?F87>@z|#fw6v<3u{B#tN{VUCUd@ccvdeK2MGu>s z!LB!%{zQr5W+%2-u@$?#jtRHjfNStu6x9I`LPoCW87GilRM{}H}P?Y$wc=*nw zhAZF%=$SA)EDH@brUHuaWBzD%?)7&wg$17qYhYCAnm%b(g|~C`ZVxHFtZ^kVp<;Dl zpykm9cb}U8!s)L!Gx|g}eba~^WUfsbgb{UilR zWdk5aQ(~qP^dkN&WGf_*DfNXLo)gnBy`1N-1x}@@6q3;&gFbBJljV$BB9xZK&(Q4m z0!yCzf9r3(4H3FHZFN=up8M?-Xt7|)*aWX+9~Lb`oWvTVyacPtEV_m=nFGw6n*MPe zrB}ttEVZ^5`i*mso4xODHOsWXq{{R5B3Bj-E%qELa+69YR6?@z=%=*EBKrPbe z>qUmjvO6w<-&7|{k+sr$p{0B)ocobXv{#Gr3v1KX^|`;U!6VSdmOYIvEUdII=@svxX!>zq<4Ianzojb==9BxB=Mv^aj?xMD zLwoz)8;R;m?f99SuQ)w0m2Wh)rJ|^}+2>Y+1PSss8OH;g+aR{vO>1 zyLb5h?kW^pkf|BO`OABe9xhSMM`2H1vvX6`A9JoRapA zI*AA-Tns^HOjue-^E7v6c&8Rf-V(PF-rVQ#Q0ldICat0=0O`vj5^~-MWU74m7L{33 zXtc0SOT4%$2o>nDYpbc>5_6D=Ym%9(0wFvRvEp-1E!@M_b-sd8qI2M+W(C;kX?6Ss z>G(+jS>a~Kr>FCR(8RUz&==nj)KdB3NU_uY6M;vjuX@x{K-Yk4VQL&CbxC^ivKS{T@AQcTQ|&CH6?m(U$Ja zlwJc*R~K01em|pV44oDBcAN{E5kj;q?^xqbS5(5_?^185%d9+8FJ7-|eYy%IXTPO* zXLH*{vF+xvevi5>7xf;gPL{^ombfgR&FHi2*C1-8LV~QCE9-YWkm4duf80K0*_42e z-`jaq@d?%MS+%;q&j)wnTgN9M^{GuX_jb!qt0s1zrU|l@POp;oq)SE~{JM4+DPq~$ zBP9LetAgExqHTOz+RHSN$F>H^yTDf=;HhNkB1=aIm2`LK{p_Hsth3VdzAXm}&+tMV zZYQnn)P0S85>(K@({x~zvfmAcBs-`^mNzQa&xpjS&P{`ouKp0Hw98k}O75(AHS1{* z+W&3(+Uh+!*%MaawA!Jf=V)N3LEaq7>w&VwXbaORE^qo^fYcBF)nkmPpcD?ZNMr=x zI0eow#aw6fqI@o?2gmgF9G|8bR(u(IqY7CGUL9?U7CHpZ=0?o9tKZS?(SnqH8qG#U z4&_RSYr=drdPV^y<&W(it9&$`-X={rT=}~9!NohG5$(6c{s1|yO#{|u0`_(6m?znp z4e|sJC$CSy&{kyzZkKJJOsCqSokecRN*0uaT*#NnQfG-U9|7#AcFGB~_O>JpvZ){B z1x9Xr!@6reAmGWlKLNa^l(duFW2YtO_JIbGIF~BNpyt}1peJ%Ud1v5)ZHLv4Q!d-O zr&pa}=Uy}FJ=gp8Ry%LE5N2dkuzzs zoX`?t>bE1~vEBPEzML5T!|kx*chO;8RueQn?H$RvGpR>t}%PHu1t!kvI|>N=O)^WR+-mr*X` zsvC5}f>Kfd=L!=C()5{ABpw;VN0~C=HscLF!)h#Whr53TpXe>5+a?&Tx?>U}~!_8Ff z#`WxwW-oAJHhGI%TU&>0otHN@W1g#&wd>~h$$y^T5LgKALhNl3ST8)BSo;ulBt_KI zzj9Ghq2qze5(@HVzm;6R<9JLIN^J~q_O_T(r@?&zVlH|G6kxhH4(@x#-m{MmRF!2uO5w*~xosEF?`PlfkjEvHC`9F$i<<+Uxo!EO!7- zo<%pwLYDEt!3QfgJBD#F{j;<9Tckb(mt)8B{!}$Z4J-`HBaCMTx|GI}z8^Z1z9rUT3+FQ>RctTg@x@N%KbJ|rCzc$dK=ShPgf8s1 zCkXHA^Hl1(vUq;|!)Q*}hmoxJ?}J?2+#c=MKK1$pCtTxT`SLP#otpqW*Zq04Zty6V zGSQUv{d)}D!UAh&Z{NuarBEnvnL5vgM8}j7#!=s_?Ck70Ai1b>E+o$Hc#cMuZN5jX z?}KP(UteFrAOsnY$Lqp1zT_NEr~TPg}fnvRYDPSB)t5^9vQxA=Qw9^`Gfe z38$ITR^bb8`GM!mtj`GRSqrs;3Dw=yuQ~O z?yNT$FHzJ(FRo~Bj<4B8iCMnFQHF47_|B?;yBxiWKg6!Dq}-9%gbAKjN;u&CQz79b za8v*5y`z~2_H%^ywI^m`r50bEhNiW)w2kDoUpoo$nZQlX6t)Y(`<}_B{Y#8 zKrR`1@xoR@LLysQ@tR2v_i?&P2~2n_R6aXOGVo)C($^nxf1ZTho3}#wEgf2H{Tx1| zEy}RHl`iabPa>YR{L+qXbSDtF8T_yT+?P&WxG~!Cylz1dR&SoX?2-1mAS!-ctg6_I z=sX?``y(-TLMkws+5@?%pM^W!fEZ)bwloO6Fp$>$u*Q#5YTOsX4I$==%FO#1=N7 zx88(Y{A9noa%dCk$Y^X!N1UmjG`#8JkFYbwW*5mhBHWX(o{j7s>4(5n>bv%KB2=lExT?4CVmzB}KU`+aj~?);f(3zQKbR16A%K=_bX z5$OH--QRJDZ6Be>*7xxM!@?A6VB~8GaR+}7+%NdAm0!{GpX{%dzq0@L9RG{lf3>;W z|JwMURQ`Pu006`VKyHAOf#6~^=o|$QSI{*ECYFF$0AMWv<;cH16b}Frfq*s!I!3_M z4{#|OK-|FCJV>YqG$t5d0L*#7?G5;DfocYTID?f95M2YVJ_TDl03HX>ser=+%&maM zbr4n#P6mOlQE;ai?CycA7C`+9eBS^89{>vn3>MHJf%Xv~L;%vE;Cv`>%mjbUfS&K5 zq_OPi{sX)Cqfr>h4*P+vL)4|?d$UsloNX)OJU{LG*B|wGy&V%7^374FaZ4&oDOzhE zF-6AeZ$=ri?i`Fy8K^erOZs#E+i%a`6Pt0@OT;>~upyOsuQLn7PNCBmVDhd(x{mqM z%v%vxoF{DU~Fjm0A;#ygxOVdLaqgO7A4PPWRcmiEw zG6V6Z@`f0NHi|Pr4$RqJr9D`rEp*ZjfBw9%@N;FWle$R72(XJ=zU$+k;P#W^f=dx+ zA5_CKvx}!}>UM_bYA>fNriyfHOsDticy4KiJHhefK9;okghU;iV?x_s*!R!=R3dtv zjgfKQ`>}KLNFLq#Xg8&uU~ay)?6GXe-r?@ccrEG6sq;hNRnYv5tw`9urJCr?~HJ;zcDre=#{Fo%e?KT@mupIBW2O6+d9|j$o{UE)fmH1>0qC z($^lDri}hx__(rp=#fM1S&j;r9MuJZeN9yV`puT3o~t{ldnO<0dO#;Gzx_LZ|6RtO zmr1(;1Lq|^?Sw=h86-zw6KO-}H_tH_6TOs0?MYtPO|MylH^!4bb}RHfszSx-KJqi$ zuNc#n!eY+1iKTypDW+LbOAY7TRCz7CH>jm5r*n;0Cll;L2%JjRRueX!N^SNbP|ve3 zDyi_d&6g7HC?DnzCf8%o8CNmqwo)f?_bVOS;Lk5ysBnGbNVB%*XI^RPZ-4IQu!L)h zhc)uBX$qO!88{$Qoi*=YksXcIZOXWrCf7ADMy4Rj4|Z~!rNf2cxM@pNPHMKO`LV1{ z_fNfKKM&7_2#g08BqQacj6Vm&v0Y|GmJuxdU2qVhnD<^QswAo%eJYPG52<^BnP^d- zw=;=RJIGpcK;={%n3ByHG#}xeCpB)5Nu;R-D1DUFEw}?em8o-gd%at)6kcAILH}Z6 z;W$AjrD`<0O3YEA9W`Yf*J+sQO2NHV(uP^}DWj#*cZI6s(I0mjZ!IThYBxSvGtIKX zO>4Pd3-RO9=y#+C2L17-Q=^%9wk8*-_9E%-YN@_kU!G+RRP0iKv3( zJcY+KWBIdODSr8|d6kN_iki1ksr+06RVg1dN49l;4>;y}vbTJ-C!HXUH+2_e&-GnH z<@z~+BT1q#6O$0r-Nz^Juiw+kD%q8NTvg8AhrTZtTz$yvp1iLaH%EX{v-tb?F5eS* zqA%)as4HA3YHsYhR0A{P%2smM)@a<$p@#(}nW3V+1ij=!&kscLfX$7yg@xJHd+4q! z7q!m4K|d{5^`GtT(l9a)U0K|2I24&qcvOz67)wT5i14nkA7Q zwmx*}MkUc0ONJ1Y98wH*Gl|m_27_RXWkFW6o9>N|ZBCBFo0%!(rGMhAOtHI8)D9&? zoOUmoW+j&vpUZ|7M|SkkZ}UDBVfeR>CJKdL9tjs_>HrwiqPJ7#ym8UN?20k(Q%xwL z$^3$e_{}4kxVpR zjp7P0DMeb|QZV558q{JTP&)dyVw8B~SgKk=qePM-KP&k4`M z|L!kutdgl5(tr}d*T5taiFpF@Yn(DFn&YAg)vd>fs>5g9Ifa?QIQgc=cIEGWhE-Y* z%CT)8k`j@vLuilqyq(=MPhTa%(~rC%)ls19q^lcuUvR2;JzOVA*PeNXn^Jti-GL6K z=8oan6`FeO$wMn>=Tc0xO1++2bM8`Zs#_YLapxzV%ioTVs7-j(8^s2znFo6#-BWUe z@C+VB;l$1$Cy}`1mTau;%x{BLA-7d~VpZw|6kf~?<3k$E;zcu;B^@6H%68D*IPFcQ z!w{wosG-lK=OlvW=3YX6=@-uy(E%&S6gQM#lcszEo0fP0y_)exS=qbec8BNA1VK2I+Cl zF_&!{DSjcJq+nk{-T6zcr2#FX*1j9Aqgxghz2W!^mpm|8+I=ov^hdVUFL!KuUmo4Q znk$sYUdwHsXcmamu(h$Tk7$XYseR#9PoY!%pBSO0F5H^Jvjk5xM|Q+o)fo-iXi{Q- z@SjPpz4!v=B`kaRIL&skFuzL7l3jz$Gvh%hID?V9T@j-fX7R3EeYmBr64A_L<0)q7 zP4cj>k*yYddtsiTP7%>FG4s6)r-z%o_d6B)Fmw}EeH|{MV5Yskk5gsZ1c$sXzv~tp znbgFzt#}~S^Len9Ko*kSMLuxv;rCyc-J&iEs9HMOk{eIoYjCd3u3b&)l0a!yYIc<; zBapBv8a$zURx-z%WFL6DwZ_z?BXBB*&HDA&79dg z-*3LTNRkOYDwV{aQmK_BZIdL)1wxk;0I^?gi2dJ;vIC}Y*#tcVJqSGjvG3n#W>~}$ za)9xM!31mYnYSk-B)nZ#R#shFT3Q_+AAb^kP7wEkV>YVs*=_9X?1C>` zxbXe(@UR#f8WJ@%HQ!iSSp_1t723!>P{7|gGBWc0uCA`hnVA_eJv}Yj+uO&F9zFUl zV%s5du@Q~?s)T&cojdonPNx&|^YgMsMn*(#Ztj-D0grKQiy%jc)^5T3R^1b)WnKSt}Z{D1rot+hPb91uzcYlBXTvAff zrx^1zv>7ty9*{d*dwctrE?&I&)5OGtoOi4_+t=4OO9t-Txg%<8Yk#n@v3U_=Z6ITE zNbYt-MMa(N?(Wuez1z2Mi?e6X{+5%I^D9|kJ~}%)CnF*v5;4{p;v8c%?jvuG{pZi0 zuV1v*%#kBUD#F6T$~rnarpdtQ=%^?tDEJCveIT-Gj2y_^snzP3>({Rj@;S%H#|84x z>)_xJk6I9iTF^ZqGd4E%qn@4~1G!_4D=I3!v$V84gc$v86bi+G;^N{f ztj8QfM#1Wbi0y#Z%OTH?m8q$ze@RJ+hP?mfJ%_s|3o+h(Jmc3 zMMd@K_k+mpdd?!ba|{X!db72)b(p?9QSL*BQwPcfH zk)xr&z`$6<93gtGrI8ul@z12Drhazo)-A!i25gD!?Ccu!FRt?(`!MuudV2cjs7dlZ zaZXA~N+J3^ptW)+bEi_N4r?@;4syk_)z;QF5gs1?9{iq!7TUX83P^uqU;PfSeAMa&H%clVxaa=7QzsZ*bTfB8<}T)ZPS z(hIRI5WQDwWaWvFkdTwu?-8=ZGu_D04@a^78WP(C-T^Ro6L}?;g)(Wo1>9RpyNznVFfz=wA(o z^4`0+xIB;g-objpyyN^$;hif99?sBm^<)#`D%?x&;2s!ft)d6c;K753{rvonsnzNTPft&-&AhMX{hIq@@8RKrsp{AK{r!*83!Z#0 zVs5#{a*Z63Z@x=E3bDpB=k#4^E{4eGf@8@7=hA~-^rZJ{8d>66+-v@(?mchlTCy$7 zU+l4#`AZuA*8&Ug@Ivn-gia}hR&iGvGa;zcCU+%CLO}D9^udB=B}q-`@jsy6XdpXF7{{p16d{Vga7~l literal 0 HcmV?d00001 diff --git a/app/static/js/AvatarEditor.js b/app/static/js/AvatarEditor.js new file mode 100644 index 0000000..3e66d24 --- /dev/null +++ b/app/static/js/AvatarEditor.js @@ -0,0 +1,1079 @@ +var AssetsCurrentlyEquipped = [] +var AssetTypeDict = {} +var AvatarRules = {} +var UserBodyColors = { + 'Head': 1001, + 'Torso': 1001, + 'LeftArm': 1001, + 'RightArm': 1001, + 'LeftLeg': 1001, + 'RightLeg': 1001 +} +var UserAvatarScaling = { + 'height': 1, + 'width': 1, + 'head': 1, + 'proportion': 0 +} +var rigType = "R6" +var AssetCardTemplate = null +var PageNumber = 0 +var SelectedAssetType = 11 +var IsThisTheLastPage = false +var PaginationPreviousBtn = null +var PaginationNextBtn = null +var PaginationText = null + +var is3DViewEnabled = localStorage.getItem('avatar3DView') === 'false'; +var current3DHash = null; + +async function GetLimitForAssetType( AssetType ) { + // Loop through the "wearableAssetTypes" array in avatarrules.json + for (let i = 0; i < AvatarRules.wearableAssetTypes.length; i++) { + if (AvatarRules.wearableAssetTypes[i].id == AssetType) { + return AvatarRules.wearableAssetTypes[i].maxNumber + } + } + return 0 +} + +async function GetAssetsForType( AssetType, Page = 0 ) { + var AssetFetchResponse = await fetch('/avatar/getassets?type=' + AssetType + '&page=' + Page) + if (AssetFetchResponse.status != 200) { + return [] + } + var AssetFetchResponseJSON = await AssetFetchResponse.json() + var Assets = AssetFetchResponseJSON["assets"] + // Insert the assets into the AssetTypeDict + for (let i = 0; i < Assets.length; i++) { + Assets[i].assetType = AssetType + AssetTypeDict[Assets[i].id] = Assets[i] + } + IsThisTheLastPage = AssetFetchResponseJSON["lastPage"] + return Assets +} + + +async function toggle3DView() { + is3DViewEnabled = !is3DViewEnabled; + localStorage.setItem('avatar3DView', is3DViewEnabled.toString()); + document.getElementById('toggle-3d-btn').innerText = is3DViewEnabled ? '2D' : '3D'; + + if (is3DViewEnabled) { + await checkAndRender3DAvatar(); + } else { + show2DAvatar(); + } +} +document.addEventListener('DOMContentLoaded', () => { + const style = document.createElement('style'); + style.textContent = ` + .loading-indicator { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: rgba(255, 255, 255, 0.8); + border-radius: 8px; + padding: 15px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + } + + .spinner-container { + width: 40px; + height: 40px; + margin-bottom: 10px; + } + + .spinner { + width: 100%; + height: 100%; + border: 4px solid rgba(0, 0, 0, 0.1); + border-radius: 50%; + border-top-color: #3498db; + animation: spin 1s linear infinite; + } + + .loading-text { + font-size: 14px; + font-weight: 500; + color: #333; + } + + .error-indicator { + display: flex; + flex-direction: column; + align-items: center; + background-color: rgba(255, 255, 255, 0.9); + border-radius: 8px; + padding: 15px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + } + + .error-indicator span { + font-size: 24px; + margin-bottom: 10px; + } + + @keyframes spin { + to { transform: rotate(360deg); } + } + `; + document.head.appendChild(style); +}); +function checkAndRender3DAvatar() { + const avatarImage = document.getElementById('avatar-image'); + const avatarContainer = document.querySelector('.avatar-image-container'); + + if (!avatarContainer) { + console.error('Avatar container not found'); + return; + } + + if (avatarImage) { + avatarImage.style.opacity = 0; + } + + try { + const initialLoadingIndicator = document.createElement('div'); + initialLoadingIndicator.id = 'initial-3d-loading'; + initialLoadingIndicator.className = 'loading-indicator'; + initialLoadingIndicator.innerHTML = ` +

+
Initializing 3D View...
+ `; + initialLoadingIndicator.style.position = 'absolute'; + initialLoadingIndicator.style.top = '50%'; + initialLoadingIndicator.style.left = '50%'; + initialLoadingIndicator.style.transform = 'translate(-50%, -50%)'; + initialLoadingIndicator.style.textAlign = 'center'; + initialLoadingIndicator.style.zIndex = '10'; + avatarContainer.appendChild(initialLoadingIndicator); + + fetch('/avatar/3d') + .then(response => { + if (!response.ok) throw new Error('Failed to fetch 3D avatar data'); + return response.json(); + }) + .then(data => { + const loadingIndicator = document.getElementById('initial-3d-loading'); + if (loadingIndicator) loadingIndicator.remove(); + + if (data.state === 'Completed' && data.imageUrl) { + return fetch(`/cdn_local/${data.imageUrl}`) + .then(modelResponse => { + if (!modelResponse.ok) throw new Error('Failed to fetch 3D model config'); + return modelResponse.json(); + }) + .then(modelData => { + current3DHash = data.imageUrl; + render3DAvatar(modelData); + }); + } else if (data.state === 'Pending') { + pollFor3DAvatar(); + } else { + throw new Error('Invalid 3D avatar state'); + } + }) + .catch(error => { + console.error('Error in 3D avatar rendering:', error); + + const loadingIndicator = document.getElementById('initial-3d-loading'); + if (loadingIndicator) loadingIndicator.remove(); + + show2DAvatar(); + + const errorIcon = document.createElement('div'); + errorIcon.className = 'error-indicator'; + errorIcon.innerHTML = '
Failed to initialize 3D view
'; + errorIcon.style.position = 'absolute'; + errorIcon.style.top = '50%'; + errorIcon.style.left = '50%'; + errorIcon.style.transform = 'translate(-50%, -50%)'; + errorIcon.style.textAlign = 'center'; + errorIcon.style.color = '#ff3333'; + avatarContainer.appendChild(errorIcon); + + setTimeout(() => { + if (errorIcon && errorIcon.parentNode) { + errorIcon.remove(); + } + }, 3000); + }); + } catch (error) { + console.error('Error in 3D avatar initialization:', error); + show2DAvatar(); + } +} + +function tween(start, end, duration, onUpdate, onComplete) { + let startTime = Date.now(); + function update() { + let now = Date.now(); + let progress = Math.min((now - startTime) / duration, 1); + let value = start + (end - start) * progress; + onUpdate(value); + if (progress < 1) { + requestAnimationFrame(update); + } else { + onComplete(); + } + } + update(); +} + +async function pollFor3DAvatar() { + const maxAttempts = 30; + let attempts = 0; + + const avatarImage = document.getElementById('avatar-image'); + const avatarContainer = document.querySelector('.avatar-image-container'); + + if (!avatarContainer) { + console.error('Avatar container not found'); + return; + } + + const loadingIndicator = document.createElement('div'); + loadingIndicator.id = '3d-avatar-spinner'; + loadingIndicator.className = 'loading-indicator'; + loadingIndicator.innerHTML = ` +
+
+
+
Loading 3D Avatar...
+ `; + loadingIndicator.style.position = 'absolute'; + loadingIndicator.style.top = '50%'; + loadingIndicator.style.left = '50%'; + loadingIndicator.style.transform = 'translate(-50%, -50%)'; + loadingIndicator.style.textAlign = 'center'; + loadingIndicator.style.zIndex = '10'; + avatarContainer.appendChild(loadingIndicator); + + tween(1, 0, 300, + (value) => { + if (avatarImage) avatarImage.style.opacity = value; + }, + () => {} + ); + + const poll = async () => { + attempts++; + try { + const response = await fetch('/avatar/3d'); + if (!response.ok) throw new Error('Network response was not ok'); + + const data = await response.json(); + + if (data.state === 'Completed' && data.imageUrl) { + const modelResponse = await fetch(`/cdn_local/${data.imageUrl}`); + if (!modelResponse.ok) throw new Error('Failed to fetch model config'); + + const modelData = await modelResponse.json(); + current3DHash = data.imageUrl; + + const loadingSpinner = document.getElementById('3d-avatar-spinner'); + if (loadingSpinner) loadingSpinner.remove(); + + render3DAvatar(modelData); + } else if (data.state === 'Pending' && attempts < maxAttempts) { + setTimeout(poll, 500); + } else { + throw new Error('Avatar rendering failed or timed out'); + } + } catch (error) { + console.error('Error in 3D avatar polling:', error); + + const loadingSpinner = document.getElementById('3d-avatar-spinner'); + if (loadingSpinner) loadingSpinner.remove(); + + show2DAvatar(); + + if (attempts >= maxAttempts) { + const currentAvatarContainer = document.querySelector('.avatar-image-container'); + if (currentAvatarContainer) { + var errorIcon = document.createElement('div'); + errorIcon.className = 'error-indicator'; + errorIcon.innerHTML = '
Failed to load 3D avatar
'; + errorIcon.style.position = 'absolute'; + errorIcon.style.top = '50%'; + errorIcon.style.left = '50%'; + errorIcon.style.transform = 'translate(-50%, -50%)'; + errorIcon.style.textAlign = 'center'; + errorIcon.style.color = '#ff3333'; + currentAvatarContainer.appendChild(errorIcon); + + setTimeout(() => { + if (errorIcon && errorIcon.parentNode) { + errorIcon.remove(); + } + }, 3000); + } + } + } + }; + + await poll(); +} + +async function request3DAvatar() { + const avatarContainer = document.querySelector('.avatar-image-container'); + if (!avatarContainer) { + console.error('Avatar container not found'); + return; + } + + const loadingIndicator = document.createElement('div'); + loadingIndicator.id = 'request-3d-loading'; + loadingIndicator.className = 'loading-indicator'; + loadingIndicator.innerHTML = ` +
+
+
+
Requesting 3D Avatar...
+ `; + loadingIndicator.style.position = 'absolute'; + loadingIndicator.style.top = '50%'; + loadingIndicator.style.left = '50%'; + loadingIndicator.style.transform = 'translate(-50%, -50%)'; + loadingIndicator.style.textAlign = 'center'; + loadingIndicator.style.zIndex = '10'; + avatarContainer.appendChild(loadingIndicator); + + try { + setTimeout(() => { + const initialLoading = document.getElementById('request-3d-loading'); + if (initialLoading) initialLoading.remove(); + pollFor3DAvatar(); + }, 500); + } catch (error) { + console.error('Error requesting 3D avatar:', error); + const loadingIndicator = document.getElementById('request-3d-loading'); + if (loadingIndicator) loadingIndicator.remove(); + show2DAvatar(); + } +} +function render3DAvatar(modelData) { + const avatarContainer = document.querySelector('.avatar-image-container'); + + if (!avatarContainer) { + console.error('Avatar container not found for 3D rendering'); + return; + } + + const existingCanvas = avatarContainer.querySelector('canvas'); + if (existingCanvas) existingCanvas.remove(); + + const canvas = document.createElement('canvas'); + canvas.style.width = '100%'; + canvas.style.height = '100%'; + canvas.style.position = 'absolute'; + canvas.style.zIndex = '1'; + avatarContainer.appendChild(canvas); + + const scene = new THREE.Scene(); + scene.background = null; + + const camera = new THREE.PerspectiveCamera( + 45, + canvas.clientWidth / canvas.clientHeight, + 0.1, + 1000 + ); + + const avatarGroup = new THREE.Group(); + scene.add(avatarGroup); + + avatarGroup.position.set(0, 0, 0); + + addLightsToScene(scene, camera, false); + + const renderer = new THREE.WebGLRenderer({ + canvas, + antialias: true, + alpha: true, + preserveDrawingBuffer: true + }); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(canvas.clientWidth, canvas.clientHeight); + + const controls = new THREE.OrbitControls(camera, renderer.domElement); + controls.enableDamping = true; + controls.dampingFactor = 0.05; + controls.screenSpacePanning = false; + controls.minDistance = 0; + controls.maxDistance = 15; + controls.maxPolarAngle = Math.PI / 1.5; + controls.autoRotate = true; + controls.autoRotateSpeed = 3.0; + + const mtlLoader = new THREE.MTLLoader(); + const objLoader = new THREE.OBJLoader(); + const textureLoader = new THREE.TextureLoader(); + + const modelLoadingIndicator = document.createElement('div'); + modelLoadingIndicator.id = 'model-loading-indicator'; + modelLoadingIndicator.className = 'loading-indicator'; + modelLoadingIndicator.innerHTML = ` +
+
+
+
Loading Model...
+ `; + modelLoadingIndicator.style.position = 'absolute'; + modelLoadingIndicator.style.top = '50%'; + modelLoadingIndicator.style.left = '50%'; + modelLoadingIndicator.style.transform = 'translate(-50%, -50%)'; + modelLoadingIndicator.style.textAlign = 'center'; + modelLoadingIndicator.style.zIndex = '10'; + avatarContainer.appendChild(modelLoadingIndicator); + + fetch(`/cdn_local/${modelData.mtl}`) + .then(response => response.text()) + .then(mtlContent => { + const cleanMTLContent = mtlContent + .replace(/^map_Ka\s+.*$/gm, '') + .replace(/^map_Kd\s+.*$/gm, '') + .replace(/^map_d\s+.*$/gm, '') + .replace(/^\s*[\r\n]/gm, ''); + + const materials = mtlLoader.parse(cleanMTLContent); + materials.preload(); + + for (const key in materials.materials) { + if (materials.materials.hasOwnProperty(key)) { + const material = materials.materials[key]; + material.transparent = false; + material.opacity = 1.0; + material.side = THREE.DoubleSide; + material.alphaTest = 0; + material.depthWrite = true; + material.depthTest = true; + + material.map = null; + material.mapKa = null; + material.mapKd = null; + material.mapKs = null; + material.mapD = null; + + material.color = material.color || new THREE.Color(0xffffff); + material.specular = material.specular || new THREE.Color(0x111111); + material.shininess = material.shininess || 30; + } + } + + objLoader.setMaterials(materials); + + objLoader.load(`/cdn_local/${modelData.obj}`, (object) => { + const loadingIndicator = document.getElementById('model-loading-indicator'); + if (loadingIndicator) loadingIndicator.remove(); + + avatarGroup.add(object); + + const bbox = new THREE.Box3().setFromObject(object); + const center = new THREE.Vector3(); + bbox.getCenter(center); + object.position.sub(center); + + const size = bbox.getSize(new THREE.Vector3()); + const maxDim = Math.max(size.x, size.y, size.z); + const scale = 2 / maxDim; + object.scale.set(scale, scale, scale); + + const newBbox = new THREE.Box3().setFromObject(object); + const newCenter = new THREE.Vector3(); + newBbox.getCenter(newCenter); + object.position.sub(newCenter); + + camera.position.z = -3; + camera.lookAt(avatarGroup.position); + + if (modelData.textures && modelData.textures.length > 0) { + textureLoader.load(`/cdn_local/${modelData.textures[0]}`, (texture) => { + object.traverse((child) => { + if (child.isMesh) { + child.material.map = texture; + child.material.needsUpdate = true; + } + }); + }); + } + + function animate() { + requestAnimationFrame(animate); + controls.update(); + renderer.render(scene, camera); + } + + animate(); + + function handleResize() { + const width = canvas.clientWidth; + const height = canvas.clientHeight; + camera.aspect = width / height; + camera.updateProjectionMatrix(); + renderer.setSize(width, height, false); + } + + window.addEventListener('resize', handleResize); + setTimeout(handleResize, 0); + + canvas.addEventListener('dblclick', () => controls.reset()); + controls.addEventListener('start', () => controls.autoRotate = false); + controls.addEventListener('end', () => { + setTimeout(() => controls.autoRotate = true, 1000); + }); + + }, + (xhr) => { + const loadingText = document.querySelector('#model-loading-indicator .loading-text'); + if (loadingText) { + const percentComplete = Math.round((xhr.loaded / xhr.total) * 100); + loadingText.textContent = `Loading Model... ${percentComplete}%`; + } + }, + (error) => { + console.error('Error loading OBJ model:', error); + const loadingIndicator = document.getElementById('model-loading-indicator'); + if (loadingIndicator) loadingIndicator.remove(); + show2DAvatar(); + + const currentAvatarContainer = document.querySelector('.avatar-image-container'); + if (currentAvatarContainer) { + var errorIcon = document.createElement('div'); + errorIcon.className = 'error-indicator'; + errorIcon.innerHTML = '
Failed to load 3D model
'; + errorIcon.style.position = 'absolute'; + errorIcon.style.top = '50%'; + errorIcon.style.left = '50%'; + errorIcon.style.transform = 'translate(-50%, -50%)'; + errorIcon.style.textAlign = 'center'; + errorIcon.style.color = '#ff3333'; + currentAvatarContainer.appendChild(errorIcon); + + setTimeout(() => { + if (errorIcon && errorIcon.parentNode) { + errorIcon.remove(); + } + }, 3000); + } + }); + + }, (error) => { + console.error('Error loading MTL file:', error); + const loadingIndicator = document.getElementById('model-loading-indicator'); + if (loadingIndicator) loadingIndicator.remove(); + show2DAvatar(); + + const currentAvatarContainer = document.querySelector('.avatar-image-container'); + if (currentAvatarContainer) { + var errorIcon = document.createElement('div'); + errorIcon.className = 'error-indicator'; + errorIcon.innerHTML = '
Failed to load material
'; + errorIcon.style.position = 'absolute'; + errorIcon.style.top = '50%'; + errorIcon.style.left = '50%'; + errorIcon.style.transform = 'translate(-50%, -50%)'; + errorIcon.style.textAlign = 'center'; + errorIcon.style.color = '#ff3333'; + currentAvatarContainer.appendChild(errorIcon); + + setTimeout(() => { + if (errorIcon && errorIcon.parentNode) { + errorIcon.remove(); + } + }, 3000); + } + }); +} + +function addLightsToScene(scene, camera, useDynamicLighting) { + if (useDynamicLighting) { + const ambient = new THREE.AmbientLight(0x444444); + camera.add(ambient); + + const keylight = new THREE.DirectionalLight(0xd4d4d4); + keylight.target = camera; + keylight.position.set(-7.5, 0.5, -6.0).normalize(); + camera.add(keylight); + + const fillLight = new THREE.DirectionalLight(0xacacac); + fillLight.target = camera; + fillLight.position.set(20.0, 4.0, -0).normalize(); + camera.add(fillLight); + + const rimLight = new THREE.DirectionalLight(0xacacac); + rimLight.target = camera; + rimLight.position.set(0, 1, 1).normalize(); + camera.add(rimLight); + } else { + const ambient = new THREE.AmbientLight(0x878780); + scene.add(ambient); + + const sunLight = new THREE.DirectionalLight(0xacacac); + sunLight.position.set(-0.671597898, 0.671597898, 0.312909544).normalize(); + scene.add(sunLight); + + const backLight = new THREE.DirectionalLight(0x444444); + const backLightPos = new THREE.Vector3() + .copy(sunLight.position) + .negate() + .normalize(); + backLight.position.set(backLightPos); + scene.add(backLight); + } +} +function show2DAvatar() { + const avatarImage = document.getElementById('avatar-image'); + const avatarContainer = document.querySelector('.avatar-image-container'); + + if (!avatarContainer) { + console.error('Avatar container not found'); + return; + } + + const existingCanvas = avatarContainer.querySelector('canvas'); + if (existingCanvas) { + existingCanvas.remove(); + } + + if (avatarImage) { + avatarImage.style.opacity = 1; + } +} + + +async function RedrawAvatar() { + if (is3DViewEnabled) { + await request3DAvatar(); + } else { + var RedrawResponse = await fetch('/avatar/forceredraw', { + method: 'POST' + }); + if (RedrawResponse.status == 200) { + WaitForRenderReady(); + } else if (RedrawResponse.status == 400) { + alert("Something went wrong!"); + } else if (RedrawResponse.status == 429) { + alert("Slow down! You recently asked for a redraw!"); + } else { + alert("Something went wrong!"); + } + } +} + + +async function WaitForRenderReady() { + var RenderWaitingText = document.getElementById('render-waiting-text') + RenderWaitingText.style.display = 'block' + while (true) { + var RenderReadyResponse = await fetch('/avatar/isthumbnailready') + if (RenderReadyResponse.status == 200) { + var RenderReadyResponseJSON = await RenderReadyResponse.json() + if (RenderReadyResponseJSON["ready"]) { + break + } + } + await new Promise(r => setTimeout(r, 500)); + } + RenderWaitingText.style.display = 'none' + var AvatarImage = document.getElementById('avatar-image') + var AvatarSource = AvatarImage.src // Unmodified src "/Thumbs/Avatar.ashx?x=420&y=420&userId=1" + if (AvatarSource.includes('&refresh=')) { + AvatarSource = AvatarSource.substring(0, AvatarSource.indexOf('&refresh=')) + } + AvatarImage.src = AvatarSource + '&refresh=' + Math.random() +} + +async function UpdateAvatar() { + var SaveChangesButton = document.getElementById('savechanges-btn') + SaveChangesButton.style.display = 'none' + var CurrentlyEquippedArray = [] + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + CurrentlyEquippedArray.push(AssetTypeDict[AssetsCurrentlyEquipped[i]].id) + } + var UpdateAvatarResponse = await fetch('/avatar/setavatar', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + 'bodyColors': [UserBodyColors.Head, UserBodyColors.Torso, UserBodyColors.LeftArm, UserBodyColors.RightArm, UserBodyColors.LeftLeg, UserBodyColors.RightLeg], + "assets": CurrentlyEquippedArray, + "rigType": rigType, + "scales": UserAvatarScaling + }) + }) + if (UpdateAvatarResponse.status == 200) { + WaitForRenderReady() + } else if (UpdateAvatarResponse.status == 400) { + alert('Something went wrong!') + } else if (UpdateAvatarResponse.status == 429) { + alert('Slow down! You are changing your avatar too fast!') + SaveChangesButton.style.display = 'block' + } else { + alert('Something went wrong!') + } +} + +async function ConvertBodyColortoHex( bodycolor ) { + for (let i = 0; i < AvatarRules.bodyColorsPalette.length; i++) { + if (AvatarRules.bodyColorsPalette[i].brickColorId == bodycolor) { + return AvatarRules.bodyColorsPalette[i].hexColor + } + } + return '#FFFFFF' +} + +async function UpdateAssetCards( assetId ) { + var AssetCards = document.getElementsByClassName(`asset-card-${assetId}`) + var IsAssetEquipped = AssetsCurrentlyEquipped.includes(assetId) + for (let i = 0; i < AssetCards.length; i++) { + var ToggleWearButton = AssetCards[i].getElementsByClassName('asset-card-button')[0] + if (IsAssetEquipped) { + ToggleWearButton.innerHTML = 'Remove' + } else { + ToggleWearButton.innerHTML = 'Wear' + if (AssetCards[i].getAttribute("data-isundercurrentwearing") == "true") { + AssetCards[i].remove() + } + } + } +} + +async function WearAsset( assetId ) { + if (AssetsCurrentlyEquipped.includes(assetId)) { + return + } + assetType = AssetTypeDict[assetId].assetType + var LimitForAssetType = await GetLimitForAssetType(assetType) + var CountForAssetType = 0 + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + if (AssetTypeDict[AssetsCurrentlyEquipped[i]].assetType == assetType) { + CountForAssetType++ + } + } + if (CountForAssetType >= LimitForAssetType) { + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + if (AssetTypeDict[AssetsCurrentlyEquipped[i]].assetType == assetType) { + var AssetId = AssetsCurrentlyEquipped[i] + AssetsCurrentlyEquipped.splice(i, 1) + UpdateAssetCards(AssetId) + break + } + } + } + if (LimitForAssetType > 0) { + AssetsCurrentlyEquipped.push(assetId) + var CurrentlyWearingCardHolder = document.getElementById('currentlywearing-card-holder') + var NewAssetCard = await CreateNewAssetCard(assetId, AssetTypeDict[assetId].name) + CurrentlyWearingCardHolder.appendChild(NewAssetCard) + NewAssetCard.setAttribute("data-isundercurrentwearing", "true") + } + UpdateAssetCards(assetId) + document.getElementById('savechanges-btn').style.display = 'block' +} + +async function RemoveAsset( assetId ) { + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + if (AssetsCurrentlyEquipped[i] == assetId) { + AssetsCurrentlyEquipped.splice(i, 1) + break + } + } + UpdateAssetCards(assetId) + document.getElementById('savechanges-btn').style.display = 'block' +} + +async function CreateNewAssetCard( AssetId, Name ) { + var NewAssetCard = AssetCardTemplate.cloneNode(true) + NewAssetCard.setAttribute("class", NewAssetCard.getAttribute("class").replace("template", AssetId)) + NewAssetCard.style.display = 'block' + var AssetImage = NewAssetCard.getElementsByClassName('asset-card-img')[0] + var AssetName = NewAssetCard.getElementsByClassName('asset-card-assetname')[0] + var AssetToggleButton = NewAssetCard.getElementsByClassName('asset-card-button')[0] + AssetImage.src = `/Thumbs/Asset.ashx?x=150&y=150&assetId=${AssetId}` + AssetName.innerText = Name + AssetName.href = `/catalog/${AssetId}/` + + //var AssetsCardHolder = document.getElementById('assets-card-holder') + //AssetsCardHolder.appendChild(NewAssetCard) + + if (AssetsCurrentlyEquipped.includes(AssetId)) { + AssetToggleButton.innerText = 'Remove' + } + if ( AssetTypeDict[AssetId].moderation_status == 0 ) { + AssetToggleButton.addEventListener('click', async () => { + if (AssetToggleButton.innerText == 'Wear') { + AssetToggleButton.innerText = 'Remove' + WearAsset(AssetId) + } else if (AssetToggleButton.innerText == 'Remove') { + AssetToggleButton.innerText = 'Wear' + RemoveAsset(AssetId) + } + }) + } else { + AssetToggleButton.disabled = true + if ( AssetTypeDict[AssetId].moderation_status == 1 ) { + AssetToggleButton.innerText = 'Pending' + } else if ( AssetTypeDict[AssetId].moderation_status == 2 ) { + AssetToggleButton.innerText = 'Deleted' + } + } + + return NewAssetCard +} + +async function LoadPageForAsset( AssetType ) { + var AssetsArray = await GetAssetsForType(AssetType, PageNumber) + var AssetsCardHolder = document.getElementById('assets-card-holder') + AssetsCardHolder.innerHTML = '' + for (let i = 0; i < AssetsArray.length; i++) { + var Asset = AssetsArray[i] + var AssetCard = await CreateNewAssetCard(Asset.id, Asset.name) + AssetsCardHolder.appendChild(AssetCard) + } + + if (PageNumber > 0) { + PaginationPreviousBtn.disabled = false + } else { + PaginationPreviousBtn.disabled = true + } + if (!IsThisTheLastPage) { + PaginationNextBtn.disabled = false + } else { + PaginationNextBtn.disabled = true + } + if (AssetsArray.length == 0) { + AssetsCardHolder.innerHTML = '

No items found

' + } +} + +var ColorPickerSelectedBodyPart = -1 + +document.addEventListener('DOMContentLoaded', async () => { + const ResponseAvatarRules = await fetch('/static/avatarrules.json?version=2') + AvatarRules = await ResponseAvatarRules.json() + AssetCardTemplate = document.getElementsByClassName('asset-card-template')[0] + PaginationNextBtn = document.getElementById('pagination-next-btn') + PaginationPreviousBtn = document.getElementById('pagination-back-btn') + PaginationText = document.getElementById('pagination-page-number') + const ResponseUserAvatar = await fetch('/avatar/getavatar') + const UserAvatar = await ResponseUserAvatar.json() // This should respond with {"bodyColors": [headColor, torsoColor, leftArmColor, rightArmColor, leftLegColor, rightLegColor], "currentlyWearing": [assetId]} + var CurrentlyWearingCardHolder = document.getElementById('currentlywearing-card-holder') + for (let i = 0; i < UserAvatar.currentlyWearing.length; i++) { + var Asset = UserAvatar.currentlyWearing[i] + AssetTypeDict[Asset.id] = {"id": Asset.id, "assetType": Asset.type, "name": Asset.name, "moderation_status": Asset.moderation_status} + AssetsCurrentlyEquipped.push(Asset.id) + var AssetCard = await CreateNewAssetCard(Asset.id, Asset.name) + CurrentlyWearingCardHolder.appendChild(AssetCard) + AssetCard.setAttribute("data-isundercurrentwearing", "true") + } + + UserBodyColors.Head = UserAvatar.bodyColors[0] + UserBodyColors.Torso = UserAvatar.bodyColors[1] + UserBodyColors.LeftArm = UserAvatar.bodyColors[2] + UserBodyColors.RightArm = UserAvatar.bodyColors[3] + UserBodyColors.LeftLeg = UserAvatar.bodyColors[4] + UserBodyColors.RightLeg = UserAvatar.bodyColors[5] + + const SaveChangesButton = document.getElementById('savechanges-btn') + + + document.getElementById('toggle-3d-btn').addEventListener('click', toggle3DView); + + if (is3DViewEnabled) { + document.getElementById('toggle-3d-btn').innerText = '2D'; + checkAndRender3DAvatar(); + } else { + document.getElementById('toggle-3d-btn').innerText = '3D'; + } + + + const SelectTabInput = document.getElementById('select-tab-input') + const EquipAssetsTab = document.getElementById('equip-assets-tab') + const AvatarScalingTab = document.getElementById('avatar-scaling-tab') + + SelectTabInput.addEventListener('change', () => { + var selectedTabIndex = Number(SelectTabInput.options[SelectTabInput.selectedIndex].getAttribute('data-tab')) + if (selectedTabIndex == 1) { + EquipAssetsTab.style.display = 'block' + AvatarScalingTab.style.display = 'none' + } else if (selectedTabIndex == 2) { + EquipAssetsTab.style.display = 'none' + AvatarScalingTab.style.display = 'block' + } + }) +// haha i touched it! Fuck ou!!!! + const HeadColor = document.getElementById('head-bodycolor') + const TorsoColor = document.getElementById('torso-bodycolor') + const LeftArmColor = document.getElementById('leftarm-bodycolor') + const RightArmColor = document.getElementById('rightarm-bodycolor') + const LeftLegColor = document.getElementById('leftleg-bodycolor') + const RightLegColor = document.getElementById('rightleg-bodycolor') + + HeadColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.Head) + TorsoColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.Torso) + LeftArmColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.LeftArm) + RightArmColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.RightArm) + LeftLegColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.LeftLeg) + RightLegColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.RightLeg) + + HeadColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 0 + ColorPickerOverlay.style.display = 'block' + }) + TorsoColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 1 + ColorPickerOverlay.style.display = 'block' + }) + LeftArmColor.addEventListener('click', async () => { + await new Promise(r => setTimeout(r, 100)); // This fixes an issue where the torso and left arm would be selected at the same time + ColorPickerSelectedBodyPart = 2 + ColorPickerOverlay.style.display = 'block' + }) + RightArmColor.addEventListener('click', async () => { + await new Promise(r => setTimeout(r, 100)); + ColorPickerSelectedBodyPart = 3 + ColorPickerOverlay.style.display = 'block' + }) + LeftLegColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 4 + ColorPickerOverlay.style.display = 'block' + }) + RightLegColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 5 + ColorPickerOverlay.style.display = 'block' + }) + + const ColorPickerOverlay = document.getElementById('color-picker-overlay') + const ColorPickerContent = document.getElementById('color-picker-content') + const ColorPickerClose = document.getElementById('color-picker-close') + + ColorPickerClose.addEventListener('click', () => { + ColorPickerOverlay.style.display = 'none' + }) + // We need to add each BrickColor to the color picker content + for (let i = 0; i < AvatarRules.bodyColorsPalette.length; i++) { + const ColorPickerItem = document.createElement('p') + ColorPickerItem.classList.add('color-picker-item') + ColorPickerItem.setAttribute("title", AvatarRules.bodyColorsPalette[i].name) + ColorPickerItem.setAttribute("data-brickcolorid", AvatarRules.bodyColorsPalette[i].brickColorId) + ColorPickerItem.style.backgroundColor = AvatarRules.bodyColorsPalette[i].hexColor + ColorPickerContent.appendChild(ColorPickerItem) + } + const ColorPickerItems = document.getElementsByClassName('color-picker-item') + for (let i = 0; i < ColorPickerItems.length; i++) { + ColorPickerItems[i].addEventListener('click', async () => { + if (ColorPickerSelectedBodyPart > -1) { + var SelectedBrickColor = ColorPickerItems[i].getAttribute('data-brickcolorid') + if (ColorPickerSelectedBodyPart == 0) { + HeadColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.Head = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 1) { + TorsoColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.Torso = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 2) { + LeftArmColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.LeftArm = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 3) { + RightArmColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.RightArm = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 4) { + LeftLegColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.LeftLeg = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 5) { + RightLegColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.RightLeg = Number(SelectedBrickColor) + } + } + SaveChangesButton.style.display = 'block' + ColorPickerSelectedBodyPart = -1 + ColorPickerOverlay.style.display = 'none' + }) + } + + PaginationNextBtn.addEventListener('click', () => { + if (PaginationNextBtn.disabled){ + return + } + PaginationPreviousBtn.disabled = true + PaginationNextBtn.disabled = true + if (!IsThisTheLastPage) { + PageNumber += 1 + LoadPageForAsset(SelectedAssetType) + } + PaginationText.innerText = `Page ${PageNumber+1}` + }) + PaginationPreviousBtn.addEventListener('click', () => { + if (PaginationPreviousBtn.disabled){ + return + } + PaginationPreviousBtn.disabled = true + PaginationNextBtn.disabled = true + if (PageNumber > 0) { + PageNumber -= 1 + LoadPageForAsset(SelectedAssetType) + } + PaginationText.innerText = `Page ${PageNumber+1}` + }) + var SelectAssetTypeElement = document.getElementById('select-asset-type') + SelectAssetTypeElement.addEventListener('change', () => { + // The option element has a data-assettype attribute which we can use to get the asset type + SelectedAssetType = Number(SelectAssetTypeElement.options[SelectAssetTypeElement.selectedIndex].getAttribute('data-type')) + PageNumber = 0 + PaginationPreviousBtn.disabled = true + PaginationNextBtn.disabled = true + PaginationText.innerText = `Page ${PageNumber+1}` + LoadPageForAsset(SelectedAssetType) + }) + + const changeRigTypeBtn = document.getElementById('change-rigtype-btn') + if ( UserAvatar.rigType == "R6" ) { + changeRigTypeBtn.innerText = "R15" + } else { + changeRigTypeBtn.innerText = "R6" + } + rigType = UserAvatar.rigType + changeRigTypeBtn.addEventListener('click', async () => { + changeRigTypeBtn.innerText = rigType + if ( rigType == "R6" ) { + rigType = "R15" + } else { + rigType = "R6" + } + SaveChangesButton.style.display = 'block' + }) + + async function HandleScaleSlider( scaleName ) { + UserAvatarScaling[scaleName] = UserAvatar.scales[scaleName] + const sliderParent = document.getElementById(`${scaleName}-scale-group`) + + const SliderInput = sliderParent.getElementsByClassName("scaling-slider")[0] + const SliderValueText = sliderParent.getElementsByClassName("scaling-value")[0] + const ScaleRules = AvatarRules.scales[scaleName] + + SliderInput.min = ScaleRules.min * 100 + SliderInput.max = ScaleRules.max * 100 + SliderInput.step = ScaleRules.step * 100 + SliderInput.value = UserAvatar.scales[scaleName] * 100 + + SliderValueText.innerText = `${UserAvatar.scales[scaleName] * 100}%` + + SliderInput.addEventListener('input', () => { + SliderValueText.innerText = `${SliderInput.value}%` + SaveChangesButton.style.display = 'block' + UserAvatarScaling[scaleName] = SliderInput.value / 100 + }) + } + + await HandleScaleSlider( "height" ) + await HandleScaleSlider( "width" ) + await HandleScaleSlider( "head" ) + await HandleScaleSlider( "proportion" ) + + LoadPageForAsset(11) // Default: Shirt +}) \ No newline at end of file diff --git a/app/static/js/assetrate.js b/app/static/js/assetrate.js new file mode 100644 index 0000000..76d0ce0 --- /dev/null +++ b/app/static/js/assetrate.js @@ -0,0 +1,216 @@ +async function initVoteContainer( containerElement ) { + const assetId = containerElement.getAttribute('data-assetid') + const XCSRFToken = document.getElementById('X-CSRF-TOKEN').getAttribute('data-xcsrf') + if ( XCSRFToken == null ) { + console.log('XCSRFToken is null, cannot continue') + return + } + var AssetLikesCount = Number(containerElement.getAttribute("data-likes")) + var AssetDislikesCount = Number(containerElement.getAttribute("data-dislikes")) + var UserVoteStatus = containerElement.getAttribute("data-uservote-status") // 2 = Dislike, 0 = No vote, 1 = Like + + const LikeButton = containerElement.getElementsByClassName('icon-like')[0] + const DislikeButton = containerElement.getElementsByClassName('icon-dislike')[0] + const VotePercentageElement = containerElement.getElementsByClassName('votepercentage')[0] + const LikesElementText = containerElement.getElementsByClassName('vote-up-text')[0] + const DislikesElementText = containerElement.getElementsByClassName('vote-down-text')[0] + + const VoteFeedbackText = containerElement.getElementsByClassName('vote-feedback-text')[0] + + const UpdateVoteCount = async () => { + LikesElementText.textContent = AssetLikesCount + LikesElementText.setAttribute("title", AssetLikesCount) + DislikesElementText.textContent = AssetDislikesCount + DislikesElementText.setAttribute("title", AssetDislikesCount) + + const TotalVotes = AssetLikesCount + AssetDislikesCount + var LikePercentage = Math.round((AssetLikesCount / TotalVotes) * 100) + if ( TotalVotes == 0 ) { + LikePercentage = 50 + } else if ( TotalVotes == 1 ) { // AssetLikesCount / TotalVotes may be Infinity + LikePercentage = AssetLikesCount == 1 ? 100 : 0 + } + VotePercentageElement.style.width = `${LikePercentage}%` + } + const UpdateVoteButtons = async () => { + // Check if the "selected" className is present, if so, remove it if it's not the correct one + if ( LikeButton.classList.contains('selected') ) { + if ( UserVoteStatus != 1 ) { + LikeButton.classList.remove('selected') + } + } else if ( UserVoteStatus == 1 ) { + LikeButton.classList.add('selected') + } + if ( DislikeButton.classList.contains('selected') ) { + if ( UserVoteStatus != 2 ) { + DislikeButton.classList.remove('selected') + } + } else if ( UserVoteStatus == 2 ) { + DislikeButton.classList.add('selected') + } + } + const UpdateUserVoteStatus = async ( newVoteStatus ) => { + var OriginalVoteStatus = UserVoteStatus; + var OriginalLikesCount = AssetLikesCount; + var OriginalDislikesCount = AssetDislikesCount; + let ServerVoteResponse; + if ( newVoteStatus == UserVoteStatus ) { + return; + } + UserVoteStatus = newVoteStatus + if ( newVoteStatus == 1 ) { + AssetLikesCount++ + if ( OriginalVoteStatus == 2 ) { + AssetDislikesCount-- + } + } + if ( newVoteStatus == 2 ) { + AssetDislikesCount++ + if ( OriginalVoteStatus == 1 ) { + AssetLikesCount-- + } + } + if ( newVoteStatus == 0 ) { + if ( OriginalVoteStatus == 1 ) { + AssetLikesCount-- + } + if ( OriginalVoteStatus == 2 ) { + AssetDislikesCount-- + } + } + await UpdateVoteButtons() + await UpdateVoteCount() + + try { + ServerVoteResponse = await fetch(`/vote/${assetId}/${newVoteStatus}`,{ + method: 'POST', + headers: { + 'X-CSRF-TOKEN': XCSRFToken + } + }) + } catch (error) { + console.log(`Error occured while trying to update user vote: ${error}`) + return + } + if ( ServerVoteResponse.status != 200 ) { + console.log(`Server responded with status code ${ServerVoteResponse.status} while trying to update user vote`) + UserVoteStatus = OriginalVoteStatus + AssetLikesCount = OriginalLikesCount + AssetDislikesCount = OriginalDislikesCount + VoteFeedbackText.textContent = `Error while trying to update vote, Status: ${ServerVoteResponse.status}` + VoteFeedbackText.style.display = 'block' + await UpdateVoteButtons() + await UpdateVoteCount() + return + } + return; + } + await UpdateVoteCount() + await UpdateVoteButtons() + + LikeButton.addEventListener('click', async () => { + // Check if its already selected, if so, remove the vote + if ( LikeButton.classList.contains('selected') ) { + await UpdateUserVoteStatus(0) + return + } + await UpdateUserVoteStatus(1) + }) + DislikeButton.addEventListener('click', async () => { + // Check if its already selected, if so, remove the vote + if ( DislikeButton.classList.contains('selected') ) { + await UpdateUserVoteStatus(0) + return + } + await UpdateUserVoteStatus(2) + }) +} + +async function initFavoriteContainer( containerElement ) { + const assetId = containerElement.getAttribute('data-assetid') + const XCSRFToken = document.getElementById('X-CSRF-TOKEN').getAttribute('data-xcsrf') + if ( XCSRFToken == null ) { + console.log('XCSRFToken is null, cannot continue') + return + } + var FavoriteCount = Number(containerElement.getAttribute("data-favorite-count")) + var UserFavoriteStatus = containerElement.getAttribute("data-userfavorite-status") == "True" ? true : false + const FavoriteButton = containerElement.getElementsByClassName('icon-favorite')[0] + const FavoriteButtonText = containerElement.getElementsByClassName('text-favorite')[0] + + const UpdateFavoriteCount = async () => { + FavoriteButtonText.textContent = FavoriteCount + FavoriteButtonText.setAttribute("title", FavoriteCount) + } + const UpdateFavoriteButton = async () => { + if ( UserFavoriteStatus ) { + FavoriteButton.classList.add('favorited') + } else { + FavoriteButton.classList.remove('favorited') + } + } + const UpdateUserFavoriteStatus = async ( newFavoriteStatus ) => { + var OriginalFavoriteStatus = UserFavoriteStatus; + var OriginalFavoriteCount = FavoriteCount; + let ServerFavoriteResponse; + if ( newFavoriteStatus == UserFavoriteStatus ) { + return; + } + UserFavoriteStatus = newFavoriteStatus + if ( newFavoriteStatus ) { + FavoriteCount++ + } else { + FavoriteCount-- + } + await UpdateFavoriteButton() + await UpdateFavoriteCount() + + try { + if ( newFavoriteStatus ) { + ServerFavoriteResponse = await fetch(`/favorite/${assetId}`,{ + method: 'POST', + headers: { + 'X-CSRF-TOKEN': XCSRFToken + } + }) + } else { + ServerFavoriteResponse = await fetch(`/favorite/${assetId}`,{ + method: 'DELETE', + headers: { + 'X-CSRF-TOKEN': XCSRFToken + } + }) + } + } catch (error) { + console.log(`Error occured while trying to update user favorite: ${error}`) + return + } + if ( ServerFavoriteResponse.status != 200 ) { + console.log(`Server responded with status code ${ServerFavoriteResponse.status} while trying to update user favorite`) + UserFavoriteStatus = OriginalFavoriteStatus + FavoriteCount = OriginalFavoriteCount + await UpdateFavoriteButton() + await UpdateFavoriteCount() + return + } + return; + } + + await UpdateFavoriteButton() + await UpdateFavoriteCount() + + FavoriteButton.addEventListener('click', async () => { + await UpdateUserFavoriteStatus(!UserFavoriteStatus) + }) +} + +document.addEventListener('DOMContentLoaded', async () => { + const assetRateContainers = document.getElementsByClassName('usersVote') + for(let i = 0; i < assetRateContainers.length; i++){ + await initVoteContainer( assetRateContainers[i] ) + } + const assetFavoriteContainers = document.getElementsByClassName('favorite-button-container') + for(let i = 0; i < assetFavoriteContainers.length; i++){ + await initFavoriteContainer( assetFavoriteContainers[i] ) + } +}) \ No newline at end of file diff --git a/app/static/js/bootstrapv3.min.js b/app/static/js/bootstrapv3.min.js new file mode 100644 index 0000000..9bcd2fc --- /dev/null +++ b/app/static/js/bootstrapv3.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/app/static/js/catalog.js b/app/static/js/catalog.js new file mode 100644 index 0000000..9ba5141 --- /dev/null +++ b/app/static/js/catalog.js @@ -0,0 +1,153 @@ +/* Functions used to buy or take assets */ + +function buyAsset(assetId, assetName, expectedPrice, currencyType){ + const PurchaseModal = new bootstrap.Modal(document.getElementById('purchaseModal'), { keyboard: false }) + const purchaseModalContent = document.getElementById('purchase-modal-content') + const purchaseModalTitle = document.getElementById('purchase-modal-title') + const purchaseModalButton = document.getElementById('purchase-modal-btn') + const purchaseModalClose = document.getElementById('purchase-modal-close') + + const csrfToken = document.getElementById('csrf_token').getAttribute('data-csrf-token') + + purchaseModalTitle.textContent = `Confirm purchase of ${assetName}` + purchaseModalContent.textContent = `Are you sure you want to buy ${assetName} for ${expectedPrice == 0 ? 'Free' : expectedPrice}${expectedPrice != 0 ? (currencyType == 0 ? " Robux" : " Tix") : ''}?` + + purchaseModalButton.onclick = () => { + purchaseModalButton.disabled = true + purchaseModalClose.disabled = true + purchaseModalContent.textContent = `Processing purchase...` + fetch(`/catalog/api/purchase`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': csrfToken + }, + body: JSON.stringify({ + assetId: Number(assetId), + expectedPrice: Number(expectedPrice), + currencyType: Number(currencyType) + }) + }).then(response => response.json()).then(data => { + if(data.success){ + window.location.reload() + }else{ + purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${data.message}` + } + }).catch(error => { + purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${error}` + }) + } + purchaseModalButton.disabled = false + purchaseModalClose.disabled = false + PurchaseModal.show() +} + +async function PurchaseLimitedOffer( assetId, assetName, expectedPrice, expectedOwner, itemOwnershipId ) { + const PurchaseModal = new bootstrap.Modal(document.getElementById('purchaseModal'), { keyboard: false }) + const purchaseModalContent = document.getElementById('purchase-modal-content') + const purchaseModalTitle = document.getElementById('purchase-modal-title') + const purchaseModalButton = document.getElementById('purchase-modal-btn') + const purchaseModalClose = document.getElementById('purchase-modal-close') + + const csrfToken = document.getElementById('csrf_token').getAttribute('data-csrf-token') + + purchaseModalTitle.textContent = `Confirm purchase of ${assetName}` + purchaseModalContent.textContent = `Are you sure you want to buy ${assetName} for R$${expectedPrice}?` + + purchaseModalButton.onclick = async () => { + purchaseModalButton.disabled = true + purchaseModalClose.disabled = true + purchaseModalContent.textContent = `Processing purchase...` + var LimitedPurchaseResponse = await fetch("/catalog/api/purchase-limited", { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': csrfToken + }, + body: JSON.stringify({ + assetId: Number(assetId), + expectedPrice: Number(expectedPrice), + expectedOwner: Number(expectedOwner), + itemOwnershipId: Number(itemOwnershipId) + }) + }) + var LimitedPurchaseResponseJson = await LimitedPurchaseResponse.json() + if(LimitedPurchaseResponseJson.success){ + window.location.reload() + } else { + purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${LimitedPurchaseResponseJson.message}` + } + } + purchaseModalButton.disabled = false + purchaseModalClose.disabled = false + PurchaseModal.show() +} + +function updateOffsaleCountdown( offsaleAt ) { + var offsaleElement = document.getElementById('offsale-countdown') + if (!offsaleElement) { + console.warn("Could not find offsale countdown element") + return + } + var timeLeft = offsaleAt - new Date() + if (timeLeft <= 0) { + return + } + var hours = Math.floor(timeLeft / 1000 / 60 / 60) + var minutes = Math.floor(timeLeft / 1000 / 60) % 60 + var seconds = Math.floor(timeLeft / 1000) % 60 + offsaleElement.textContent = `${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}` +} + +document.addEventListener('DOMContentLoaded', async () => { + const AssetInfoMetaTag = document.getElementById('asset-info') + var AssetId = null + var DoesUserOwnAset = false + var AssetName = "" + var isAssetLimited = false + var isAssetOnsale = true + var offsaleAt = null + if(AssetInfoMetaTag){ + AssetId = AssetInfoMetaTag.getAttribute('data-asset-id') + AssetName = AssetInfoMetaTag.getAttribute('data-asset-name') + DoesUserOwnAset = AssetInfoMetaTag.getAttribute('data-user-ownasset') + DoesUserOwnAset = DoesUserOwnAset == "true" ? true : false + isAssetLimited = AssetInfoMetaTag.getAttribute('data-islimited') + isAssetLimited = isAssetLimited == "true" ? true : false + isAssetOnsale = AssetInfoMetaTag.getAttribute('data-asset-onsale') + isAssetOnsale = isAssetOnsale == "true" ? true : false + offsaleAt = AssetInfoMetaTag.getAttribute('data-offsale') + if(offsaleAt != null){ + offsaleAt = new Date(offsaleAt * 1000) + //offsaleAt = Date.UTC(offsaleAt.getFullYear(), offsaleAt.getMonth(), offsaleAt.getDate(), offsaleAt.getHours(), offsaleAt.getMinutes(), offsaleAt.getSeconds()) + //offsaleAt = new Date(offsaleAt) + } + } + + if (offsaleAt != null ){ + updateOffsaleCountdown(offsaleAt) + setInterval(() => { + updateOffsaleCountdown(offsaleAt) + }, 1000) + } + const PurchaseButtons = document.getElementsByClassName('purchase-button') + for(let i = 0; i < PurchaseButtons.length; i++){ + if (!DoesUserOwnAset || (isAssetLimited && !isAssetOnsale)) { + if (!isAssetLimited || isAssetOnsale) { + PurchaseButtons[i].onclick = () => { + if ( !AssetInfoMetaTag ) { + buyAsset(PurchaseButtons[i].getAttribute('data-asset-id'), PurchaseButtons[i].getAttribute('data-asset-name'), PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-currency-type')) + } else { + buyAsset(AssetId, AssetName, PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-currency-type')) + } + } + } else { + PurchaseButtons[i].onclick = async () => { + await PurchaseLimitedOffer(AssetId, AssetName, PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-expectedowner'), PurchaseButtons[i].getAttribute('data-expectedid')) + } + } + } else { + PurchaseButtons[i].setAttribute("class", PurchaseButtons[i].getAttribute("class").replace("purchase-button", "purchase-button disabled")) + } + } +}) \ No newline at end of file diff --git a/app/static/js/global.js b/app/static/js/global.js new file mode 100644 index 0000000..cd9ff69 --- /dev/null +++ b/app/static/js/global.js @@ -0,0 +1,103 @@ + +document.addEventListener('DOMContentLoaded', () => { + const toggleBtns = document.querySelectorAll('.toggle-sidebar'); // all toggle buttons + const sidebar = document.querySelector('.sidebar'); + + toggleBtns.forEach((btn) => { + btn.addEventListener('click', (e) => { + e.stopPropagation(); + sidebar.classList.toggle('show'); + }); + }); + + document.addEventListener('click', (e) => { + if ( + window.innerWidth <= 992 && + sidebar.classList.contains('show') && + !sidebar.contains(e.target) && + !Array.from(toggleBtns).some(btn => btn.contains(e.target)) + ) { + sidebar.classList.remove('show'); + } + }); +}); + + + +function abbreviateNumber(value) { + value = parseInt(value); + if (value >= 1e9) return (value / 1e9).toFixed(1).replace(/\.0$/, '') + 'B'; + if (value >= 1e6) return (value / 1e6).toFixed(1).replace(/\.0$/, '') + 'M'; + if (value >= 1e3) return (value / 1e3).toFixed(1).replace(/\.0$/, '') + 'K'; + return value.toString(); +} + +document.addEventListener("DOMContentLoaded", () => { + const robuxEl = document.getElementById("robux-amount"); + const tixEl = document.getElementById("tix-amount"); + + if (robuxEl) { + const rawRobux = robuxEl.textContent.trim(); + robuxEl.textContent = abbreviateNumber(rawRobux); + } + + if (tixEl) { + const rawTix = tixEl.textContent.trim(); + tixEl.textContent = abbreviateNumber(rawTix); + } +}); + +const modal = document.getElementById('purchaseModal'); +if (modal && modal.parentNode !== document.body) { + document.body.appendChild(modal); +} +document.addEventListener('DOMContentLoaded', () => { + if (window.innerWidth <= 768) { + const footer = document.getElementById('footer'); + if (footer) { + footer.remove(); + } + } +}); +function heartbeat() { + fetch('/v1/heartbeat') + .then(response => response.json()) + .then(data => { + if (data.success !== "true") { + location.reload(); + } + }) + .catch(() => { + location.reload(); + }); +} + +heartbeat(); +setInterval(heartbeat, 15000); + +document.addEventListener('DOMContentLoaded', () => { + const banner = document.getElementById('websitewidemessage'); + if (!banner) return; + + const ackKey = 'announcement_ack'; + const encoded = btoa(unescape(encodeURIComponent(banner.dataset.announcement || ''))); + const stored = localStorage.getItem(ackKey); + + if (stored === encoded) { + banner.style.display = 'none'; + document.body.style.paddingTop = '0'; + return; + } + if (stored !== null) { + localStorage.removeItem(ackKey); + } + + const closeBtn = document.getElementById('websitewidemessage-close'); + if (closeBtn) { + closeBtn.addEventListener('click', () => { + localStorage.setItem(ackKey, encoded); + banner.style.display = 'none'; + document.body.style.paddingTop = '0'; + }); + } +}); diff --git a/app/static/js/groupMembers.js b/app/static/js/groupMembers.js new file mode 100644 index 0000000..1f2d28e --- /dev/null +++ b/app/static/js/groupMembers.js @@ -0,0 +1,110 @@ +async function initalizeComponent( memberElement ) { + const GroupId = Number(memberElement.getAttribute('data-groupid')) + const RoleSelectElement = memberElement.getElementsByClassName('members-select-role')[0] + + const PaginationBackBtn = memberElement.getElementsByClassName('pagination-back-btn')[0] + const PaginationTextElement = memberElement.getElementsByClassName('pagination-page-number')[0] + const PaginationNextBtn = memberElement.getElementsByClassName('pagination-next-btn')[0] + + const UserCardTemplate = document.getElementsByClassName('user-card-template')[0] + const UserCardContainer = memberElement.getElementsByClassName('user-card-container')[0] + + var SelectedRoleId = 0 + var CurrentPage = 1 + + if (RoleSelectElement.options.length > 0) { + SelectedRoleId = RoleSelectElement.options[0].value + } else { + console.error('No role found in RoleSelectElement') + return; + } + + async function getPageResult( RolesetId, PageNumber ) { + try { + const response = await fetch(`/groups/members_json/${GroupId}?role=${RolesetId}&page=${PageNumber}`) + const result = await response.json() + return result + } catch (error) { + if (error.status == 429) { + await new Promise(r => setTimeout(r, 5000)); + return await getPageResult( RolesetId, PageNumber ) + } else { + console.error(error) + alert('An error occured while trying to get the page result, please try again later. Status: ' + error.status) + return null + } + } + } + + async function CreateUserCard( UserId, Username ) { + const UserCard = UserCardTemplate.cloneNode(true) + const UserCardUsername = UserCard.getElementsByClassName('user-name')[0] + const UserCardAvatar = UserCard.getElementsByClassName('avatar-img')[0] + + UserCardUsername.innerText = Username + UserCardAvatar.src = `/Thumbs/Head.ashx?userId=${UserId}&x=100&y=100` + + UserCard.style.display = 'block' + UserCard.classList.remove('user-card-template') + UserCard.href = `/users/${UserId}/profile` + UserCardContainer.appendChild(UserCard) + } + + async function updatePage( RolesetId, PageNumber ) { + PaginationNextBtn.disabled = true + PaginationBackBtn.disabled = true + UserCardContainer.innerHTML = '' + + const result = await getPageResult( RolesetId, PageNumber ) + const Users = result.users + + PaginationTextElement.innerText = `Page ${PageNumber}` + if (PageNumber == 1) { + PaginationBackBtn.disabled = true + } else { + PaginationBackBtn.disabled = false + } + + if (result.nextpage) { + PaginationNextBtn.disabled = false + } else { + PaginationNextBtn.disabled = true + } + for (let i = 0; i < Users.length; i++) { + const User = Users[i] + await CreateUserCard( User.userId, User.username ) + } + if ( Users.length == 0 ) { + const NoUsersElement = document.createElement('p') + NoUsersElement.innerText = 'No users found' + NoUsersElement.className = 'w-100 text-center mt-auto mb-auto' + UserCardContainer.appendChild(NoUsersElement) + } + } + + RoleSelectElement.addEventListener('change', async () => { + SelectedRoleId = RoleSelectElement.value + CurrentPage = 1 + await updatePage( SelectedRoleId, 1 ) + }) + + PaginationBackBtn.addEventListener('click', async () => { + CurrentPage-- + await updatePage( SelectedRoleId, CurrentPage ) + }) + + PaginationNextBtn.addEventListener('click', async () => { + CurrentPage++ + await updatePage( SelectedRoleId, CurrentPage ) + }) + + await updatePage( SelectedRoleId, CurrentPage ) +} + +document.addEventListener('DOMContentLoaded', async () => { + const MemberElements = document.getElementsByClassName('group-member-list') + for (let i = 0; i < MemberElements.length; i++) { + const MemberElement = MemberElements[i] + await initalizeComponent( MemberElement ) + } +}) \ No newline at end of file diff --git a/app/static/js/newTrade.js b/app/static/js/newTrade.js new file mode 100644 index 0000000..e9e147c --- /dev/null +++ b/app/static/js/newTrade.js @@ -0,0 +1,369 @@ +document.addEventListener('DOMContentLoaded', async () => { + const TradeInfoElement = document.getElementById('trade-info') + if ( TradeInfoElement == null ) return + + const RequesterUserId = Number(TradeInfoElement.getAttribute('data-requester-userid')) + const TargetUserId = Number(TradeInfoElement.getAttribute('data-target-userid')) + const XCSRFToken = TradeInfoElement.getAttribute('data-xcsrf-token') + const isTOTPEnabled = TradeInfoElement.getAttribute('data-totp-enabled') == 'True' + + const RequesterInventoryElement = document.getElementById('requester-inventory-container') + const TargetInventoryElement = document.getElementById('target-inventory-container') + + const ItemCardTemplate = document.getElementById('item-card-template') + ItemCardTemplate.id = '' + + var UAIDInfo = {} + var RequesterOffer = [] + var TargetOffer = [] + + const RequesterItemOfferContainer = document.getElementById('requester-item-offer-container') + const TargetItemOfferContainer = document.getElementById('target-item-offer-container') + + const TargetOfferValueText = document.getElementById('target-offer-value') + const RequesterOfferValueText = document.getElementById('requester-offer-value') + const TargetOfferRobuxInput = document.getElementById('target-offer-robux-input') + const RequesterOfferRobuxInput = document.getElementById('requester-offer-robux-input') + + const TradeSumbitButton = document.getElementById('trade-submit-btn') + const TOTPInputElement = document.getElementById('otp-code-input') + + if ( isTOTPEnabled ) { + TOTPInputElement.addEventListener('input', async () => { + if ( TOTPInputElement.value.length > 6 ) { + TOTPInputElement.value = TOTPInputElement.value.slice(0, 6) + } + await formValidation() + }) + TOTPInputElement.style.display = 'block' + } + const TransparentBackgroundTop = document.getElementById('transparent-background-top') + const SubmitButtonFeedback = document.getElementById('submit-btn-feedback') + + var isAlreadySubmitting = false + const submitTradeRequest = async () => { + if (TradeSumbitButton.disabled) return + if ( isAlreadySubmitting ) return + isAlreadySubmitting = true + TradeSumbitButton.disabled = true + TransparentBackgroundTop.style.display = 'block' + SubmitButtonFeedback.style.display = 'none' + + const RequesterOfferRobux = Number(RequesterOfferRobuxInput.value) || 0 + const TargetOfferRobux = Number(TargetOfferRobuxInput.value) || 0 + const RequesterOfferUAIDs = RequesterOffer + const TargetOfferUAIDs = TargetOffer + + const TradeRequestResponse = await fetch(`/trade/${TargetUserId}/create`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': XCSRFToken + }, + body: JSON.stringify({ + "RequesterOfferRobux": RequesterOfferRobux, + "TargetOfferRobux": TargetOfferRobux, + "RequesterOfferUAIDs": RequesterOfferUAIDs, + "TargetOfferUAIDs": TargetOfferUAIDs, + "TOTPCode": isTOTPEnabled ? Number(TOTPInputElement.value) : null + }) + }) + let TradeRequestResponseJSON + try { + TradeRequestResponseJSON = await TradeRequestResponse.json() + } catch (e) { + SubmitButtonFeedback.textContent = `${TradeRequestResponse.status}: An error occurred while submitting the trade request.` + SubmitButtonFeedback.style.display = 'block' + TradeSumbitButton.disabled = false + TransparentBackgroundTop.style.display = 'none' + isAlreadySubmitting = false + return + } + if ( TradeRequestResponse.status != 200 ) { + SubmitButtonFeedback.textContent = `${TradeRequestResponse.status}: ${TradeRequestResponseJSON.message}` + SubmitButtonFeedback.style.display = 'block' + TradeSumbitButton.disabled = false + TransparentBackgroundTop.style.display = 'none' + isAlreadySubmitting = false + return + } + window.location.href = `/trade/view/${TradeRequestResponseJSON.tradeId}` + } + + const formValidation = async () => { + if ( RequesterOffer.length == 0 || TargetOffer.length == 0 ) { + TradeSumbitButton.disabled = true + return + } + if ( RequesterOffer.length > 4 || TargetOffer.length > 4 ) { + TradeSumbitButton.disabled = true + return + } + if ( isTOTPEnabled && TOTPInputElement.value.length != 6 ) { + TradeSumbitButton.disabled = true + return + } + TradeSumbitButton.disabled = false + } + + const UpdateOfferValue = async () => { + var RequesterOfferValue = 0 + var TargetOfferValue = 0 + + RequesterOffer.forEach(ItemUAID => { + RequesterOfferValue += UAIDInfo[ItemUAID].rap + }) + TargetOffer.forEach(ItemUAID => { + TargetOfferValue += UAIDInfo[ItemUAID].rap + }) + + RequesterOfferValue += Number(RequesterOfferRobuxInput.value) + TargetOfferValue += Number(TargetOfferRobuxInput.value) + + TargetOfferValueText.textContent = `R$ ${TargetOfferValue}` + RequesterOfferValueText.textContent = `R$ ${RequesterOfferValue}` + await formValidation() + } + + TargetOfferRobuxInput.addEventListener('input', async () => { + if ( Number(TargetOfferRobuxInput.value) < 0 ) { + TargetOfferRobuxInput.value = 0 + } + if ( Number(TargetOfferRobuxInput.value) > 100000 ) { + TargetOfferRobuxInput.value = 100000 + } + await UpdateOfferValue() + }) + RequesterOfferRobuxInput.addEventListener('input', async () => { + if ( Number(RequesterOfferRobuxInput.value) < 0 ) { + RequesterOfferRobuxInput.value = 0 + } + if ( Number(RequesterOfferRobuxInput.value) > 100000 ) { + RequesterOfferRobuxInput.value = 100000 + } + await UpdateOfferValue() + }) + + const ReloadOfferImages = async () => { + const RequesterOfferChildren = RequesterItemOfferContainer.children + for ( let i = 0; i < RequesterOfferChildren.length; i++ ){ + const ItemCard = RequesterOfferChildren[i] + const ItemCardImage = ItemCard.querySelector('.item-image') + if (RequesterOffer[i] == null) { + ItemCardImage.src = '' + ItemCardImage.alt = '' + ItemCardImage.style.display = 'none' + ItemCard.style.cursor = 'default' + ItemCardImage.onclick = null + continue + } else { + if (ItemCardImage.classList.contains('d-none')) { + ItemCardImage.classList.remove('d-none') + } + ItemCard.style.cursor = 'pointer' + ItemCardImage.style.display = 'block' + ItemCardImage.src = `/Thumbs/Asset.ashx?x=100&y=100&assetId=${UAIDInfo[RequesterOffer[i]].assetId}` + ItemCardImage.onclick = async () => { + await RemoveItemFromOffer(RequesterUserId, RequesterOffer[i]) + } + } + } + + const TargetOfferChildren = TargetItemOfferContainer.children + for ( let i = 0; i < TargetOfferChildren.length; i++ ){ + const ItemCard = TargetOfferChildren[i] + const ItemCardImage = ItemCard.querySelector('.item-image') + if (TargetOffer[i] == null) { + ItemCardImage.src = '' + ItemCardImage.alt = '' + ItemCardImage.style.display = 'none' + ItemCard.style.cursor = 'default' + ItemCardImage.onclick = null + continue + } else { + if (ItemCardImage.classList.contains('d-none')) { + ItemCardImage.classList.remove('d-none') + } + ItemCard.style.cursor = 'pointer' + ItemCardImage.style.display = 'block' + ItemCardImage.src = `/Thumbs/Asset.ashx?x=100&y=100&assetId=${UAIDInfo[TargetOffer[i]].assetId}` + ItemCardImage.onclick = async () => { + await RemoveItemFromOffer(TargetUserId, TargetOffer[i]) + } + } + } + await UpdateOfferValue() + } + + const AddItemToOffer = async ( UserId, ItemUAID ) => { + if ( UserId == RequesterUserId ) { + if ( RequesterOffer.includes(ItemUAID) ) return + if ( RequesterOffer.length >= 4 ) { + const RemovedItemUAID = RequesterOffer[0] + await RemoveItemFromOffer(RequesterUserId, RemovedItemUAID) + } + RequesterOffer.push(ItemUAID) + } + if ( UserId == TargetUserId ) { + if ( TargetOffer.includes(ItemUAID) ) return + if ( TargetOffer.length >= 4 ) { + const RemovedItemUAID = TargetOffer[0] + await RemoveItemFromOffer(TargetUserId, RemovedItemUAID) + } + TargetOffer.push(ItemUAID) + } + const AllItemCards = document.querySelectorAll('.item-card') + AllItemCards.forEach(ItemCard => { + const ItemCardUAID = ItemCard.getAttribute('data-item-uaid') + if ( ItemCardUAID == ItemUAID ) { + const ItemCardImage = ItemCard.querySelector('.item-card-image') + ItemCardImage.classList.add("border-primary") + } + }) + await ReloadOfferImages() + } + + const RemoveItemFromOffer = async ( UserId, ItemUAID ) => { + if ( UserId == RequesterUserId ) { + if ( !RequesterOffer.includes(ItemUAID) ) return + RequesterOffer.splice(RequesterOffer.indexOf(ItemUAID), 1) + } + if ( UserId == TargetUserId ) { + if ( !TargetOffer.includes(ItemUAID) ) return + TargetOffer.splice(TargetOffer.indexOf(ItemUAID), 1) + } + const AllItemCards = document.querySelectorAll('.item-card') + AllItemCards.forEach(ItemCard => { + const ItemCardUAID = ItemCard.getAttribute('data-item-uaid') + if ( ItemCardUAID == ItemUAID ) { + const ItemCardImage = ItemCard.querySelector('.item-card-image') + if ( ItemCardImage.classList.contains("border-primary") ){ + ItemCardImage.classList.remove("border-primary") + } + } + }) + await ReloadOfferImages() + } + + const LoadInventoryPage = async ( UserId, InventoryElement, PageNumber ) => { + InventoryElement.innerHTML = '' + const ParentElement = InventoryElement.parentElement + const PaginationBackBtn = ParentElement.querySelector('.pagination-back-btn') + const PaginationNextBtn = ParentElement.querySelector('.pagination-next-btn') + const PaginationPageNumber = ParentElement.querySelector('.pagination-page-number') + + PaginationBackBtn.disabled = true + PaginationNextBtn.disabled = true + PaginationPageNumber.textContent = `Page ${PageNumber}` + + const InventoryResposne = await fetch(`/trade/${UserId}/inventory?page=${PageNumber}`) + if ( !InventoryResposne.ok ) return + const InventoryData = await InventoryResposne.json() + + InventoryData.data.forEach(Item => { + const NewItemCard = ItemCardTemplate.cloneNode(true) + NewItemCard.setAttribute('data-item-assetid', Item.id) + NewItemCard.setAttribute('data-item-name', Item.name) + NewItemCard.setAttribute('data-item-uaid', Item.uaid) + NewItemCard.setAttribute('data-item-serial', Item.serialNumber) + NewItemCard.setAttribute('data-item-rap', Item.rap) + NewItemCard.classList.add('item-card') + + const ItemCardImage = NewItemCard.querySelector('.item-card-image') + ItemCardImage.src = `/Thumbs/Asset.ashx?x=100&y=100&assetId=${Item.id}` + ItemCardImage.alt = Item.name + + const ItemCardName = NewItemCard.querySelector('.item-card-name') + ItemCardName.textContent = Item.name + ItemCardName.href = `/catalog/${Item.id}/` + + const ItemCardSerial = NewItemCard.querySelector('.item-card-serial') + if (Item.serialNumber != null) { + ItemCardSerial.textContent = `#${Item.serialNumber}` + } else { + ItemCardSerial.remove() + } + NewItemCard.style.display = 'block' + InventoryElement.appendChild(NewItemCard) + + UAIDInfo[Item.uaid] = { + 'assetId': Item.id, + 'serialNumber': Item.serialNumber, + 'rap': Item.rap, + 'name': Item.name, + 'ownerId': UserId, + } + if ( UserId == RequesterUserId ) { + if ( RequesterOffer.includes(Item.uaid) ) { + ItemCardImage.classList.add("border-primary") + } + } + if ( UserId == TargetUserId ) { + if ( TargetOffer.includes(Item.uaid) ) { + ItemCardImage.classList.add("border-primary") + } + } + ItemCardImage.style.cursor = 'pointer' + ItemCardImage.addEventListener('click', () => { + if ( ItemCardImage.classList.contains("border-primary") ){ + RemoveItemFromOffer(UserId, Item.uaid) + return + } + AddItemToOffer(UserId, Item.uaid) + }) + }) + if ( InventoryData.data.length == 0 ){ + const NoItemsMessage = document.createElement('p') + NoItemsMessage.className = "text-secondary text-center mt-5 mb-5 w-100" + NoItemsMessage.textContent = "User does not have any tradable items" + InventoryElement.appendChild(NoItemsMessage) + } + + PaginationBackBtn.disabled = PageNumber <= 1 + PaginationNextBtn.disabled = !InventoryData.nextPage + } + + await LoadInventoryPage(RequesterUserId, RequesterInventoryElement, 1) + await LoadInventoryPage(TargetUserId, TargetInventoryElement, 1) + + var RequesterPageNumber = 1 + const RequesterPaginationBackBtn = RequesterInventoryElement.parentElement.querySelector('.pagination-back-btn') + const RequesterPaginationNextBtn = RequesterInventoryElement.parentElement.querySelector('.pagination-next-btn') + + var TargetPageNumber = 1 + const TargetPaginationBackBtn = TargetInventoryElement.parentElement.querySelector('.pagination-back-btn') + const TargetPaginationNextBtn = TargetInventoryElement.parentElement.querySelector('.pagination-next-btn') + + RequesterPaginationBackBtn.addEventListener('click', () => { + if ( RequesterPaginationBackBtn.disabled ) return + if ( RequesterPageNumber <= 1 ) { RequesterPaginationBackBtn.disabled = true; return } + RequesterPageNumber-- + LoadInventoryPage(RequesterUserId, RequesterInventoryElement, RequesterPageNumber) + }) + + RequesterPaginationNextBtn.addEventListener('click', () => { + if ( RequesterPaginationNextBtn.disabled ) return + RequesterPageNumber++ + LoadInventoryPage(RequesterUserId, RequesterInventoryElement, RequesterPageNumber) + }) + + TargetPaginationBackBtn.addEventListener('click', () => { + if ( TargetPaginationBackBtn.disabled ) return + if ( TargetPageNumber <= 1 ) { TargetPaginationBackBtn.disabled = true; return } + TargetPageNumber-- + LoadInventoryPage(TargetUserId, TargetInventoryElement, TargetPageNumber) + }) + + TargetPaginationNextBtn.addEventListener('click', () => { + if ( TargetPaginationNextBtn.disabled ) return + TargetPageNumber++ + LoadInventoryPage(TargetUserId, TargetInventoryElement, TargetPageNumber) + }) + + TradeSumbitButton.addEventListener('click', async () => { + if ( TradeSumbitButton.disabled ) return + await submitTradeRequest() + }) + + await formValidation() +}) \ No newline at end of file diff --git a/app/static/js/presence.js b/app/static/js/presence.js new file mode 100644 index 0000000..a82b1e8 --- /dev/null +++ b/app/static/js/presence.js @@ -0,0 +1,5 @@ +setInterval(function() { + if (document.hasFocus()) { + fetch('/presence') + } +}, 50000); \ No newline at end of file diff --git a/app/static/js/theme.js b/app/static/js/theme.js new file mode 100644 index 0000000..c079025 --- /dev/null +++ b/app/static/js/theme.js @@ -0,0 +1,20 @@ +function applyTheme(theme) { + document.documentElement.setAttribute('data-theme', theme); + document.documentElement.setAttribute('data-bs-theme', theme); +} + +function setSiteTheme(theme) { + localStorage.setItem('theme', theme); + applyTheme(theme); + document.querySelectorAll('[data-theme-option]').forEach((btn) => { + btn.classList.toggle('active', btn.getAttribute('data-theme-option') === theme); + }); +} + +document.addEventListener('DOMContentLoaded', () => { + const currentTheme = localStorage.getItem('theme') || 'dark'; + document.querySelectorAll('[data-theme-option]').forEach((btn) => { + btn.classList.toggle('active', btn.getAttribute('data-theme-option') === currentTheme); + btn.addEventListener('click', () => setSiteTheme(btn.getAttribute('data-theme-option'))); + }); +}); diff --git a/app/static/js/twemoji.js b/app/static/js/twemoji.js new file mode 100644 index 0000000..6be6873 --- /dev/null +++ b/app/static/js/twemoji.js @@ -0,0 +1,15 @@ +console.log( + "%cSTOP!", + "color: #5BCEFA; font-size: 80px; font-weight: bold; text-shadow: 2px 2px 0 #F5A9B8, 4px 4px 0 #ffffff;" +); + + console.log( + "%cIf you are being told to paste something here, there is a 100% chance you are being scammed.\nPlease exit out and report this bad actor to the Discord.\n", + "color: #F5A9B8; font-size: 18px; font-weight: 500;" + ); + + console.log("Remember, trans rights are human rights!") + twemoji.parse( + document.body, + { base: 'https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/' } + ) diff --git a/app/static/svg/navigation.svg b/app/static/svg/navigation.svg new file mode 100644 index 0000000..70b040d --- /dev/null +++ b/app/static/svg/navigation.svg @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/swagger/favicon-16x16.png b/app/static/swagger/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8b194e617af1c135e6b37939591d24ac3a5efa18 GIT binary patch literal 665 zcmV;K0%rY*P)}JKSduyL>)s!A4EhTMMEM%Q;aL6%l#xiZiF>S;#Y{N2Zz%pvTGHJduXuC6Lx-)0EGfRy*N{Tv4i8@4oJ41gw zKzThrcRe|7J~(YYIBq{SYCkn-KQm=N8$CrEK1CcqMI1dv9z#VRL_{D)L|`QmF8}}l zJ9JV`Q}p!p_4f7m_U`WQ@apR4;o;!mnU<7}iG_qr zF(e)x9~BG-3IzcG2M4an0002kNkl41`ZiN1i62V%{PM@Ry|IS_+Yc7{bb`MM~xm(7p4|kMHP&!VGuDW4kFixat zXw43VmgwEvB$hXt_u=vZ>+v4i7E}n~eG6;n4Z=zF1n?T*yg<;W6kOfxpC6nao>VR% z?fpr=asSJ&`L*wu^rLJ5Peq*PB0;alL#XazZCBxJLd&giTfw@!hW167F^`7kobi;( ze<<>qNlP|xy7S1zl@lZNIBR7#o9ybJsptO#%}P0hz~sBp00000NkvXXu0mjfUsDF? literal 0 HcmV?d00001 diff --git a/app/static/swagger/favicon-32x32.png b/app/static/swagger/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..249737fe44558e679f0b67134e274461d988fa98 GIT binary patch literal 628 zcmV-)0*n2LP)Ma*GM0}OV<074bNCP7P7GVd{iMr*I6y~TMLss@FjvgL~HxU z%Vvj33AwpD(Z4*$Mfx=HaU16axM zt2xG_rloN<$iy9j9I5 + + + Swagger UI: OAuth2 Redirect + + + + + diff --git a/app/static/swagger/swagger-docs.json b/app/static/swagger/swagger-docs.json new file mode 100644 index 0000000..9aa149a --- /dev/null +++ b/app/static/swagger/swagger-docs.json @@ -0,0 +1,1608 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "NEXIUM Public API", + "description": "Im swagging my tail reading this.", + "version": "1.0.0" + }, + "paths": { + "/public-api/v1/users/{userid}": { + "get": { + "summary": "Get User by ID", + "tags": [ + "Get User Info" + ], + "description": "Retrieve user information by user ID.", + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the user." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "Example Description", + "id": "Input ID", + "is_banned": "Input Status", + "last_online": "Unix Timestamp", + "membership": "Input Membership", + "username": "Input Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/users/username/{username}": { + "get": { + "summary": "Get User by Username", + "tags": [ + "Get User Info" + ], + "description": "Retrieve user information by username.", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The username of the user." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "Example Description", + "id": "Input ID", + "is_banned": "Input Status", + "last_online": "Unix Timestamp", + "membership": "Input Membership", + "username": "Input Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/users/discord_id/{discordid}": { + "get": { + "summary": "Get User by Discord ID", + "tags": [ + "Get User Info" + ], + "description": "Retrieve user information by Discord ID.", + "parameters": [ + { + "name": "discordid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The User Discord Id." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "Example Description", + "id": "Input ID", + "is_banned": "Input Status", + "last_online": "Unix Timestamp", + "membership": "Input Membership", + "username": "Input Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "404": { + "description": "No user is linked to the requested Discord ID", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "No NEXIUM account is associated with this Discord ID", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/asset/{assetid}": { + "get": { + "summary": "Get Asset by ID", + "tags": [ + "Get Asset Info" + ], + "description": "Retrieve asset information by asset ID.", + "parameters": [ + { + "name": "assetid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the asset." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "asset_rap": { + "type": "integer", + "nullable": true + }, + "asset_type": { + "type": "string" + }, + "asset_type_value": { + "type": "integer" + }, + "created_at": { + "type": "integer" + }, + "creator": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "creator_id": { + "type": "integer" + }, + "creator_type": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_for_sale": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price_robux": { + "type": "integer" + }, + "price_tickets": { + "type": "integer" + }, + "sales": { + "type": "integer" + }, + "updated_at": { + "type": "integer" + } + } + } + }, + "example": { + "data": { + "asset_rap": "Rap of the item", + "asset_type": "asset type", + "asset_type_value": "asset type value", + "created_at": "Unix Timestamp", + "creator": { + "created_at": "Unix Timestamp", + "description": "User Description", + "id": "User ID", + "is_banned": "User Status", + "last_online": "Unix Timestamp", + "membership": "User Membership", + "username": "Creator Name", + "inventory_rap": "Inventory Rap" + }, + "creator_id": "User ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "Asset Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "Asset not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/inventory/collectibles/{userid}": { + "get": { + "summary": "Get User's Collectibles", + "tags": [ + "Inventory and Collectibles" + ], + "description": "Retrieve a user's collectibles.", + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the user." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer" + }, + "description": "The page number (optional)." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": { + "type": "integer", + "nullable": true + }, + "asset_type": { + "type": "string" + }, + "asset_type_value": { + "type": "integer" + }, + "created_at": { + "type": "integer" + }, + "creator_id": { + "type": "integer" + }, + "creator_type": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_for_sale": { + "type": "boolean" + }, + "is_limited": { + "type": "boolean" + }, + "is_limited_unique": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price_robux": { + "type": "integer" + }, + "price_tickets": { + "type": "integer" + }, + "sales": { + "type": "integer" + }, + "updated_at": { + "type": "integer" + } + } + }, + "price": { + "type": "integer" + }, + "serial": { + "type": "integer" + }, + "uaid": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "User ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unis Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owned", + "uaid": "User Asset ID" + } + ], + "message": "", + "next_page": "Next Page", + "page": "Current Page", + "success": true, + "total_pages": "Total Pages" + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/inventory/assets/{userid}/{assettypeid}": { + "get": { + "summary": "Get User's Assets by Type", + "tags": [ + "Inventory and Collectibles" + ], + "description": "Retrieve a user's assets of a specific type.", + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the user." + }, + { + "name": "assettypeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the asset type. Refer to the [Roblox Documentation](https://create.roblox.com/docs/reference/engine/enums/AssetType) for valid values." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer" + }, + "description": "The page number (optional)." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": { + "type": "integer", + "nullable": true + }, + "asset_type": { + "type": "string" + }, + "asset_type_value": { + "type": "integer" + }, + "created_at": { + "type": "integer" + }, + "creator_id": { + "type": "integer" + }, + "creator_type": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_for_sale": { + "type": "boolean" + }, + "is_limited": { + "type": "boolean" + }, + "is_limited_unique": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price_robux": { + "type": "integer" + }, + "price_tickets": { + "type": "integer" + }, + "sales": { + "type": "integer" + }, + "updated_at": { + "type": "integer" + } + } + }, + "price": { + "type": "integer" + }, + "serial": { + "type": "integer" + }, + "uaid": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "User ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limted U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owner", + "uaid": "User Asset ID" + } + ], + "message": "", + "next_page": "Next Page", + "page": "Current Page", + "success": true, + "total_pages": "Total Pages" + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/economy/my-balance": { + "get": { + "summary": "Get My Balance", + "tags": [ + "Economy" + ], + "description": "Retrieve the balance of the authenticated user.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "robux": { + "type": "integer", + "description": "The amount of Robux in the user's account." + }, + "tickets": { + "type": "integer", + "description": "The amount of Tickets in the user's account." + } + } + } + }, + "example": { + "data": { + "robux": "User Robux Amount", + "tickets": "User Tickets Amount" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/users/my-profile": { + "get": { + "summary": "Get My Profile", + "tags": [ + "Get User Info" + ], + "description": "Retrieve the profile for the authenticated user.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "User Description", + "id": "User ID", + "is_banned": "User Status", + "last_online": "Unix Timestamp", + "membership": "User Memberhip", + "username": "Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/trade/list": { + "get": { + "summary": "List Trades", + "tags": [ + "Trading" + ], + "description": "List trades for the authenticated user.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "expires_at": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "recipient_userid": { + "type": "integer" + }, + "sender_userid": { + "type": "integer" + }, + "status": { + "type": "string" + } + } + }, + "example": [ + { + "created_at": "Unix Timestamp", + "expires_at": "Unix Timestamp", + "id": "Trade ID", + "recipient_userid": "User ID", + "sender_userid": "Target User ID", + "status": "Trade Status" + } + ] + }, + "message": { + "type": "string" + }, + "next_page": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "success": { + "type": "boolean" + }, + "total_pages": { + "type": "integer" + } + }, + "example": { + "data": [ + { + "created_at": "Unix Timetamp", + "expires_at": "Unix Timestamp", + "id": "Trade ID", + "recipient_userid": "User ID", + "sender_userid": "Target User ID", + "status": "Trade Status" + } + ], + "message": "", + "next_page": "Next Page", + "page": "Current Page", + "success": true, + "total_pages": "Total Pages" + } + } + } + } + }, + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/trade/{tradeid}": { + "get": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "summary": "Get Trade by ID", + "tags": [ + "Trading" + ], + "description": "Retrieve trade information by trade ID.", + "responses": { + "200": { + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + }, + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": "integer", + "expires_at": "integer", + "id": "integer", + "recipient_items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": "integer", + "asset_type": "string", + "asset_type_value": "integer", + "created_at": "integer", + "creator_id": "integer", + "creator_type": "integer", + "description": "string", + "id": "integer", + "is_for_sale": "boolean", + "is_limited": "boolean", + "is_limited_unique": "boolean", + "name": "string", + "price_robux": "integer", + "price_tickets": "integer", + "sales": "integer", + "updated_at": "integer" + } + }, + "price": "integer", + "serial": "integer", + "uaid": "integer" + } + } + }, + "recipient_robux": "integer", + "recipient_userid": "integer", + "sender_items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": "integer", + "asset_type": "string", + "asset_type_value": "integer", + "created_at": "integer", + "creator_id": "integer", + "creator_type": "integer", + "description": "string", + "id": "integer", + "is_for_sale": "boolean", + "is_limited": "boolean", + "is_limited_unique": "boolean", + "name": "string", + "price_robux": "integer", + "price_tickets": "integer", + "sales": "integer", + "updated_at": "integer" + } + }, + "price": "integer", + "serial": "integer", + "uaid": "integer" + } + } + }, + "sender_robux": "integer", + "sender_userid": "integer", + "status": "string" + } + }, + "message": "string", + "success": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "expires_at": "Unix Timestamp", + "id": "Trade ID", + "recipient_items": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "Asset Creator ID", + "creator_type": "Type of Creator (group or user)", + "description": "Will the test be successful? Or go up in flames?!", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limted", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owned", + "uaid": "User Asset ID" + } + ], + "recipient_robux": "Robux Offered", + "recipient_userid": "User ID", + "sender_items": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "Asset Creator ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owned", + "uaid": "User Asset ID" + } + ], + "sender_robux": "Robux Offered", + "sender_userid": "User ID", + "status": "Trade Status" + }, + "message": "", + "success": true + } + } + } + } + } + } + }, + "/public-api/v1/trade/create/{recipient_userid}": { + "parameters": [ + { + "name": "recipient_userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the recipient user." + } + ], + "post": { + "summary": "Create Trade", + "tags": [ + "Trading" + ], + "description": "Create a trade request with the specified recipient user.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "RequesterOfferRobux": { + "type": "integer" + }, + "TargetOfferRobux": { + "type": "integer" + }, + "RequesterOfferUAIDs": { + "type": "array", + "items": { + "type": "integer" + } + }, + "TargetOfferUAIDs": { + "type": "array", + "items": { + "type": "integer" + } + }, + "TOTPCode": { + "type": "integer" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Trade request was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "tradeId": { + "type": "integer" + } + } + }, + "example": { + "success": true, + "message": "", + "tradeId": 1 + } + } + } + }, + "400": { + "description": "Bad request or error in trade creation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + } + } + }, + "example": { + "success": false, + "message": "error" + } + } + } + } + } + } + }, + "/public-api/v1/trade/accept/{tradeid}": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "post": { + "summary": "Accept Trade", + "tags": [ + "Trading" + ], + "description": "Accept a trade with the specified trade ID.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "TOTPCode": { + "type": "integer" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Trade acceptance was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": true, + "message": "success", + "data": null + } + } + } + }, + "400": { + "description": "Bad request or error in trade acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": false, + "message": "error", + "data": null + } + } + } + } + } + } + }, + "/public-api/v1/trade/decline/{tradeid}": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "post": { + "summary": "Accept Trade", + "tags": [ + "Trading" + ], + "description": "Accept a trade with the specified trade ID.", + "responses": { + "200": { + "description": "Trade acceptance was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": true, + "message": "success", + "data": null + } + } + } + }, + "400": { + "description": "Bad request or error in trade acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": false, + "message": "error", + "data": null + } + } + } + } + } + } + }, + "/public-api/v1/trade/cancel/{tradeid}": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "post": { + "summary": "Accept Trade", + "tags": [ + "Trading" + ], + "description": "Accept a trade with the specified trade ID.", + "responses": { + "200": { + "description": "Trade acceptance was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": true, + "message": "success", + "data": null + } + } + } + }, + "400": { + "description": "Bad request or error in trade acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": false, + "message": "error", + "data": null + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/static/swagger/swagger-initializer.js b/app/static/swagger/swagger-initializer.js new file mode 100644 index 0000000..1784f22 --- /dev/null +++ b/app/static/swagger/swagger-initializer.js @@ -0,0 +1,20 @@ +window.onload = function() { + // + + // the following lines will be replaced by docker/configurator, when it runs in a docker-container + window.ui = SwaggerUIBundle({ + url: "https://www.nexium.fit/static/swagger/swagger-docs.json", + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }); + + // +}; diff --git a/app/static/swagger/swagger-ui-bundle.js b/app/static/swagger/swagger-ui-bundle.js new file mode 100644 index 0000000..8dbca51 --- /dev/null +++ b/app/static/swagger/swagger-ui-bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ +!function webpackUniversalModuleDefinition(i,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.SwaggerUIBundle=s():i.SwaggerUIBundle=s()}(this,(()=>(()=>{var i={17967:(i,s)=>{"use strict";s.Nm=s.Rq=void 0;var u=/^([^\w]*)(javascript|data|vbscript)/im,m=/&#(\w+)(^\w|;)?/g,v=/&(newline|tab);/gi,_=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,j=/^.+(:|:)/gim,M=[".","/"];s.Rq="about:blank",s.Nm=function sanitizeUrl(i){if(!i)return s.Rq;var $=function decodeHtmlCharacters(i){return i.replace(_,"").replace(m,(function(i,s){return String.fromCharCode(s)}))}(i).replace(v,"").replace(_,"").trim();if(!$)return s.Rq;if(function isRelativeUrlWithoutProtocol(i){return M.indexOf(i[0])>-1}($))return $;var W=$.match(j);if(!W)return $;var X=W[0];return u.test(X)?s.Rq:$}},79742:(i,s)=>{"use strict";s.byteLength=function byteLength(i){var s=getLens(i),u=s[0],m=s[1];return 3*(u+m)/4-m},s.toByteArray=function toByteArray(i){var s,u,_=getLens(i),j=_[0],M=_[1],$=new v(function _byteLength(i,s,u){return 3*(s+u)/4-u}(0,j,M)),W=0,X=M>0?j-4:j;for(u=0;u>16&255,$[W++]=s>>8&255,$[W++]=255&s;2===M&&(s=m[i.charCodeAt(u)]<<2|m[i.charCodeAt(u+1)]>>4,$[W++]=255&s);1===M&&(s=m[i.charCodeAt(u)]<<10|m[i.charCodeAt(u+1)]<<4|m[i.charCodeAt(u+2)]>>2,$[W++]=s>>8&255,$[W++]=255&s);return $},s.fromByteArray=function fromByteArray(i){for(var s,m=i.length,v=m%3,_=[],j=16383,M=0,$=m-v;M<$;M+=j)_.push(encodeChunk(i,M,M+j>$?$:M+j));1===v?(s=i[m-1],_.push(u[s>>2]+u[s<<4&63]+"==")):2===v&&(s=(i[m-2]<<8)+i[m-1],_.push(u[s>>10]+u[s>>4&63]+u[s<<2&63]+"="));return _.join("")};for(var u=[],m=[],v="undefined"!=typeof Uint8Array?Uint8Array:Array,_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",j=0;j<64;++j)u[j]=_[j],m[_.charCodeAt(j)]=j;function getLens(i){var s=i.length;if(s%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var u=i.indexOf("=");return-1===u&&(u=s),[u,u===s?0:4-u%4]}function encodeChunk(i,s,m){for(var v,_,j=[],M=s;M>18&63]+u[_>>12&63]+u[_>>6&63]+u[63&_]);return j.join("")}m["-".charCodeAt(0)]=62,m["_".charCodeAt(0)]=63},48764:(i,s,u)=>{"use strict";const m=u(79742),v=u(80645),_="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;s.Buffer=Buffer,s.SlowBuffer=function SlowBuffer(i){+i!=i&&(i=0);return Buffer.alloc(+i)},s.INSPECT_MAX_BYTES=50;const j=2147483647;function createBuffer(i){if(i>j)throw new RangeError('The value "'+i+'" is invalid for option "size"');const s=new Uint8Array(i);return Object.setPrototypeOf(s,Buffer.prototype),s}function Buffer(i,s,u){if("number"==typeof i){if("string"==typeof s)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(i)}return from(i,s,u)}function from(i,s,u){if("string"==typeof i)return function fromString(i,s){"string"==typeof s&&""!==s||(s="utf8");if(!Buffer.isEncoding(s))throw new TypeError("Unknown encoding: "+s);const u=0|byteLength(i,s);let m=createBuffer(u);const v=m.write(i,s);v!==u&&(m=m.slice(0,v));return m}(i,s);if(ArrayBuffer.isView(i))return function fromArrayView(i){if(isInstance(i,Uint8Array)){const s=new Uint8Array(i);return fromArrayBuffer(s.buffer,s.byteOffset,s.byteLength)}return fromArrayLike(i)}(i);if(null==i)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i);if(isInstance(i,ArrayBuffer)||i&&isInstance(i.buffer,ArrayBuffer))return fromArrayBuffer(i,s,u);if("undefined"!=typeof SharedArrayBuffer&&(isInstance(i,SharedArrayBuffer)||i&&isInstance(i.buffer,SharedArrayBuffer)))return fromArrayBuffer(i,s,u);if("number"==typeof i)throw new TypeError('The "value" argument must not be of type number. Received type number');const m=i.valueOf&&i.valueOf();if(null!=m&&m!==i)return Buffer.from(m,s,u);const v=function fromObject(i){if(Buffer.isBuffer(i)){const s=0|checked(i.length),u=createBuffer(s);return 0===u.length||i.copy(u,0,0,s),u}if(void 0!==i.length)return"number"!=typeof i.length||numberIsNaN(i.length)?createBuffer(0):fromArrayLike(i);if("Buffer"===i.type&&Array.isArray(i.data))return fromArrayLike(i.data)}(i);if(v)return v;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof i[Symbol.toPrimitive])return Buffer.from(i[Symbol.toPrimitive]("string"),s,u);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i)}function assertSize(i){if("number"!=typeof i)throw new TypeError('"size" argument must be of type number');if(i<0)throw new RangeError('The value "'+i+'" is invalid for option "size"')}function allocUnsafe(i){return assertSize(i),createBuffer(i<0?0:0|checked(i))}function fromArrayLike(i){const s=i.length<0?0:0|checked(i.length),u=createBuffer(s);for(let m=0;m=j)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+j.toString(16)+" bytes");return 0|i}function byteLength(i,s){if(Buffer.isBuffer(i))return i.length;if(ArrayBuffer.isView(i)||isInstance(i,ArrayBuffer))return i.byteLength;if("string"!=typeof i)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof i);const u=i.length,m=arguments.length>2&&!0===arguments[2];if(!m&&0===u)return 0;let v=!1;for(;;)switch(s){case"ascii":case"latin1":case"binary":return u;case"utf8":case"utf-8":return utf8ToBytes(i).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*u;case"hex":return u>>>1;case"base64":return base64ToBytes(i).length;default:if(v)return m?-1:utf8ToBytes(i).length;s=(""+s).toLowerCase(),v=!0}}function slowToString(i,s,u){let m=!1;if((void 0===s||s<0)&&(s=0),s>this.length)return"";if((void 0===u||u>this.length)&&(u=this.length),u<=0)return"";if((u>>>=0)<=(s>>>=0))return"";for(i||(i="utf8");;)switch(i){case"hex":return hexSlice(this,s,u);case"utf8":case"utf-8":return utf8Slice(this,s,u);case"ascii":return asciiSlice(this,s,u);case"latin1":case"binary":return latin1Slice(this,s,u);case"base64":return base64Slice(this,s,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,s,u);default:if(m)throw new TypeError("Unknown encoding: "+i);i=(i+"").toLowerCase(),m=!0}}function swap(i,s,u){const m=i[s];i[s]=i[u],i[u]=m}function bidirectionalIndexOf(i,s,u,m,v){if(0===i.length)return-1;if("string"==typeof u?(m=u,u=0):u>2147483647?u=2147483647:u<-2147483648&&(u=-2147483648),numberIsNaN(u=+u)&&(u=v?0:i.length-1),u<0&&(u=i.length+u),u>=i.length){if(v)return-1;u=i.length-1}else if(u<0){if(!v)return-1;u=0}if("string"==typeof s&&(s=Buffer.from(s,m)),Buffer.isBuffer(s))return 0===s.length?-1:arrayIndexOf(i,s,u,m,v);if("number"==typeof s)return s&=255,"function"==typeof Uint8Array.prototype.indexOf?v?Uint8Array.prototype.indexOf.call(i,s,u):Uint8Array.prototype.lastIndexOf.call(i,s,u):arrayIndexOf(i,[s],u,m,v);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(i,s,u,m,v){let _,j=1,M=i.length,$=s.length;if(void 0!==m&&("ucs2"===(m=String(m).toLowerCase())||"ucs-2"===m||"utf16le"===m||"utf-16le"===m)){if(i.length<2||s.length<2)return-1;j=2,M/=2,$/=2,u/=2}function read(i,s){return 1===j?i[s]:i.readUInt16BE(s*j)}if(v){let m=-1;for(_=u;_M&&(u=M-$),_=u;_>=0;_--){let u=!0;for(let m=0;m<$;m++)if(read(i,_+m)!==read(s,m)){u=!1;break}if(u)return _}return-1}function hexWrite(i,s,u,m){u=Number(u)||0;const v=i.length-u;m?(m=Number(m))>v&&(m=v):m=v;const _=s.length;let j;for(m>_/2&&(m=_/2),j=0;j>8,v=u%256,_.push(v),_.push(m);return _}(s,i.length-u),i,u,m)}function base64Slice(i,s,u){return 0===s&&u===i.length?m.fromByteArray(i):m.fromByteArray(i.slice(s,u))}function utf8Slice(i,s,u){u=Math.min(i.length,u);const m=[];let v=s;for(;v239?4:s>223?3:s>191?2:1;if(v+j<=u){let u,m,M,$;switch(j){case 1:s<128&&(_=s);break;case 2:u=i[v+1],128==(192&u)&&($=(31&s)<<6|63&u,$>127&&(_=$));break;case 3:u=i[v+1],m=i[v+2],128==(192&u)&&128==(192&m)&&($=(15&s)<<12|(63&u)<<6|63&m,$>2047&&($<55296||$>57343)&&(_=$));break;case 4:u=i[v+1],m=i[v+2],M=i[v+3],128==(192&u)&&128==(192&m)&&128==(192&M)&&($=(15&s)<<18|(63&u)<<12|(63&m)<<6|63&M,$>65535&&$<1114112&&(_=$))}}null===_?(_=65533,j=1):_>65535&&(_-=65536,m.push(_>>>10&1023|55296),_=56320|1023&_),m.push(_),v+=j}return function decodeCodePointsArray(i){const s=i.length;if(s<=M)return String.fromCharCode.apply(String,i);let u="",m=0;for(;mm.length?(Buffer.isBuffer(s)||(s=Buffer.from(s)),s.copy(m,v)):Uint8Array.prototype.set.call(m,s,v);else{if(!Buffer.isBuffer(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(m,v)}v+=s.length}return m},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){const i=this.length;if(i%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let s=0;su&&(i+=" ... "),""},_&&(Buffer.prototype[_]=Buffer.prototype.inspect),Buffer.prototype.compare=function compare(i,s,u,m,v){if(isInstance(i,Uint8Array)&&(i=Buffer.from(i,i.offset,i.byteLength)),!Buffer.isBuffer(i))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof i);if(void 0===s&&(s=0),void 0===u&&(u=i?i.length:0),void 0===m&&(m=0),void 0===v&&(v=this.length),s<0||u>i.length||m<0||v>this.length)throw new RangeError("out of range index");if(m>=v&&s>=u)return 0;if(m>=v)return-1;if(s>=u)return 1;if(this===i)return 0;let _=(v>>>=0)-(m>>>=0),j=(u>>>=0)-(s>>>=0);const M=Math.min(_,j),$=this.slice(m,v),W=i.slice(s,u);for(let i=0;i>>=0,isFinite(u)?(u>>>=0,void 0===m&&(m="utf8")):(m=u,u=void 0)}const v=this.length-s;if((void 0===u||u>v)&&(u=v),i.length>0&&(u<0||s<0)||s>this.length)throw new RangeError("Attempt to write outside buffer bounds");m||(m="utf8");let _=!1;for(;;)switch(m){case"hex":return hexWrite(this,i,s,u);case"utf8":case"utf-8":return utf8Write(this,i,s,u);case"ascii":case"latin1":case"binary":return asciiWrite(this,i,s,u);case"base64":return base64Write(this,i,s,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,i,s,u);default:if(_)throw new TypeError("Unknown encoding: "+m);m=(""+m).toLowerCase(),_=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const M=4096;function asciiSlice(i,s,u){let m="";u=Math.min(i.length,u);for(let v=s;vm)&&(u=m);let v="";for(let m=s;mu)throw new RangeError("Trying to access beyond buffer length")}function checkInt(i,s,u,m,v,_){if(!Buffer.isBuffer(i))throw new TypeError('"buffer" argument must be a Buffer instance');if(s>v||s<_)throw new RangeError('"value" argument is out of bounds');if(u+m>i.length)throw new RangeError("Index out of range")}function wrtBigUInt64LE(i,s,u,m,v){checkIntBI(s,m,v,i,u,7);let _=Number(s&BigInt(4294967295));i[u++]=_,_>>=8,i[u++]=_,_>>=8,i[u++]=_,_>>=8,i[u++]=_;let j=Number(s>>BigInt(32)&BigInt(4294967295));return i[u++]=j,j>>=8,i[u++]=j,j>>=8,i[u++]=j,j>>=8,i[u++]=j,u}function wrtBigUInt64BE(i,s,u,m,v){checkIntBI(s,m,v,i,u,7);let _=Number(s&BigInt(4294967295));i[u+7]=_,_>>=8,i[u+6]=_,_>>=8,i[u+5]=_,_>>=8,i[u+4]=_;let j=Number(s>>BigInt(32)&BigInt(4294967295));return i[u+3]=j,j>>=8,i[u+2]=j,j>>=8,i[u+1]=j,j>>=8,i[u]=j,u+8}function checkIEEE754(i,s,u,m,v,_){if(u+m>i.length)throw new RangeError("Index out of range");if(u<0)throw new RangeError("Index out of range")}function writeFloat(i,s,u,m,_){return s=+s,u>>>=0,_||checkIEEE754(i,0,u,4),v.write(i,s,u,m,23,4),u+4}function writeDouble(i,s,u,m,_){return s=+s,u>>>=0,_||checkIEEE754(i,0,u,8),v.write(i,s,u,m,52,8),u+8}Buffer.prototype.slice=function slice(i,s){const u=this.length;(i=~~i)<0?(i+=u)<0&&(i=0):i>u&&(i=u),(s=void 0===s?u:~~s)<0?(s+=u)<0&&(s=0):s>u&&(s=u),s>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=this[i],v=1,_=0;for(;++_>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=this[i+--s],v=1;for(;s>0&&(v*=256);)m+=this[i+--s]*v;return m},Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(i,s){return i>>>=0,s||checkOffset(i,1,this.length),this[i]},Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(i,s){return i>>>=0,s||checkOffset(i,2,this.length),this[i]|this[i+1]<<8},Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(i,s){return i>>>=0,s||checkOffset(i,2,this.length),this[i]<<8|this[i+1]},Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),(this[i]|this[i+1]<<8|this[i+2]<<16)+16777216*this[i+3]},Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),16777216*this[i]+(this[i+1]<<16|this[i+2]<<8|this[i+3])},Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(i){validateNumber(i>>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=s+256*this[++i]+65536*this[++i]+this[++i]*2**24,v=this[++i]+256*this[++i]+65536*this[++i]+u*2**24;return BigInt(m)+(BigInt(v)<>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=s*2**24+65536*this[++i]+256*this[++i]+this[++i],v=this[++i]*2**24+65536*this[++i]+256*this[++i]+u;return(BigInt(m)<>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=this[i],v=1,_=0;for(;++_=v&&(m-=Math.pow(2,8*s)),m},Buffer.prototype.readIntBE=function readIntBE(i,s,u){i>>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=s,v=1,_=this[i+--m];for(;m>0&&(v*=256);)_+=this[i+--m]*v;return v*=128,_>=v&&(_-=Math.pow(2,8*s)),_},Buffer.prototype.readInt8=function readInt8(i,s){return i>>>=0,s||checkOffset(i,1,this.length),128&this[i]?-1*(255-this[i]+1):this[i]},Buffer.prototype.readInt16LE=function readInt16LE(i,s){i>>>=0,s||checkOffset(i,2,this.length);const u=this[i]|this[i+1]<<8;return 32768&u?4294901760|u:u},Buffer.prototype.readInt16BE=function readInt16BE(i,s){i>>>=0,s||checkOffset(i,2,this.length);const u=this[i+1]|this[i]<<8;return 32768&u?4294901760|u:u},Buffer.prototype.readInt32LE=function readInt32LE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),this[i]|this[i+1]<<8|this[i+2]<<16|this[i+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),this[i]<<24|this[i+1]<<16|this[i+2]<<8|this[i+3]},Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(i){validateNumber(i>>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=this[i+4]+256*this[i+5]+65536*this[i+6]+(u<<24);return(BigInt(m)<>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=(s<<24)+65536*this[++i]+256*this[++i]+this[++i];return(BigInt(m)<>>=0,s||checkOffset(i,4,this.length),v.read(this,i,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),v.read(this,i,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(i,s){return i>>>=0,s||checkOffset(i,8,this.length),v.read(this,i,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(i,s){return i>>>=0,s||checkOffset(i,8,this.length),v.read(this,i,!1,52,8)},Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(i,s,u,m){if(i=+i,s>>>=0,u>>>=0,!m){checkInt(this,i,s,u,Math.pow(2,8*u)-1,0)}let v=1,_=0;for(this[s]=255&i;++_>>=0,u>>>=0,!m){checkInt(this,i,s,u,Math.pow(2,8*u)-1,0)}let v=u-1,_=1;for(this[s+v]=255&i;--v>=0&&(_*=256);)this[s+v]=i/_&255;return s+u},Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,1,255,0),this[s]=255&i,s+1},Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,65535,0),this[s]=255&i,this[s+1]=i>>>8,s+2},Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,65535,0),this[s]=i>>>8,this[s+1]=255&i,s+2},Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,4294967295,0),this[s+3]=i>>>24,this[s+2]=i>>>16,this[s+1]=i>>>8,this[s]=255&i,s+4},Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,4294967295,0),this[s]=i>>>24,this[s+1]=i>>>16,this[s+2]=i>>>8,this[s+3]=255&i,s+4},Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(i,s=0){return wrtBigUInt64LE(this,i,s,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(i,s=0){return wrtBigUInt64BE(this,i,s,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeIntLE=function writeIntLE(i,s,u,m){if(i=+i,s>>>=0,!m){const m=Math.pow(2,8*u-1);checkInt(this,i,s,u,m-1,-m)}let v=0,_=1,j=0;for(this[s]=255&i;++v>0)-j&255;return s+u},Buffer.prototype.writeIntBE=function writeIntBE(i,s,u,m){if(i=+i,s>>>=0,!m){const m=Math.pow(2,8*u-1);checkInt(this,i,s,u,m-1,-m)}let v=u-1,_=1,j=0;for(this[s+v]=255&i;--v>=0&&(_*=256);)i<0&&0===j&&0!==this[s+v+1]&&(j=1),this[s+v]=(i/_>>0)-j&255;return s+u},Buffer.prototype.writeInt8=function writeInt8(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,1,127,-128),i<0&&(i=255+i+1),this[s]=255&i,s+1},Buffer.prototype.writeInt16LE=function writeInt16LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,32767,-32768),this[s]=255&i,this[s+1]=i>>>8,s+2},Buffer.prototype.writeInt16BE=function writeInt16BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,32767,-32768),this[s]=i>>>8,this[s+1]=255&i,s+2},Buffer.prototype.writeInt32LE=function writeInt32LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,2147483647,-2147483648),this[s]=255&i,this[s+1]=i>>>8,this[s+2]=i>>>16,this[s+3]=i>>>24,s+4},Buffer.prototype.writeInt32BE=function writeInt32BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,2147483647,-2147483648),i<0&&(i=4294967295+i+1),this[s]=i>>>24,this[s+1]=i>>>16,this[s+2]=i>>>8,this[s+3]=255&i,s+4},Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(i,s=0){return wrtBigUInt64LE(this,i,s,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(i,s=0){return wrtBigUInt64BE(this,i,s,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeFloatLE=function writeFloatLE(i,s,u){return writeFloat(this,i,s,!0,u)},Buffer.prototype.writeFloatBE=function writeFloatBE(i,s,u){return writeFloat(this,i,s,!1,u)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(i,s,u){return writeDouble(this,i,s,!0,u)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(i,s,u){return writeDouble(this,i,s,!1,u)},Buffer.prototype.copy=function copy(i,s,u,m){if(!Buffer.isBuffer(i))throw new TypeError("argument should be a Buffer");if(u||(u=0),m||0===m||(m=this.length),s>=i.length&&(s=i.length),s||(s=0),m>0&&m=this.length)throw new RangeError("Index out of range");if(m<0)throw new RangeError("sourceEnd out of bounds");m>this.length&&(m=this.length),i.length-s>>=0,u=void 0===u?this.length:u>>>0,i||(i=0),"number"==typeof i)for(v=s;v=m+4;u-=3)s=`_${i.slice(u-3,u)}${s}`;return`${i.slice(0,u)}${s}`}function checkIntBI(i,s,u,m,v,_){if(i>u||i3?0===s||s===BigInt(0)?`>= 0${m} and < 2${m} ** ${8*(_+1)}${m}`:`>= -(2${m} ** ${8*(_+1)-1}${m}) and < 2 ** ${8*(_+1)-1}${m}`:`>= ${s}${m} and <= ${u}${m}`,new $.ERR_OUT_OF_RANGE("value",v,i)}!function checkBounds(i,s,u){validateNumber(s,"offset"),void 0!==i[s]&&void 0!==i[s+u]||boundsError(s,i.length-(u+1))}(m,v,_)}function validateNumber(i,s){if("number"!=typeof i)throw new $.ERR_INVALID_ARG_TYPE(s,"number",i)}function boundsError(i,s,u){if(Math.floor(i)!==i)throw validateNumber(i,u),new $.ERR_OUT_OF_RANGE(u||"offset","an integer",i);if(s<0)throw new $.ERR_BUFFER_OUT_OF_BOUNDS;throw new $.ERR_OUT_OF_RANGE(u||"offset",`>= ${u?1:0} and <= ${s}`,i)}E("ERR_BUFFER_OUT_OF_BOUNDS",(function(i){return i?`${i} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),E("ERR_INVALID_ARG_TYPE",(function(i,s){return`The "${i}" argument must be of type number. Received type ${typeof s}`}),TypeError),E("ERR_OUT_OF_RANGE",(function(i,s,u){let m=`The value of "${i}" is out of range.`,v=u;return Number.isInteger(u)&&Math.abs(u)>2**32?v=addNumericalSeparator(String(u)):"bigint"==typeof u&&(v=String(u),(u>BigInt(2)**BigInt(32)||u<-(BigInt(2)**BigInt(32)))&&(v=addNumericalSeparator(v)),v+="n"),m+=` It must be ${s}. Received ${v}`,m}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function utf8ToBytes(i,s){let u;s=s||1/0;const m=i.length;let v=null;const _=[];for(let j=0;j55295&&u<57344){if(!v){if(u>56319){(s-=3)>-1&&_.push(239,191,189);continue}if(j+1===m){(s-=3)>-1&&_.push(239,191,189);continue}v=u;continue}if(u<56320){(s-=3)>-1&&_.push(239,191,189),v=u;continue}u=65536+(v-55296<<10|u-56320)}else v&&(s-=3)>-1&&_.push(239,191,189);if(v=null,u<128){if((s-=1)<0)break;_.push(u)}else if(u<2048){if((s-=2)<0)break;_.push(u>>6|192,63&u|128)}else if(u<65536){if((s-=3)<0)break;_.push(u>>12|224,u>>6&63|128,63&u|128)}else{if(!(u<1114112))throw new Error("Invalid code point");if((s-=4)<0)break;_.push(u>>18|240,u>>12&63|128,u>>6&63|128,63&u|128)}}return _}function base64ToBytes(i){return m.toByteArray(function base64clean(i){if((i=(i=i.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;i.length%4!=0;)i+="=";return i}(i))}function blitBuffer(i,s,u,m){let v;for(v=0;v=s.length||v>=i.length);++v)s[v+u]=i[v];return v}function isInstance(i,s){return i instanceof s||null!=i&&null!=i.constructor&&null!=i.constructor.name&&i.constructor.name===s.name}function numberIsNaN(i){return i!=i}const X=function(){const i="0123456789abcdef",s=new Array(256);for(let u=0;u<16;++u){const m=16*u;for(let v=0;v<16;++v)s[m+v]=i[u]+i[v]}return s}();function defineBigIntMethod(i){return"undefined"==typeof BigInt?BufferBigIntNotDefined:i}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}},21924:(i,s,u)=>{"use strict";var m=u(40210),v=u(55559),_=v(m("String.prototype.indexOf"));i.exports=function callBoundIntrinsic(i,s){var u=m(i,!!s);return"function"==typeof u&&_(i,".prototype.")>-1?v(u):u}},55559:(i,s,u)=>{"use strict";var m=u(58612),v=u(40210),_=v("%Function.prototype.apply%"),j=v("%Function.prototype.call%"),M=v("%Reflect.apply%",!0)||m.call(j,_),$=v("%Object.getOwnPropertyDescriptor%",!0),W=v("%Object.defineProperty%",!0),X=v("%Math.max%");if(W)try{W({},"a",{value:1})}catch(i){W=null}i.exports=function callBind(i){var s=M(m,j,arguments);$&&W&&($(s,"length").configurable&&W(s,"length",{value:1+X(0,i.length-(arguments.length-1))}));return s};var Y=function applyBind(){return M(m,_,arguments)};W?W(i.exports,"apply",{value:Y}):i.exports.apply=Y},94184:(i,s)=>{var u;!function(){"use strict";var m={}.hasOwnProperty;function classNames(){for(var i=[],s=0;s{"use strict";s.parse=function parse(i,s){if("string"!=typeof i)throw new TypeError("argument str must be a string");var u={},m=(s||{}).decode||decode,v=0;for(;v{"use strict";var m=u(11742),v={"text/plain":"Text","text/html":"Url",default:"Text"};i.exports=function copy(i,s){var u,_,j,M,$,W,X=!1;s||(s={}),u=s.debug||!1;try{if(j=m(),M=document.createRange(),$=document.getSelection(),(W=document.createElement("span")).textContent=i,W.ariaHidden="true",W.style.all="unset",W.style.position="fixed",W.style.top=0,W.style.clip="rect(0, 0, 0, 0)",W.style.whiteSpace="pre",W.style.webkitUserSelect="text",W.style.MozUserSelect="text",W.style.msUserSelect="text",W.style.userSelect="text",W.addEventListener("copy",(function(m){if(m.stopPropagation(),s.format)if(m.preventDefault(),void 0===m.clipboardData){u&&console.warn("unable to use e.clipboardData"),u&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var _=v[s.format]||v.default;window.clipboardData.setData(_,i)}else m.clipboardData.clearData(),m.clipboardData.setData(s.format,i);s.onCopy&&(m.preventDefault(),s.onCopy(m.clipboardData))})),document.body.appendChild(W),M.selectNodeContents(W),$.addRange(M),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");X=!0}catch(m){u&&console.error("unable to copy using execCommand: ",m),u&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(s.format||"text",i),s.onCopy&&s.onCopy(window.clipboardData),X=!0}catch(m){u&&console.error("unable to copy using clipboardData: ",m),u&&console.error("falling back to prompt"),_=function format(i){var s=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return i.replace(/#{\s*key\s*}/g,s)}("message"in s?s.message:"Copy to clipboard: #{key}, Enter"),window.prompt(_,i)}}finally{$&&("function"==typeof $.removeRange?$.removeRange(M):$.removeAllRanges()),W&&document.body.removeChild(W),j()}return X}},44101:(i,s,u)=>{var m=u(18957);i.exports=m},90093:(i,s,u)=>{var m=u(28196);i.exports=m},65362:(i,s,u)=>{var m=u(63383);i.exports=m},50415:(i,s,u)=>{u(61181),u(47627),u(24415),u(66274),u(77971);var m=u(54058);i.exports=m.AggregateError},27700:(i,s,u)=>{u(73381);var m=u(35703);i.exports=m("Function").bind},16246:(i,s,u)=>{var m=u(7046),v=u(27700),_=Function.prototype;i.exports=function(i){var s=i.bind;return i===_||m(_,i)&&s===_.bind?v:s}},45999:(i,s,u)=>{u(49221);var m=u(54058);i.exports=m.Object.assign},16121:(i,s,u)=>{i.exports=u(38644)},14122:(i,s,u)=>{i.exports=u(89097)},60269:(i,s,u)=>{i.exports=u(76936)},38644:(i,s,u)=>{u(89731);var m=u(44101);i.exports=m},89097:(i,s,u)=>{var m=u(90093);i.exports=m},76936:(i,s,u)=>{var m=u(65362);i.exports=m},24883:(i,s,u)=>{var m=u(57475),v=u(69826),_=TypeError;i.exports=function(i){if(m(i))return i;throw _(v(i)+" is not a function")}},11851:(i,s,u)=>{var m=u(57475),v=String,_=TypeError;i.exports=function(i){if("object"==typeof i||m(i))return i;throw _("Can't set "+v(i)+" as a prototype")}},18479:i=>{i.exports=function(){}},96059:(i,s,u)=>{var m=u(10941),v=String,_=TypeError;i.exports=function(i){if(m(i))return i;throw _(v(i)+" is not an object")}},31692:(i,s,u)=>{var m=u(74529),v=u(59413),_=u(10623),createMethod=function(i){return function(s,u,j){var M,$=m(s),W=_($),X=v(j,W);if(i&&u!=u){for(;W>X;)if((M=$[X++])!=M)return!0}else for(;W>X;X++)if((i||X in $)&&$[X]===u)return i||X||0;return!i&&-1}};i.exports={includes:createMethod(!0),indexOf:createMethod(!1)}},93765:(i,s,u)=>{var m=u(95329);i.exports=m([].slice)},82532:(i,s,u)=>{var m=u(95329),v=m({}.toString),_=m("".slice);i.exports=function(i){return _(v(i),8,-1)}},9697:(i,s,u)=>{var m=u(22885),v=u(57475),_=u(82532),j=u(99813)("toStringTag"),M=Object,$="Arguments"==_(function(){return arguments}());i.exports=m?_:function(i){var s,u,m;return void 0===i?"Undefined":null===i?"Null":"string"==typeof(u=function(i,s){try{return i[s]}catch(i){}}(s=M(i),j))?u:$?_(s):"Object"==(m=_(s))&&v(s.callee)?"Arguments":m}},23489:(i,s,u)=>{var m=u(90953),v=u(31136),_=u(49677),j=u(65988);i.exports=function(i,s,u){for(var M=v(s),$=j.f,W=_.f,X=0;X{var m=u(95981);i.exports=!m((function(){function F(){}return F.prototype.constructor=null,Object.getPrototypeOf(new F)!==F.prototype}))},23538:i=>{i.exports=function(i,s){return{value:i,done:s}}},32029:(i,s,u)=>{var m=u(55746),v=u(65988),_=u(31887);i.exports=m?function(i,s,u){return v.f(i,s,_(1,u))}:function(i,s,u){return i[s]=u,i}},31887:i=>{i.exports=function(i,s){return{enumerable:!(1&i),configurable:!(2&i),writable:!(4&i),value:s}}},95929:(i,s,u)=>{var m=u(32029);i.exports=function(i,s,u,v){return v&&v.enumerable?i[s]=u:m(i,s,u),i}},75609:(i,s,u)=>{var m=u(21899),v=Object.defineProperty;i.exports=function(i,s){try{v(m,i,{value:s,configurable:!0,writable:!0})}catch(u){m[i]=s}return s}},55746:(i,s,u)=>{var m=u(95981);i.exports=!m((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},76616:i=>{var s="object"==typeof document&&document.all,u=void 0===s&&void 0!==s;i.exports={all:s,IS_HTMLDDA:u}},61333:(i,s,u)=>{var m=u(21899),v=u(10941),_=m.document,j=v(_)&&v(_.createElement);i.exports=function(i){return j?_.createElement(i):{}}},63281:i=>{i.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},2861:i=>{i.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},53385:(i,s,u)=>{var m,v,_=u(21899),j=u(2861),M=_.process,$=_.Deno,W=M&&M.versions||$&&$.version,X=W&&W.v8;X&&(v=(m=X.split("."))[0]>0&&m[0]<4?1:+(m[0]+m[1])),!v&&j&&(!(m=j.match(/Edge\/(\d+)/))||m[1]>=74)&&(m=j.match(/Chrome\/(\d+)/))&&(v=+m[1]),i.exports=v},35703:(i,s,u)=>{var m=u(54058);i.exports=function(i){return m[i+"Prototype"]}},56759:i=>{i.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},53995:(i,s,u)=>{var m=u(95329),v=Error,_=m("".replace),j=String(v("zxcasd").stack),M=/\n\s*at [^:]*:[^\n]*/,$=M.test(j);i.exports=function(i,s){if($&&"string"==typeof i&&!v.prepareStackTrace)for(;s--;)i=_(i,M,"");return i}},79585:(i,s,u)=>{var m=u(32029),v=u(53995),_=u(18780),j=Error.captureStackTrace;i.exports=function(i,s,u,M){_&&(j?j(i,s):m(i,"stack",v(u,M)))}},18780:(i,s,u)=>{var m=u(95981),v=u(31887);i.exports=!m((function(){var i=Error("a");return!("stack"in i)||(Object.defineProperty(i,"stack",v(1,7)),7!==i.stack)}))},76887:(i,s,u)=>{"use strict";var m=u(21899),v=u(79730),_=u(97484),j=u(57475),M=u(49677).f,$=u(37252),W=u(54058),X=u(86843),Y=u(32029),Z=u(90953),wrapConstructor=function(i){var Wrapper=function(s,u,m){if(this instanceof Wrapper){switch(arguments.length){case 0:return new i;case 1:return new i(s);case 2:return new i(s,u)}return new i(s,u,m)}return v(i,this,arguments)};return Wrapper.prototype=i.prototype,Wrapper};i.exports=function(i,s){var u,v,ee,ae,ie,le,ce,pe,de,fe=i.target,ye=i.global,be=i.stat,_e=i.proto,we=ye?m:be?m[fe]:(m[fe]||{}).prototype,Se=ye?W:W[fe]||Y(W,fe,{})[fe],xe=Se.prototype;for(ae in s)v=!(u=$(ye?ae:fe+(be?".":"#")+ae,i.forced))&&we&&Z(we,ae),le=Se[ae],v&&(ce=i.dontCallGetSet?(de=M(we,ae))&&de.value:we[ae]),ie=v&&ce?ce:s[ae],v&&typeof le==typeof ie||(pe=i.bind&&v?X(ie,m):i.wrap&&v?wrapConstructor(ie):_e&&j(ie)?_(ie):ie,(i.sham||ie&&ie.sham||le&&le.sham)&&Y(pe,"sham",!0),Y(Se,ae,pe),_e&&(Z(W,ee=fe+"Prototype")||Y(W,ee,{}),Y(W[ee],ae,ie),i.real&&xe&&(u||!xe[ae])&&Y(xe,ae,ie)))}},95981:i=>{i.exports=function(i){try{return!!i()}catch(i){return!0}}},79730:(i,s,u)=>{var m=u(18285),v=Function.prototype,_=v.apply,j=v.call;i.exports="object"==typeof Reflect&&Reflect.apply||(m?j.bind(_):function(){return j.apply(_,arguments)})},86843:(i,s,u)=>{var m=u(97484),v=u(24883),_=u(18285),j=m(m.bind);i.exports=function(i,s){return v(i),void 0===s?i:_?j(i,s):function(){return i.apply(s,arguments)}}},18285:(i,s,u)=>{var m=u(95981);i.exports=!m((function(){var i=function(){}.bind();return"function"!=typeof i||i.hasOwnProperty("prototype")}))},98308:(i,s,u)=>{"use strict";var m=u(95329),v=u(24883),_=u(10941),j=u(90953),M=u(93765),$=u(18285),W=Function,X=m([].concat),Y=m([].join),Z={};i.exports=$?W.bind:function bind(i){var s=v(this),u=s.prototype,m=M(arguments,1),$=function bound(){var u=X(m,M(arguments));return this instanceof $?function(i,s,u){if(!j(Z,s)){for(var m=[],v=0;v{var m=u(18285),v=Function.prototype.call;i.exports=m?v.bind(v):function(){return v.apply(v,arguments)}},79417:(i,s,u)=>{var m=u(55746),v=u(90953),_=Function.prototype,j=m&&Object.getOwnPropertyDescriptor,M=v(_,"name"),$=M&&"something"===function something(){}.name,W=M&&(!m||m&&j(_,"name").configurable);i.exports={EXISTS:M,PROPER:$,CONFIGURABLE:W}},45526:(i,s,u)=>{var m=u(95329),v=u(24883);i.exports=function(i,s,u){try{return m(v(Object.getOwnPropertyDescriptor(i,s)[u]))}catch(i){}}},97484:(i,s,u)=>{var m=u(82532),v=u(95329);i.exports=function(i){if("Function"===m(i))return v(i)}},95329:(i,s,u)=>{var m=u(18285),v=Function.prototype,_=v.call,j=m&&v.bind.bind(_,_);i.exports=m?j:function(i){return function(){return _.apply(i,arguments)}}},626:(i,s,u)=>{var m=u(54058),v=u(21899),_=u(57475),aFunction=function(i){return _(i)?i:void 0};i.exports=function(i,s){return arguments.length<2?aFunction(m[i])||aFunction(v[i]):m[i]&&m[i][s]||v[i]&&v[i][s]}},22902:(i,s,u)=>{var m=u(9697),v=u(14229),_=u(82119),j=u(12077),M=u(99813)("iterator");i.exports=function(i){if(!_(i))return v(i,M)||v(i,"@@iterator")||j[m(i)]}},53476:(i,s,u)=>{var m=u(78834),v=u(24883),_=u(96059),j=u(69826),M=u(22902),$=TypeError;i.exports=function(i,s){var u=arguments.length<2?M(i):s;if(v(u))return _(m(u,i));throw $(j(i)+" is not iterable")}},14229:(i,s,u)=>{var m=u(24883),v=u(82119);i.exports=function(i,s){var u=i[s];return v(u)?void 0:m(u)}},21899:function(i,s,u){var check=function(i){return i&&i.Math==Math&&i};i.exports=check("object"==typeof globalThis&&globalThis)||check("object"==typeof window&&window)||check("object"==typeof self&&self)||check("object"==typeof u.g&&u.g)||function(){return this}()||this||Function("return this")()},90953:(i,s,u)=>{var m=u(95329),v=u(89678),_=m({}.hasOwnProperty);i.exports=Object.hasOwn||function hasOwn(i,s){return _(v(i),s)}},27748:i=>{i.exports={}},15463:(i,s,u)=>{var m=u(626);i.exports=m("document","documentElement")},2840:(i,s,u)=>{var m=u(55746),v=u(95981),_=u(61333);i.exports=!m&&!v((function(){return 7!=Object.defineProperty(_("div"),"a",{get:function(){return 7}}).a}))},37026:(i,s,u)=>{var m=u(95329),v=u(95981),_=u(82532),j=Object,M=m("".split);i.exports=v((function(){return!j("z").propertyIsEnumerable(0)}))?function(i){return"String"==_(i)?M(i,""):j(i)}:j},70926:(i,s,u)=>{var m=u(57475),v=u(10941),_=u(88929);i.exports=function(i,s,u){var j,M;return _&&m(j=s.constructor)&&j!==u&&v(M=j.prototype)&&M!==u.prototype&&_(i,M),i}},53794:(i,s,u)=>{var m=u(10941),v=u(32029);i.exports=function(i,s){m(s)&&"cause"in s&&v(i,"cause",s.cause)}},45402:(i,s,u)=>{var m,v,_,j=u(47093),M=u(21899),$=u(10941),W=u(32029),X=u(90953),Y=u(63030),Z=u(44262),ee=u(27748),ae="Object already initialized",ie=M.TypeError,le=M.WeakMap;if(j||Y.state){var ce=Y.state||(Y.state=new le);ce.get=ce.get,ce.has=ce.has,ce.set=ce.set,m=function(i,s){if(ce.has(i))throw ie(ae);return s.facade=i,ce.set(i,s),s},v=function(i){return ce.get(i)||{}},_=function(i){return ce.has(i)}}else{var pe=Z("state");ee[pe]=!0,m=function(i,s){if(X(i,pe))throw ie(ae);return s.facade=i,W(i,pe,s),s},v=function(i){return X(i,pe)?i[pe]:{}},_=function(i){return X(i,pe)}}i.exports={set:m,get:v,has:_,enforce:function(i){return _(i)?v(i):m(i,{})},getterFor:function(i){return function(s){var u;if(!$(s)||(u=v(s)).type!==i)throw ie("Incompatible receiver, "+i+" required");return u}}}},6782:(i,s,u)=>{var m=u(99813),v=u(12077),_=m("iterator"),j=Array.prototype;i.exports=function(i){return void 0!==i&&(v.Array===i||j[_]===i)}},57475:(i,s,u)=>{var m=u(76616),v=m.all;i.exports=m.IS_HTMLDDA?function(i){return"function"==typeof i||i===v}:function(i){return"function"==typeof i}},37252:(i,s,u)=>{var m=u(95981),v=u(57475),_=/#|\.prototype\./,isForced=function(i,s){var u=M[j(i)];return u==W||u!=$&&(v(s)?m(s):!!s)},j=isForced.normalize=function(i){return String(i).replace(_,".").toLowerCase()},M=isForced.data={},$=isForced.NATIVE="N",W=isForced.POLYFILL="P";i.exports=isForced},82119:i=>{i.exports=function(i){return null==i}},10941:(i,s,u)=>{var m=u(57475),v=u(76616),_=v.all;i.exports=v.IS_HTMLDDA?function(i){return"object"==typeof i?null!==i:m(i)||i===_}:function(i){return"object"==typeof i?null!==i:m(i)}},82529:i=>{i.exports=!0},56664:(i,s,u)=>{var m=u(626),v=u(57475),_=u(7046),j=u(32302),M=Object;i.exports=j?function(i){return"symbol"==typeof i}:function(i){var s=m("Symbol");return v(s)&&_(s.prototype,M(i))}},93091:(i,s,u)=>{var m=u(86843),v=u(78834),_=u(96059),j=u(69826),M=u(6782),$=u(10623),W=u(7046),X=u(53476),Y=u(22902),Z=u(7609),ee=TypeError,Result=function(i,s){this.stopped=i,this.result=s},ae=Result.prototype;i.exports=function(i,s,u){var ie,le,ce,pe,de,fe,ye,be=u&&u.that,_e=!(!u||!u.AS_ENTRIES),we=!(!u||!u.IS_RECORD),Se=!(!u||!u.IS_ITERATOR),xe=!(!u||!u.INTERRUPTED),Pe=m(s,be),stop=function(i){return ie&&Z(ie,"normal",i),new Result(!0,i)},callFn=function(i){return _e?(_(i),xe?Pe(i[0],i[1],stop):Pe(i[0],i[1])):xe?Pe(i,stop):Pe(i)};if(we)ie=i.iterator;else if(Se)ie=i;else{if(!(le=Y(i)))throw ee(j(i)+" is not iterable");if(M(le)){for(ce=0,pe=$(i);pe>ce;ce++)if((de=callFn(i[ce]))&&W(ae,de))return de;return new Result(!1)}ie=X(i,le)}for(fe=we?i.next:ie.next;!(ye=v(fe,ie)).done;){try{de=callFn(ye.value)}catch(i){Z(ie,"throw",i)}if("object"==typeof de&&de&&W(ae,de))return de}return new Result(!1)}},7609:(i,s,u)=>{var m=u(78834),v=u(96059),_=u(14229);i.exports=function(i,s,u){var j,M;v(i);try{if(!(j=_(i,"return"))){if("throw"===s)throw u;return u}j=m(j,i)}catch(i){M=!0,j=i}if("throw"===s)throw u;if(M)throw j;return v(j),u}},53847:(i,s,u)=>{"use strict";var m=u(35143).IteratorPrototype,v=u(29290),_=u(31887),j=u(90904),M=u(12077),returnThis=function(){return this};i.exports=function(i,s,u,$){var W=s+" Iterator";return i.prototype=v(m,{next:_(+!$,u)}),j(i,W,!1,!0),M[W]=returnThis,i}},75105:(i,s,u)=>{"use strict";var m=u(76887),v=u(78834),_=u(82529),j=u(79417),M=u(57475),$=u(53847),W=u(249),X=u(88929),Y=u(90904),Z=u(32029),ee=u(95929),ae=u(99813),ie=u(12077),le=u(35143),ce=j.PROPER,pe=j.CONFIGURABLE,de=le.IteratorPrototype,fe=le.BUGGY_SAFARI_ITERATORS,ye=ae("iterator"),be="keys",_e="values",we="entries",returnThis=function(){return this};i.exports=function(i,s,u,j,ae,le,Se){$(u,s,j);var xe,Pe,Ie,getIterationMethod=function(i){if(i===ae&&Ve)return Ve;if(!fe&&i in qe)return qe[i];switch(i){case be:return function keys(){return new u(this,i)};case _e:return function values(){return new u(this,i)};case we:return function entries(){return new u(this,i)}}return function(){return new u(this)}},Te=s+" Iterator",Re=!1,qe=i.prototype,ze=qe[ye]||qe["@@iterator"]||ae&&qe[ae],Ve=!fe&&ze||getIterationMethod(ae),We="Array"==s&&qe.entries||ze;if(We&&(xe=W(We.call(new i)))!==Object.prototype&&xe.next&&(_||W(xe)===de||(X?X(xe,de):M(xe[ye])||ee(xe,ye,returnThis)),Y(xe,Te,!0,!0),_&&(ie[Te]=returnThis)),ce&&ae==_e&&ze&&ze.name!==_e&&(!_&&pe?Z(qe,"name",_e):(Re=!0,Ve=function values(){return v(ze,this)})),ae)if(Pe={values:getIterationMethod(_e),keys:le?Ve:getIterationMethod(be),entries:getIterationMethod(we)},Se)for(Ie in Pe)(fe||Re||!(Ie in qe))&&ee(qe,Ie,Pe[Ie]);else m({target:s,proto:!0,forced:fe||Re},Pe);return _&&!Se||qe[ye]===Ve||ee(qe,ye,Ve,{name:ae}),ie[s]=Ve,Pe}},35143:(i,s,u)=>{"use strict";var m,v,_,j=u(95981),M=u(57475),$=u(10941),W=u(29290),X=u(249),Y=u(95929),Z=u(99813),ee=u(82529),ae=Z("iterator"),ie=!1;[].keys&&("next"in(_=[].keys())?(v=X(X(_)))!==Object.prototype&&(m=v):ie=!0),!$(m)||j((function(){var i={};return m[ae].call(i)!==i}))?m={}:ee&&(m=W(m)),M(m[ae])||Y(m,ae,(function(){return this})),i.exports={IteratorPrototype:m,BUGGY_SAFARI_ITERATORS:ie}},12077:i=>{i.exports={}},10623:(i,s,u)=>{var m=u(43057);i.exports=function(i){return m(i.length)}},35331:i=>{var s=Math.ceil,u=Math.floor;i.exports=Math.trunc||function trunc(i){var m=+i;return(m>0?u:s)(m)}},14649:(i,s,u)=>{var m=u(85803);i.exports=function(i,s){return void 0===i?arguments.length<2?"":s:m(i)}},24420:(i,s,u)=>{"use strict";var m=u(55746),v=u(95329),_=u(78834),j=u(95981),M=u(14771),$=u(87857),W=u(36760),X=u(89678),Y=u(37026),Z=Object.assign,ee=Object.defineProperty,ae=v([].concat);i.exports=!Z||j((function(){if(m&&1!==Z({b:1},Z(ee({},"a",{enumerable:!0,get:function(){ee(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var i={},s={},u=Symbol(),v="abcdefghijklmnopqrst";return i[u]=7,v.split("").forEach((function(i){s[i]=i})),7!=Z({},i)[u]||M(Z({},s)).join("")!=v}))?function assign(i,s){for(var u=X(i),v=arguments.length,j=1,Z=$.f,ee=W.f;v>j;)for(var ie,le=Y(arguments[j++]),ce=Z?ae(M(le),Z(le)):M(le),pe=ce.length,de=0;pe>de;)ie=ce[de++],m&&!_(ee,le,ie)||(u[ie]=le[ie]);return u}:Z},29290:(i,s,u)=>{var m,v=u(96059),_=u(59938),j=u(56759),M=u(27748),$=u(15463),W=u(61333),X=u(44262),Y="prototype",Z="script",ee=X("IE_PROTO"),EmptyConstructor=function(){},scriptTag=function(i){return"<"+Z+">"+i+""},NullProtoObjectViaActiveX=function(i){i.write(scriptTag("")),i.close();var s=i.parentWindow.Object;return i=null,s},NullProtoObject=function(){try{m=new ActiveXObject("htmlfile")}catch(i){}var i,s,u;NullProtoObject="undefined"!=typeof document?document.domain&&m?NullProtoObjectViaActiveX(m):(s=W("iframe"),u="java"+Z+":",s.style.display="none",$.appendChild(s),s.src=String(u),(i=s.contentWindow.document).open(),i.write(scriptTag("document.F=Object")),i.close(),i.F):NullProtoObjectViaActiveX(m);for(var v=j.length;v--;)delete NullProtoObject[Y][j[v]];return NullProtoObject()};M[ee]=!0,i.exports=Object.create||function create(i,s){var u;return null!==i?(EmptyConstructor[Y]=v(i),u=new EmptyConstructor,EmptyConstructor[Y]=null,u[ee]=i):u=NullProtoObject(),void 0===s?u:_.f(u,s)}},59938:(i,s,u)=>{var m=u(55746),v=u(83937),_=u(65988),j=u(96059),M=u(74529),$=u(14771);s.f=m&&!v?Object.defineProperties:function defineProperties(i,s){j(i);for(var u,m=M(s),v=$(s),W=v.length,X=0;W>X;)_.f(i,u=v[X++],m[u]);return i}},65988:(i,s,u)=>{var m=u(55746),v=u(2840),_=u(83937),j=u(96059),M=u(83894),$=TypeError,W=Object.defineProperty,X=Object.getOwnPropertyDescriptor,Y="enumerable",Z="configurable",ee="writable";s.f=m?_?function defineProperty(i,s,u){if(j(i),s=M(s),j(u),"function"==typeof i&&"prototype"===s&&"value"in u&&ee in u&&!u[ee]){var m=X(i,s);m&&m[ee]&&(i[s]=u.value,u={configurable:Z in u?u[Z]:m[Z],enumerable:Y in u?u[Y]:m[Y],writable:!1})}return W(i,s,u)}:W:function defineProperty(i,s,u){if(j(i),s=M(s),j(u),v)try{return W(i,s,u)}catch(i){}if("get"in u||"set"in u)throw $("Accessors not supported");return"value"in u&&(i[s]=u.value),i}},49677:(i,s,u)=>{var m=u(55746),v=u(78834),_=u(36760),j=u(31887),M=u(74529),$=u(83894),W=u(90953),X=u(2840),Y=Object.getOwnPropertyDescriptor;s.f=m?Y:function getOwnPropertyDescriptor(i,s){if(i=M(i),s=$(s),X)try{return Y(i,s)}catch(i){}if(W(i,s))return j(!v(_.f,i,s),i[s])}},10946:(i,s,u)=>{var m=u(55629),v=u(56759).concat("length","prototype");s.f=Object.getOwnPropertyNames||function getOwnPropertyNames(i){return m(i,v)}},87857:(i,s)=>{s.f=Object.getOwnPropertySymbols},249:(i,s,u)=>{var m=u(90953),v=u(57475),_=u(89678),j=u(44262),M=u(91310),$=j("IE_PROTO"),W=Object,X=W.prototype;i.exports=M?W.getPrototypeOf:function(i){var s=_(i);if(m(s,$))return s[$];var u=s.constructor;return v(u)&&s instanceof u?u.prototype:s instanceof W?X:null}},7046:(i,s,u)=>{var m=u(95329);i.exports=m({}.isPrototypeOf)},55629:(i,s,u)=>{var m=u(95329),v=u(90953),_=u(74529),j=u(31692).indexOf,M=u(27748),$=m([].push);i.exports=function(i,s){var u,m=_(i),W=0,X=[];for(u in m)!v(M,u)&&v(m,u)&&$(X,u);for(;s.length>W;)v(m,u=s[W++])&&(~j(X,u)||$(X,u));return X}},14771:(i,s,u)=>{var m=u(55629),v=u(56759);i.exports=Object.keys||function keys(i){return m(i,v)}},36760:(i,s)=>{"use strict";var u={}.propertyIsEnumerable,m=Object.getOwnPropertyDescriptor,v=m&&!u.call({1:2},1);s.f=v?function propertyIsEnumerable(i){var s=m(this,i);return!!s&&s.enumerable}:u},88929:(i,s,u)=>{var m=u(45526),v=u(96059),_=u(11851);i.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var i,s=!1,u={};try{(i=m(Object.prototype,"__proto__","set"))(u,[]),s=u instanceof Array}catch(i){}return function setPrototypeOf(u,m){return v(u),_(m),s?i(u,m):u.__proto__=m,u}}():void 0)},95623:(i,s,u)=>{"use strict";var m=u(22885),v=u(9697);i.exports=m?{}.toString:function toString(){return"[object "+v(this)+"]"}},39811:(i,s,u)=>{var m=u(78834),v=u(57475),_=u(10941),j=TypeError;i.exports=function(i,s){var u,M;if("string"===s&&v(u=i.toString)&&!_(M=m(u,i)))return M;if(v(u=i.valueOf)&&!_(M=m(u,i)))return M;if("string"!==s&&v(u=i.toString)&&!_(M=m(u,i)))return M;throw j("Can't convert object to primitive value")}},31136:(i,s,u)=>{var m=u(626),v=u(95329),_=u(10946),j=u(87857),M=u(96059),$=v([].concat);i.exports=m("Reflect","ownKeys")||function ownKeys(i){var s=_.f(M(i)),u=j.f;return u?$(s,u(i)):s}},54058:i=>{i.exports={}},9056:(i,s,u)=>{var m=u(65988).f;i.exports=function(i,s,u){u in i||m(i,u,{configurable:!0,get:function(){return s[u]},set:function(i){s[u]=i}})}},48219:(i,s,u)=>{var m=u(82119),v=TypeError;i.exports=function(i){if(m(i))throw v("Can't call method on "+i);return i}},90904:(i,s,u)=>{var m=u(22885),v=u(65988).f,_=u(32029),j=u(90953),M=u(95623),$=u(99813)("toStringTag");i.exports=function(i,s,u,W){if(i){var X=u?i:i.prototype;j(X,$)||v(X,$,{configurable:!0,value:s}),W&&!m&&_(X,"toString",M)}}},44262:(i,s,u)=>{var m=u(68726),v=u(99418),_=m("keys");i.exports=function(i){return _[i]||(_[i]=v(i))}},63030:(i,s,u)=>{var m=u(21899),v=u(75609),_="__core-js_shared__",j=m[_]||v(_,{});i.exports=j},68726:(i,s,u)=>{var m=u(82529),v=u(63030);(i.exports=function(i,s){return v[i]||(v[i]=void 0!==s?s:{})})("versions",[]).push({version:"3.31.1",mode:m?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.31.1/LICENSE",source:"https://github.com/zloirock/core-js"})},64620:(i,s,u)=>{var m=u(95329),v=u(62435),_=u(85803),j=u(48219),M=m("".charAt),$=m("".charCodeAt),W=m("".slice),createMethod=function(i){return function(s,u){var m,X,Y=_(j(s)),Z=v(u),ee=Y.length;return Z<0||Z>=ee?i?"":void 0:(m=$(Y,Z))<55296||m>56319||Z+1===ee||(X=$(Y,Z+1))<56320||X>57343?i?M(Y,Z):m:i?W(Y,Z,Z+2):X-56320+(m-55296<<10)+65536}};i.exports={codeAt:createMethod(!1),charAt:createMethod(!0)}},63405:(i,s,u)=>{var m=u(53385),v=u(95981),_=u(21899).String;i.exports=!!Object.getOwnPropertySymbols&&!v((function(){var i=Symbol();return!_(i)||!(Object(i)instanceof Symbol)||!Symbol.sham&&m&&m<41}))},59413:(i,s,u)=>{var m=u(62435),v=Math.max,_=Math.min;i.exports=function(i,s){var u=m(i);return u<0?v(u+s,0):_(u,s)}},74529:(i,s,u)=>{var m=u(37026),v=u(48219);i.exports=function(i){return m(v(i))}},62435:(i,s,u)=>{var m=u(35331);i.exports=function(i){var s=+i;return s!=s||0===s?0:m(s)}},43057:(i,s,u)=>{var m=u(62435),v=Math.min;i.exports=function(i){return i>0?v(m(i),9007199254740991):0}},89678:(i,s,u)=>{var m=u(48219),v=Object;i.exports=function(i){return v(m(i))}},46935:(i,s,u)=>{var m=u(78834),v=u(10941),_=u(56664),j=u(14229),M=u(39811),$=u(99813),W=TypeError,X=$("toPrimitive");i.exports=function(i,s){if(!v(i)||_(i))return i;var u,$=j(i,X);if($){if(void 0===s&&(s="default"),u=m($,i,s),!v(u)||_(u))return u;throw W("Can't convert object to primitive value")}return void 0===s&&(s="number"),M(i,s)}},83894:(i,s,u)=>{var m=u(46935),v=u(56664);i.exports=function(i){var s=m(i,"string");return v(s)?s:s+""}},22885:(i,s,u)=>{var m={};m[u(99813)("toStringTag")]="z",i.exports="[object z]"===String(m)},85803:(i,s,u)=>{var m=u(9697),v=String;i.exports=function(i){if("Symbol"===m(i))throw TypeError("Cannot convert a Symbol value to a string");return v(i)}},69826:i=>{var s=String;i.exports=function(i){try{return s(i)}catch(i){return"Object"}}},99418:(i,s,u)=>{var m=u(95329),v=0,_=Math.random(),j=m(1..toString);i.exports=function(i){return"Symbol("+(void 0===i?"":i)+")_"+j(++v+_,36)}},32302:(i,s,u)=>{var m=u(63405);i.exports=m&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},83937:(i,s,u)=>{var m=u(55746),v=u(95981);i.exports=m&&v((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},47093:(i,s,u)=>{var m=u(21899),v=u(57475),_=m.WeakMap;i.exports=v(_)&&/native code/.test(String(_))},99813:(i,s,u)=>{var m=u(21899),v=u(68726),_=u(90953),j=u(99418),M=u(63405),$=u(32302),W=m.Symbol,X=v("wks"),Y=$?W.for||W:W&&W.withoutSetter||j;i.exports=function(i){return _(X,i)||(X[i]=M&&_(W,i)?W[i]:Y("Symbol."+i)),X[i]}},62864:(i,s,u)=>{"use strict";var m=u(626),v=u(90953),_=u(32029),j=u(7046),M=u(88929),$=u(23489),W=u(9056),X=u(70926),Y=u(14649),Z=u(53794),ee=u(79585),ae=u(55746),ie=u(82529);i.exports=function(i,s,u,le){var ce="stackTraceLimit",pe=le?2:1,de=i.split("."),fe=de[de.length-1],ye=m.apply(null,de);if(ye){var be=ye.prototype;if(!ie&&v(be,"cause")&&delete be.cause,!u)return ye;var _e=m("Error"),we=s((function(i,s){var u=Y(le?s:i,void 0),m=le?new ye(i):new ye;return void 0!==u&&_(m,"message",u),ee(m,we,m.stack,2),this&&j(be,this)&&X(m,this,we),arguments.length>pe&&Z(m,arguments[pe]),m}));if(we.prototype=be,"Error"!==fe?M?M(we,_e):$(we,_e,{name:!0}):ae&&ce in ye&&(W(we,ye,ce),W(we,ye,"prepareStackTrace")),$(we,ye),!ie)try{be.name!==fe&&_(be,"name",fe),be.constructor=we}catch(i){}return we}}},24415:(i,s,u)=>{var m=u(76887),v=u(626),_=u(79730),j=u(95981),M=u(62864),$="AggregateError",W=v($),X=!j((function(){return 1!==W([1]).errors[0]}))&&j((function(){return 7!==W([1],$,{cause:7}).cause}));m({global:!0,constructor:!0,arity:2,forced:X},{AggregateError:M($,(function(i){return function AggregateError(s,u){return _(i,this,arguments)}}),X,!0)})},49812:(i,s,u)=>{"use strict";var m=u(76887),v=u(7046),_=u(249),j=u(88929),M=u(23489),$=u(29290),W=u(32029),X=u(31887),Y=u(53794),Z=u(79585),ee=u(93091),ae=u(14649),ie=u(99813)("toStringTag"),le=Error,ce=[].push,pe=function AggregateError(i,s){var u,m=v(de,this);j?u=j(le(),m?_(this):de):(u=m?this:$(de),W(u,ie,"Error")),void 0!==s&&W(u,"message",ae(s)),Z(u,pe,u.stack,1),arguments.length>2&&Y(u,arguments[2]);var M=[];return ee(i,ce,{that:M}),W(u,"errors",M),u};j?j(pe,le):M(pe,le,{name:!0});var de=pe.prototype=$(le.prototype,{constructor:X(1,pe),message:X(1,""),name:X(1,"AggregateError")});m({global:!0,constructor:!0,arity:2},{AggregateError:pe})},47627:(i,s,u)=>{u(49812)},66274:(i,s,u)=>{"use strict";var m=u(74529),v=u(18479),_=u(12077),j=u(45402),M=u(65988).f,$=u(75105),W=u(23538),X=u(82529),Y=u(55746),Z="Array Iterator",ee=j.set,ae=j.getterFor(Z);i.exports=$(Array,"Array",(function(i,s){ee(this,{type:Z,target:m(i),index:0,kind:s})}),(function(){var i=ae(this),s=i.target,u=i.kind,m=i.index++;return!s||m>=s.length?(i.target=void 0,W(void 0,!0)):W("keys"==u?m:"values"==u?s[m]:[m,s[m]],!1)}),"values");var ie=_.Arguments=_.Array;if(v("keys"),v("values"),v("entries"),!X&&Y&&"values"!==ie.name)try{M(ie,"name",{value:"values"})}catch(i){}},61181:(i,s,u)=>{var m=u(76887),v=u(21899),_=u(79730),j=u(62864),M="WebAssembly",$=v[M],W=7!==Error("e",{cause:7}).cause,exportGlobalErrorCauseWrapper=function(i,s){var u={};u[i]=j(i,s,W),m({global:!0,constructor:!0,arity:1,forced:W},u)},exportWebAssemblyErrorCauseWrapper=function(i,s){if($&&$[i]){var u={};u[i]=j(M+"."+i,s,W),m({target:M,stat:!0,constructor:!0,arity:1,forced:W},u)}};exportGlobalErrorCauseWrapper("Error",(function(i){return function Error(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("EvalError",(function(i){return function EvalError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("RangeError",(function(i){return function RangeError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("ReferenceError",(function(i){return function ReferenceError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("SyntaxError",(function(i){return function SyntaxError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("TypeError",(function(i){return function TypeError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("URIError",(function(i){return function URIError(s){return _(i,this,arguments)}})),exportWebAssemblyErrorCauseWrapper("CompileError",(function(i){return function CompileError(s){return _(i,this,arguments)}})),exportWebAssemblyErrorCauseWrapper("LinkError",(function(i){return function LinkError(s){return _(i,this,arguments)}})),exportWebAssemblyErrorCauseWrapper("RuntimeError",(function(i){return function RuntimeError(s){return _(i,this,arguments)}}))},73381:(i,s,u)=>{var m=u(76887),v=u(98308);m({target:"Function",proto:!0,forced:Function.bind!==v},{bind:v})},49221:(i,s,u)=>{var m=u(76887),v=u(24420);m({target:"Object",stat:!0,arity:2,forced:Object.assign!==v},{assign:v})},77971:(i,s,u)=>{"use strict";var m=u(64620).charAt,v=u(85803),_=u(45402),j=u(75105),M=u(23538),$="String Iterator",W=_.set,X=_.getterFor($);j(String,"String",(function(i){W(this,{type:$,string:v(i),index:0})}),(function next(){var i,s=X(this),u=s.string,v=s.index;return v>=u.length?M(void 0,!0):(i=m(u,v),s.index+=i.length,M(i,!1))}))},89731:(i,s,u)=>{u(47627)},7634:(i,s,u)=>{u(66274);var m=u(63281),v=u(21899),_=u(9697),j=u(32029),M=u(12077),$=u(99813)("toStringTag");for(var W in m){var X=v[W],Y=X&&X.prototype;Y&&_(Y)!==$&&j(Y,$,W),M[W]=M.Array}},18957:(i,s,u)=>{u(89731);var m=u(50415);u(7634),i.exports=m},28196:(i,s,u)=>{var m=u(16246);i.exports=m},63383:(i,s,u)=>{var m=u(45999);i.exports=m},8269:function(i,s,u){var m;m=void 0!==u.g?u.g:this,i.exports=function(i){if(i.CSS&&i.CSS.escape)return i.CSS.escape;var cssEscape=function(i){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var s,u=String(i),m=u.length,v=-1,_="",j=u.charCodeAt(0);++v=1&&s<=31||127==s||0==v&&s>=48&&s<=57||1==v&&s>=48&&s<=57&&45==j?"\\"+s.toString(16)+" ":0==v&&1==m&&45==s||!(s>=128||45==s||95==s||s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122)?"\\"+u.charAt(v):u.charAt(v):_+="�";return _};return i.CSS||(i.CSS={}),i.CSS.escape=cssEscape,cssEscape}(m)},27698:(i,s,u)=>{"use strict";var m=u(48764).Buffer;function isSpecificValue(i){return i instanceof m||i instanceof Date||i instanceof RegExp}function cloneSpecificValue(i){if(i instanceof m){var s=m.alloc?m.alloc(i.length):new m(i.length);return i.copy(s),s}if(i instanceof Date)return new Date(i.getTime());if(i instanceof RegExp)return new RegExp(i);throw new Error("Unexpected situation")}function deepCloneArray(i){var s=[];return i.forEach((function(i,u){"object"==typeof i&&null!==i?Array.isArray(i)?s[u]=deepCloneArray(i):isSpecificValue(i)?s[u]=cloneSpecificValue(i):s[u]=v({},i):s[u]=i})),s}function safeGetProperty(i,s){return"__proto__"===s?void 0:i[s]}var v=i.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var i,s,u=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(m){"object"!=typeof m||null===m||Array.isArray(m)||Object.keys(m).forEach((function(_){return s=safeGetProperty(u,_),(i=safeGetProperty(m,_))===u?void 0:"object"!=typeof i||null===i?void(u[_]=i):Array.isArray(i)?void(u[_]=deepCloneArray(i)):isSpecificValue(i)?void(u[_]=cloneSpecificValue(i)):"object"!=typeof s||null===s||Array.isArray(s)?void(u[_]=v({},i)):void(u[_]=v(s,i))}))})),u}},9996:i=>{"use strict";var s=function isMergeableObject(i){return function isNonNullObject(i){return!!i&&"object"==typeof i}(i)&&!function isSpecial(i){var s=Object.prototype.toString.call(i);return"[object RegExp]"===s||"[object Date]"===s||function isReactElement(i){return i.$$typeof===u}(i)}(i)};var u="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function cloneUnlessOtherwiseSpecified(i,s){return!1!==s.clone&&s.isMergeableObject(i)?deepmerge(function emptyTarget(i){return Array.isArray(i)?[]:{}}(i),i,s):i}function defaultArrayMerge(i,s,u){return i.concat(s).map((function(i){return cloneUnlessOtherwiseSpecified(i,u)}))}function getKeys(i){return Object.keys(i).concat(function getEnumerableOwnPropertySymbols(i){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(i).filter((function(s){return Object.propertyIsEnumerable.call(i,s)})):[]}(i))}function propertyIsOnObject(i,s){try{return s in i}catch(i){return!1}}function mergeObject(i,s,u){var m={};return u.isMergeableObject(i)&&getKeys(i).forEach((function(s){m[s]=cloneUnlessOtherwiseSpecified(i[s],u)})),getKeys(s).forEach((function(v){(function propertyIsUnsafe(i,s){return propertyIsOnObject(i,s)&&!(Object.hasOwnProperty.call(i,s)&&Object.propertyIsEnumerable.call(i,s))})(i,v)||(propertyIsOnObject(i,v)&&u.isMergeableObject(s[v])?m[v]=function getMergeFunction(i,s){if(!s.customMerge)return deepmerge;var u=s.customMerge(i);return"function"==typeof u?u:deepmerge}(v,u)(i[v],s[v],u):m[v]=cloneUnlessOtherwiseSpecified(s[v],u))})),m}function deepmerge(i,u,m){(m=m||{}).arrayMerge=m.arrayMerge||defaultArrayMerge,m.isMergeableObject=m.isMergeableObject||s,m.cloneUnlessOtherwiseSpecified=cloneUnlessOtherwiseSpecified;var v=Array.isArray(u);return v===Array.isArray(i)?v?m.arrayMerge(i,u,m):mergeObject(i,u,m):cloneUnlessOtherwiseSpecified(u,m)}deepmerge.all=function deepmergeAll(i,s){if(!Array.isArray(i))throw new Error("first argument should be an array");return i.reduce((function(i,u){return deepmerge(i,u,s)}),{})};var m=deepmerge;i.exports=m},27856:function(i){i.exports=function(){"use strict";const{entries:i,setPrototypeOf:s,isFrozen:u,getPrototypeOf:m,getOwnPropertyDescriptor:v}=Object;let{freeze:_,seal:j,create:M}=Object,{apply:$,construct:W}="undefined"!=typeof Reflect&&Reflect;_||(_=function freeze(i){return i}),j||(j=function seal(i){return i}),$||($=function apply(i,s,u){return i.apply(s,u)}),W||(W=function construct(i,s){return new i(...s)});const X=unapply(Array.prototype.forEach),Y=unapply(Array.prototype.pop),Z=unapply(Array.prototype.push),ee=unapply(String.prototype.toLowerCase),ae=unapply(String.prototype.toString),ie=unapply(String.prototype.match),le=unapply(String.prototype.replace),ce=unapply(String.prototype.indexOf),pe=unapply(String.prototype.trim),de=unapply(RegExp.prototype.test),fe=unconstruct(TypeError);function unapply(i){return function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v2&&void 0!==arguments[2]?arguments[2]:ee;s&&s(i,null);let _=m.length;for(;_--;){let s=m[_];if("string"==typeof s){const i=v(s);i!==s&&(u(m)||(m[_]=i),s=i)}i[s]=!0}return i}function clone(s){const u=M(null);for(const[m,_]of i(s))void 0!==v(s,m)&&(u[m]=_);return u}function lookupGetter(i,s){for(;null!==i;){const u=v(i,s);if(u){if(u.get)return unapply(u.get);if("function"==typeof u.value)return unapply(u.value)}i=m(i)}function fallbackValue(i){return console.warn("fallback value for",i),null}return fallbackValue}const ye=_(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),be=_(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),_e=_(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),we=_(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Se=_(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),xe=_(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Pe=_(["#text"]),Ie=_(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),Te=_(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Re=_(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),qe=_(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),ze=j(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Ve=j(/<%[\w\W]*|[\w\W]*%>/gm),We=j(/\${[\w\W]*}/gm),He=j(/^data-[\-\w.\u00B7-\uFFFF]/),Xe=j(/^aria-[\-\w]+$/),Ye=j(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Qe=j(/^(?:\w+script|data):/i),et=j(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),tt=j(/^html$/i);var rt=Object.freeze({__proto__:null,MUSTACHE_EXPR:ze,ERB_EXPR:Ve,TMPLIT_EXPR:We,DATA_ATTR:He,ARIA_ATTR:Xe,IS_ALLOWED_URI:Ye,IS_SCRIPT_OR_DATA:Qe,ATTR_WHITESPACE:et,DOCTYPE_NAME:tt});const nt=function getGlobal(){return"undefined"==typeof window?null:window},ot=function _createTrustedTypesPolicy(i,s){if("object"!=typeof i||"function"!=typeof i.createPolicy)return null;let u=null;const m="data-tt-policy-suffix";s&&s.hasAttribute(m)&&(u=s.getAttribute(m));const v="dompurify"+(u?"#"+u:"");try{return i.createPolicy(v,{createHTML:i=>i,createScriptURL:i=>i})}catch(i){return console.warn("TrustedTypes policy "+v+" could not be created."),null}};function createDOMPurify(){let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:nt();const DOMPurify=i=>createDOMPurify(i);if(DOMPurify.version="3.0.6",DOMPurify.removed=[],!s||!s.document||9!==s.document.nodeType)return DOMPurify.isSupported=!1,DOMPurify;let{document:u}=s;const m=u,v=m.currentScript,{DocumentFragment:j,HTMLTemplateElement:$,Node:W,Element:ze,NodeFilter:Ve,NamedNodeMap:We=s.NamedNodeMap||s.MozNamedAttrMap,HTMLFormElement:He,DOMParser:Xe,trustedTypes:Qe}=s,et=ze.prototype,at=lookupGetter(et,"cloneNode"),it=lookupGetter(et,"nextSibling"),st=lookupGetter(et,"childNodes"),lt=lookupGetter(et,"parentNode");if("function"==typeof $){const i=u.createElement("template");i.content&&i.content.ownerDocument&&(u=i.content.ownerDocument)}let ct,ut="";const{implementation:pt,createNodeIterator:ht,createDocumentFragment:dt,getElementsByTagName:mt}=u,{importNode:gt}=m;let yt={};DOMPurify.isSupported="function"==typeof i&&"function"==typeof lt&&pt&&void 0!==pt.createHTMLDocument;const{MUSTACHE_EXPR:vt,ERB_EXPR:bt,TMPLIT_EXPR:_t,DATA_ATTR:Et,ARIA_ATTR:wt,IS_SCRIPT_OR_DATA:St,ATTR_WHITESPACE:xt}=rt;let{IS_ALLOWED_URI:kt}=rt,Ot=null;const At=addToSet({},[...ye,...be,..._e,...Se,...Pe]);let Ct=null;const jt=addToSet({},[...Ie,...Te,...Re,...qe]);let Pt=Object.seal(M(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),It=null,Nt=null,Tt=!0,Mt=!0,Rt=!1,Bt=!0,Dt=!1,Lt=!1,Ft=!1,qt=!1,$t=!1,zt=!1,Ut=!1,Vt=!0,Wt=!1;const Kt="user-content-";let Ht=!0,Jt=!1,Gt={},Xt=null;const Yt=addToSet({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Qt=null;const Zt=addToSet({},["audio","video","img","source","image","track"]);let er=null;const tr=addToSet({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),rr="http://www.w3.org/1998/Math/MathML",nr="http://www.w3.org/2000/svg",ar="http://www.w3.org/1999/xhtml";let ir=ar,sr=!1,lr=null;const cr=addToSet({},[rr,nr,ar],ae);let ur=null;const pr=["application/xhtml+xml","text/html"],dr="text/html";let fr=null,mr=null;const gr=u.createElement("form"),yr=function isRegexOrFunction(i){return i instanceof RegExp||i instanceof Function},vr=function _parseConfig(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!mr||mr!==i){if(i&&"object"==typeof i||(i={}),i=clone(i),ur=ur=-1===pr.indexOf(i.PARSER_MEDIA_TYPE)?dr:i.PARSER_MEDIA_TYPE,fr="application/xhtml+xml"===ur?ae:ee,Ot="ALLOWED_TAGS"in i?addToSet({},i.ALLOWED_TAGS,fr):At,Ct="ALLOWED_ATTR"in i?addToSet({},i.ALLOWED_ATTR,fr):jt,lr="ALLOWED_NAMESPACES"in i?addToSet({},i.ALLOWED_NAMESPACES,ae):cr,er="ADD_URI_SAFE_ATTR"in i?addToSet(clone(tr),i.ADD_URI_SAFE_ATTR,fr):tr,Qt="ADD_DATA_URI_TAGS"in i?addToSet(clone(Zt),i.ADD_DATA_URI_TAGS,fr):Zt,Xt="FORBID_CONTENTS"in i?addToSet({},i.FORBID_CONTENTS,fr):Yt,It="FORBID_TAGS"in i?addToSet({},i.FORBID_TAGS,fr):{},Nt="FORBID_ATTR"in i?addToSet({},i.FORBID_ATTR,fr):{},Gt="USE_PROFILES"in i&&i.USE_PROFILES,Tt=!1!==i.ALLOW_ARIA_ATTR,Mt=!1!==i.ALLOW_DATA_ATTR,Rt=i.ALLOW_UNKNOWN_PROTOCOLS||!1,Bt=!1!==i.ALLOW_SELF_CLOSE_IN_ATTR,Dt=i.SAFE_FOR_TEMPLATES||!1,Lt=i.WHOLE_DOCUMENT||!1,$t=i.RETURN_DOM||!1,zt=i.RETURN_DOM_FRAGMENT||!1,Ut=i.RETURN_TRUSTED_TYPE||!1,qt=i.FORCE_BODY||!1,Vt=!1!==i.SANITIZE_DOM,Wt=i.SANITIZE_NAMED_PROPS||!1,Ht=!1!==i.KEEP_CONTENT,Jt=i.IN_PLACE||!1,kt=i.ALLOWED_URI_REGEXP||Ye,ir=i.NAMESPACE||ar,Pt=i.CUSTOM_ELEMENT_HANDLING||{},i.CUSTOM_ELEMENT_HANDLING&&yr(i.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Pt.tagNameCheck=i.CUSTOM_ELEMENT_HANDLING.tagNameCheck),i.CUSTOM_ELEMENT_HANDLING&&yr(i.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Pt.attributeNameCheck=i.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),i.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof i.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Pt.allowCustomizedBuiltInElements=i.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Dt&&(Mt=!1),zt&&($t=!0),Gt&&(Ot=addToSet({},[...Pe]),Ct=[],!0===Gt.html&&(addToSet(Ot,ye),addToSet(Ct,Ie)),!0===Gt.svg&&(addToSet(Ot,be),addToSet(Ct,Te),addToSet(Ct,qe)),!0===Gt.svgFilters&&(addToSet(Ot,_e),addToSet(Ct,Te),addToSet(Ct,qe)),!0===Gt.mathMl&&(addToSet(Ot,Se),addToSet(Ct,Re),addToSet(Ct,qe))),i.ADD_TAGS&&(Ot===At&&(Ot=clone(Ot)),addToSet(Ot,i.ADD_TAGS,fr)),i.ADD_ATTR&&(Ct===jt&&(Ct=clone(Ct)),addToSet(Ct,i.ADD_ATTR,fr)),i.ADD_URI_SAFE_ATTR&&addToSet(er,i.ADD_URI_SAFE_ATTR,fr),i.FORBID_CONTENTS&&(Xt===Yt&&(Xt=clone(Xt)),addToSet(Xt,i.FORBID_CONTENTS,fr)),Ht&&(Ot["#text"]=!0),Lt&&addToSet(Ot,["html","head","body"]),Ot.table&&(addToSet(Ot,["tbody"]),delete It.tbody),i.TRUSTED_TYPES_POLICY){if("function"!=typeof i.TRUSTED_TYPES_POLICY.createHTML)throw fe('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof i.TRUSTED_TYPES_POLICY.createScriptURL)throw fe('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ct=i.TRUSTED_TYPES_POLICY,ut=ct.createHTML("")}else void 0===ct&&(ct=ot(Qe,v)),null!==ct&&"string"==typeof ut&&(ut=ct.createHTML(""));_&&_(i),mr=i}},br=addToSet({},["mi","mo","mn","ms","mtext"]),_r=addToSet({},["foreignobject","desc","title","annotation-xml"]),Er=addToSet({},["title","style","font","a","script"]),wr=addToSet({},be);addToSet(wr,_e),addToSet(wr,we);const Sr=addToSet({},Se);addToSet(Sr,xe);const xr=function _checkValidNamespace(i){let s=lt(i);s&&s.tagName||(s={namespaceURI:ir,tagName:"template"});const u=ee(i.tagName),m=ee(s.tagName);return!!lr[i.namespaceURI]&&(i.namespaceURI===nr?s.namespaceURI===ar?"svg"===u:s.namespaceURI===rr?"svg"===u&&("annotation-xml"===m||br[m]):Boolean(wr[u]):i.namespaceURI===rr?s.namespaceURI===ar?"math"===u:s.namespaceURI===nr?"math"===u&&_r[m]:Boolean(Sr[u]):i.namespaceURI===ar?!(s.namespaceURI===nr&&!_r[m])&&!(s.namespaceURI===rr&&!br[m])&&!Sr[u]&&(Er[u]||!wr[u]):!("application/xhtml+xml"!==ur||!lr[i.namespaceURI]))},kr=function _forceRemove(i){Z(DOMPurify.removed,{element:i});try{i.parentNode.removeChild(i)}catch(s){i.remove()}},Or=function _removeAttribute(i,s){try{Z(DOMPurify.removed,{attribute:s.getAttributeNode(i),from:s})}catch(i){Z(DOMPurify.removed,{attribute:null,from:s})}if(s.removeAttribute(i),"is"===i&&!Ct[i])if($t||zt)try{kr(s)}catch(i){}else try{s.setAttribute(i,"")}catch(i){}},Ar=function _initDocument(i){let s=null,m=null;if(qt)i=""+i;else{const s=ie(i,/^[\r\n\t ]+/);m=s&&s[0]}"application/xhtml+xml"===ur&&ir===ar&&(i=''+i+"");const v=ct?ct.createHTML(i):i;if(ir===ar)try{s=(new Xe).parseFromString(v,ur)}catch(i){}if(!s||!s.documentElement){s=pt.createDocument(ir,"template",null);try{s.documentElement.innerHTML=sr?ut:v}catch(i){}}const _=s.body||s.documentElement;return i&&m&&_.insertBefore(u.createTextNode(m),_.childNodes[0]||null),ir===ar?mt.call(s,Lt?"html":"body")[0]:Lt?s.documentElement:_},Cr=function _createNodeIterator(i){return ht.call(i.ownerDocument||i,i,Ve.SHOW_ELEMENT|Ve.SHOW_COMMENT|Ve.SHOW_TEXT,null)},jr=function _isClobbered(i){return i instanceof He&&("string"!=typeof i.nodeName||"string"!=typeof i.textContent||"function"!=typeof i.removeChild||!(i.attributes instanceof We)||"function"!=typeof i.removeAttribute||"function"!=typeof i.setAttribute||"string"!=typeof i.namespaceURI||"function"!=typeof i.insertBefore||"function"!=typeof i.hasChildNodes)},Pr=function _isNode(i){return"function"==typeof W&&i instanceof W},Ir=function _executeHook(i,s,u){yt[i]&&X(yt[i],(i=>{i.call(DOMPurify,s,u,mr)}))},Nr=function _sanitizeElements(i){let s=null;if(Ir("beforeSanitizeElements",i,null),jr(i))return kr(i),!0;const u=fr(i.nodeName);if(Ir("uponSanitizeElement",i,{tagName:u,allowedTags:Ot}),i.hasChildNodes()&&!Pr(i.firstElementChild)&&de(/<[/\w]/g,i.innerHTML)&&de(/<[/\w]/g,i.textContent))return kr(i),!0;if(!Ot[u]||It[u]){if(!It[u]&&Mr(u)){if(Pt.tagNameCheck instanceof RegExp&&de(Pt.tagNameCheck,u))return!1;if(Pt.tagNameCheck instanceof Function&&Pt.tagNameCheck(u))return!1}if(Ht&&!Xt[u]){const s=lt(i)||i.parentNode,u=st(i)||i.childNodes;if(u&&s)for(let m=u.length-1;m>=0;--m)s.insertBefore(at(u[m],!0),it(i))}return kr(i),!0}return i instanceof ze&&!xr(i)?(kr(i),!0):"noscript"!==u&&"noembed"!==u&&"noframes"!==u||!de(/<\/no(script|embed|frames)/i,i.innerHTML)?(Dt&&3===i.nodeType&&(s=i.textContent,X([vt,bt,_t],(i=>{s=le(s,i," ")})),i.textContent!==s&&(Z(DOMPurify.removed,{element:i.cloneNode()}),i.textContent=s)),Ir("afterSanitizeElements",i,null),!1):(kr(i),!0)},Tr=function _isValidAttribute(i,s,m){if(Vt&&("id"===s||"name"===s)&&(m in u||m in gr))return!1;if(Mt&&!Nt[s]&&de(Et,s));else if(Tt&&de(wt,s));else if(!Ct[s]||Nt[s]){if(!(Mr(i)&&(Pt.tagNameCheck instanceof RegExp&&de(Pt.tagNameCheck,i)||Pt.tagNameCheck instanceof Function&&Pt.tagNameCheck(i))&&(Pt.attributeNameCheck instanceof RegExp&&de(Pt.attributeNameCheck,s)||Pt.attributeNameCheck instanceof Function&&Pt.attributeNameCheck(s))||"is"===s&&Pt.allowCustomizedBuiltInElements&&(Pt.tagNameCheck instanceof RegExp&&de(Pt.tagNameCheck,m)||Pt.tagNameCheck instanceof Function&&Pt.tagNameCheck(m))))return!1}else if(er[s]);else if(de(kt,le(m,xt,"")));else if("src"!==s&&"xlink:href"!==s&&"href"!==s||"script"===i||0!==ce(m,"data:")||!Qt[i])if(Rt&&!de(St,le(m,xt,"")));else if(m)return!1;return!0},Mr=function _isBasicCustomElement(i){return i.indexOf("-")>0},Rr=function _sanitizeAttributes(i){Ir("beforeSanitizeAttributes",i,null);const{attributes:s}=i;if(!s)return;const u={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ct};let m=s.length;for(;m--;){const v=s[m],{name:_,namespaceURI:j,value:M}=v,$=fr(_);let W="value"===_?M:pe(M);if(u.attrName=$,u.attrValue=W,u.keepAttr=!0,u.forceKeepAttr=void 0,Ir("uponSanitizeAttribute",i,u),W=u.attrValue,u.forceKeepAttr)continue;if(Or(_,i),!u.keepAttr)continue;if(!Bt&&de(/\/>/i,W)){Or(_,i);continue}Dt&&X([vt,bt,_t],(i=>{W=le(W,i," ")}));const Z=fr(i.nodeName);if(Tr(Z,$,W)){if(!Wt||"id"!==$&&"name"!==$||(Or(_,i),W=Kt+W),ct&&"object"==typeof Qe&&"function"==typeof Qe.getAttributeType)if(j);else switch(Qe.getAttributeType(Z,$)){case"TrustedHTML":W=ct.createHTML(W);break;case"TrustedScriptURL":W=ct.createScriptURL(W)}try{j?i.setAttributeNS(j,_,W):i.setAttribute(_,W),Y(DOMPurify.removed)}catch(i){}}}Ir("afterSanitizeAttributes",i,null)},Br=function _sanitizeShadowDOM(i){let s=null;const u=Cr(i);for(Ir("beforeSanitizeShadowDOM",i,null);s=u.nextNode();)Ir("uponSanitizeShadowNode",s,null),Nr(s)||(s.content instanceof j&&_sanitizeShadowDOM(s.content),Rr(s));Ir("afterSanitizeShadowDOM",i,null)};return DOMPurify.sanitize=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=null,v=null,_=null,M=null;if(sr=!i,sr&&(i="\x3c!--\x3e"),"string"!=typeof i&&!Pr(i)){if("function"!=typeof i.toString)throw fe("toString is not a function");if("string"!=typeof(i=i.toString()))throw fe("dirty is not a string, aborting")}if(!DOMPurify.isSupported)return i;if(Ft||vr(s),DOMPurify.removed=[],"string"==typeof i&&(Jt=!1),Jt){if(i.nodeName){const s=fr(i.nodeName);if(!Ot[s]||It[s])throw fe("root node is forbidden and cannot be sanitized in-place")}}else if(i instanceof W)u=Ar("\x3c!----\x3e"),v=u.ownerDocument.importNode(i,!0),1===v.nodeType&&"BODY"===v.nodeName||"HTML"===v.nodeName?u=v:u.appendChild(v);else{if(!$t&&!Dt&&!Lt&&-1===i.indexOf("<"))return ct&&Ut?ct.createHTML(i):i;if(u=Ar(i),!u)return $t?null:Ut?ut:""}u&&qt&&kr(u.firstChild);const $=Cr(Jt?i:u);for(;_=$.nextNode();)Nr(_)||(_.content instanceof j&&Br(_.content),Rr(_));if(Jt)return i;if($t){if(zt)for(M=dt.call(u.ownerDocument);u.firstChild;)M.appendChild(u.firstChild);else M=u;return(Ct.shadowroot||Ct.shadowrootmode)&&(M=gt.call(m,M,!0)),M}let Y=Lt?u.outerHTML:u.innerHTML;return Lt&&Ot["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&de(tt,u.ownerDocument.doctype.name)&&(Y="\n"+Y),Dt&&X([vt,bt,_t],(i=>{Y=le(Y,i," ")})),ct&&Ut?ct.createHTML(Y):Y},DOMPurify.setConfig=function(){vr(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},DOMPurify.clearConfig=function(){mr=null,Ft=!1},DOMPurify.isValidAttribute=function(i,s,u){mr||vr({});const m=fr(i),v=fr(s);return Tr(m,v,u)},DOMPurify.addHook=function(i,s){"function"==typeof s&&(yt[i]=yt[i]||[],Z(yt[i],s))},DOMPurify.removeHook=function(i){if(yt[i])return Y(yt[i])},DOMPurify.removeHooks=function(i){yt[i]&&(yt[i]=[])},DOMPurify.removeAllHooks=function(){yt={}},DOMPurify}return createDOMPurify()}()},69450:i=>{"use strict";class SubRange{constructor(i,s){this.low=i,this.high=s,this.length=1+s-i}overlaps(i){return!(this.highi.high)}touches(i){return!(this.high+1i.high)}add(i){return new SubRange(Math.min(this.low,i.low),Math.max(this.high,i.high))}subtract(i){return i.low<=this.low&&i.high>=this.high?[]:i.low>this.low&&i.highi+s.length),0)}add(i,s){var _add=i=>{for(var s=0;s{for(var s=0;s{for(var s=0;s{for(var u=s.low;u<=s.high;)i.push(u),u++;return i}),[])}subranges(){return this.ranges.map((i=>({low:i.low,high:i.high,length:1+i.high-i.low})))}}i.exports=DRange},17187:i=>{"use strict";var s,u="object"==typeof Reflect?Reflect:null,m=u&&"function"==typeof u.apply?u.apply:function ReflectApply(i,s,u){return Function.prototype.apply.call(i,s,u)};s=u&&"function"==typeof u.ownKeys?u.ownKeys:Object.getOwnPropertySymbols?function ReflectOwnKeys(i){return Object.getOwnPropertyNames(i).concat(Object.getOwnPropertySymbols(i))}:function ReflectOwnKeys(i){return Object.getOwnPropertyNames(i)};var v=Number.isNaN||function NumberIsNaN(i){return i!=i};function EventEmitter(){EventEmitter.init.call(this)}i.exports=EventEmitter,i.exports.once=function once(i,s){return new Promise((function(u,m){function errorListener(u){i.removeListener(s,resolver),m(u)}function resolver(){"function"==typeof i.removeListener&&i.removeListener("error",errorListener),u([].slice.call(arguments))}eventTargetAgnosticAddListener(i,s,resolver,{once:!0}),"error"!==s&&function addErrorHandlerIfEventEmitter(i,s,u){"function"==typeof i.on&&eventTargetAgnosticAddListener(i,"error",s,u)}(i,errorListener,{once:!0})}))},EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._eventsCount=0,EventEmitter.prototype._maxListeners=void 0;var _=10;function checkListener(i){if("function"!=typeof i)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof i)}function _getMaxListeners(i){return void 0===i._maxListeners?EventEmitter.defaultMaxListeners:i._maxListeners}function _addListener(i,s,u,m){var v,_,j;if(checkListener(u),void 0===(_=i._events)?(_=i._events=Object.create(null),i._eventsCount=0):(void 0!==_.newListener&&(i.emit("newListener",s,u.listener?u.listener:u),_=i._events),j=_[s]),void 0===j)j=_[s]=u,++i._eventsCount;else if("function"==typeof j?j=_[s]=m?[u,j]:[j,u]:m?j.unshift(u):j.push(u),(v=_getMaxListeners(i))>0&&j.length>v&&!j.warned){j.warned=!0;var M=new Error("Possible EventEmitter memory leak detected. "+j.length+" "+String(s)+" listeners added. Use emitter.setMaxListeners() to increase limit");M.name="MaxListenersExceededWarning",M.emitter=i,M.type=s,M.count=j.length,function ProcessEmitWarning(i){console&&console.warn&&console.warn(i)}(M)}return i}function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(i,s,u){var m={fired:!1,wrapFn:void 0,target:i,type:s,listener:u},v=onceWrapper.bind(m);return v.listener=u,m.wrapFn=v,v}function _listeners(i,s,u){var m=i._events;if(void 0===m)return[];var v=m[s];return void 0===v?[]:"function"==typeof v?u?[v.listener||v]:[v]:u?function unwrapListeners(i){for(var s=new Array(i.length),u=0;u0&&(j=s[0]),j instanceof Error)throw j;var M=new Error("Unhandled error."+(j?" ("+j.message+")":""));throw M.context=j,M}var $=_[i];if(void 0===$)return!1;if("function"==typeof $)m($,this,s);else{var W=$.length,X=arrayClone($,W);for(u=0;u=0;_--)if(u[_]===s||u[_].listener===s){j=u[_].listener,v=_;break}if(v<0)return this;0===v?u.shift():function spliceOne(i,s){for(;s+1=0;m--)this.removeListener(i,s[m]);return this},EventEmitter.prototype.listeners=function listeners(i){return _listeners(this,i,!0)},EventEmitter.prototype.rawListeners=function rawListeners(i){return _listeners(this,i,!1)},EventEmitter.listenerCount=function(i,s){return"function"==typeof i.listenerCount?i.listenerCount(s):listenerCount.call(i,s)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?s(this._events):[]}},21102:(i,s,u)=>{"use strict";var m=u(46291),v=create(Error);function create(i){return FormattedError.displayName=i.displayName||i.name,FormattedError;function FormattedError(s){return s&&(s=m.apply(null,arguments)),new i(s)}}i.exports=v,v.eval=create(EvalError),v.range=create(RangeError),v.reference=create(ReferenceError),v.syntax=create(SyntaxError),v.type=create(TypeError),v.uri=create(URIError),v.create=create},46291:i=>{!function(){var s;function format(i){for(var s,u,m,v,_=1,j=[].slice.call(arguments),M=0,$=i.length,W="",X=!1,Y=!1,nextArg=function(){return j[_++]},slurpNumber=function(){for(var u="";/\d/.test(i[M]);)u+=i[M++],s=i[M];return u.length>0?parseInt(u):null};M<$;++M)if(s=i[M],X)switch(X=!1,"."==s?(Y=!1,s=i[++M]):"0"==s&&"."==i[M+1]?(Y=!0,s=i[M+=2]):Y=!0,v=slurpNumber(),s){case"b":W+=parseInt(nextArg(),10).toString(2);break;case"c":W+="string"==typeof(u=nextArg())||u instanceof String?u:String.fromCharCode(parseInt(u,10));break;case"d":W+=parseInt(nextArg(),10);break;case"f":m=String(parseFloat(nextArg()).toFixed(v||6)),W+=Y?m:m.replace(/^0/,"");break;case"j":W+=JSON.stringify(nextArg());break;case"o":W+="0"+parseInt(nextArg(),10).toString(8);break;case"s":W+=nextArg();break;case"x":W+="0x"+parseInt(nextArg(),10).toString(16);break;case"X":W+="0x"+parseInt(nextArg(),10).toString(16).toUpperCase();break;default:W+=s}else"%"===s?X=!0:W+=s;return W}(s=i.exports=format).format=format,s.vsprintf=function vsprintf(i,s){return format.apply(null,[i].concat(s))},"undefined"!=typeof console&&"function"==typeof console.log&&(s.printf=function printf(){console.log(format.apply(null,arguments))})}()},17648:i=>{"use strict";var s=Array.prototype.slice,u=Object.prototype.toString;i.exports=function bind(i){var m=this;if("function"!=typeof m||"[object Function]"!==u.call(m))throw new TypeError("Function.prototype.bind called on incompatible "+m);for(var v,_=s.call(arguments,1),j=Math.max(0,m.length-_.length),M=[],$=0;${"use strict";var m=u(17648);i.exports=Function.prototype.bind||m},40210:(i,s,u)=>{"use strict";var m,v=SyntaxError,_=Function,j=TypeError,getEvalledConstructor=function(i){try{return _('"use strict"; return ('+i+").constructor;")()}catch(i){}},M=Object.getOwnPropertyDescriptor;if(M)try{M({},"")}catch(i){M=null}var throwTypeError=function(){throw new j},$=M?function(){try{return throwTypeError}catch(i){try{return M(arguments,"callee").get}catch(i){return throwTypeError}}}():throwTypeError,W=u(41405)(),X=u(28185)(),Y=Object.getPrototypeOf||(X?function(i){return i.__proto__}:null),Z={},ee="undefined"!=typeof Uint8Array&&Y?Y(Uint8Array):m,ae={"%AggregateError%":"undefined"==typeof AggregateError?m:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?m:ArrayBuffer,"%ArrayIteratorPrototype%":W&&Y?Y([][Symbol.iterator]()):m,"%AsyncFromSyncIteratorPrototype%":m,"%AsyncFunction%":Z,"%AsyncGenerator%":Z,"%AsyncGeneratorFunction%":Z,"%AsyncIteratorPrototype%":Z,"%Atomics%":"undefined"==typeof Atomics?m:Atomics,"%BigInt%":"undefined"==typeof BigInt?m:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?m:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?m:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?m:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?m:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?m:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?m:FinalizationRegistry,"%Function%":_,"%GeneratorFunction%":Z,"%Int8Array%":"undefined"==typeof Int8Array?m:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?m:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?m:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":W&&Y?Y(Y([][Symbol.iterator]())):m,"%JSON%":"object"==typeof JSON?JSON:m,"%Map%":"undefined"==typeof Map?m:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&W&&Y?Y((new Map)[Symbol.iterator]()):m,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?m:Promise,"%Proxy%":"undefined"==typeof Proxy?m:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?m:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?m:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&W&&Y?Y((new Set)[Symbol.iterator]()):m,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?m:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":W&&Y?Y(""[Symbol.iterator]()):m,"%Symbol%":W?Symbol:m,"%SyntaxError%":v,"%ThrowTypeError%":$,"%TypedArray%":ee,"%TypeError%":j,"%Uint8Array%":"undefined"==typeof Uint8Array?m:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?m:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?m:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?m:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?m:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?m:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?m:WeakSet};if(Y)try{null.error}catch(i){var ie=Y(Y(i));ae["%Error.prototype%"]=ie}var le=function doEval(i){var s;if("%AsyncFunction%"===i)s=getEvalledConstructor("async function () {}");else if("%GeneratorFunction%"===i)s=getEvalledConstructor("function* () {}");else if("%AsyncGeneratorFunction%"===i)s=getEvalledConstructor("async function* () {}");else if("%AsyncGenerator%"===i){var u=doEval("%AsyncGeneratorFunction%");u&&(s=u.prototype)}else if("%AsyncIteratorPrototype%"===i){var m=doEval("%AsyncGenerator%");m&&Y&&(s=Y(m.prototype))}return ae[i]=s,s},ce={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},pe=u(58612),de=u(17642),fe=pe.call(Function.call,Array.prototype.concat),ye=pe.call(Function.apply,Array.prototype.splice),be=pe.call(Function.call,String.prototype.replace),_e=pe.call(Function.call,String.prototype.slice),we=pe.call(Function.call,RegExp.prototype.exec),Se=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,xe=/\\(\\)?/g,Pe=function getBaseIntrinsic(i,s){var u,m=i;if(de(ce,m)&&(m="%"+(u=ce[m])[0]+"%"),de(ae,m)){var _=ae[m];if(_===Z&&(_=le(m)),void 0===_&&!s)throw new j("intrinsic "+i+" exists, but is not available. Please file an issue!");return{alias:u,name:m,value:_}}throw new v("intrinsic "+i+" does not exist!")};i.exports=function GetIntrinsic(i,s){if("string"!=typeof i||0===i.length)throw new j("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof s)throw new j('"allowMissing" argument must be a boolean');if(null===we(/^%?[^%]*%?$/,i))throw new v("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var u=function stringToPath(i){var s=_e(i,0,1),u=_e(i,-1);if("%"===s&&"%"!==u)throw new v("invalid intrinsic syntax, expected closing `%`");if("%"===u&&"%"!==s)throw new v("invalid intrinsic syntax, expected opening `%`");var m=[];return be(i,Se,(function(i,s,u,v){m[m.length]=u?be(v,xe,"$1"):s||i})),m}(i),m=u.length>0?u[0]:"",_=Pe("%"+m+"%",s),$=_.name,W=_.value,X=!1,Y=_.alias;Y&&(m=Y[0],ye(u,fe([0,1],Y)));for(var Z=1,ee=!0;Z=u.length){var pe=M(W,ie);W=(ee=!!pe)&&"get"in pe&&!("originalValue"in pe.get)?pe.get:W[ie]}else ee=de(W,ie),W=W[ie];ee&&!X&&(ae[$]=W)}}return W}},28185:i=>{"use strict";var s={foo:{}},u=Object;i.exports=function hasProto(){return{__proto__:s}.foo===s.foo&&!({__proto__:null}instanceof u)}},41405:(i,s,u)=>{"use strict";var m="undefined"!=typeof Symbol&&Symbol,v=u(55419);i.exports=function hasNativeSymbols(){return"function"==typeof m&&("function"==typeof Symbol&&("symbol"==typeof m("foo")&&("symbol"==typeof Symbol("bar")&&v())))}},55419:i=>{"use strict";i.exports=function hasSymbols(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var i={},s=Symbol("test"),u=Object(s);if("string"==typeof s)return!1;if("[object Symbol]"!==Object.prototype.toString.call(s))return!1;if("[object Symbol]"!==Object.prototype.toString.call(u))return!1;for(s in i[s]=42,i)return!1;if("function"==typeof Object.keys&&0!==Object.keys(i).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(i).length)return!1;var m=Object.getOwnPropertySymbols(i);if(1!==m.length||m[0]!==s)return!1;if(!Object.prototype.propertyIsEnumerable.call(i,s))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var v=Object.getOwnPropertyDescriptor(i,s);if(42!==v.value||!0!==v.enumerable)return!1}return!0}},17642:(i,s,u)=>{"use strict";var m=u(58612);i.exports=m.call(Function.call,Object.prototype.hasOwnProperty)},47802:i=>{function deepFreeze(i){return i instanceof Map?i.clear=i.delete=i.set=function(){throw new Error("map is read-only")}:i instanceof Set&&(i.add=i.clear=i.delete=function(){throw new Error("set is read-only")}),Object.freeze(i),Object.getOwnPropertyNames(i).forEach((function(s){var u=i[s];"object"!=typeof u||Object.isFrozen(u)||deepFreeze(u)})),i}var s=deepFreeze,u=deepFreeze;s.default=u;class Response{constructor(i){void 0===i.data&&(i.data={}),this.data=i.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function escapeHTML(i){return i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function inherit(i,...s){const u=Object.create(null);for(const s in i)u[s]=i[s];return s.forEach((function(i){for(const s in i)u[s]=i[s]})),u}const emitsWrappingTags=i=>!!i.kind;class HTMLRenderer{constructor(i,s){this.buffer="",this.classPrefix=s.classPrefix,i.walk(this)}addText(i){this.buffer+=escapeHTML(i)}openNode(i){if(!emitsWrappingTags(i))return;let s=i.kind;i.sublanguage||(s=`${this.classPrefix}${s}`),this.span(s)}closeNode(i){emitsWrappingTags(i)&&(this.buffer+="")}value(){return this.buffer}span(i){this.buffer+=``}}class TokenTree{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(i){this.top.children.push(i)}openNode(i){const s={kind:i,children:[]};this.add(s),this.stack.push(s)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(i){return this.constructor._walk(i,this.rootNode)}static _walk(i,s){return"string"==typeof s?i.addText(s):s.children&&(i.openNode(s),s.children.forEach((s=>this._walk(i,s))),i.closeNode(s)),i}static _collapse(i){"string"!=typeof i&&i.children&&(i.children.every((i=>"string"==typeof i))?i.children=[i.children.join("")]:i.children.forEach((i=>{TokenTree._collapse(i)})))}}class TokenTreeEmitter extends TokenTree{constructor(i){super(),this.options=i}addKeyword(i,s){""!==i&&(this.openNode(s),this.addText(i),this.closeNode())}addText(i){""!==i&&this.add(i)}addSublanguage(i,s){const u=i.root;u.kind=s,u.sublanguage=!0,this.add(u)}toHTML(){return new HTMLRenderer(this,this.options).value()}finalize(){return!0}}function source(i){return i?"string"==typeof i?i:i.source:null}const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const v="[a-zA-Z]\\w*",_="[a-zA-Z_]\\w*",j="\\b\\d+(\\.\\d+)?",M="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",$="\\b(0b[01]+)",W={begin:"\\\\[\\s\\S]",relevance:0},X={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[W]},Y={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[W]},Z={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT=function(i,s,u={}){const m=inherit({className:"comment",begin:i,end:s,contains:[]},u);return m.contains.push(Z),m.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),m},ee=COMMENT("//","$"),ae=COMMENT("/\\*","\\*/"),ie=COMMENT("#","$"),le={className:"number",begin:j,relevance:0},ce={className:"number",begin:M,relevance:0},pe={className:"number",begin:$,relevance:0},de={className:"number",begin:j+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},fe={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[W,{begin:/\[/,end:/\]/,relevance:0,contains:[W]}]}]},ye={className:"title",begin:v,relevance:0},be={className:"title",begin:_,relevance:0},_e={begin:"\\.\\s*"+_,relevance:0};var we=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:v,UNDERSCORE_IDENT_RE:_,NUMBER_RE:j,C_NUMBER_RE:M,BINARY_NUMBER_RE:$,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(i={})=>{const s=/^#![ ]*\//;return i.binary&&(i.begin=function concat(...i){return i.map((i=>source(i))).join("")}(s,/.*\b/,i.binary,/\b.*/)),inherit({className:"meta",begin:s,end:/$/,relevance:0,"on:begin":(i,s)=>{0!==i.index&&s.ignoreMatch()}},i)},BACKSLASH_ESCAPE:W,APOS_STRING_MODE:X,QUOTE_STRING_MODE:Y,PHRASAL_WORDS_MODE:Z,COMMENT,C_LINE_COMMENT_MODE:ee,C_BLOCK_COMMENT_MODE:ae,HASH_COMMENT_MODE:ie,NUMBER_MODE:le,C_NUMBER_MODE:ce,BINARY_NUMBER_MODE:pe,CSS_NUMBER_MODE:de,REGEXP_MODE:fe,TITLE_MODE:ye,UNDERSCORE_TITLE_MODE:be,METHOD_GUARD:_e,END_SAME_AS_BEGIN:function(i){return Object.assign(i,{"on:begin":(i,s)=>{s.data._beginMatch=i[1]},"on:end":(i,s)=>{s.data._beginMatch!==i[1]&&s.ignoreMatch()}})}});function skipIfhasPrecedingDot(i,s){"."===i.input[i.index-1]&&s.ignoreMatch()}function beginKeywords(i,s){s&&i.beginKeywords&&(i.begin="\\b("+i.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",i.__beforeBegin=skipIfhasPrecedingDot,i.keywords=i.keywords||i.beginKeywords,delete i.beginKeywords,void 0===i.relevance&&(i.relevance=0))}function compileIllegal(i,s){Array.isArray(i.illegal)&&(i.illegal=function either(...i){return"("+i.map((i=>source(i))).join("|")+")"}(...i.illegal))}function compileMatch(i,s){if(i.match){if(i.begin||i.end)throw new Error("begin & end are not supported with match");i.begin=i.match,delete i.match}}function compileRelevance(i,s){void 0===i.relevance&&(i.relevance=1)}const Se=["of","and","for","in","not","or","if","then","parent","list","value"],xe="keyword";function compileKeywords(i,s,u=xe){const m={};return"string"==typeof i?compileList(u,i.split(" ")):Array.isArray(i)?compileList(u,i):Object.keys(i).forEach((function(u){Object.assign(m,compileKeywords(i[u],s,u))})),m;function compileList(i,u){s&&(u=u.map((i=>i.toLowerCase()))),u.forEach((function(s){const u=s.split("|");m[u[0]]=[i,scoreForKeyword(u[0],u[1])]}))}}function scoreForKeyword(i,s){return s?Number(s):function commonKeyword(i){return Se.includes(i.toLowerCase())}(i)?0:1}function compileLanguage(i,{plugins:s}){function langRe(s,u){return new RegExp(source(s),"m"+(i.case_insensitive?"i":"")+(u?"g":""))}class MultiRegex{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(i,s){s.position=this.position++,this.matchIndexes[this.matchAt]=s,this.regexes.push([s,i]),this.matchAt+=function countMatchGroups(i){return new RegExp(i.toString()+"|").exec("").length-1}(i)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const i=this.regexes.map((i=>i[1]));this.matcherRe=langRe(function join(i,s="|"){let u=0;return i.map((i=>{u+=1;const s=u;let v=source(i),_="";for(;v.length>0;){const i=m.exec(v);if(!i){_+=v;break}_+=v.substring(0,i.index),v=v.substring(i.index+i[0].length),"\\"===i[0][0]&&i[1]?_+="\\"+String(Number(i[1])+s):(_+=i[0],"("===i[0]&&u++)}return _})).map((i=>`(${i})`)).join(s)}(i),!0),this.lastIndex=0}exec(i){this.matcherRe.lastIndex=this.lastIndex;const s=this.matcherRe.exec(i);if(!s)return null;const u=s.findIndex(((i,s)=>s>0&&void 0!==i)),m=this.matchIndexes[u];return s.splice(0,u),Object.assign(s,m)}}class ResumableMultiRegex{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(i){if(this.multiRegexes[i])return this.multiRegexes[i];const s=new MultiRegex;return this.rules.slice(i).forEach((([i,u])=>s.addRule(i,u))),s.compile(),this.multiRegexes[i]=s,s}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(i,s){this.rules.push([i,s]),"begin"===s.type&&this.count++}exec(i){const s=this.getMatcher(this.regexIndex);s.lastIndex=this.lastIndex;let u=s.exec(i);if(this.resumingScanAtSamePosition())if(u&&u.index===this.lastIndex);else{const s=this.getMatcher(0);s.lastIndex=this.lastIndex+1,u=s.exec(i)}return u&&(this.regexIndex+=u.position+1,this.regexIndex===this.count&&this.considerAll()),u}}if(i.compilerExtensions||(i.compilerExtensions=[]),i.contains&&i.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return i.classNameAliases=inherit(i.classNameAliases||{}),function compileMode(s,u){const m=s;if(s.isCompiled)return m;[compileMatch].forEach((i=>i(s,u))),i.compilerExtensions.forEach((i=>i(s,u))),s.__beforeBegin=null,[beginKeywords,compileIllegal,compileRelevance].forEach((i=>i(s,u))),s.isCompiled=!0;let v=null;if("object"==typeof s.keywords&&(v=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=compileKeywords(s.keywords,i.case_insensitive)),s.lexemes&&v)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return v=v||s.lexemes||/\w+/,m.keywordPatternRe=langRe(v,!0),u&&(s.begin||(s.begin=/\B|\b/),m.beginRe=langRe(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(m.endRe=langRe(s.end)),m.terminatorEnd=source(s.end)||"",s.endsWithParent&&u.terminatorEnd&&(m.terminatorEnd+=(s.end?"|":"")+u.terminatorEnd)),s.illegal&&(m.illegalRe=langRe(s.illegal)),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(i){return function expandOrCloneMode(i){i.variants&&!i.cachedVariants&&(i.cachedVariants=i.variants.map((function(s){return inherit(i,{variants:null},s)})));if(i.cachedVariants)return i.cachedVariants;if(dependencyOnParent(i))return inherit(i,{starts:i.starts?inherit(i.starts):null});if(Object.isFrozen(i))return inherit(i);return i}("self"===i?s:i)}))),s.contains.forEach((function(i){compileMode(i,m)})),s.starts&&compileMode(s.starts,u),m.matcher=function buildModeRegex(i){const s=new ResumableMultiRegex;return i.contains.forEach((i=>s.addRule(i.begin,{rule:i,type:"begin"}))),i.terminatorEnd&&s.addRule(i.terminatorEnd,{type:"end"}),i.illegal&&s.addRule(i.illegal,{type:"illegal"}),s}(m),m}(i)}function dependencyOnParent(i){return!!i&&(i.endsWithParent||dependencyOnParent(i.starts))}function BuildVuePlugin(i){const s={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!i.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,escapeHTML(this.code);let s={};return this.autoDetect?(s=i.highlightAuto(this.code),this.detectedLanguage=s.language):(s=i.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),s.value},autoDetect(){return!this.language||function hasValueOrEmptyAttribute(i){return Boolean(i||""===i)}(this.autodetect)},ignoreIllegals:()=>!0},render(i){return i("pre",{},[i("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:s,VuePlugin:{install(i){i.component("highlightjs",s)}}}}const Pe={"after:highlightElement":({el:i,result:s,text:u})=>{const m=nodeStream(i);if(!m.length)return;const v=document.createElement("div");v.innerHTML=s.value,s.value=function mergeStreams(i,s,u){let m=0,v="";const _=[];function selectStream(){return i.length&&s.length?i[0].offset!==s[0].offset?i[0].offset"}function close(i){v+=""}function render(i){("start"===i.event?open:close)(i.node)}for(;i.length||s.length;){let s=selectStream();if(v+=escapeHTML(u.substring(m,s[0].offset)),m=s[0].offset,s===i){_.reverse().forEach(close);do{render(s.splice(0,1)[0]),s=selectStream()}while(s===i&&s.length&&s[0].offset===m);_.reverse().forEach(open)}else"start"===s[0].event?_.push(s[0].node):_.pop(),render(s.splice(0,1)[0])}return v+escapeHTML(u.substr(m))}(m,nodeStream(v),u)}};function tag(i){return i.nodeName.toLowerCase()}function nodeStream(i){const s=[];return function _nodeStream(i,u){for(let m=i.firstChild;m;m=m.nextSibling)3===m.nodeType?u+=m.nodeValue.length:1===m.nodeType&&(s.push({event:"start",offset:u,node:m}),u=_nodeStream(m,u),tag(m).match(/br|hr|img|input/)||s.push({event:"stop",offset:u,node:m}));return u}(i,0),s}const Ie={},error=i=>{console.error(i)},warn=(i,...s)=>{console.log(`WARN: ${i}`,...s)},deprecated=(i,s)=>{Ie[`${i}/${s}`]||(console.log(`Deprecated as of ${i}. ${s}`),Ie[`${i}/${s}`]=!0)},Te=escapeHTML,Re=inherit,qe=Symbol("nomatch");var ze=function(i){const u=Object.create(null),m=Object.create(null),v=[];let _=!0;const j=/(^(<[^>]+>|\t|)+|\n)/gm,M="Could not find the language '{}', did you forget to load/include a language module?",$={disableAutodetect:!0,name:"Plain text",contains:[]};let W={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:TokenTreeEmitter};function shouldNotHighlight(i){return W.noHighlightRe.test(i)}function highlight(i,s,u,m){let v="",_="";"object"==typeof s?(v=i,u=s.ignoreIllegals,_=s.language,m=void 0):(deprecated("10.7.0","highlight(lang, code, ...args) has been deprecated."),deprecated("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),_=i,v=s);const j={code:v,language:_};fire("before:highlight",j);const M=j.result?j.result:_highlight(j.language,j.code,u,m);return M.code=j.code,fire("after:highlight",M),M}function _highlight(i,s,m,j){function keywordData(i,s){const u=X.case_insensitive?s[0].toLowerCase():s[0];return Object.prototype.hasOwnProperty.call(i.keywords,u)&&i.keywords[u]}function processBuffer(){null!=ee.subLanguage?function processSubLanguage(){if(""===le)return;let i=null;if("string"==typeof ee.subLanguage){if(!u[ee.subLanguage])return void ie.addText(le);i=_highlight(ee.subLanguage,le,!0,ae[ee.subLanguage]),ae[ee.subLanguage]=i.top}else i=highlightAuto(le,ee.subLanguage.length?ee.subLanguage:null);ee.relevance>0&&(ce+=i.relevance),ie.addSublanguage(i.emitter,i.language)}():function processKeywords(){if(!ee.keywords)return void ie.addText(le);let i=0;ee.keywordPatternRe.lastIndex=0;let s=ee.keywordPatternRe.exec(le),u="";for(;s;){u+=le.substring(i,s.index);const m=keywordData(ee,s);if(m){const[i,v]=m;if(ie.addText(u),u="",ce+=v,i.startsWith("_"))u+=s[0];else{const u=X.classNameAliases[i]||i;ie.addKeyword(s[0],u)}}else u+=s[0];i=ee.keywordPatternRe.lastIndex,s=ee.keywordPatternRe.exec(le)}u+=le.substr(i),ie.addText(u)}(),le=""}function startNewMode(i){return i.className&&ie.openNode(X.classNameAliases[i.className]||i.className),ee=Object.create(i,{parent:{value:ee}}),ee}function endOfMode(i,s,u){let m=function startsWith(i,s){const u=i&&i.exec(s);return u&&0===u.index}(i.endRe,u);if(m){if(i["on:end"]){const u=new Response(i);i["on:end"](s,u),u.isMatchIgnored&&(m=!1)}if(m){for(;i.endsParent&&i.parent;)i=i.parent;return i}}if(i.endsWithParent)return endOfMode(i.parent,s,u)}function doIgnore(i){return 0===ee.matcher.regexIndex?(le+=i[0],1):(fe=!0,0)}function doBeginMatch(i){const s=i[0],u=i.rule,m=new Response(u),v=[u.__beforeBegin,u["on:begin"]];for(const u of v)if(u&&(u(i,m),m.isMatchIgnored))return doIgnore(s);return u&&u.endSameAsBegin&&(u.endRe=function escape(i){return new RegExp(i.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}(s)),u.skip?le+=s:(u.excludeBegin&&(le+=s),processBuffer(),u.returnBegin||u.excludeBegin||(le=s)),startNewMode(u),u.returnBegin?0:s.length}function doEndMatch(i){const u=i[0],m=s.substr(i.index),v=endOfMode(ee,i,m);if(!v)return qe;const _=ee;_.skip?le+=u:(_.returnEnd||_.excludeEnd||(le+=u),processBuffer(),_.excludeEnd&&(le=u));do{ee.className&&ie.closeNode(),ee.skip||ee.subLanguage||(ce+=ee.relevance),ee=ee.parent}while(ee!==v.parent);return v.starts&&(v.endSameAsBegin&&(v.starts.endRe=v.endRe),startNewMode(v.starts)),_.returnEnd?0:u.length}let $={};function processLexeme(u,v){const j=v&&v[0];if(le+=u,null==j)return processBuffer(),0;if("begin"===$.type&&"end"===v.type&&$.index===v.index&&""===j){if(le+=s.slice(v.index,v.index+1),!_){const s=new Error("0 width match regex");throw s.languageName=i,s.badRule=$.rule,s}return 1}if($=v,"begin"===v.type)return doBeginMatch(v);if("illegal"===v.type&&!m){const i=new Error('Illegal lexeme "'+j+'" for mode "'+(ee.className||"")+'"');throw i.mode=ee,i}if("end"===v.type){const i=doEndMatch(v);if(i!==qe)return i}if("illegal"===v.type&&""===j)return 1;if(de>1e5&&de>3*v.index){throw new Error("potential infinite loop, way more iterations than matches")}return le+=j,j.length}const X=getLanguage(i);if(!X)throw error(M.replace("{}",i)),new Error('Unknown language: "'+i+'"');const Y=compileLanguage(X,{plugins:v});let Z="",ee=j||Y;const ae={},ie=new W.__emitter(W);!function processContinuations(){const i=[];for(let s=ee;s!==X;s=s.parent)s.className&&i.unshift(s.className);i.forEach((i=>ie.openNode(i)))}();let le="",ce=0,pe=0,de=0,fe=!1;try{for(ee.matcher.considerAll();;){de++,fe?fe=!1:ee.matcher.considerAll(),ee.matcher.lastIndex=pe;const i=ee.matcher.exec(s);if(!i)break;const u=processLexeme(s.substring(pe,i.index),i);pe=i.index+u}return processLexeme(s.substr(pe)),ie.closeAllNodes(),ie.finalize(),Z=ie.toHTML(),{relevance:Math.floor(ce),value:Z,language:i,illegal:!1,emitter:ie,top:ee}}catch(u){if(u.message&&u.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:u.message,context:s.slice(pe-100,pe+100),mode:u.mode},sofar:Z,relevance:0,value:Te(s),emitter:ie};if(_)return{illegal:!1,relevance:0,value:Te(s),emitter:ie,language:i,top:ee,errorRaised:u};throw u}}function highlightAuto(i,s){s=s||W.languages||Object.keys(u);const m=function justTextHighlightResult(i){const s={relevance:0,emitter:new W.__emitter(W),value:Te(i),illegal:!1,top:$};return s.emitter.addText(i),s}(i),v=s.filter(getLanguage).filter(autoDetection).map((s=>_highlight(s,i,!1)));v.unshift(m);const _=v.sort(((i,s)=>{if(i.relevance!==s.relevance)return s.relevance-i.relevance;if(i.language&&s.language){if(getLanguage(i.language).supersetOf===s.language)return 1;if(getLanguage(s.language).supersetOf===i.language)return-1}return 0})),[j,M]=_,X=j;return X.second_best=M,X}const X={"before:highlightElement":({el:i})=>{W.useBR&&(i.innerHTML=i.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":({result:i})=>{W.useBR&&(i.value=i.value.replace(/\n/g,"
"))}},Y=/^(<[^>]+>|\t)+/gm,Z={"after:highlightElement":({result:i})=>{W.tabReplace&&(i.value=i.value.replace(Y,(i=>i.replace(/\t/g,W.tabReplace))))}};function highlightElement(i){let s=null;const u=function blockLanguage(i){let s=i.className+" ";s+=i.parentNode?i.parentNode.className:"";const u=W.languageDetectRe.exec(s);if(u){const s=getLanguage(u[1]);return s||(warn(M.replace("{}",u[1])),warn("Falling back to no-highlight mode for this block.",i)),s?u[1]:"no-highlight"}return s.split(/\s+/).find((i=>shouldNotHighlight(i)||getLanguage(i)))}(i);if(shouldNotHighlight(u))return;fire("before:highlightElement",{el:i,language:u}),s=i;const v=s.textContent,_=u?highlight(v,{language:u,ignoreIllegals:!0}):highlightAuto(v);fire("after:highlightElement",{el:i,result:_,text:v}),i.innerHTML=_.value,function updateClassName(i,s,u){const v=s?m[s]:u;i.classList.add("hljs"),v&&i.classList.add(v)}(i,u,_.language),i.result={language:_.language,re:_.relevance,relavance:_.relevance},_.second_best&&(i.second_best={language:_.second_best.language,re:_.second_best.relevance,relavance:_.second_best.relevance})}const initHighlighting=()=>{if(initHighlighting.called)return;initHighlighting.called=!0,deprecated("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(highlightElement)};let ee=!1;function highlightAll(){if("loading"===document.readyState)return void(ee=!0);document.querySelectorAll("pre code").forEach(highlightElement)}function getLanguage(i){return i=(i||"").toLowerCase(),u[i]||u[m[i]]}function registerAliases(i,{languageName:s}){"string"==typeof i&&(i=[i]),i.forEach((i=>{m[i.toLowerCase()]=s}))}function autoDetection(i){const s=getLanguage(i);return s&&!s.disableAutodetect}function fire(i,s){const u=i;v.forEach((function(i){i[u]&&i[u](s)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function boot(){ee&&highlightAll()}),!1),Object.assign(i,{highlight,highlightAuto,highlightAll,fixMarkup:function deprecateFixMarkup(i){return deprecated("10.2.0","fixMarkup will be removed entirely in v11.0"),deprecated("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),function fixMarkup(i){return W.tabReplace||W.useBR?i.replace(j,(i=>"\n"===i?W.useBR?"
":i:W.tabReplace?i.replace(/\t/g,W.tabReplace):i)):i}(i)},highlightElement,highlightBlock:function deprecateHighlightBlock(i){return deprecated("10.7.0","highlightBlock will be removed entirely in v12.0"),deprecated("10.7.0","Please use highlightElement now."),highlightElement(i)},configure:function configure(i){i.useBR&&(deprecated("10.3.0","'useBR' will be removed entirely in v11.0"),deprecated("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),W=Re(W,i)},initHighlighting,initHighlightingOnLoad:function initHighlightingOnLoad(){deprecated("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),ee=!0},registerLanguage:function registerLanguage(s,m){let v=null;try{v=m(i)}catch(i){if(error("Language definition for '{}' could not be registered.".replace("{}",s)),!_)throw i;error(i),v=$}v.name||(v.name=s),u[s]=v,v.rawDefinition=m.bind(null,i),v.aliases&®isterAliases(v.aliases,{languageName:s})},unregisterLanguage:function unregisterLanguage(i){delete u[i];for(const s of Object.keys(m))m[s]===i&&delete m[s]},listLanguages:function listLanguages(){return Object.keys(u)},getLanguage,registerAliases,requireLanguage:function requireLanguage(i){deprecated("10.4.0","requireLanguage will be removed entirely in v11."),deprecated("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const s=getLanguage(i);if(s)return s;throw new Error("The '{}' language is required, but not loaded.".replace("{}",i))},autoDetection,inherit:Re,addPlugin:function addPlugin(i){!function upgradePluginAPI(i){i["before:highlightBlock"]&&!i["before:highlightElement"]&&(i["before:highlightElement"]=s=>{i["before:highlightBlock"](Object.assign({block:s.el},s))}),i["after:highlightBlock"]&&!i["after:highlightElement"]&&(i["after:highlightElement"]=s=>{i["after:highlightBlock"](Object.assign({block:s.el},s))})}(i),v.push(i)},vuePlugin:BuildVuePlugin(i).VuePlugin}),i.debugMode=function(){_=!1},i.safeMode=function(){_=!0},i.versionString="10.7.3";for(const i in we)"object"==typeof we[i]&&s(we[i]);return Object.assign(i,we),i.addPlugin(X),i.addPlugin(Pe),i.addPlugin(Z),i}({});i.exports=ze},61519:i=>{function concat(...i){return i.map((i=>function source(i){return i?"string"==typeof i?i:i.source:null}(i))).join("")}i.exports=function bash(i){const s={},u={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[s]}]};Object.assign(s,{className:"variable",variants:[{begin:concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},u]});const m={className:"subst",begin:/\$\(/,end:/\)/,contains:[i.BACKSLASH_ESCAPE]},v={begin:/<<-?\s*(?=\w+)/,starts:{contains:[i.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},_={className:"string",begin:/"/,end:/"/,contains:[i.BACKSLASH_ESCAPE,s,m]};m.contains.push(_);const j={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},i.NUMBER_MODE,s]},M=i.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),$={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[i.inherit(i.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[M,i.SHEBANG(),$,j,i.HASH_COMMENT_MODE,v,_,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}},30786:i=>{function concat(...i){return i.map((i=>function source(i){return i?"string"==typeof i?i:i.source:null}(i))).join("")}i.exports=function http(i){const s="HTTP/(2|1\\.[01])",u={className:"attribute",begin:concat("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},m=[u,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+s+" \\d{3})",end:/$/,contains:[{className:"meta",begin:s},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:m}},{begin:"(?=^[A-Z]+ (.*?) "+s+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:s},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:m}},i.inherit(u,{relevance:0})]}}},96344:i=>{const s="[A-Za-z$_][0-9A-Za-z$_]*",u=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],m=["true","false","null","undefined","NaN","Infinity"],v=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function lookahead(i){return concat("(?=",i,")")}function concat(...i){return i.map((i=>function source(i){return i?"string"==typeof i?i:i.source:null}(i))).join("")}i.exports=function javascript(i){const _=s,j="<>",M="",$={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(i,s)=>{const u=i[0].length+i.index,m=i.input[u];"<"!==m?">"===m&&(((i,{after:s})=>{const u="",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:i.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:ye}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:j,end:M},{begin:$.begin,"on:begin":$.isTrulyOpeningTag,end:$.end}],subLanguage:"xml",contains:[{begin:$.begin,end:$.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:W,contains:["self",i.inherit(i.TITLE_MODE,{begin:_}),be],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:i.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[be,i.inherit(i.TITLE_MODE,{begin:_})]},{variants:[{begin:"\\."+_},{begin:"\\$"+_}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},i.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[i.inherit(i.TITLE_MODE,{begin:_}),"self",be]},{begin:"(get|set)\\s+(?="+_+"\\()",end:/\{/,keywords:"get set",contains:[i.inherit(i.TITLE_MODE,{begin:_}),{begin:/\(\)/},be]},{begin:/\$[(.]/}]}}},82026:i=>{i.exports=function json(i){const s={literal:"true false null"},u=[i.C_LINE_COMMENT_MODE,i.C_BLOCK_COMMENT_MODE],m=[i.QUOTE_STRING_MODE,i.C_NUMBER_MODE],v={end:",",endsWithParent:!0,excludeEnd:!0,contains:m,keywords:s},_={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[i.BACKSLASH_ESCAPE],illegal:"\\n"},i.inherit(v,{begin:/:/})].concat(u),illegal:"\\S"},j={begin:"\\[",end:"\\]",contains:[i.inherit(v)],illegal:"\\S"};return m.push(_,j),u.forEach((function(i){m.push(i)})),{name:"JSON",contains:m,keywords:s,illegal:"\\S"}}},66336:i=>{i.exports=function powershell(i){const s={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},u={begin:"`[\\s\\S]",relevance:0},m={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},v={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[u,m,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},_={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},j=i.inherit(i.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),M={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},$={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[i.TITLE_MODE]},W={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[m]}]},X={begin:/using\s/,end:/$/,returnBegin:!0,contains:[v,_,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},Y={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},Z={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(s.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},i.inherit(i.TITLE_MODE,{endsParent:!0})]},ee=[Z,j,u,i.NUMBER_MODE,v,_,M,m,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],ae={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",ee,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return Z.contains.unshift(ae),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:s,contains:ee.concat($,W,X,Y,ae)}}},42157:i=>{function source(i){return i?"string"==typeof i?i:i.source:null}function lookahead(i){return concat("(?=",i,")")}function concat(...i){return i.map((i=>source(i))).join("")}function either(...i){return"("+i.map((i=>source(i))).join("|")+")"}i.exports=function xml(i){const s=concat(/[A-Z_]/,function optional(i){return concat("(",i,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),u={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},m={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},v=i.inherit(m,{begin:/\(/,end:/\)/}),_=i.inherit(i.APOS_STRING_MODE,{className:"meta-string"}),j=i.inherit(i.QUOTE_STRING_MODE,{className:"meta-string"}),M={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[m,j,_,v,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[m,v,j,_]}]}]},i.COMMENT(//,{relevance:10}),{begin://,relevance:10},u,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[M],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[M],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:s,relevance:0,starts:M}]},{className:"tag",begin:concat(/<\//,lookahead(concat(s,/>/))),contains:[{className:"name",begin:s,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:i=>{i.exports=function yaml(i){var s="true false yes no null",u="[\\w#;/?:@&=+$,.~*'()[\\]]+",m={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[i.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},v=i.inherit(m,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),_={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},j={end:",",endsWithParent:!0,excludeEnd:!0,keywords:s,relevance:0},M={begin:/\{/,end:/\}/,contains:[j],illegal:"\\n",relevance:0},$={begin:"\\[",end:"\\]",contains:[j],illegal:"\\n",relevance:0},W=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+u},{className:"type",begin:"!<"+u+">"},{className:"type",begin:"!"+u},{className:"type",begin:"!!"+u},{className:"meta",begin:"&"+i.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+i.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},i.HASH_COMMENT_MODE,{beginKeywords:s,keywords:{literal:s}},_,{className:"number",begin:i.C_NUMBER_RE+"\\b",relevance:0},M,$,m],X=[...W];return X.pop(),X.push(v),j.contains=X,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:W}}},8679:(i,s,u)=>{"use strict";var m=u(59864),v={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},j={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},M={};function getStatics(i){return m.isMemo(i)?j:M[i.$$typeof]||v}M[m.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},M[m.Memo]=j;var $=Object.defineProperty,W=Object.getOwnPropertyNames,X=Object.getOwnPropertySymbols,Y=Object.getOwnPropertyDescriptor,Z=Object.getPrototypeOf,ee=Object.prototype;i.exports=function hoistNonReactStatics(i,s,u){if("string"!=typeof s){if(ee){var m=Z(s);m&&m!==ee&&hoistNonReactStatics(i,m,u)}var v=W(s);X&&(v=v.concat(X(s)));for(var j=getStatics(i),M=getStatics(s),ae=0;ae{s.read=function(i,s,u,m,v){var _,j,M=8*v-m-1,$=(1<>1,X=-7,Y=u?v-1:0,Z=u?-1:1,ee=i[s+Y];for(Y+=Z,_=ee&(1<<-X)-1,ee>>=-X,X+=M;X>0;_=256*_+i[s+Y],Y+=Z,X-=8);for(j=_&(1<<-X)-1,_>>=-X,X+=m;X>0;j=256*j+i[s+Y],Y+=Z,X-=8);if(0===_)_=1-W;else{if(_===$)return j?NaN:1/0*(ee?-1:1);j+=Math.pow(2,m),_-=W}return(ee?-1:1)*j*Math.pow(2,_-m)},s.write=function(i,s,u,m,v,_){var j,M,$,W=8*_-v-1,X=(1<>1,Z=23===v?Math.pow(2,-24)-Math.pow(2,-77):0,ee=m?0:_-1,ae=m?1:-1,ie=s<0||0===s&&1/s<0?1:0;for(s=Math.abs(s),isNaN(s)||s===1/0?(M=isNaN(s)?1:0,j=X):(j=Math.floor(Math.log(s)/Math.LN2),s*($=Math.pow(2,-j))<1&&(j--,$*=2),(s+=j+Y>=1?Z/$:Z*Math.pow(2,1-Y))*$>=2&&(j++,$/=2),j+Y>=X?(M=0,j=X):j+Y>=1?(M=(s*$-1)*Math.pow(2,v),j+=Y):(M=s*Math.pow(2,Y-1)*Math.pow(2,v),j=0));v>=8;i[u+ee]=255&M,ee+=ae,M/=256,v-=8);for(j=j<0;i[u+ee]=255&j,ee+=ae,j/=256,W-=8);i[u+ee-ae]|=128*ie}},43393:function(i){i.exports=function(){"use strict";var i=Array.prototype.slice;function createClass(i,s){s&&(i.prototype=Object.create(s.prototype)),i.prototype.constructor=i}function Iterable(i){return isIterable(i)?i:Seq(i)}function KeyedIterable(i){return isKeyed(i)?i:KeyedSeq(i)}function IndexedIterable(i){return isIndexed(i)?i:IndexedSeq(i)}function SetIterable(i){return isIterable(i)&&!isAssociative(i)?i:SetSeq(i)}function isIterable(i){return!(!i||!i[s])}function isKeyed(i){return!(!i||!i[u])}function isIndexed(i){return!(!i||!i[m])}function isAssociative(i){return isKeyed(i)||isIndexed(i)}function isOrdered(i){return!(!i||!i[v])}createClass(KeyedIterable,Iterable),createClass(IndexedIterable,Iterable),createClass(SetIterable,Iterable),Iterable.isIterable=isIterable,Iterable.isKeyed=isKeyed,Iterable.isIndexed=isIndexed,Iterable.isAssociative=isAssociative,Iterable.isOrdered=isOrdered,Iterable.Keyed=KeyedIterable,Iterable.Indexed=IndexedIterable,Iterable.Set=SetIterable;var s="@@__IMMUTABLE_ITERABLE__@@",u="@@__IMMUTABLE_KEYED__@@",m="@@__IMMUTABLE_INDEXED__@@",v="@@__IMMUTABLE_ORDERED__@@",_="delete",j=5,M=1<>>0;if(""+u!==s||4294967295===u)return NaN;s=u}return s<0?ensureSize(i)+s:s}function returnTrue(){return!0}function wholeSlice(i,s,u){return(0===i||void 0!==u&&i<=-u)&&(void 0===s||void 0!==u&&s>=u)}function resolveBegin(i,s){return resolveIndex(i,s,0)}function resolveEnd(i,s){return resolveIndex(i,s,s)}function resolveIndex(i,s,u){return void 0===i?u:i<0?Math.max(0,s+i):void 0===s?i:Math.min(s,i)}var Z=0,ee=1,ae=2,ie="function"==typeof Symbol&&Symbol.iterator,le="@@iterator",ce=ie||le;function Iterator(i){this.next=i}function iteratorValue(i,s,u,m){var v=0===i?s:1===i?u:[s,u];return m?m.value=v:m={value:v,done:!1},m}function iteratorDone(){return{value:void 0,done:!0}}function hasIterator(i){return!!getIteratorFn(i)}function isIterator(i){return i&&"function"==typeof i.next}function getIterator(i){var s=getIteratorFn(i);return s&&s.call(i)}function getIteratorFn(i){var s=i&&(ie&&i[ie]||i[le]);if("function"==typeof s)return s}function isArrayLike(i){return i&&"number"==typeof i.length}function Seq(i){return null==i?emptySequence():isIterable(i)?i.toSeq():seqFromValue(i)}function KeyedSeq(i){return null==i?emptySequence().toKeyedSeq():isIterable(i)?isKeyed(i)?i.toSeq():i.fromEntrySeq():keyedSeqFromValue(i)}function IndexedSeq(i){return null==i?emptySequence():isIterable(i)?isKeyed(i)?i.entrySeq():i.toIndexedSeq():indexedSeqFromValue(i)}function SetSeq(i){return(null==i?emptySequence():isIterable(i)?isKeyed(i)?i.entrySeq():i:indexedSeqFromValue(i)).toSetSeq()}Iterator.prototype.toString=function(){return"[Iterator]"},Iterator.KEYS=Z,Iterator.VALUES=ee,Iterator.ENTRIES=ae,Iterator.prototype.inspect=Iterator.prototype.toSource=function(){return this.toString()},Iterator.prototype[ce]=function(){return this},createClass(Seq,Iterable),Seq.of=function(){return Seq(arguments)},Seq.prototype.toSeq=function(){return this},Seq.prototype.toString=function(){return this.__toString("Seq {","}")},Seq.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},Seq.prototype.__iterate=function(i,s){return seqIterate(this,i,s,!0)},Seq.prototype.__iterator=function(i,s){return seqIterator(this,i,s,!0)},createClass(KeyedSeq,Seq),KeyedSeq.prototype.toKeyedSeq=function(){return this},createClass(IndexedSeq,Seq),IndexedSeq.of=function(){return IndexedSeq(arguments)},IndexedSeq.prototype.toIndexedSeq=function(){return this},IndexedSeq.prototype.toString=function(){return this.__toString("Seq [","]")},IndexedSeq.prototype.__iterate=function(i,s){return seqIterate(this,i,s,!1)},IndexedSeq.prototype.__iterator=function(i,s){return seqIterator(this,i,s,!1)},createClass(SetSeq,Seq),SetSeq.of=function(){return SetSeq(arguments)},SetSeq.prototype.toSetSeq=function(){return this},Seq.isSeq=isSeq,Seq.Keyed=KeyedSeq,Seq.Set=SetSeq,Seq.Indexed=IndexedSeq;var pe,de,fe,ye="@@__IMMUTABLE_SEQ__@@";function ArraySeq(i){this._array=i,this.size=i.length}function ObjectSeq(i){var s=Object.keys(i);this._object=i,this._keys=s,this.size=s.length}function IterableSeq(i){this._iterable=i,this.size=i.length||i.size}function IteratorSeq(i){this._iterator=i,this._iteratorCache=[]}function isSeq(i){return!(!i||!i[ye])}function emptySequence(){return pe||(pe=new ArraySeq([]))}function keyedSeqFromValue(i){var s=Array.isArray(i)?new ArraySeq(i).fromEntrySeq():isIterator(i)?new IteratorSeq(i).fromEntrySeq():hasIterator(i)?new IterableSeq(i).fromEntrySeq():"object"==typeof i?new ObjectSeq(i):void 0;if(!s)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+i);return s}function indexedSeqFromValue(i){var s=maybeIndexedSeqFromValue(i);if(!s)throw new TypeError("Expected Array or iterable object of values: "+i);return s}function seqFromValue(i){var s=maybeIndexedSeqFromValue(i)||"object"==typeof i&&new ObjectSeq(i);if(!s)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+i);return s}function maybeIndexedSeqFromValue(i){return isArrayLike(i)?new ArraySeq(i):isIterator(i)?new IteratorSeq(i):hasIterator(i)?new IterableSeq(i):void 0}function seqIterate(i,s,u,m){var v=i._cache;if(v){for(var _=v.length-1,j=0;j<=_;j++){var M=v[u?_-j:j];if(!1===s(M[1],m?M[0]:j,i))return j+1}return j}return i.__iterateUncached(s,u)}function seqIterator(i,s,u,m){var v=i._cache;if(v){var _=v.length-1,j=0;return new Iterator((function(){var i=v[u?_-j:j];return j++>_?iteratorDone():iteratorValue(s,m?i[0]:j-1,i[1])}))}return i.__iteratorUncached(s,u)}function fromJS(i,s){return s?fromJSWith(s,i,"",{"":i}):fromJSDefault(i)}function fromJSWith(i,s,u,m){return Array.isArray(s)?i.call(m,u,IndexedSeq(s).map((function(u,m){return fromJSWith(i,u,m,s)}))):isPlainObj(s)?i.call(m,u,KeyedSeq(s).map((function(u,m){return fromJSWith(i,u,m,s)}))):s}function fromJSDefault(i){return Array.isArray(i)?IndexedSeq(i).map(fromJSDefault).toList():isPlainObj(i)?KeyedSeq(i).map(fromJSDefault).toMap():i}function isPlainObj(i){return i&&(i.constructor===Object||void 0===i.constructor)}function is(i,s){if(i===s||i!=i&&s!=s)return!0;if(!i||!s)return!1;if("function"==typeof i.valueOf&&"function"==typeof s.valueOf){if((i=i.valueOf())===(s=s.valueOf())||i!=i&&s!=s)return!0;if(!i||!s)return!1}return!("function"!=typeof i.equals||"function"!=typeof s.equals||!i.equals(s))}function deepEqual(i,s){if(i===s)return!0;if(!isIterable(s)||void 0!==i.size&&void 0!==s.size&&i.size!==s.size||void 0!==i.__hash&&void 0!==s.__hash&&i.__hash!==s.__hash||isKeyed(i)!==isKeyed(s)||isIndexed(i)!==isIndexed(s)||isOrdered(i)!==isOrdered(s))return!1;if(0===i.size&&0===s.size)return!0;var u=!isAssociative(i);if(isOrdered(i)){var m=i.entries();return s.every((function(i,s){var v=m.next().value;return v&&is(v[1],i)&&(u||is(v[0],s))}))&&m.next().done}var v=!1;if(void 0===i.size)if(void 0===s.size)"function"==typeof i.cacheResult&&i.cacheResult();else{v=!0;var _=i;i=s,s=_}var j=!0,M=s.__iterate((function(s,m){if(u?!i.has(s):v?!is(s,i.get(m,W)):!is(i.get(m,W),s))return j=!1,!1}));return j&&i.size===M}function Repeat(i,s){if(!(this instanceof Repeat))return new Repeat(i,s);if(this._value=i,this.size=void 0===s?1/0:Math.max(0,s),0===this.size){if(de)return de;de=this}}function invariant(i,s){if(!i)throw new Error(s)}function Range(i,s,u){if(!(this instanceof Range))return new Range(i,s,u);if(invariant(0!==u,"Cannot step a Range by 0"),i=i||0,void 0===s&&(s=1/0),u=void 0===u?1:Math.abs(u),sm?iteratorDone():iteratorValue(i,v,u[s?m-v++:v++])}))},createClass(ObjectSeq,KeyedSeq),ObjectSeq.prototype.get=function(i,s){return void 0===s||this.has(i)?this._object[i]:s},ObjectSeq.prototype.has=function(i){return this._object.hasOwnProperty(i)},ObjectSeq.prototype.__iterate=function(i,s){for(var u=this._object,m=this._keys,v=m.length-1,_=0;_<=v;_++){var j=m[s?v-_:_];if(!1===i(u[j],j,this))return _+1}return _},ObjectSeq.prototype.__iterator=function(i,s){var u=this._object,m=this._keys,v=m.length-1,_=0;return new Iterator((function(){var j=m[s?v-_:_];return _++>v?iteratorDone():iteratorValue(i,j,u[j])}))},ObjectSeq.prototype[v]=!0,createClass(IterableSeq,IndexedSeq),IterableSeq.prototype.__iterateUncached=function(i,s){if(s)return this.cacheResult().__iterate(i,s);var u=getIterator(this._iterable),m=0;if(isIterator(u))for(var v;!(v=u.next()).done&&!1!==i(v.value,m++,this););return m},IterableSeq.prototype.__iteratorUncached=function(i,s){if(s)return this.cacheResult().__iterator(i,s);var u=getIterator(this._iterable);if(!isIterator(u))return new Iterator(iteratorDone);var m=0;return new Iterator((function(){var s=u.next();return s.done?s:iteratorValue(i,m++,s.value)}))},createClass(IteratorSeq,IndexedSeq),IteratorSeq.prototype.__iterateUncached=function(i,s){if(s)return this.cacheResult().__iterate(i,s);for(var u,m=this._iterator,v=this._iteratorCache,_=0;_=m.length){var s=u.next();if(s.done)return s;m[v]=s.value}return iteratorValue(i,v,m[v++])}))},createClass(Repeat,IndexedSeq),Repeat.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Repeat.prototype.get=function(i,s){return this.has(i)?this._value:s},Repeat.prototype.includes=function(i){return is(this._value,i)},Repeat.prototype.slice=function(i,s){var u=this.size;return wholeSlice(i,s,u)?this:new Repeat(this._value,resolveEnd(s,u)-resolveBegin(i,u))},Repeat.prototype.reverse=function(){return this},Repeat.prototype.indexOf=function(i){return is(this._value,i)?0:-1},Repeat.prototype.lastIndexOf=function(i){return is(this._value,i)?this.size:-1},Repeat.prototype.__iterate=function(i,s){for(var u=0;u=0&&s=0&&uu?iteratorDone():iteratorValue(i,_++,j)}))},Range.prototype.equals=function(i){return i instanceof Range?this._start===i._start&&this._end===i._end&&this._step===i._step:deepEqual(this,i)},createClass(Collection,Iterable),createClass(KeyedCollection,Collection),createClass(IndexedCollection,Collection),createClass(SetCollection,Collection),Collection.Keyed=KeyedCollection,Collection.Indexed=IndexedCollection,Collection.Set=SetCollection;var be="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function imul(i,s){var u=65535&(i|=0),m=65535&(s|=0);return u*m+((i>>>16)*m+u*(s>>>16)<<16>>>0)|0};function smi(i){return i>>>1&1073741824|3221225471&i}function hash(i){if(!1===i||null==i)return 0;if("function"==typeof i.valueOf&&(!1===(i=i.valueOf())||null==i))return 0;if(!0===i)return 1;var s=typeof i;if("number"===s){if(i!=i||i===1/0)return 0;var u=0|i;for(u!==i&&(u^=4294967295*i);i>4294967295;)u^=i/=4294967295;return smi(u)}if("string"===s)return i.length>Te?cachedHashString(i):hashString(i);if("function"==typeof i.hashCode)return i.hashCode();if("object"===s)return hashJSObj(i);if("function"==typeof i.toString)return hashString(i.toString());throw new Error("Value type "+s+" cannot be hashed.")}function cachedHashString(i){var s=ze[i];return void 0===s&&(s=hashString(i),qe===Re&&(qe=0,ze={}),qe++,ze[i]=s),s}function hashString(i){for(var s=0,u=0;u0)switch(i.nodeType){case 1:return i.uniqueID;case 9:return i.documentElement&&i.documentElement.uniqueID}}var Se,xe="function"==typeof WeakMap;xe&&(Se=new WeakMap);var Pe=0,Ie="__immutablehash__";"function"==typeof Symbol&&(Ie=Symbol(Ie));var Te=16,Re=255,qe=0,ze={};function assertNotInfinite(i){invariant(i!==1/0,"Cannot perform this action with an infinite size.")}function Map(i){return null==i?emptyMap():isMap(i)&&!isOrdered(i)?i:emptyMap().withMutations((function(s){var u=KeyedIterable(i);assertNotInfinite(u.size),u.forEach((function(i,u){return s.set(u,i)}))}))}function isMap(i){return!(!i||!i[We])}createClass(Map,KeyedCollection),Map.of=function(){var s=i.call(arguments,0);return emptyMap().withMutations((function(i){for(var u=0;u=s.length)throw new Error("Missing value for key: "+s[u]);i.set(s[u],s[u+1])}}))},Map.prototype.toString=function(){return this.__toString("Map {","}")},Map.prototype.get=function(i,s){return this._root?this._root.get(0,void 0,i,s):s},Map.prototype.set=function(i,s){return updateMap(this,i,s)},Map.prototype.setIn=function(i,s){return this.updateIn(i,W,(function(){return s}))},Map.prototype.remove=function(i){return updateMap(this,i,W)},Map.prototype.deleteIn=function(i){return this.updateIn(i,(function(){return W}))},Map.prototype.update=function(i,s,u){return 1===arguments.length?i(this):this.updateIn([i],s,u)},Map.prototype.updateIn=function(i,s,u){u||(u=s,s=void 0);var m=updateInDeepMap(this,forceIterator(i),s,u);return m===W?void 0:m},Map.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):emptyMap()},Map.prototype.merge=function(){return mergeIntoMapWith(this,void 0,arguments)},Map.prototype.mergeWith=function(s){return mergeIntoMapWith(this,s,i.call(arguments,1))},Map.prototype.mergeIn=function(s){var u=i.call(arguments,1);return this.updateIn(s,emptyMap(),(function(i){return"function"==typeof i.merge?i.merge.apply(i,u):u[u.length-1]}))},Map.prototype.mergeDeep=function(){return mergeIntoMapWith(this,deepMerger,arguments)},Map.prototype.mergeDeepWith=function(s){var u=i.call(arguments,1);return mergeIntoMapWith(this,deepMergerWith(s),u)},Map.prototype.mergeDeepIn=function(s){var u=i.call(arguments,1);return this.updateIn(s,emptyMap(),(function(i){return"function"==typeof i.mergeDeep?i.mergeDeep.apply(i,u):u[u.length-1]}))},Map.prototype.sort=function(i){return OrderedMap(sortFactory(this,i))},Map.prototype.sortBy=function(i,s){return OrderedMap(sortFactory(this,s,i))},Map.prototype.withMutations=function(i){var s=this.asMutable();return i(s),s.wasAltered()?s.__ensureOwner(this.__ownerID):this},Map.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new OwnerID)},Map.prototype.asImmutable=function(){return this.__ensureOwner()},Map.prototype.wasAltered=function(){return this.__altered},Map.prototype.__iterator=function(i,s){return new MapIterator(this,i,s)},Map.prototype.__iterate=function(i,s){var u=this,m=0;return this._root&&this._root.iterate((function(s){return m++,i(s[1],s[0],u)}),s),m},Map.prototype.__ensureOwner=function(i){return i===this.__ownerID?this:i?makeMap(this.size,this._root,i,this.__hash):(this.__ownerID=i,this.__altered=!1,this)},Map.isMap=isMap;var Ve,We="@@__IMMUTABLE_MAP__@@",He=Map.prototype;function ArrayMapNode(i,s){this.ownerID=i,this.entries=s}function BitmapIndexedNode(i,s,u){this.ownerID=i,this.bitmap=s,this.nodes=u}function HashArrayMapNode(i,s,u){this.ownerID=i,this.count=s,this.nodes=u}function HashCollisionNode(i,s,u){this.ownerID=i,this.keyHash=s,this.entries=u}function ValueNode(i,s,u){this.ownerID=i,this.keyHash=s,this.entry=u}function MapIterator(i,s,u){this._type=s,this._reverse=u,this._stack=i._root&&mapIteratorFrame(i._root)}function mapIteratorValue(i,s){return iteratorValue(i,s[0],s[1])}function mapIteratorFrame(i,s){return{node:i,index:0,__prev:s}}function makeMap(i,s,u,m){var v=Object.create(He);return v.size=i,v._root=s,v.__ownerID=u,v.__hash=m,v.__altered=!1,v}function emptyMap(){return Ve||(Ve=makeMap(0))}function updateMap(i,s,u){var m,v;if(i._root){var _=MakeRef(X),j=MakeRef(Y);if(m=updateNode(i._root,i.__ownerID,0,void 0,s,u,_,j),!j.value)return i;v=i.size+(_.value?u===W?-1:1:0)}else{if(u===W)return i;v=1,m=new ArrayMapNode(i.__ownerID,[[s,u]])}return i.__ownerID?(i.size=v,i._root=m,i.__hash=void 0,i.__altered=!0,i):m?makeMap(v,m):emptyMap()}function updateNode(i,s,u,m,v,_,j,M){return i?i.update(s,u,m,v,_,j,M):_===W?i:(SetRef(M),SetRef(j),new ValueNode(s,m,[v,_]))}function isLeafNode(i){return i.constructor===ValueNode||i.constructor===HashCollisionNode}function mergeIntoNode(i,s,u,m,v){if(i.keyHash===m)return new HashCollisionNode(s,m,[i.entry,v]);var _,M=(0===u?i.keyHash:i.keyHash>>>u)&$,W=(0===u?m:m>>>u)&$;return new BitmapIndexedNode(s,1<>>=1)j[$]=1&u?s[_++]:void 0;return j[m]=v,new HashArrayMapNode(i,_+1,j)}function mergeIntoMapWith(i,s,u){for(var m=[],v=0;v>1&1431655765))+(i>>2&858993459))+(i>>4)&252645135,i+=i>>8,127&(i+=i>>16)}function setIn(i,s,u,m){var v=m?i:arrCopy(i);return v[s]=u,v}function spliceIn(i,s,u,m){var v=i.length+1;if(m&&s+1===v)return i[s]=u,i;for(var _=new Array(v),j=0,M=0;M=Xe)return createNodes(i,$,m,v);var ee=i&&i===this.ownerID,ae=ee?$:arrCopy($);return Z?M?X===Y-1?ae.pop():ae[X]=ae.pop():ae[X]=[m,v]:ae.push([m,v]),ee?(this.entries=ae,this):new ArrayMapNode(i,ae)}},BitmapIndexedNode.prototype.get=function(i,s,u,m){void 0===s&&(s=hash(u));var v=1<<((0===i?s:s>>>i)&$),_=this.bitmap;return 0==(_&v)?m:this.nodes[popCount(_&v-1)].get(i+j,s,u,m)},BitmapIndexedNode.prototype.update=function(i,s,u,m,v,_,M){void 0===u&&(u=hash(m));var X=(0===s?u:u>>>s)&$,Y=1<=Ye)return expandNodes(i,ie,Z,X,ce);if(ee&&!ce&&2===ie.length&&isLeafNode(ie[1^ae]))return ie[1^ae];if(ee&&ce&&1===ie.length&&isLeafNode(ce))return ce;var pe=i&&i===this.ownerID,de=ee?ce?Z:Z^Y:Z|Y,fe=ee?ce?setIn(ie,ae,ce,pe):spliceOut(ie,ae,pe):spliceIn(ie,ae,ce,pe);return pe?(this.bitmap=de,this.nodes=fe,this):new BitmapIndexedNode(i,de,fe)},HashArrayMapNode.prototype.get=function(i,s,u,m){void 0===s&&(s=hash(u));var v=(0===i?s:s>>>i)&$,_=this.nodes[v];return _?_.get(i+j,s,u,m):m},HashArrayMapNode.prototype.update=function(i,s,u,m,v,_,M){void 0===u&&(u=hash(m));var X=(0===s?u:u>>>s)&$,Y=v===W,Z=this.nodes,ee=Z[X];if(Y&&!ee)return this;var ae=updateNode(ee,i,s+j,u,m,v,_,M);if(ae===ee)return this;var ie=this.count;if(ee){if(!ae&&--ie0&&m=0&&i>>s&$;if(m>=this.array.length)return new VNode([],i);var v,_=0===m;if(s>0){var M=this.array[m];if((v=M&&M.removeBefore(i,s-j,u))===M&&_)return this}if(_&&!v)return this;var W=editableVNode(this,i);if(!_)for(var X=0;X>>s&$;if(v>=this.array.length)return this;if(s>0){var _=this.array[v];if((m=_&&_.removeAfter(i,s-j,u))===_&&v===this.array.length-1)return this}var M=editableVNode(this,i);return M.array.splice(v+1),m&&(M.array[v]=m),M};var rt,nt,ot={};function iterateList(i,s){var u=i._origin,m=i._capacity,v=getTailOffset(m),_=i._tail;return iterateNodeOrLeaf(i._root,i._level,0);function iterateNodeOrLeaf(i,s,u){return 0===s?iterateLeaf(i,u):iterateNode(i,s,u)}function iterateLeaf(i,j){var $=j===v?_&&_.array:i&&i.array,W=j>u?0:u-j,X=m-j;return X>M&&(X=M),function(){if(W===X)return ot;var i=s?--X:W++;return $&&$[i]}}function iterateNode(i,v,_){var $,W=i&&i.array,X=_>u?0:u-_>>v,Y=1+(m-_>>v);return Y>M&&(Y=M),function(){for(;;){if($){var i=$();if(i!==ot)return i;$=null}if(X===Y)return ot;var u=s?--Y:X++;$=iterateNodeOrLeaf(W&&W[u],v-j,_+(u<=i.size||s<0)return i.withMutations((function(i){s<0?setListBounds(i,s).set(0,u):setListBounds(i,0,s+1).set(s,u)}));s+=i._origin;var m=i._tail,v=i._root,_=MakeRef(Y);return s>=getTailOffset(i._capacity)?m=updateVNode(m,i.__ownerID,0,s,u,_):v=updateVNode(v,i.__ownerID,i._level,s,u,_),_.value?i.__ownerID?(i._root=v,i._tail=m,i.__hash=void 0,i.__altered=!0,i):makeList(i._origin,i._capacity,i._level,v,m):i}function updateVNode(i,s,u,m,v,_){var M,W=m>>>u&$,X=i&&W0){var Y=i&&i.array[W],Z=updateVNode(Y,s,u-j,m,v,_);return Z===Y?i:((M=editableVNode(i,s)).array[W]=Z,M)}return X&&i.array[W]===v?i:(SetRef(_),M=editableVNode(i,s),void 0===v&&W===M.array.length-1?M.array.pop():M.array[W]=v,M)}function editableVNode(i,s){return s&&i&&s===i.ownerID?i:new VNode(i?i.array.slice():[],s)}function listNodeFor(i,s){if(s>=getTailOffset(i._capacity))return i._tail;if(s<1<0;)u=u.array[s>>>m&$],m-=j;return u}}function setListBounds(i,s,u){void 0!==s&&(s|=0),void 0!==u&&(u|=0);var m=i.__ownerID||new OwnerID,v=i._origin,_=i._capacity,M=v+s,W=void 0===u?_:u<0?_+u:v+u;if(M===v&&W===_)return i;if(M>=W)return i.clear();for(var X=i._level,Y=i._root,Z=0;M+Z<0;)Y=new VNode(Y&&Y.array.length?[void 0,Y]:[],m),Z+=1<<(X+=j);Z&&(M+=Z,v+=Z,W+=Z,_+=Z);for(var ee=getTailOffset(_),ae=getTailOffset(W);ae>=1<ee?new VNode([],m):ie;if(ie&&ae>ee&&M<_&&ie.array.length){for(var ce=Y=editableVNode(Y,m),pe=X;pe>j;pe-=j){var de=ee>>>pe&$;ce=ce.array[de]=editableVNode(ce.array[de],m)}ce.array[ee>>>j&$]=ie}if(W<_&&(le=le&&le.removeAfter(m,0,W)),M>=ae)M-=ae,W-=ae,X=j,Y=null,le=le&&le.removeBefore(m,0,M);else if(M>v||ae>>X&$;if(fe!==ae>>>X&$)break;fe&&(Z+=(1<v&&(Y=Y.removeBefore(m,X,M-Z)),Y&&aev&&(v=M.size),isIterable(j)||(M=M.map((function(i){return fromJS(i)}))),m.push(M)}return v>i.size&&(i=i.setSize(v)),mergeIntoCollectionWith(i,s,m)}function getTailOffset(i){return i>>j<=M&&j.size>=2*_.size?(m=(v=j.filter((function(i,s){return void 0!==i&&$!==s}))).toKeyedSeq().map((function(i){return i[0]})).flip().toMap(),i.__ownerID&&(m.__ownerID=v.__ownerID=i.__ownerID)):(m=_.remove(s),v=$===j.size-1?j.pop():j.set($,void 0))}else if(X){if(u===j.get($)[1])return i;m=_,v=j.set($,[s,u])}else m=_.set(s,j.size),v=j.set(j.size,[s,u]);return i.__ownerID?(i.size=m.size,i._map=m,i._list=v,i.__hash=void 0,i):makeOrderedMap(m,v)}function ToKeyedSequence(i,s){this._iter=i,this._useKeys=s,this.size=i.size}function ToIndexedSequence(i){this._iter=i,this.size=i.size}function ToSetSequence(i){this._iter=i,this.size=i.size}function FromEntriesSequence(i){this._iter=i,this.size=i.size}function flipFactory(i){var s=makeSequence(i);return s._iter=i,s.size=i.size,s.flip=function(){return i},s.reverse=function(){var s=i.reverse.apply(this);return s.flip=function(){return i.reverse()},s},s.has=function(s){return i.includes(s)},s.includes=function(s){return i.has(s)},s.cacheResult=cacheResultThrough,s.__iterateUncached=function(s,u){var m=this;return i.__iterate((function(i,u){return!1!==s(u,i,m)}),u)},s.__iteratorUncached=function(s,u){if(s===ae){var m=i.__iterator(s,u);return new Iterator((function(){var i=m.next();if(!i.done){var s=i.value[0];i.value[0]=i.value[1],i.value[1]=s}return i}))}return i.__iterator(s===ee?Z:ee,u)},s}function mapFactory(i,s,u){var m=makeSequence(i);return m.size=i.size,m.has=function(s){return i.has(s)},m.get=function(m,v){var _=i.get(m,W);return _===W?v:s.call(u,_,m,i)},m.__iterateUncached=function(m,v){var _=this;return i.__iterate((function(i,v,j){return!1!==m(s.call(u,i,v,j),v,_)}),v)},m.__iteratorUncached=function(m,v){var _=i.__iterator(ae,v);return new Iterator((function(){var v=_.next();if(v.done)return v;var j=v.value,M=j[0];return iteratorValue(m,M,s.call(u,j[1],M,i),v)}))},m}function reverseFactory(i,s){var u=makeSequence(i);return u._iter=i,u.size=i.size,u.reverse=function(){return i},i.flip&&(u.flip=function(){var s=flipFactory(i);return s.reverse=function(){return i.flip()},s}),u.get=function(u,m){return i.get(s?u:-1-u,m)},u.has=function(u){return i.has(s?u:-1-u)},u.includes=function(s){return i.includes(s)},u.cacheResult=cacheResultThrough,u.__iterate=function(s,u){var m=this;return i.__iterate((function(i,u){return s(i,u,m)}),!u)},u.__iterator=function(s,u){return i.__iterator(s,!u)},u}function filterFactory(i,s,u,m){var v=makeSequence(i);return m&&(v.has=function(m){var v=i.get(m,W);return v!==W&&!!s.call(u,v,m,i)},v.get=function(m,v){var _=i.get(m,W);return _!==W&&s.call(u,_,m,i)?_:v}),v.__iterateUncached=function(v,_){var j=this,M=0;return i.__iterate((function(i,_,$){if(s.call(u,i,_,$))return M++,v(i,m?_:M-1,j)}),_),M},v.__iteratorUncached=function(v,_){var j=i.__iterator(ae,_),M=0;return new Iterator((function(){for(;;){var _=j.next();if(_.done)return _;var $=_.value,W=$[0],X=$[1];if(s.call(u,X,W,i))return iteratorValue(v,m?W:M++,X,_)}}))},v}function countByFactory(i,s,u){var m=Map().asMutable();return i.__iterate((function(v,_){m.update(s.call(u,v,_,i),0,(function(i){return i+1}))})),m.asImmutable()}function groupByFactory(i,s,u){var m=isKeyed(i),v=(isOrdered(i)?OrderedMap():Map()).asMutable();i.__iterate((function(_,j){v.update(s.call(u,_,j,i),(function(i){return(i=i||[]).push(m?[j,_]:_),i}))}));var _=iterableClass(i);return v.map((function(s){return reify(i,_(s))}))}function sliceFactory(i,s,u,m){var v=i.size;if(void 0!==s&&(s|=0),void 0!==u&&(u===1/0?u=v:u|=0),wholeSlice(s,u,v))return i;var _=resolveBegin(s,v),j=resolveEnd(u,v);if(_!=_||j!=j)return sliceFactory(i.toSeq().cacheResult(),s,u,m);var M,$=j-_;$==$&&(M=$<0?0:$);var W=makeSequence(i);return W.size=0===M?M:i.size&&M||void 0,!m&&isSeq(i)&&M>=0&&(W.get=function(s,u){return(s=wrapIndex(this,s))>=0&&sM)return iteratorDone();var i=v.next();return m||s===ee?i:iteratorValue(s,$-1,s===Z?void 0:i.value[1],i)}))},W}function takeWhileFactory(i,s,u){var m=makeSequence(i);return m.__iterateUncached=function(m,v){var _=this;if(v)return this.cacheResult().__iterate(m,v);var j=0;return i.__iterate((function(i,v,M){return s.call(u,i,v,M)&&++j&&m(i,v,_)})),j},m.__iteratorUncached=function(m,v){var _=this;if(v)return this.cacheResult().__iterator(m,v);var j=i.__iterator(ae,v),M=!0;return new Iterator((function(){if(!M)return iteratorDone();var i=j.next();if(i.done)return i;var v=i.value,$=v[0],W=v[1];return s.call(u,W,$,_)?m===ae?i:iteratorValue(m,$,W,i):(M=!1,iteratorDone())}))},m}function skipWhileFactory(i,s,u,m){var v=makeSequence(i);return v.__iterateUncached=function(v,_){var j=this;if(_)return this.cacheResult().__iterate(v,_);var M=!0,$=0;return i.__iterate((function(i,_,W){if(!M||!(M=s.call(u,i,_,W)))return $++,v(i,m?_:$-1,j)})),$},v.__iteratorUncached=function(v,_){var j=this;if(_)return this.cacheResult().__iterator(v,_);var M=i.__iterator(ae,_),$=!0,W=0;return new Iterator((function(){var i,_,X;do{if((i=M.next()).done)return m||v===ee?i:iteratorValue(v,W++,v===Z?void 0:i.value[1],i);var Y=i.value;_=Y[0],X=Y[1],$&&($=s.call(u,X,_,j))}while($);return v===ae?i:iteratorValue(v,_,X,i)}))},v}function concatFactory(i,s){var u=isKeyed(i),m=[i].concat(s).map((function(i){return isIterable(i)?u&&(i=KeyedIterable(i)):i=u?keyedSeqFromValue(i):indexedSeqFromValue(Array.isArray(i)?i:[i]),i})).filter((function(i){return 0!==i.size}));if(0===m.length)return i;if(1===m.length){var v=m[0];if(v===i||u&&isKeyed(v)||isIndexed(i)&&isIndexed(v))return v}var _=new ArraySeq(m);return u?_=_.toKeyedSeq():isIndexed(i)||(_=_.toSetSeq()),(_=_.flatten(!0)).size=m.reduce((function(i,s){if(void 0!==i){var u=s.size;if(void 0!==u)return i+u}}),0),_}function flattenFactory(i,s,u){var m=makeSequence(i);return m.__iterateUncached=function(m,v){var _=0,j=!1;function flatDeep(i,M){var $=this;i.__iterate((function(i,v){return(!s||M0}function zipWithFactory(i,s,u){var m=makeSequence(i);return m.size=new ArraySeq(u).map((function(i){return i.size})).min(),m.__iterate=function(i,s){for(var u,m=this.__iterator(ee,s),v=0;!(u=m.next()).done&&!1!==i(u.value,v++,this););return v},m.__iteratorUncached=function(i,m){var v=u.map((function(i){return i=Iterable(i),getIterator(m?i.reverse():i)})),_=0,j=!1;return new Iterator((function(){var u;return j||(u=v.map((function(i){return i.next()})),j=u.some((function(i){return i.done}))),j?iteratorDone():iteratorValue(i,_++,s.apply(null,u.map((function(i){return i.value}))))}))},m}function reify(i,s){return isSeq(i)?s:i.constructor(s)}function validateEntry(i){if(i!==Object(i))throw new TypeError("Expected [K, V] tuple: "+i)}function resolveSize(i){return assertNotInfinite(i.size),ensureSize(i)}function iterableClass(i){return isKeyed(i)?KeyedIterable:isIndexed(i)?IndexedIterable:SetIterable}function makeSequence(i){return Object.create((isKeyed(i)?KeyedSeq:isIndexed(i)?IndexedSeq:SetSeq).prototype)}function cacheResultThrough(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):Seq.prototype.cacheResult.call(this)}function defaultComparator(i,s){return i>s?1:i=0;u--)s={value:arguments[u],next:s};return this.__ownerID?(this.size=i,this._head=s,this.__hash=void 0,this.__altered=!0,this):makeStack(i,s)},Stack.prototype.pushAll=function(i){if(0===(i=IndexedIterable(i)).size)return this;assertNotInfinite(i.size);var s=this.size,u=this._head;return i.reverse().forEach((function(i){s++,u={value:i,next:u}})),this.__ownerID?(this.size=s,this._head=u,this.__hash=void 0,this.__altered=!0,this):makeStack(s,u)},Stack.prototype.pop=function(){return this.slice(1)},Stack.prototype.unshift=function(){return this.push.apply(this,arguments)},Stack.prototype.unshiftAll=function(i){return this.pushAll(i)},Stack.prototype.shift=function(){return this.pop.apply(this,arguments)},Stack.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):emptyStack()},Stack.prototype.slice=function(i,s){if(wholeSlice(i,s,this.size))return this;var u=resolveBegin(i,this.size);if(resolveEnd(s,this.size)!==this.size)return IndexedCollection.prototype.slice.call(this,i,s);for(var m=this.size-u,v=this._head;u--;)v=v.next;return this.__ownerID?(this.size=m,this._head=v,this.__hash=void 0,this.__altered=!0,this):makeStack(m,v)},Stack.prototype.__ensureOwner=function(i){return i===this.__ownerID?this:i?makeStack(this.size,this._head,i,this.__hash):(this.__ownerID=i,this.__altered=!1,this)},Stack.prototype.__iterate=function(i,s){if(s)return this.reverse().__iterate(i);for(var u=0,m=this._head;m&&!1!==i(m.value,u++,this);)m=m.next;return u},Stack.prototype.__iterator=function(i,s){if(s)return this.reverse().__iterator(i);var u=0,m=this._head;return new Iterator((function(){if(m){var s=m.value;return m=m.next,iteratorValue(i,u++,s)}return iteratorDone()}))},Stack.isStack=isStack;var pt,ht="@@__IMMUTABLE_STACK__@@",dt=Stack.prototype;function makeStack(i,s,u,m){var v=Object.create(dt);return v.size=i,v._head=s,v.__ownerID=u,v.__hash=m,v.__altered=!1,v}function emptyStack(){return pt||(pt=makeStack(0))}function mixin(i,s){var keyCopier=function(u){i.prototype[u]=s[u]};return Object.keys(s).forEach(keyCopier),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(s).forEach(keyCopier),i}dt[ht]=!0,dt.withMutations=He.withMutations,dt.asMutable=He.asMutable,dt.asImmutable=He.asImmutable,dt.wasAltered=He.wasAltered,Iterable.Iterator=Iterator,mixin(Iterable,{toArray:function(){assertNotInfinite(this.size);var i=new Array(this.size||0);return this.valueSeq().__iterate((function(s,u){i[u]=s})),i},toIndexedSeq:function(){return new ToIndexedSequence(this)},toJS:function(){return this.toSeq().map((function(i){return i&&"function"==typeof i.toJS?i.toJS():i})).__toJS()},toJSON:function(){return this.toSeq().map((function(i){return i&&"function"==typeof i.toJSON?i.toJSON():i})).__toJS()},toKeyedSeq:function(){return new ToKeyedSequence(this,!0)},toMap:function(){return Map(this.toKeyedSeq())},toObject:function(){assertNotInfinite(this.size);var i={};return this.__iterate((function(s,u){i[u]=s})),i},toOrderedMap:function(){return OrderedMap(this.toKeyedSeq())},toOrderedSet:function(){return OrderedSet(isKeyed(this)?this.valueSeq():this)},toSet:function(){return Set(isKeyed(this)?this.valueSeq():this)},toSetSeq:function(){return new ToSetSequence(this)},toSeq:function(){return isIndexed(this)?this.toIndexedSeq():isKeyed(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Stack(isKeyed(this)?this.valueSeq():this)},toList:function(){return List(isKeyed(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(i,s){return 0===this.size?i+s:i+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+s},concat:function(){return reify(this,concatFactory(this,i.call(arguments,0)))},includes:function(i){return this.some((function(s){return is(s,i)}))},entries:function(){return this.__iterator(ae)},every:function(i,s){assertNotInfinite(this.size);var u=!0;return this.__iterate((function(m,v,_){if(!i.call(s,m,v,_))return u=!1,!1})),u},filter:function(i,s){return reify(this,filterFactory(this,i,s,!0))},find:function(i,s,u){var m=this.findEntry(i,s);return m?m[1]:u},forEach:function(i,s){return assertNotInfinite(this.size),this.__iterate(s?i.bind(s):i)},join:function(i){assertNotInfinite(this.size),i=void 0!==i?""+i:",";var s="",u=!0;return this.__iterate((function(m){u?u=!1:s+=i,s+=null!=m?m.toString():""})),s},keys:function(){return this.__iterator(Z)},map:function(i,s){return reify(this,mapFactory(this,i,s))},reduce:function(i,s,u){var m,v;return assertNotInfinite(this.size),arguments.length<2?v=!0:m=s,this.__iterate((function(s,_,j){v?(v=!1,m=s):m=i.call(u,m,s,_,j)})),m},reduceRight:function(i,s,u){var m=this.toKeyedSeq().reverse();return m.reduce.apply(m,arguments)},reverse:function(){return reify(this,reverseFactory(this,!0))},slice:function(i,s){return reify(this,sliceFactory(this,i,s,!0))},some:function(i,s){return!this.every(not(i),s)},sort:function(i){return reify(this,sortFactory(this,i))},values:function(){return this.__iterator(ee)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(i,s){return ensureSize(i?this.toSeq().filter(i,s):this)},countBy:function(i,s){return countByFactory(this,i,s)},equals:function(i){return deepEqual(this,i)},entrySeq:function(){var i=this;if(i._cache)return new ArraySeq(i._cache);var s=i.toSeq().map(entryMapper).toIndexedSeq();return s.fromEntrySeq=function(){return i.toSeq()},s},filterNot:function(i,s){return this.filter(not(i),s)},findEntry:function(i,s,u){var m=u;return this.__iterate((function(u,v,_){if(i.call(s,u,v,_))return m=[v,u],!1})),m},findKey:function(i,s){var u=this.findEntry(i,s);return u&&u[0]},findLast:function(i,s,u){return this.toKeyedSeq().reverse().find(i,s,u)},findLastEntry:function(i,s,u){return this.toKeyedSeq().reverse().findEntry(i,s,u)},findLastKey:function(i,s){return this.toKeyedSeq().reverse().findKey(i,s)},first:function(){return this.find(returnTrue)},flatMap:function(i,s){return reify(this,flatMapFactory(this,i,s))},flatten:function(i){return reify(this,flattenFactory(this,i,!0))},fromEntrySeq:function(){return new FromEntriesSequence(this)},get:function(i,s){return this.find((function(s,u){return is(u,i)}),void 0,s)},getIn:function(i,s){for(var u,m=this,v=forceIterator(i);!(u=v.next()).done;){var _=u.value;if((m=m&&m.get?m.get(_,W):W)===W)return s}return m},groupBy:function(i,s){return groupByFactory(this,i,s)},has:function(i){return this.get(i,W)!==W},hasIn:function(i){return this.getIn(i,W)!==W},isSubset:function(i){return i="function"==typeof i.includes?i:Iterable(i),this.every((function(s){return i.includes(s)}))},isSuperset:function(i){return(i="function"==typeof i.isSubset?i:Iterable(i)).isSubset(this)},keyOf:function(i){return this.findKey((function(s){return is(s,i)}))},keySeq:function(){return this.toSeq().map(keyMapper).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(i){return this.toKeyedSeq().reverse().keyOf(i)},max:function(i){return maxFactory(this,i)},maxBy:function(i,s){return maxFactory(this,s,i)},min:function(i){return maxFactory(this,i?neg(i):defaultNegComparator)},minBy:function(i,s){return maxFactory(this,s?neg(s):defaultNegComparator,i)},rest:function(){return this.slice(1)},skip:function(i){return this.slice(Math.max(0,i))},skipLast:function(i){return reify(this,this.toSeq().reverse().skip(i).reverse())},skipWhile:function(i,s){return reify(this,skipWhileFactory(this,i,s,!0))},skipUntil:function(i,s){return this.skipWhile(not(i),s)},sortBy:function(i,s){return reify(this,sortFactory(this,s,i))},take:function(i){return this.slice(0,Math.max(0,i))},takeLast:function(i){return reify(this,this.toSeq().reverse().take(i).reverse())},takeWhile:function(i,s){return reify(this,takeWhileFactory(this,i,s))},takeUntil:function(i,s){return this.takeWhile(not(i),s)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=hashIterable(this))}});var mt=Iterable.prototype;mt[s]=!0,mt[ce]=mt.values,mt.__toJS=mt.toArray,mt.__toStringMapper=quoteString,mt.inspect=mt.toSource=function(){return this.toString()},mt.chain=mt.flatMap,mt.contains=mt.includes,mixin(KeyedIterable,{flip:function(){return reify(this,flipFactory(this))},mapEntries:function(i,s){var u=this,m=0;return reify(this,this.toSeq().map((function(v,_){return i.call(s,[_,v],m++,u)})).fromEntrySeq())},mapKeys:function(i,s){var u=this;return reify(this,this.toSeq().flip().map((function(m,v){return i.call(s,m,v,u)})).flip())}});var gt=KeyedIterable.prototype;function keyMapper(i,s){return s}function entryMapper(i,s){return[s,i]}function not(i){return function(){return!i.apply(this,arguments)}}function neg(i){return function(){return-i.apply(this,arguments)}}function quoteString(i){return"string"==typeof i?JSON.stringify(i):String(i)}function defaultZipper(){return arrCopy(arguments)}function defaultNegComparator(i,s){return is?-1:0}function hashIterable(i){if(i.size===1/0)return 0;var s=isOrdered(i),u=isKeyed(i),m=s?1:0;return murmurHashOfSize(i.__iterate(u?s?function(i,s){m=31*m+hashMerge(hash(i),hash(s))|0}:function(i,s){m=m+hashMerge(hash(i),hash(s))|0}:s?function(i){m=31*m+hash(i)|0}:function(i){m=m+hash(i)|0}),m)}function murmurHashOfSize(i,s){return s=be(s,3432918353),s=be(s<<15|s>>>-15,461845907),s=be(s<<13|s>>>-13,5),s=be((s=(s+3864292196|0)^i)^s>>>16,2246822507),s=smi((s=be(s^s>>>13,3266489909))^s>>>16)}function hashMerge(i,s){return i^s+2654435769+(i<<6)+(i>>2)|0}return gt[u]=!0,gt[ce]=mt.entries,gt.__toJS=mt.toObject,gt.__toStringMapper=function(i,s){return JSON.stringify(s)+": "+quoteString(i)},mixin(IndexedIterable,{toKeyedSeq:function(){return new ToKeyedSequence(this,!1)},filter:function(i,s){return reify(this,filterFactory(this,i,s,!1))},findIndex:function(i,s){var u=this.findEntry(i,s);return u?u[0]:-1},indexOf:function(i){var s=this.keyOf(i);return void 0===s?-1:s},lastIndexOf:function(i){var s=this.lastKeyOf(i);return void 0===s?-1:s},reverse:function(){return reify(this,reverseFactory(this,!1))},slice:function(i,s){return reify(this,sliceFactory(this,i,s,!1))},splice:function(i,s){var u=arguments.length;if(s=Math.max(0|s,0),0===u||2===u&&!s)return this;i=resolveBegin(i,i<0?this.count():this.size);var m=this.slice(0,i);return reify(this,1===u?m:m.concat(arrCopy(arguments,2),this.slice(i+s)))},findLastIndex:function(i,s){var u=this.findLastEntry(i,s);return u?u[0]:-1},first:function(){return this.get(0)},flatten:function(i){return reify(this,flattenFactory(this,i,!1))},get:function(i,s){return(i=wrapIndex(this,i))<0||this.size===1/0||void 0!==this.size&&i>this.size?s:this.find((function(s,u){return u===i}),void 0,s)},has:function(i){return(i=wrapIndex(this,i))>=0&&(void 0!==this.size?this.size===1/0||i{"function"==typeof Object.create?i.exports=function inherits(i,s){s&&(i.super_=s,i.prototype=Object.create(s.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}))}:i.exports=function inherits(i,s){if(s){i.super_=s;var TempCtor=function(){};TempCtor.prototype=s.prototype,i.prototype=new TempCtor,i.prototype.constructor=i}}},35823:i=>{i.exports=function(i,s,u,m){var v=new Blob(void 0!==m?[m,i]:[i],{type:u||"application/octet-stream"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(v,s);else{var _=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(v):window.webkitURL.createObjectURL(v),j=document.createElement("a");j.style.display="none",j.href=_,j.setAttribute("download",s),void 0===j.download&&j.setAttribute("target","_blank"),document.body.appendChild(j),j.click(),setTimeout((function(){document.body.removeChild(j),window.URL.revokeObjectURL(_)}),200)}}},91296:(i,s,u)=>{var m=NaN,v="[object Symbol]",_=/^\s+|\s+$/g,j=/^[-+]0x[0-9a-f]+$/i,M=/^0b[01]+$/i,$=/^0o[0-7]+$/i,W=parseInt,X="object"==typeof u.g&&u.g&&u.g.Object===Object&&u.g,Y="object"==typeof self&&self&&self.Object===Object&&self,Z=X||Y||Function("return this")(),ee=Object.prototype.toString,ae=Math.max,ie=Math.min,now=function(){return Z.Date.now()};function isObject(i){var s=typeof i;return!!i&&("object"==s||"function"==s)}function toNumber(i){if("number"==typeof i)return i;if(function isSymbol(i){return"symbol"==typeof i||function isObjectLike(i){return!!i&&"object"==typeof i}(i)&&ee.call(i)==v}(i))return m;if(isObject(i)){var s="function"==typeof i.valueOf?i.valueOf():i;i=isObject(s)?s+"":s}if("string"!=typeof i)return 0===i?i:+i;i=i.replace(_,"");var u=M.test(i);return u||$.test(i)?W(i.slice(2),u?2:8):j.test(i)?m:+i}i.exports=function debounce(i,s,u){var m,v,_,j,M,$,W=0,X=!1,Y=!1,Z=!0;if("function"!=typeof i)throw new TypeError("Expected a function");function invokeFunc(s){var u=m,_=v;return m=v=void 0,W=s,j=i.apply(_,u)}function shouldInvoke(i){var u=i-$;return void 0===$||u>=s||u<0||Y&&i-W>=_}function timerExpired(){var i=now();if(shouldInvoke(i))return trailingEdge(i);M=setTimeout(timerExpired,function remainingWait(i){var u=s-(i-$);return Y?ie(u,_-(i-W)):u}(i))}function trailingEdge(i){return M=void 0,Z&&m?invokeFunc(i):(m=v=void 0,j)}function debounced(){var i=now(),u=shouldInvoke(i);if(m=arguments,v=this,$=i,u){if(void 0===M)return function leadingEdge(i){return W=i,M=setTimeout(timerExpired,s),X?invokeFunc(i):j}($);if(Y)return M=setTimeout(timerExpired,s),invokeFunc($)}return void 0===M&&(M=setTimeout(timerExpired,s)),j}return s=toNumber(s)||0,isObject(u)&&(X=!!u.leading,_=(Y="maxWait"in u)?ae(toNumber(u.maxWait)||0,s):_,Z="trailing"in u?!!u.trailing:Z),debounced.cancel=function cancel(){void 0!==M&&clearTimeout(M),W=0,m=$=v=M=void 0},debounced.flush=function flush(){return void 0===M?j:trailingEdge(now())},debounced}},18552:(i,s,u)=>{var m=u(10852)(u(55639),"DataView");i.exports=m},1989:(i,s,u)=>{var m=u(51789),v=u(80401),_=u(57667),j=u(21327),M=u(81866);function Hash(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(3118),v=u(9435);function LazyWrapper(i){this.__wrapped__=i,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}LazyWrapper.prototype=m(v.prototype),LazyWrapper.prototype.constructor=LazyWrapper,i.exports=LazyWrapper},38407:(i,s,u)=>{var m=u(27040),v=u(14125),_=u(82117),j=u(67518),M=u(54705);function ListCache(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(3118),v=u(9435);function LodashWrapper(i,s){this.__wrapped__=i,this.__actions__=[],this.__chain__=!!s,this.__index__=0,this.__values__=void 0}LodashWrapper.prototype=m(v.prototype),LodashWrapper.prototype.constructor=LodashWrapper,i.exports=LodashWrapper},57071:(i,s,u)=>{var m=u(10852)(u(55639),"Map");i.exports=m},83369:(i,s,u)=>{var m=u(24785),v=u(11285),_=u(96e3),j=u(49916),M=u(95265);function MapCache(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(10852)(u(55639),"Promise");i.exports=m},58525:(i,s,u)=>{var m=u(10852)(u(55639),"Set");i.exports=m},88668:(i,s,u)=>{var m=u(83369),v=u(90619),_=u(72385);function SetCache(i){var s=-1,u=null==i?0:i.length;for(this.__data__=new m;++s{var m=u(38407),v=u(37465),_=u(63779),j=u(67599),M=u(44758),$=u(34309);function Stack(i){var s=this.__data__=new m(i);this.size=s.size}Stack.prototype.clear=v,Stack.prototype.delete=_,Stack.prototype.get=j,Stack.prototype.has=M,Stack.prototype.set=$,i.exports=Stack},62705:(i,s,u)=>{var m=u(55639).Symbol;i.exports=m},11149:(i,s,u)=>{var m=u(55639).Uint8Array;i.exports=m},70577:(i,s,u)=>{var m=u(10852)(u(55639),"WeakMap");i.exports=m},96874:i=>{i.exports=function apply(i,s,u){switch(u.length){case 0:return i.call(s);case 1:return i.call(s,u[0]);case 2:return i.call(s,u[0],u[1]);case 3:return i.call(s,u[0],u[1],u[2])}return i.apply(s,u)}},77412:i=>{i.exports=function arrayEach(i,s){for(var u=-1,m=null==i?0:i.length;++u{i.exports=function arrayFilter(i,s){for(var u=-1,m=null==i?0:i.length,v=0,_=[];++u{var m=u(42118);i.exports=function arrayIncludes(i,s){return!!(null==i?0:i.length)&&m(i,s,0)>-1}},14636:(i,s,u)=>{var m=u(22545),v=u(35694),_=u(1469),j=u(44144),M=u(65776),$=u(36719),W=Object.prototype.hasOwnProperty;i.exports=function arrayLikeKeys(i,s){var u=_(i),X=!u&&v(i),Y=!u&&!X&&j(i),Z=!u&&!X&&!Y&&$(i),ee=u||X||Y||Z,ae=ee?m(i.length,String):[],ie=ae.length;for(var le in i)!s&&!W.call(i,le)||ee&&("length"==le||Y&&("offset"==le||"parent"==le)||Z&&("buffer"==le||"byteLength"==le||"byteOffset"==le)||M(le,ie))||ae.push(le);return ae}},29932:i=>{i.exports=function arrayMap(i,s){for(var u=-1,m=null==i?0:i.length,v=Array(m);++u{i.exports=function arrayPush(i,s){for(var u=-1,m=s.length,v=i.length;++u{i.exports=function arrayReduce(i,s,u,m){var v=-1,_=null==i?0:i.length;for(m&&_&&(u=i[++v]);++v<_;)u=s(u,i[v],v,i);return u}},82908:i=>{i.exports=function arraySome(i,s){for(var u=-1,m=null==i?0:i.length;++u{i.exports=function asciiToArray(i){return i.split("")}},49029:i=>{var s=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;i.exports=function asciiWords(i){return i.match(s)||[]}},86556:(i,s,u)=>{var m=u(89465),v=u(77813);i.exports=function assignMergeValue(i,s,u){(void 0!==u&&!v(i[s],u)||void 0===u&&!(s in i))&&m(i,s,u)}},34865:(i,s,u)=>{var m=u(89465),v=u(77813),_=Object.prototype.hasOwnProperty;i.exports=function assignValue(i,s,u){var j=i[s];_.call(i,s)&&v(j,u)&&(void 0!==u||s in i)||m(i,s,u)}},18470:(i,s,u)=>{var m=u(77813);i.exports=function assocIndexOf(i,s){for(var u=i.length;u--;)if(m(i[u][0],s))return u;return-1}},44037:(i,s,u)=>{var m=u(98363),v=u(3674);i.exports=function baseAssign(i,s){return i&&m(s,v(s),i)}},63886:(i,s,u)=>{var m=u(98363),v=u(81704);i.exports=function baseAssignIn(i,s){return i&&m(s,v(s),i)}},89465:(i,s,u)=>{var m=u(38777);i.exports=function baseAssignValue(i,s,u){"__proto__"==s&&m?m(i,s,{configurable:!0,enumerable:!0,value:u,writable:!0}):i[s]=u}},85990:(i,s,u)=>{var m=u(46384),v=u(77412),_=u(34865),j=u(44037),M=u(63886),$=u(64626),W=u(278),X=u(18805),Y=u(1911),Z=u(58234),ee=u(46904),ae=u(64160),ie=u(43824),le=u(29148),ce=u(38517),pe=u(1469),de=u(44144),fe=u(56688),ye=u(13218),be=u(72928),_e=u(3674),we=u(81704),Se="[object Arguments]",xe="[object Function]",Pe="[object Object]",Ie={};Ie[Se]=Ie["[object Array]"]=Ie["[object ArrayBuffer]"]=Ie["[object DataView]"]=Ie["[object Boolean]"]=Ie["[object Date]"]=Ie["[object Float32Array]"]=Ie["[object Float64Array]"]=Ie["[object Int8Array]"]=Ie["[object Int16Array]"]=Ie["[object Int32Array]"]=Ie["[object Map]"]=Ie["[object Number]"]=Ie[Pe]=Ie["[object RegExp]"]=Ie["[object Set]"]=Ie["[object String]"]=Ie["[object Symbol]"]=Ie["[object Uint8Array]"]=Ie["[object Uint8ClampedArray]"]=Ie["[object Uint16Array]"]=Ie["[object Uint32Array]"]=!0,Ie["[object Error]"]=Ie[xe]=Ie["[object WeakMap]"]=!1,i.exports=function baseClone(i,s,u,Te,Re,qe){var ze,Ve=1&s,We=2&s,He=4&s;if(u&&(ze=Re?u(i,Te,Re,qe):u(i)),void 0!==ze)return ze;if(!ye(i))return i;var Xe=pe(i);if(Xe){if(ze=ie(i),!Ve)return W(i,ze)}else{var Ye=ae(i),Qe=Ye==xe||"[object GeneratorFunction]"==Ye;if(de(i))return $(i,Ve);if(Ye==Pe||Ye==Se||Qe&&!Re){if(ze=We||Qe?{}:ce(i),!Ve)return We?Y(i,M(ze,i)):X(i,j(ze,i))}else{if(!Ie[Ye])return Re?i:{};ze=le(i,Ye,Ve)}}qe||(qe=new m);var et=qe.get(i);if(et)return et;qe.set(i,ze),be(i)?i.forEach((function(m){ze.add(baseClone(m,s,u,m,i,qe))})):fe(i)&&i.forEach((function(m,v){ze.set(v,baseClone(m,s,u,v,i,qe))}));var tt=Xe?void 0:(He?We?ee:Z:We?we:_e)(i);return v(tt||i,(function(m,v){tt&&(m=i[v=m]),_(ze,v,baseClone(m,s,u,v,i,qe))})),ze}},3118:(i,s,u)=>{var m=u(13218),v=Object.create,_=function(){function object(){}return function(i){if(!m(i))return{};if(v)return v(i);object.prototype=i;var s=new object;return object.prototype=void 0,s}}();i.exports=_},89881:(i,s,u)=>{var m=u(47816),v=u(99291)(m);i.exports=v},41848:i=>{i.exports=function baseFindIndex(i,s,u,m){for(var v=i.length,_=u+(m?1:-1);m?_--:++_{var m=u(62488),v=u(37285);i.exports=function baseFlatten(i,s,u,_,j){var M=-1,$=i.length;for(u||(u=v),j||(j=[]);++M<$;){var W=i[M];s>0&&u(W)?s>1?baseFlatten(W,s-1,u,_,j):m(j,W):_||(j[j.length]=W)}return j}},28483:(i,s,u)=>{var m=u(25063)();i.exports=m},47816:(i,s,u)=>{var m=u(28483),v=u(3674);i.exports=function baseForOwn(i,s){return i&&m(i,s,v)}},97786:(i,s,u)=>{var m=u(71811),v=u(40327);i.exports=function baseGet(i,s){for(var u=0,_=(s=m(s,i)).length;null!=i&&u<_;)i=i[v(s[u++])];return u&&u==_?i:void 0}},68866:(i,s,u)=>{var m=u(62488),v=u(1469);i.exports=function baseGetAllKeys(i,s,u){var _=s(i);return v(i)?_:m(_,u(i))}},44239:(i,s,u)=>{var m=u(62705),v=u(89607),_=u(2333),j=m?m.toStringTag:void 0;i.exports=function baseGetTag(i){return null==i?void 0===i?"[object Undefined]":"[object Null]":j&&j in Object(i)?v(i):_(i)}},13:i=>{i.exports=function baseHasIn(i,s){return null!=i&&s in Object(i)}},42118:(i,s,u)=>{var m=u(41848),v=u(62722),_=u(42351);i.exports=function baseIndexOf(i,s,u){return s==s?_(i,s,u):m(i,v,u)}},9454:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function baseIsArguments(i){return v(i)&&"[object Arguments]"==m(i)}},90939:(i,s,u)=>{var m=u(2492),v=u(37005);i.exports=function baseIsEqual(i,s,u,_,j){return i===s||(null==i||null==s||!v(i)&&!v(s)?i!=i&&s!=s:m(i,s,u,_,baseIsEqual,j))}},2492:(i,s,u)=>{var m=u(46384),v=u(67114),_=u(18351),j=u(16096),M=u(64160),$=u(1469),W=u(44144),X=u(36719),Y="[object Arguments]",Z="[object Array]",ee="[object Object]",ae=Object.prototype.hasOwnProperty;i.exports=function baseIsEqualDeep(i,s,u,ie,le,ce){var pe=$(i),de=$(s),fe=pe?Z:M(i),ye=de?Z:M(s),be=(fe=fe==Y?ee:fe)==ee,_e=(ye=ye==Y?ee:ye)==ee,we=fe==ye;if(we&&W(i)){if(!W(s))return!1;pe=!0,be=!1}if(we&&!be)return ce||(ce=new m),pe||X(i)?v(i,s,u,ie,le,ce):_(i,s,fe,u,ie,le,ce);if(!(1&u)){var Se=be&&ae.call(i,"__wrapped__"),xe=_e&&ae.call(s,"__wrapped__");if(Se||xe){var Pe=Se?i.value():i,Ie=xe?s.value():s;return ce||(ce=new m),le(Pe,Ie,u,ie,ce)}}return!!we&&(ce||(ce=new m),j(i,s,u,ie,le,ce))}},25588:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function baseIsMap(i){return v(i)&&"[object Map]"==m(i)}},2958:(i,s,u)=>{var m=u(46384),v=u(90939);i.exports=function baseIsMatch(i,s,u,_){var j=u.length,M=j,$=!_;if(null==i)return!M;for(i=Object(i);j--;){var W=u[j];if($&&W[2]?W[1]!==i[W[0]]:!(W[0]in i))return!1}for(;++j{i.exports=function baseIsNaN(i){return i!=i}},28458:(i,s,u)=>{var m=u(23560),v=u(15346),_=u(13218),j=u(80346),M=/^\[object .+?Constructor\]$/,$=Function.prototype,W=Object.prototype,X=$.toString,Y=W.hasOwnProperty,Z=RegExp("^"+X.call(Y).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");i.exports=function baseIsNative(i){return!(!_(i)||v(i))&&(m(i)?Z:M).test(j(i))}},29221:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function baseIsSet(i){return v(i)&&"[object Set]"==m(i)}},38749:(i,s,u)=>{var m=u(44239),v=u(41780),_=u(37005),j={};j["[object Float32Array]"]=j["[object Float64Array]"]=j["[object Int8Array]"]=j["[object Int16Array]"]=j["[object Int32Array]"]=j["[object Uint8Array]"]=j["[object Uint8ClampedArray]"]=j["[object Uint16Array]"]=j["[object Uint32Array]"]=!0,j["[object Arguments]"]=j["[object Array]"]=j["[object ArrayBuffer]"]=j["[object Boolean]"]=j["[object DataView]"]=j["[object Date]"]=j["[object Error]"]=j["[object Function]"]=j["[object Map]"]=j["[object Number]"]=j["[object Object]"]=j["[object RegExp]"]=j["[object Set]"]=j["[object String]"]=j["[object WeakMap]"]=!1,i.exports=function baseIsTypedArray(i){return _(i)&&v(i.length)&&!!j[m(i)]}},67206:(i,s,u)=>{var m=u(91573),v=u(16432),_=u(6557),j=u(1469),M=u(39601);i.exports=function baseIteratee(i){return"function"==typeof i?i:null==i?_:"object"==typeof i?j(i)?v(i[0],i[1]):m(i):M(i)}},280:(i,s,u)=>{var m=u(25726),v=u(86916),_=Object.prototype.hasOwnProperty;i.exports=function baseKeys(i){if(!m(i))return v(i);var s=[];for(var u in Object(i))_.call(i,u)&&"constructor"!=u&&s.push(u);return s}},10313:(i,s,u)=>{var m=u(13218),v=u(25726),_=u(33498),j=Object.prototype.hasOwnProperty;i.exports=function baseKeysIn(i){if(!m(i))return _(i);var s=v(i),u=[];for(var M in i)("constructor"!=M||!s&&j.call(i,M))&&u.push(M);return u}},9435:i=>{i.exports=function baseLodash(){}},91573:(i,s,u)=>{var m=u(2958),v=u(1499),_=u(42634);i.exports=function baseMatches(i){var s=v(i);return 1==s.length&&s[0][2]?_(s[0][0],s[0][1]):function(u){return u===i||m(u,i,s)}}},16432:(i,s,u)=>{var m=u(90939),v=u(27361),_=u(79095),j=u(15403),M=u(89162),$=u(42634),W=u(40327);i.exports=function baseMatchesProperty(i,s){return j(i)&&M(s)?$(W(i),s):function(u){var j=v(u,i);return void 0===j&&j===s?_(u,i):m(s,j,3)}}},42980:(i,s,u)=>{var m=u(46384),v=u(86556),_=u(28483),j=u(59783),M=u(13218),$=u(81704),W=u(36390);i.exports=function baseMerge(i,s,u,X,Y){i!==s&&_(s,(function(_,$){if(Y||(Y=new m),M(_))j(i,s,$,u,baseMerge,X,Y);else{var Z=X?X(W(i,$),_,$+"",i,s,Y):void 0;void 0===Z&&(Z=_),v(i,$,Z)}}),$)}},59783:(i,s,u)=>{var m=u(86556),v=u(64626),_=u(77133),j=u(278),M=u(38517),$=u(35694),W=u(1469),X=u(29246),Y=u(44144),Z=u(23560),ee=u(13218),ae=u(68630),ie=u(36719),le=u(36390),ce=u(59881);i.exports=function baseMergeDeep(i,s,u,pe,de,fe,ye){var be=le(i,u),_e=le(s,u),we=ye.get(_e);if(we)m(i,u,we);else{var Se=fe?fe(be,_e,u+"",i,s,ye):void 0,xe=void 0===Se;if(xe){var Pe=W(_e),Ie=!Pe&&Y(_e),Te=!Pe&&!Ie&&ie(_e);Se=_e,Pe||Ie||Te?W(be)?Se=be:X(be)?Se=j(be):Ie?(xe=!1,Se=v(_e,!0)):Te?(xe=!1,Se=_(_e,!0)):Se=[]:ae(_e)||$(_e)?(Se=be,$(be)?Se=ce(be):ee(be)&&!Z(be)||(Se=M(_e))):xe=!1}xe&&(ye.set(_e,Se),de(Se,_e,pe,fe,ye),ye.delete(_e)),m(i,u,Se)}}},40371:i=>{i.exports=function baseProperty(i){return function(s){return null==s?void 0:s[i]}}},79152:(i,s,u)=>{var m=u(97786);i.exports=function basePropertyDeep(i){return function(s){return m(s,i)}}},18674:i=>{i.exports=function basePropertyOf(i){return function(s){return null==i?void 0:i[s]}}},10107:i=>{i.exports=function baseReduce(i,s,u,m,v){return v(i,(function(i,v,_){u=m?(m=!1,i):s(u,i,v,_)})),u}},5976:(i,s,u)=>{var m=u(6557),v=u(45357),_=u(30061);i.exports=function baseRest(i,s){return _(v(i,s,m),i+"")}},10611:(i,s,u)=>{var m=u(34865),v=u(71811),_=u(65776),j=u(13218),M=u(40327);i.exports=function baseSet(i,s,u,$){if(!j(i))return i;for(var W=-1,X=(s=v(s,i)).length,Y=X-1,Z=i;null!=Z&&++W{var m=u(6557),v=u(89250),_=v?function(i,s){return v.set(i,s),i}:m;i.exports=_},56560:(i,s,u)=>{var m=u(75703),v=u(38777),_=u(6557),j=v?function(i,s){return v(i,"toString",{configurable:!0,enumerable:!1,value:m(s),writable:!0})}:_;i.exports=j},14259:i=>{i.exports=function baseSlice(i,s,u){var m=-1,v=i.length;s<0&&(s=-s>v?0:v+s),(u=u>v?v:u)<0&&(u+=v),v=s>u?0:u-s>>>0,s>>>=0;for(var _=Array(v);++m{var m=u(89881);i.exports=function baseSome(i,s){var u;return m(i,(function(i,m,v){return!(u=s(i,m,v))})),!!u}},22545:i=>{i.exports=function baseTimes(i,s){for(var u=-1,m=Array(i);++u{var m=u(62705),v=u(29932),_=u(1469),j=u(33448),M=m?m.prototype:void 0,$=M?M.toString:void 0;i.exports=function baseToString(i){if("string"==typeof i)return i;if(_(i))return v(i,baseToString)+"";if(j(i))return $?$.call(i):"";var s=i+"";return"0"==s&&1/i==-Infinity?"-0":s}},27561:(i,s,u)=>{var m=u(67990),v=/^\s+/;i.exports=function baseTrim(i){return i?i.slice(0,m(i)+1).replace(v,""):i}},7518:i=>{i.exports=function baseUnary(i){return function(s){return i(s)}}},57406:(i,s,u)=>{var m=u(71811),v=u(10928),_=u(40292),j=u(40327);i.exports=function baseUnset(i,s){return s=m(s,i),null==(i=_(i,s))||delete i[j(v(s))]}},1757:i=>{i.exports=function baseZipObject(i,s,u){for(var m=-1,v=i.length,_=s.length,j={};++m{i.exports=function cacheHas(i,s){return i.has(s)}},71811:(i,s,u)=>{var m=u(1469),v=u(15403),_=u(55514),j=u(79833);i.exports=function castPath(i,s){return m(i)?i:v(i,s)?[i]:_(j(i))}},40180:(i,s,u)=>{var m=u(14259);i.exports=function castSlice(i,s,u){var v=i.length;return u=void 0===u?v:u,!s&&u>=v?i:m(i,s,u)}},74318:(i,s,u)=>{var m=u(11149);i.exports=function cloneArrayBuffer(i){var s=new i.constructor(i.byteLength);return new m(s).set(new m(i)),s}},64626:(i,s,u)=>{i=u.nmd(i);var m=u(55639),v=s&&!s.nodeType&&s,_=v&&i&&!i.nodeType&&i,j=_&&_.exports===v?m.Buffer:void 0,M=j?j.allocUnsafe:void 0;i.exports=function cloneBuffer(i,s){if(s)return i.slice();var u=i.length,m=M?M(u):new i.constructor(u);return i.copy(m),m}},57157:(i,s,u)=>{var m=u(74318);i.exports=function cloneDataView(i,s){var u=s?m(i.buffer):i.buffer;return new i.constructor(u,i.byteOffset,i.byteLength)}},93147:i=>{var s=/\w*$/;i.exports=function cloneRegExp(i){var u=new i.constructor(i.source,s.exec(i));return u.lastIndex=i.lastIndex,u}},40419:(i,s,u)=>{var m=u(62705),v=m?m.prototype:void 0,_=v?v.valueOf:void 0;i.exports=function cloneSymbol(i){return _?Object(_.call(i)):{}}},77133:(i,s,u)=>{var m=u(74318);i.exports=function cloneTypedArray(i,s){var u=s?m(i.buffer):i.buffer;return new i.constructor(u,i.byteOffset,i.length)}},52157:i=>{var s=Math.max;i.exports=function composeArgs(i,u,m,v){for(var _=-1,j=i.length,M=m.length,$=-1,W=u.length,X=s(j-M,0),Y=Array(W+X),Z=!v;++${var s=Math.max;i.exports=function composeArgsRight(i,u,m,v){for(var _=-1,j=i.length,M=-1,$=m.length,W=-1,X=u.length,Y=s(j-$,0),Z=Array(Y+X),ee=!v;++_{i.exports=function copyArray(i,s){var u=-1,m=i.length;for(s||(s=Array(m));++u{var m=u(34865),v=u(89465);i.exports=function copyObject(i,s,u,_){var j=!u;u||(u={});for(var M=-1,$=s.length;++M<$;){var W=s[M],X=_?_(u[W],i[W],W,u,i):void 0;void 0===X&&(X=i[W]),j?v(u,W,X):m(u,W,X)}return u}},18805:(i,s,u)=>{var m=u(98363),v=u(99551);i.exports=function copySymbols(i,s){return m(i,v(i),s)}},1911:(i,s,u)=>{var m=u(98363),v=u(51442);i.exports=function copySymbolsIn(i,s){return m(i,v(i),s)}},14429:(i,s,u)=>{var m=u(55639)["__core-js_shared__"];i.exports=m},97991:i=>{i.exports=function countHolders(i,s){for(var u=i.length,m=0;u--;)i[u]===s&&++m;return m}},21463:(i,s,u)=>{var m=u(5976),v=u(16612);i.exports=function createAssigner(i){return m((function(s,u){var m=-1,_=u.length,j=_>1?u[_-1]:void 0,M=_>2?u[2]:void 0;for(j=i.length>3&&"function"==typeof j?(_--,j):void 0,M&&v(u[0],u[1],M)&&(j=_<3?void 0:j,_=1),s=Object(s);++m<_;){var $=u[m];$&&i(s,$,m,j)}return s}))}},99291:(i,s,u)=>{var m=u(98612);i.exports=function createBaseEach(i,s){return function(u,v){if(null==u)return u;if(!m(u))return i(u,v);for(var _=u.length,j=s?_:-1,M=Object(u);(s?j--:++j<_)&&!1!==v(M[j],j,M););return u}}},25063:i=>{i.exports=function createBaseFor(i){return function(s,u,m){for(var v=-1,_=Object(s),j=m(s),M=j.length;M--;){var $=j[i?M:++v];if(!1===u(_[$],$,_))break}return s}}},22402:(i,s,u)=>{var m=u(71774),v=u(55639);i.exports=function createBind(i,s,u){var _=1&s,j=m(i);return function wrapper(){return(this&&this!==v&&this instanceof wrapper?j:i).apply(_?u:this,arguments)}}},98805:(i,s,u)=>{var m=u(40180),v=u(62689),_=u(83140),j=u(79833);i.exports=function createCaseFirst(i){return function(s){s=j(s);var u=v(s)?_(s):void 0,M=u?u[0]:s.charAt(0),$=u?m(u,1).join(""):s.slice(1);return M[i]()+$}}},35393:(i,s,u)=>{var m=u(62663),v=u(53816),_=u(58748),j=RegExp("['’]","g");i.exports=function createCompounder(i){return function(s){return m(_(v(s).replace(j,"")),i,"")}}},71774:(i,s,u)=>{var m=u(3118),v=u(13218);i.exports=function createCtor(i){return function(){var s=arguments;switch(s.length){case 0:return new i;case 1:return new i(s[0]);case 2:return new i(s[0],s[1]);case 3:return new i(s[0],s[1],s[2]);case 4:return new i(s[0],s[1],s[2],s[3]);case 5:return new i(s[0],s[1],s[2],s[3],s[4]);case 6:return new i(s[0],s[1],s[2],s[3],s[4],s[5]);case 7:return new i(s[0],s[1],s[2],s[3],s[4],s[5],s[6])}var u=m(i.prototype),_=i.apply(u,s);return v(_)?_:u}}},46347:(i,s,u)=>{var m=u(96874),v=u(71774),_=u(86935),j=u(94487),M=u(20893),$=u(46460),W=u(55639);i.exports=function createCurry(i,s,u){var X=v(i);return function wrapper(){for(var v=arguments.length,Y=Array(v),Z=v,ee=M(wrapper);Z--;)Y[Z]=arguments[Z];var ae=v<3&&Y[0]!==ee&&Y[v-1]!==ee?[]:$(Y,ee);return(v-=ae.length){var m=u(67206),v=u(98612),_=u(3674);i.exports=function createFind(i){return function(s,u,j){var M=Object(s);if(!v(s)){var $=m(u,3);s=_(s),u=function(i){return $(M[i],i,M)}}var W=i(s,u,j);return W>-1?M[$?s[W]:W]:void 0}}},86935:(i,s,u)=>{var m=u(52157),v=u(14054),_=u(97991),j=u(71774),M=u(94487),$=u(20893),W=u(90451),X=u(46460),Y=u(55639);i.exports=function createHybrid(i,s,u,Z,ee,ae,ie,le,ce,pe){var de=128&s,fe=1&s,ye=2&s,be=24&s,_e=512&s,we=ye?void 0:j(i);return function wrapper(){for(var Se=arguments.length,xe=Array(Se),Pe=Se;Pe--;)xe[Pe]=arguments[Pe];if(be)var Ie=$(wrapper),Te=_(xe,Ie);if(Z&&(xe=m(xe,Z,ee,be)),ae&&(xe=v(xe,ae,ie,be)),Se-=Te,be&&Se1&&xe.reverse(),de&&ce{var m=u(96874),v=u(71774),_=u(55639);i.exports=function createPartial(i,s,u,j){var M=1&s,$=v(i);return function wrapper(){for(var s=-1,v=arguments.length,W=-1,X=j.length,Y=Array(X+v),Z=this&&this!==_&&this instanceof wrapper?$:i;++W{var m=u(86528),v=u(258),_=u(69255);i.exports=function createRecurry(i,s,u,j,M,$,W,X,Y,Z){var ee=8&s;s|=ee?32:64,4&(s&=~(ee?64:32))||(s&=-4);var ae=[i,s,M,ee?$:void 0,ee?W:void 0,ee?void 0:$,ee?void 0:W,X,Y,Z],ie=u.apply(void 0,ae);return m(i)&&v(ie,ae),ie.placeholder=j,_(ie,i,s)}},97727:(i,s,u)=>{var m=u(28045),v=u(22402),_=u(46347),j=u(86935),M=u(84375),$=u(66833),W=u(63833),X=u(258),Y=u(69255),Z=u(40554),ee=Math.max;i.exports=function createWrap(i,s,u,ae,ie,le,ce,pe){var de=2&s;if(!de&&"function"!=typeof i)throw new TypeError("Expected a function");var fe=ae?ae.length:0;if(fe||(s&=-97,ae=ie=void 0),ce=void 0===ce?ce:ee(Z(ce),0),pe=void 0===pe?pe:Z(pe),fe-=ie?ie.length:0,64&s){var ye=ae,be=ie;ae=ie=void 0}var _e=de?void 0:$(i),we=[i,s,u,ae,ie,ye,be,le,ce,pe];if(_e&&W(we,_e),i=we[0],s=we[1],u=we[2],ae=we[3],ie=we[4],!(pe=we[9]=void 0===we[9]?de?0:i.length:ee(we[9]-fe,0))&&24&s&&(s&=-25),s&&1!=s)Se=8==s||16==s?_(i,s,pe):32!=s&&33!=s||ie.length?j.apply(void 0,we):M(i,s,u,ae);else var Se=v(i,s,u);return Y((_e?m:X)(Se,we),i,s)}},60696:(i,s,u)=>{var m=u(68630);i.exports=function customOmitClone(i){return m(i)?void 0:i}},69389:(i,s,u)=>{var m=u(18674)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});i.exports=m},38777:(i,s,u)=>{var m=u(10852),v=function(){try{var i=m(Object,"defineProperty");return i({},"",{}),i}catch(i){}}();i.exports=v},67114:(i,s,u)=>{var m=u(88668),v=u(82908),_=u(74757);i.exports=function equalArrays(i,s,u,j,M,$){var W=1&u,X=i.length,Y=s.length;if(X!=Y&&!(W&&Y>X))return!1;var Z=$.get(i),ee=$.get(s);if(Z&&ee)return Z==s&&ee==i;var ae=-1,ie=!0,le=2&u?new m:void 0;for($.set(i,s),$.set(s,i);++ae{var m=u(62705),v=u(11149),_=u(77813),j=u(67114),M=u(68776),$=u(21814),W=m?m.prototype:void 0,X=W?W.valueOf:void 0;i.exports=function equalByTag(i,s,u,m,W,Y,Z){switch(u){case"[object DataView]":if(i.byteLength!=s.byteLength||i.byteOffset!=s.byteOffset)return!1;i=i.buffer,s=s.buffer;case"[object ArrayBuffer]":return!(i.byteLength!=s.byteLength||!Y(new v(i),new v(s)));case"[object Boolean]":case"[object Date]":case"[object Number]":return _(+i,+s);case"[object Error]":return i.name==s.name&&i.message==s.message;case"[object RegExp]":case"[object String]":return i==s+"";case"[object Map]":var ee=M;case"[object Set]":var ae=1&m;if(ee||(ee=$),i.size!=s.size&&!ae)return!1;var ie=Z.get(i);if(ie)return ie==s;m|=2,Z.set(i,s);var le=j(ee(i),ee(s),m,W,Y,Z);return Z.delete(i),le;case"[object Symbol]":if(X)return X.call(i)==X.call(s)}return!1}},16096:(i,s,u)=>{var m=u(58234),v=Object.prototype.hasOwnProperty;i.exports=function equalObjects(i,s,u,_,j,M){var $=1&u,W=m(i),X=W.length;if(X!=m(s).length&&!$)return!1;for(var Y=X;Y--;){var Z=W[Y];if(!($?Z in s:v.call(s,Z)))return!1}var ee=M.get(i),ae=M.get(s);if(ee&&ae)return ee==s&&ae==i;var ie=!0;M.set(i,s),M.set(s,i);for(var le=$;++Y{var m=u(85564),v=u(45357),_=u(30061);i.exports=function flatRest(i){return _(v(i,void 0,m),i+"")}},31957:(i,s,u)=>{var m="object"==typeof u.g&&u.g&&u.g.Object===Object&&u.g;i.exports=m},58234:(i,s,u)=>{var m=u(68866),v=u(99551),_=u(3674);i.exports=function getAllKeys(i){return m(i,_,v)}},46904:(i,s,u)=>{var m=u(68866),v=u(51442),_=u(81704);i.exports=function getAllKeysIn(i){return m(i,_,v)}},66833:(i,s,u)=>{var m=u(89250),v=u(50308),_=m?function(i){return m.get(i)}:v;i.exports=_},97658:(i,s,u)=>{var m=u(52060),v=Object.prototype.hasOwnProperty;i.exports=function getFuncName(i){for(var s=i.name+"",u=m[s],_=v.call(m,s)?u.length:0;_--;){var j=u[_],M=j.func;if(null==M||M==i)return j.name}return s}},20893:i=>{i.exports=function getHolder(i){return i.placeholder}},45050:(i,s,u)=>{var m=u(37019);i.exports=function getMapData(i,s){var u=i.__data__;return m(s)?u["string"==typeof s?"string":"hash"]:u.map}},1499:(i,s,u)=>{var m=u(89162),v=u(3674);i.exports=function getMatchData(i){for(var s=v(i),u=s.length;u--;){var _=s[u],j=i[_];s[u]=[_,j,m(j)]}return s}},10852:(i,s,u)=>{var m=u(28458),v=u(47801);i.exports=function getNative(i,s){var u=v(i,s);return m(u)?u:void 0}},85924:(i,s,u)=>{var m=u(5569)(Object.getPrototypeOf,Object);i.exports=m},89607:(i,s,u)=>{var m=u(62705),v=Object.prototype,_=v.hasOwnProperty,j=v.toString,M=m?m.toStringTag:void 0;i.exports=function getRawTag(i){var s=_.call(i,M),u=i[M];try{i[M]=void 0;var m=!0}catch(i){}var v=j.call(i);return m&&(s?i[M]=u:delete i[M]),v}},99551:(i,s,u)=>{var m=u(34963),v=u(70479),_=Object.prototype.propertyIsEnumerable,j=Object.getOwnPropertySymbols,M=j?function(i){return null==i?[]:(i=Object(i),m(j(i),(function(s){return _.call(i,s)})))}:v;i.exports=M},51442:(i,s,u)=>{var m=u(62488),v=u(85924),_=u(99551),j=u(70479),M=Object.getOwnPropertySymbols?function(i){for(var s=[];i;)m(s,_(i)),i=v(i);return s}:j;i.exports=M},64160:(i,s,u)=>{var m=u(18552),v=u(57071),_=u(53818),j=u(58525),M=u(70577),$=u(44239),W=u(80346),X="[object Map]",Y="[object Promise]",Z="[object Set]",ee="[object WeakMap]",ae="[object DataView]",ie=W(m),le=W(v),ce=W(_),pe=W(j),de=W(M),fe=$;(m&&fe(new m(new ArrayBuffer(1)))!=ae||v&&fe(new v)!=X||_&&fe(_.resolve())!=Y||j&&fe(new j)!=Z||M&&fe(new M)!=ee)&&(fe=function(i){var s=$(i),u="[object Object]"==s?i.constructor:void 0,m=u?W(u):"";if(m)switch(m){case ie:return ae;case le:return X;case ce:return Y;case pe:return Z;case de:return ee}return s}),i.exports=fe},47801:i=>{i.exports=function getValue(i,s){return null==i?void 0:i[s]}},58775:i=>{var s=/\{\n\/\* \[wrapped with (.+)\] \*/,u=/,? & /;i.exports=function getWrapDetails(i){var m=i.match(s);return m?m[1].split(u):[]}},222:(i,s,u)=>{var m=u(71811),v=u(35694),_=u(1469),j=u(65776),M=u(41780),$=u(40327);i.exports=function hasPath(i,s,u){for(var W=-1,X=(s=m(s,i)).length,Y=!1;++W{var s=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");i.exports=function hasUnicode(i){return s.test(i)}},93157:i=>{var s=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;i.exports=function hasUnicodeWord(i){return s.test(i)}},51789:(i,s,u)=>{var m=u(94536);i.exports=function hashClear(){this.__data__=m?m(null):{},this.size=0}},80401:i=>{i.exports=function hashDelete(i){var s=this.has(i)&&delete this.__data__[i];return this.size-=s?1:0,s}},57667:(i,s,u)=>{var m=u(94536),v=Object.prototype.hasOwnProperty;i.exports=function hashGet(i){var s=this.__data__;if(m){var u=s[i];return"__lodash_hash_undefined__"===u?void 0:u}return v.call(s,i)?s[i]:void 0}},21327:(i,s,u)=>{var m=u(94536),v=Object.prototype.hasOwnProperty;i.exports=function hashHas(i){var s=this.__data__;return m?void 0!==s[i]:v.call(s,i)}},81866:(i,s,u)=>{var m=u(94536);i.exports=function hashSet(i,s){var u=this.__data__;return this.size+=this.has(i)?0:1,u[i]=m&&void 0===s?"__lodash_hash_undefined__":s,this}},43824:i=>{var s=Object.prototype.hasOwnProperty;i.exports=function initCloneArray(i){var u=i.length,m=new i.constructor(u);return u&&"string"==typeof i[0]&&s.call(i,"index")&&(m.index=i.index,m.input=i.input),m}},29148:(i,s,u)=>{var m=u(74318),v=u(57157),_=u(93147),j=u(40419),M=u(77133);i.exports=function initCloneByTag(i,s,u){var $=i.constructor;switch(s){case"[object ArrayBuffer]":return m(i);case"[object Boolean]":case"[object Date]":return new $(+i);case"[object DataView]":return v(i,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return M(i,u);case"[object Map]":case"[object Set]":return new $;case"[object Number]":case"[object String]":return new $(i);case"[object RegExp]":return _(i);case"[object Symbol]":return j(i)}}},38517:(i,s,u)=>{var m=u(3118),v=u(85924),_=u(25726);i.exports=function initCloneObject(i){return"function"!=typeof i.constructor||_(i)?{}:m(v(i))}},83112:i=>{var s=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;i.exports=function insertWrapDetails(i,u){var m=u.length;if(!m)return i;var v=m-1;return u[v]=(m>1?"& ":"")+u[v],u=u.join(m>2?", ":" "),i.replace(s,"{\n/* [wrapped with "+u+"] */\n")}},37285:(i,s,u)=>{var m=u(62705),v=u(35694),_=u(1469),j=m?m.isConcatSpreadable:void 0;i.exports=function isFlattenable(i){return _(i)||v(i)||!!(j&&i&&i[j])}},65776:i=>{var s=/^(?:0|[1-9]\d*)$/;i.exports=function isIndex(i,u){var m=typeof i;return!!(u=null==u?9007199254740991:u)&&("number"==m||"symbol"!=m&&s.test(i))&&i>-1&&i%1==0&&i{var m=u(77813),v=u(98612),_=u(65776),j=u(13218);i.exports=function isIterateeCall(i,s,u){if(!j(u))return!1;var M=typeof s;return!!("number"==M?v(u)&&_(s,u.length):"string"==M&&s in u)&&m(u[s],i)}},15403:(i,s,u)=>{var m=u(1469),v=u(33448),_=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,j=/^\w*$/;i.exports=function isKey(i,s){if(m(i))return!1;var u=typeof i;return!("number"!=u&&"symbol"!=u&&"boolean"!=u&&null!=i&&!v(i))||(j.test(i)||!_.test(i)||null!=s&&i in Object(s))}},37019:i=>{i.exports=function isKeyable(i){var s=typeof i;return"string"==s||"number"==s||"symbol"==s||"boolean"==s?"__proto__"!==i:null===i}},86528:(i,s,u)=>{var m=u(96425),v=u(66833),_=u(97658),j=u(8111);i.exports=function isLaziable(i){var s=_(i),u=j[s];if("function"!=typeof u||!(s in m.prototype))return!1;if(i===u)return!0;var M=v(u);return!!M&&i===M[0]}},15346:(i,s,u)=>{var m,v=u(14429),_=(m=/[^.]+$/.exec(v&&v.keys&&v.keys.IE_PROTO||""))?"Symbol(src)_1."+m:"";i.exports=function isMasked(i){return!!_&&_ in i}},25726:i=>{var s=Object.prototype;i.exports=function isPrototype(i){var u=i&&i.constructor;return i===("function"==typeof u&&u.prototype||s)}},89162:(i,s,u)=>{var m=u(13218);i.exports=function isStrictComparable(i){return i==i&&!m(i)}},27040:i=>{i.exports=function listCacheClear(){this.__data__=[],this.size=0}},14125:(i,s,u)=>{var m=u(18470),v=Array.prototype.splice;i.exports=function listCacheDelete(i){var s=this.__data__,u=m(s,i);return!(u<0)&&(u==s.length-1?s.pop():v.call(s,u,1),--this.size,!0)}},82117:(i,s,u)=>{var m=u(18470);i.exports=function listCacheGet(i){var s=this.__data__,u=m(s,i);return u<0?void 0:s[u][1]}},67518:(i,s,u)=>{var m=u(18470);i.exports=function listCacheHas(i){return m(this.__data__,i)>-1}},54705:(i,s,u)=>{var m=u(18470);i.exports=function listCacheSet(i,s){var u=this.__data__,v=m(u,i);return v<0?(++this.size,u.push([i,s])):u[v][1]=s,this}},24785:(i,s,u)=>{var m=u(1989),v=u(38407),_=u(57071);i.exports=function mapCacheClear(){this.size=0,this.__data__={hash:new m,map:new(_||v),string:new m}}},11285:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheDelete(i){var s=m(this,i).delete(i);return this.size-=s?1:0,s}},96e3:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheGet(i){return m(this,i).get(i)}},49916:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheHas(i){return m(this,i).has(i)}},95265:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheSet(i,s){var u=m(this,i),v=u.size;return u.set(i,s),this.size+=u.size==v?0:1,this}},68776:i=>{i.exports=function mapToArray(i){var s=-1,u=Array(i.size);return i.forEach((function(i,m){u[++s]=[m,i]})),u}},42634:i=>{i.exports=function matchesStrictComparable(i,s){return function(u){return null!=u&&(u[i]===s&&(void 0!==s||i in Object(u)))}}},24523:(i,s,u)=>{var m=u(88306);i.exports=function memoizeCapped(i){var s=m(i,(function(i){return 500===u.size&&u.clear(),i})),u=s.cache;return s}},63833:(i,s,u)=>{var m=u(52157),v=u(14054),_=u(46460),j="__lodash_placeholder__",M=128,$=Math.min;i.exports=function mergeData(i,s){var u=i[1],W=s[1],X=u|W,Y=X<131,Z=W==M&&8==u||W==M&&256==u&&i[7].length<=s[8]||384==W&&s[7].length<=s[8]&&8==u;if(!Y&&!Z)return i;1&W&&(i[2]=s[2],X|=1&u?0:4);var ee=s[3];if(ee){var ae=i[3];i[3]=ae?m(ae,ee,s[4]):ee,i[4]=ae?_(i[3],j):s[4]}return(ee=s[5])&&(ae=i[5],i[5]=ae?v(ae,ee,s[6]):ee,i[6]=ae?_(i[5],j):s[6]),(ee=s[7])&&(i[7]=ee),W&M&&(i[8]=null==i[8]?s[8]:$(i[8],s[8])),null==i[9]&&(i[9]=s[9]),i[0]=s[0],i[1]=X,i}},89250:(i,s,u)=>{var m=u(70577),v=m&&new m;i.exports=v},94536:(i,s,u)=>{var m=u(10852)(Object,"create");i.exports=m},86916:(i,s,u)=>{var m=u(5569)(Object.keys,Object);i.exports=m},33498:i=>{i.exports=function nativeKeysIn(i){var s=[];if(null!=i)for(var u in Object(i))s.push(u);return s}},31167:(i,s,u)=>{i=u.nmd(i);var m=u(31957),v=s&&!s.nodeType&&s,_=v&&i&&!i.nodeType&&i,j=_&&_.exports===v&&m.process,M=function(){try{var i=_&&_.require&&_.require("util").types;return i||j&&j.binding&&j.binding("util")}catch(i){}}();i.exports=M},2333:i=>{var s=Object.prototype.toString;i.exports=function objectToString(i){return s.call(i)}},5569:i=>{i.exports=function overArg(i,s){return function(u){return i(s(u))}}},45357:(i,s,u)=>{var m=u(96874),v=Math.max;i.exports=function overRest(i,s,u){return s=v(void 0===s?i.length-1:s,0),function(){for(var _=arguments,j=-1,M=v(_.length-s,0),$=Array(M);++j{var m=u(97786),v=u(14259);i.exports=function parent(i,s){return s.length<2?i:m(i,v(s,0,-1))}},52060:i=>{i.exports={}},90451:(i,s,u)=>{var m=u(278),v=u(65776),_=Math.min;i.exports=function reorder(i,s){for(var u=i.length,j=_(s.length,u),M=m(i);j--;){var $=s[j];i[j]=v($,u)?M[$]:void 0}return i}},46460:i=>{var s="__lodash_placeholder__";i.exports=function replaceHolders(i,u){for(var m=-1,v=i.length,_=0,j=[];++m{var m=u(31957),v="object"==typeof self&&self&&self.Object===Object&&self,_=m||v||Function("return this")();i.exports=_},36390:i=>{i.exports=function safeGet(i,s){if(("constructor"!==s||"function"!=typeof i[s])&&"__proto__"!=s)return i[s]}},90619:i=>{i.exports=function setCacheAdd(i){return this.__data__.set(i,"__lodash_hash_undefined__"),this}},72385:i=>{i.exports=function setCacheHas(i){return this.__data__.has(i)}},258:(i,s,u)=>{var m=u(28045),v=u(21275)(m);i.exports=v},21814:i=>{i.exports=function setToArray(i){var s=-1,u=Array(i.size);return i.forEach((function(i){u[++s]=i})),u}},30061:(i,s,u)=>{var m=u(56560),v=u(21275)(m);i.exports=v},69255:(i,s,u)=>{var m=u(58775),v=u(83112),_=u(30061),j=u(87241);i.exports=function setWrapToString(i,s,u){var M=s+"";return _(i,v(M,j(m(M),u)))}},21275:i=>{var s=Date.now;i.exports=function shortOut(i){var u=0,m=0;return function(){var v=s(),_=16-(v-m);if(m=v,_>0){if(++u>=800)return arguments[0]}else u=0;return i.apply(void 0,arguments)}}},37465:(i,s,u)=>{var m=u(38407);i.exports=function stackClear(){this.__data__=new m,this.size=0}},63779:i=>{i.exports=function stackDelete(i){var s=this.__data__,u=s.delete(i);return this.size=s.size,u}},67599:i=>{i.exports=function stackGet(i){return this.__data__.get(i)}},44758:i=>{i.exports=function stackHas(i){return this.__data__.has(i)}},34309:(i,s,u)=>{var m=u(38407),v=u(57071),_=u(83369);i.exports=function stackSet(i,s){var u=this.__data__;if(u instanceof m){var j=u.__data__;if(!v||j.length<199)return j.push([i,s]),this.size=++u.size,this;u=this.__data__=new _(j)}return u.set(i,s),this.size=u.size,this}},42351:i=>{i.exports=function strictIndexOf(i,s,u){for(var m=u-1,v=i.length;++m{var m=u(44286),v=u(62689),_=u(676);i.exports=function stringToArray(i){return v(i)?_(i):m(i)}},55514:(i,s,u)=>{var m=u(24523),v=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,_=/\\(\\)?/g,j=m((function(i){var s=[];return 46===i.charCodeAt(0)&&s.push(""),i.replace(v,(function(i,u,m,v){s.push(m?v.replace(_,"$1"):u||i)})),s}));i.exports=j},40327:(i,s,u)=>{var m=u(33448);i.exports=function toKey(i){if("string"==typeof i||m(i))return i;var s=i+"";return"0"==s&&1/i==-Infinity?"-0":s}},80346:i=>{var s=Function.prototype.toString;i.exports=function toSource(i){if(null!=i){try{return s.call(i)}catch(i){}try{return i+""}catch(i){}}return""}},67990:i=>{var s=/\s/;i.exports=function trimmedEndIndex(i){for(var u=i.length;u--&&s.test(i.charAt(u)););return u}},676:i=>{var s="\\ud800-\\udfff",u="["+s+"]",m="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",v="\\ud83c[\\udffb-\\udfff]",_="[^"+s+"]",j="(?:\\ud83c[\\udde6-\\uddff]){2}",M="[\\ud800-\\udbff][\\udc00-\\udfff]",$="(?:"+m+"|"+v+")"+"?",W="[\\ufe0e\\ufe0f]?",X=W+$+("(?:\\u200d(?:"+[_,j,M].join("|")+")"+W+$+")*"),Y="(?:"+[_+m+"?",m,j,M,u].join("|")+")",Z=RegExp(v+"(?="+v+")|"+Y+X,"g");i.exports=function unicodeToArray(i){return i.match(Z)||[]}},2757:i=>{var s="\\ud800-\\udfff",u="\\u2700-\\u27bf",m="a-z\\xdf-\\xf6\\xf8-\\xff",v="A-Z\\xc0-\\xd6\\xd8-\\xde",_="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",j="["+_+"]",M="\\d+",$="["+u+"]",W="["+m+"]",X="[^"+s+_+M+u+m+v+"]",Y="(?:\\ud83c[\\udde6-\\uddff]){2}",Z="[\\ud800-\\udbff][\\udc00-\\udfff]",ee="["+v+"]",ae="(?:"+W+"|"+X+")",ie="(?:"+ee+"|"+X+")",le="(?:['’](?:d|ll|m|re|s|t|ve))?",ce="(?:['’](?:D|LL|M|RE|S|T|VE))?",pe="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",de="[\\ufe0e\\ufe0f]?",fe=de+pe+("(?:\\u200d(?:"+["[^"+s+"]",Y,Z].join("|")+")"+de+pe+")*"),ye="(?:"+[$,Y,Z].join("|")+")"+fe,be=RegExp([ee+"?"+W+"+"+le+"(?="+[j,ee,"$"].join("|")+")",ie+"+"+ce+"(?="+[j,ee+ae,"$"].join("|")+")",ee+"?"+ae+"+"+le,ee+"+"+ce,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",M,ye].join("|"),"g");i.exports=function unicodeWords(i){return i.match(be)||[]}},87241:(i,s,u)=>{var m=u(77412),v=u(47443),_=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];i.exports=function updateWrapDetails(i,s){return m(_,(function(u){var m="_."+u[0];s&u[1]&&!v(i,m)&&i.push(m)})),i.sort()}},21913:(i,s,u)=>{var m=u(96425),v=u(7548),_=u(278);i.exports=function wrapperClone(i){if(i instanceof m)return i.clone();var s=new v(i.__wrapped__,i.__chain__);return s.__actions__=_(i.__actions__),s.__index__=i.__index__,s.__values__=i.__values__,s}},39514:(i,s,u)=>{var m=u(97727);i.exports=function ary(i,s,u){return s=u?void 0:s,s=i&&null==s?i.length:s,m(i,128,void 0,void 0,void 0,void 0,s)}},68929:(i,s,u)=>{var m=u(48403),v=u(35393)((function(i,s,u){return s=s.toLowerCase(),i+(u?m(s):s)}));i.exports=v},48403:(i,s,u)=>{var m=u(79833),v=u(11700);i.exports=function capitalize(i){return v(m(i).toLowerCase())}},66678:(i,s,u)=>{var m=u(85990);i.exports=function clone(i){return m(i,4)}},75703:i=>{i.exports=function constant(i){return function(){return i}}},40087:(i,s,u)=>{var m=u(97727);function curry(i,s,u){var v=m(i,8,void 0,void 0,void 0,void 0,void 0,s=u?void 0:s);return v.placeholder=curry.placeholder,v}curry.placeholder={},i.exports=curry},23279:(i,s,u)=>{var m=u(13218),v=u(7771),_=u(14841),j=Math.max,M=Math.min;i.exports=function debounce(i,s,u){var $,W,X,Y,Z,ee,ae=0,ie=!1,le=!1,ce=!0;if("function"!=typeof i)throw new TypeError("Expected a function");function invokeFunc(s){var u=$,m=W;return $=W=void 0,ae=s,Y=i.apply(m,u)}function shouldInvoke(i){var u=i-ee;return void 0===ee||u>=s||u<0||le&&i-ae>=X}function timerExpired(){var i=v();if(shouldInvoke(i))return trailingEdge(i);Z=setTimeout(timerExpired,function remainingWait(i){var u=s-(i-ee);return le?M(u,X-(i-ae)):u}(i))}function trailingEdge(i){return Z=void 0,ce&&$?invokeFunc(i):($=W=void 0,Y)}function debounced(){var i=v(),u=shouldInvoke(i);if($=arguments,W=this,ee=i,u){if(void 0===Z)return function leadingEdge(i){return ae=i,Z=setTimeout(timerExpired,s),ie?invokeFunc(i):Y}(ee);if(le)return clearTimeout(Z),Z=setTimeout(timerExpired,s),invokeFunc(ee)}return void 0===Z&&(Z=setTimeout(timerExpired,s)),Y}return s=_(s)||0,m(u)&&(ie=!!u.leading,X=(le="maxWait"in u)?j(_(u.maxWait)||0,s):X,ce="trailing"in u?!!u.trailing:ce),debounced.cancel=function cancel(){void 0!==Z&&clearTimeout(Z),ae=0,$=ee=W=Z=void 0},debounced.flush=function flush(){return void 0===Z?Y:trailingEdge(v())},debounced}},53816:(i,s,u)=>{var m=u(69389),v=u(79833),_=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,j=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");i.exports=function deburr(i){return(i=v(i))&&i.replace(_,m).replace(j,"")}},77813:i=>{i.exports=function eq(i,s){return i===s||i!=i&&s!=s}},13311:(i,s,u)=>{var m=u(67740)(u(30998));i.exports=m},30998:(i,s,u)=>{var m=u(41848),v=u(67206),_=u(40554),j=Math.max;i.exports=function findIndex(i,s,u){var M=null==i?0:i.length;if(!M)return-1;var $=null==u?0:_(u);return $<0&&($=j(M+$,0)),m(i,v(s,3),$)}},85564:(i,s,u)=>{var m=u(21078);i.exports=function flatten(i){return(null==i?0:i.length)?m(i,1):[]}},84599:(i,s,u)=>{var m=u(68836),v=u(69306),_=Array.prototype.push;function baseAry(i,s){return 2==s?function(s,u){return i(s,u)}:function(s){return i(s)}}function cloneArray(i){for(var s=i?i.length:0,u=Array(s);s--;)u[s]=i[s];return u}function wrapImmutable(i,s){return function(){var u=arguments.length;if(u){for(var m=Array(u);u--;)m[u]=arguments[u];var v=m[0]=s.apply(void 0,m);return i.apply(void 0,m),v}}}i.exports=function baseConvert(i,s,u,j){var M="function"==typeof s,$=s===Object(s);if($&&(j=u,u=s,s=void 0),null==u)throw new TypeError;j||(j={});var W={cap:!("cap"in j)||j.cap,curry:!("curry"in j)||j.curry,fixed:!("fixed"in j)||j.fixed,immutable:!("immutable"in j)||j.immutable,rearg:!("rearg"in j)||j.rearg},X=M?u:v,Y="curry"in j&&j.curry,Z="fixed"in j&&j.fixed,ee="rearg"in j&&j.rearg,ae=M?u.runInContext():void 0,ie=M?u:{ary:i.ary,assign:i.assign,clone:i.clone,curry:i.curry,forEach:i.forEach,isArray:i.isArray,isError:i.isError,isFunction:i.isFunction,isWeakMap:i.isWeakMap,iteratee:i.iteratee,keys:i.keys,rearg:i.rearg,toInteger:i.toInteger,toPath:i.toPath},le=ie.ary,ce=ie.assign,pe=ie.clone,de=ie.curry,fe=ie.forEach,ye=ie.isArray,be=ie.isError,_e=ie.isFunction,we=ie.isWeakMap,Se=ie.keys,xe=ie.rearg,Pe=ie.toInteger,Ie=ie.toPath,Te=Se(m.aryMethod),Re={castArray:function(i){return function(){var s=arguments[0];return ye(s)?i(cloneArray(s)):i.apply(void 0,arguments)}},iteratee:function(i){return function(){var s=arguments[1],u=i(arguments[0],s),m=u.length;return W.cap&&"number"==typeof s?(s=s>2?s-2:1,m&&m<=s?u:baseAry(u,s)):u}},mixin:function(i){return function(s){var u=this;if(!_e(u))return i(u,Object(s));var m=[];return fe(Se(s),(function(i){_e(s[i])&&m.push([i,u.prototype[i]])})),i(u,Object(s)),fe(m,(function(i){var s=i[1];_e(s)?u.prototype[i[0]]=s:delete u.prototype[i[0]]})),u}},nthArg:function(i){return function(s){var u=s<0?1:Pe(s)+1;return de(i(s),u)}},rearg:function(i){return function(s,u){var m=u?u.length:0;return de(i(s,u),m)}},runInContext:function(s){return function(u){return baseConvert(i,s(u),j)}}};function castCap(i,s){if(W.cap){var u=m.iterateeRearg[i];if(u)return function iterateeRearg(i,s){return overArg(i,(function(i){var u=s.length;return function baseArity(i,s){return 2==s?function(s,u){return i.apply(void 0,arguments)}:function(s){return i.apply(void 0,arguments)}}(xe(baseAry(i,u),s),u)}))}(s,u);var v=!M&&m.iterateeAry[i];if(v)return function iterateeAry(i,s){return overArg(i,(function(i){return"function"==typeof i?baseAry(i,s):i}))}(s,v)}return s}function castFixed(i,s,u){if(W.fixed&&(Z||!m.skipFixed[i])){var v=m.methodSpread[i],j=v&&v.start;return void 0===j?le(s,u):function flatSpread(i,s){return function(){for(var u=arguments.length,m=u-1,v=Array(u);u--;)v[u]=arguments[u];var j=v[s],M=v.slice(0,s);return j&&_.apply(M,j),s!=m&&_.apply(M,v.slice(s+1)),i.apply(this,M)}}(s,j)}return s}function castRearg(i,s,u){return W.rearg&&u>1&&(ee||!m.skipRearg[i])?xe(s,m.methodRearg[i]||m.aryRearg[u]):s}function cloneByPath(i,s){for(var u=-1,m=(s=Ie(s)).length,v=m-1,_=pe(Object(i)),j=_;null!=j&&++u1?de(s,u):s}(0,v=castCap(_,v),i),!1}})),!v})),v||(v=j),v==s&&(v=Y?de(v,1):function(){return s.apply(this,arguments)}),v.convert=createConverter(_,s),v.placeholder=s.placeholder=u,v}if(!$)return wrap(s,u,X);var qe=u,ze=[];return fe(Te,(function(i){fe(m.aryMethod[i],(function(i){var s=qe[m.remap[i]||i];s&&ze.push([i,wrap(i,s,qe)])}))})),fe(Se(qe),(function(i){var s=qe[i];if("function"==typeof s){for(var u=ze.length;u--;)if(ze[u][0]==i)return;s.convert=createConverter(i,s),ze.push([i,s])}})),fe(ze,(function(i){qe[i[0]]=i[1]})),qe.convert=function convertLib(i){return qe.runInContext.convert(i)(void 0)},qe.placeholder=qe,fe(Se(qe),(function(i){fe(m.realToAlias[i]||[],(function(s){qe[s]=qe[i]}))})),qe}},68836:(i,s)=>{s.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"},s.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]},s.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},s.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},s.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},s.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},s.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},s.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},s.realToAlias=function(){var i=Object.prototype.hasOwnProperty,u=s.aliasToReal,m={};for(var v in u){var _=u[v];i.call(m,_)?m[_].push(v):m[_]=[v]}return m}(),s.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"},s.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},s.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}},4269:(i,s,u)=>{i.exports={ary:u(39514),assign:u(44037),clone:u(66678),curry:u(40087),forEach:u(77412),isArray:u(1469),isError:u(64647),isFunction:u(23560),isWeakMap:u(81018),iteratee:u(72594),keys:u(280),rearg:u(4963),toInteger:u(40554),toPath:u(30084)}},72700:(i,s,u)=>{i.exports=u(28252)},92822:(i,s,u)=>{var m=u(84599),v=u(4269);i.exports=function convert(i,s,u){return m(v,i,s,u)}},69306:i=>{i.exports={}},28252:(i,s,u)=>{var m=u(92822)("set",u(36968));m.placeholder=u(69306),i.exports=m},27361:(i,s,u)=>{var m=u(97786);i.exports=function get(i,s,u){var v=null==i?void 0:m(i,s);return void 0===v?u:v}},79095:(i,s,u)=>{var m=u(13),v=u(222);i.exports=function hasIn(i,s){return null!=i&&v(i,s,m)}},6557:i=>{i.exports=function identity(i){return i}},35694:(i,s,u)=>{var m=u(9454),v=u(37005),_=Object.prototype,j=_.hasOwnProperty,M=_.propertyIsEnumerable,$=m(function(){return arguments}())?m:function(i){return v(i)&&j.call(i,"callee")&&!M.call(i,"callee")};i.exports=$},1469:i=>{var s=Array.isArray;i.exports=s},98612:(i,s,u)=>{var m=u(23560),v=u(41780);i.exports=function isArrayLike(i){return null!=i&&v(i.length)&&!m(i)}},29246:(i,s,u)=>{var m=u(98612),v=u(37005);i.exports=function isArrayLikeObject(i){return v(i)&&m(i)}},51584:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isBoolean(i){return!0===i||!1===i||v(i)&&"[object Boolean]"==m(i)}},44144:(i,s,u)=>{i=u.nmd(i);var m=u(55639),v=u(95062),_=s&&!s.nodeType&&s,j=_&&i&&!i.nodeType&&i,M=j&&j.exports===_?m.Buffer:void 0,$=(M?M.isBuffer:void 0)||v;i.exports=$},41609:(i,s,u)=>{var m=u(280),v=u(64160),_=u(35694),j=u(1469),M=u(98612),$=u(44144),W=u(25726),X=u(36719),Y=Object.prototype.hasOwnProperty;i.exports=function isEmpty(i){if(null==i)return!0;if(M(i)&&(j(i)||"string"==typeof i||"function"==typeof i.splice||$(i)||X(i)||_(i)))return!i.length;var s=v(i);if("[object Map]"==s||"[object Set]"==s)return!i.size;if(W(i))return!m(i).length;for(var u in i)if(Y.call(i,u))return!1;return!0}},18446:(i,s,u)=>{var m=u(90939);i.exports=function isEqual(i,s){return m(i,s)}},64647:(i,s,u)=>{var m=u(44239),v=u(37005),_=u(68630);i.exports=function isError(i){if(!v(i))return!1;var s=m(i);return"[object Error]"==s||"[object DOMException]"==s||"string"==typeof i.message&&"string"==typeof i.name&&!_(i)}},23560:(i,s,u)=>{var m=u(44239),v=u(13218);i.exports=function isFunction(i){if(!v(i))return!1;var s=m(i);return"[object Function]"==s||"[object GeneratorFunction]"==s||"[object AsyncFunction]"==s||"[object Proxy]"==s}},41780:i=>{i.exports=function isLength(i){return"number"==typeof i&&i>-1&&i%1==0&&i<=9007199254740991}},56688:(i,s,u)=>{var m=u(25588),v=u(7518),_=u(31167),j=_&&_.isMap,M=j?v(j):m;i.exports=M},45220:i=>{i.exports=function isNull(i){return null===i}},81763:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isNumber(i){return"number"==typeof i||v(i)&&"[object Number]"==m(i)}},13218:i=>{i.exports=function isObject(i){var s=typeof i;return null!=i&&("object"==s||"function"==s)}},37005:i=>{i.exports=function isObjectLike(i){return null!=i&&"object"==typeof i}},68630:(i,s,u)=>{var m=u(44239),v=u(85924),_=u(37005),j=Function.prototype,M=Object.prototype,$=j.toString,W=M.hasOwnProperty,X=$.call(Object);i.exports=function isPlainObject(i){if(!_(i)||"[object Object]"!=m(i))return!1;var s=v(i);if(null===s)return!0;var u=W.call(s,"constructor")&&s.constructor;return"function"==typeof u&&u instanceof u&&$.call(u)==X}},72928:(i,s,u)=>{var m=u(29221),v=u(7518),_=u(31167),j=_&&_.isSet,M=j?v(j):m;i.exports=M},47037:(i,s,u)=>{var m=u(44239),v=u(1469),_=u(37005);i.exports=function isString(i){return"string"==typeof i||!v(i)&&_(i)&&"[object String]"==m(i)}},33448:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isSymbol(i){return"symbol"==typeof i||v(i)&&"[object Symbol]"==m(i)}},36719:(i,s,u)=>{var m=u(38749),v=u(7518),_=u(31167),j=_&&_.isTypedArray,M=j?v(j):m;i.exports=M},81018:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function isWeakMap(i){return v(i)&&"[object WeakMap]"==m(i)}},72594:(i,s,u)=>{var m=u(85990),v=u(67206);i.exports=function iteratee(i){return v("function"==typeof i?i:m(i,1))}},3674:(i,s,u)=>{var m=u(14636),v=u(280),_=u(98612);i.exports=function keys(i){return _(i)?m(i):v(i)}},81704:(i,s,u)=>{var m=u(14636),v=u(10313),_=u(98612);i.exports=function keysIn(i){return _(i)?m(i,!0):v(i)}},10928:i=>{i.exports=function last(i){var s=null==i?0:i.length;return s?i[s-1]:void 0}},88306:(i,s,u)=>{var m=u(83369);function memoize(i,s){if("function"!=typeof i||null!=s&&"function"!=typeof s)throw new TypeError("Expected a function");var memoized=function(){var u=arguments,m=s?s.apply(this,u):u[0],v=memoized.cache;if(v.has(m))return v.get(m);var _=i.apply(this,u);return memoized.cache=v.set(m,_)||v,_};return memoized.cache=new(memoize.Cache||m),memoized}memoize.Cache=m,i.exports=memoize},82492:(i,s,u)=>{var m=u(42980),v=u(21463)((function(i,s,u){m(i,s,u)}));i.exports=v},94885:i=>{i.exports=function negate(i){if("function"!=typeof i)throw new TypeError("Expected a function");return function(){var s=arguments;switch(s.length){case 0:return!i.call(this);case 1:return!i.call(this,s[0]);case 2:return!i.call(this,s[0],s[1]);case 3:return!i.call(this,s[0],s[1],s[2])}return!i.apply(this,s)}}},50308:i=>{i.exports=function noop(){}},7771:(i,s,u)=>{var m=u(55639);i.exports=function(){return m.Date.now()}},57557:(i,s,u)=>{var m=u(29932),v=u(85990),_=u(57406),j=u(71811),M=u(98363),$=u(60696),W=u(99021),X=u(46904),Y=W((function(i,s){var u={};if(null==i)return u;var W=!1;s=m(s,(function(s){return s=j(s,i),W||(W=s.length>1),s})),M(i,X(i),u),W&&(u=v(u,7,$));for(var Y=s.length;Y--;)_(u,s[Y]);return u}));i.exports=Y},39601:(i,s,u)=>{var m=u(40371),v=u(79152),_=u(15403),j=u(40327);i.exports=function property(i){return _(i)?m(j(i)):v(i)}},4963:(i,s,u)=>{var m=u(97727),v=u(99021),_=v((function(i,s){return m(i,256,void 0,void 0,void 0,s)}));i.exports=_},54061:(i,s,u)=>{var m=u(62663),v=u(89881),_=u(67206),j=u(10107),M=u(1469);i.exports=function reduce(i,s,u){var $=M(i)?m:j,W=arguments.length<3;return $(i,_(s,4),u,W,v)}},36968:(i,s,u)=>{var m=u(10611);i.exports=function set(i,s,u){return null==i?i:m(i,s,u)}},59704:(i,s,u)=>{var m=u(82908),v=u(67206),_=u(5076),j=u(1469),M=u(16612);i.exports=function some(i,s,u){var $=j(i)?m:_;return u&&M(i,s,u)&&(s=void 0),$(i,v(s,3))}},70479:i=>{i.exports=function stubArray(){return[]}},95062:i=>{i.exports=function stubFalse(){return!1}},18601:(i,s,u)=>{var m=u(14841),v=1/0;i.exports=function toFinite(i){return i?(i=m(i))===v||i===-1/0?17976931348623157e292*(i<0?-1:1):i==i?i:0:0===i?i:0}},40554:(i,s,u)=>{var m=u(18601);i.exports=function toInteger(i){var s=m(i),u=s%1;return s==s?u?s-u:s:0}},7334:(i,s,u)=>{var m=u(79833);i.exports=function toLower(i){return m(i).toLowerCase()}},14841:(i,s,u)=>{var m=u(27561),v=u(13218),_=u(33448),j=/^[-+]0x[0-9a-f]+$/i,M=/^0b[01]+$/i,$=/^0o[0-7]+$/i,W=parseInt;i.exports=function toNumber(i){if("number"==typeof i)return i;if(_(i))return NaN;if(v(i)){var s="function"==typeof i.valueOf?i.valueOf():i;i=v(s)?s+"":s}if("string"!=typeof i)return 0===i?i:+i;i=m(i);var u=M.test(i);return u||$.test(i)?W(i.slice(2),u?2:8):j.test(i)?NaN:+i}},30084:(i,s,u)=>{var m=u(29932),v=u(278),_=u(1469),j=u(33448),M=u(55514),$=u(40327),W=u(79833);i.exports=function toPath(i){return _(i)?m(i,$):j(i)?[i]:v(M(W(i)))}},59881:(i,s,u)=>{var m=u(98363),v=u(81704);i.exports=function toPlainObject(i){return m(i,v(i))}},79833:(i,s,u)=>{var m=u(80531);i.exports=function toString(i){return null==i?"":m(i)}},11700:(i,s,u)=>{var m=u(98805)("toUpperCase");i.exports=m},58748:(i,s,u)=>{var m=u(49029),v=u(93157),_=u(79833),j=u(2757);i.exports=function words(i,s,u){return i=_(i),void 0===(s=u?void 0:s)?v(i)?j(i):m(i):i.match(s)||[]}},8111:(i,s,u)=>{var m=u(96425),v=u(7548),_=u(9435),j=u(1469),M=u(37005),$=u(21913),W=Object.prototype.hasOwnProperty;function lodash(i){if(M(i)&&!j(i)&&!(i instanceof m)){if(i instanceof v)return i;if(W.call(i,"__wrapped__"))return $(i)}return new v(i)}lodash.prototype=_.prototype,lodash.prototype.constructor=lodash,i.exports=lodash},7287:(i,s,u)=>{var m=u(34865),v=u(1757);i.exports=function zipObject(i,s){return v(i||[],s||[],m)}},96470:(i,s,u)=>{"use strict";var m=u(47802),v=u(21102);s.highlight=highlight,s.highlightAuto=function highlightAuto(i,s){var u,j,M,$,W=s||{},X=W.subset||m.listLanguages(),Y=W.prefix,Z=X.length,ee=-1;null==Y&&(Y=_);if("string"!=typeof i)throw v("Expected `string` for value, got `%s`",i);j={relevance:0,language:null,value:[]},u={relevance:0,language:null,value:[]};for(;++eej.relevance&&(j=M),M.relevance>u.relevance&&(j=u,u=M));j.language&&(u.secondBest=j);return u},s.registerLanguage=function registerLanguage(i,s){m.registerLanguage(i,s)},s.listLanguages=function listLanguages(){return m.listLanguages()},s.registerAlias=function registerAlias(i,s){var u,v=i;s&&((v={})[i]=s);for(u in v)m.registerAliases(v[u],{languageName:u})},Emitter.prototype.addText=function text(i){var s,u,m=this.stack;if(""===i)return;s=m[m.length-1],(u=s.children[s.children.length-1])&&"text"===u.type?u.value+=i:s.children.push({type:"text",value:i})},Emitter.prototype.addKeyword=function addKeyword(i,s){this.openNode(s),this.addText(i),this.closeNode()},Emitter.prototype.addSublanguage=function addSublanguage(i,s){var u=this.stack,m=u[u.length-1],v=i.rootNode.children,_=s?{type:"element",tagName:"span",properties:{className:[s]},children:v}:v;m.children=m.children.concat(_)},Emitter.prototype.openNode=function open(i){var s=this.stack,u=this.options.classPrefix+i,m=s[s.length-1],v={type:"element",tagName:"span",properties:{className:[u]},children:[]};m.children.push(v),s.push(v)},Emitter.prototype.closeNode=function close(){this.stack.pop()},Emitter.prototype.closeAllNodes=noop,Emitter.prototype.finalize=noop,Emitter.prototype.toHTML=function toHtmlNoop(){return""};var _="hljs-";function highlight(i,s,u){var j,M=m.configure({}),$=(u||{}).prefix;if("string"!=typeof i)throw v("Expected `string` for name, got `%s`",i);if(!m.getLanguage(i))throw v("Unknown language: `%s` is not registered",i);if("string"!=typeof s)throw v("Expected `string` for value, got `%s`",s);if(null==$&&($=_),m.configure({__emitter:Emitter,classPrefix:$}),j=m.highlight(s,{language:i,ignoreIllegals:!0}),m.configure(M||{}),j.errorRaised)throw j.errorRaised;return{relevance:j.relevance,language:j.language,value:j.emitter.rootNode.children}}function Emitter(i){this.options=i,this.rootNode={children:[]},this.stack=[this.rootNode]}function noop(){}},42566:(i,s,u)=>{const m=u(94885);function coerceElementMatchingCallback(i){return"string"==typeof i?s=>s.element===i:i.constructor&&i.extend?s=>s instanceof i:i}class ArraySlice{constructor(i){this.elements=i||[]}toValue(){return this.elements.map((i=>i.toValue()))}map(i,s){return this.elements.map(i,s)}flatMap(i,s){return this.map(i,s).reduce(((i,s)=>i.concat(s)),[])}compactMap(i,s){const u=[];return this.forEach((m=>{const v=i.bind(s)(m);v&&u.push(v)})),u}filter(i,s){return i=coerceElementMatchingCallback(i),new ArraySlice(this.elements.filter(i,s))}reject(i,s){return i=coerceElementMatchingCallback(i),new ArraySlice(this.elements.filter(m(i),s))}find(i,s){return i=coerceElementMatchingCallback(i),this.elements.find(i,s)}forEach(i,s){this.elements.forEach(i,s)}reduce(i,s){return this.elements.reduce(i,s)}includes(i){return this.elements.some((s=>s.equals(i)))}shift(){return this.elements.shift()}unshift(i){this.elements.unshift(this.refract(i))}push(i){return this.elements.push(this.refract(i)),this}add(i){this.push(i)}get(i){return this.elements[i]}getValue(i){const s=this.elements[i];if(s)return s.toValue()}get length(){return this.elements.length}get isEmpty(){return 0===this.elements.length}get first(){return this.elements[0]}}"undefined"!=typeof Symbol&&(ArraySlice.prototype[Symbol.iterator]=function symbol(){return this.elements[Symbol.iterator]()}),i.exports=ArraySlice},17645:i=>{class KeyValuePair{constructor(i,s){this.key=i,this.value=s}clone(){const i=new KeyValuePair;return this.key&&(i.key=this.key.clone()),this.value&&(i.value=this.value.clone()),i}}i.exports=KeyValuePair},78520:(i,s,u)=>{const m=u(45220),v=u(47037),_=u(81763),j=u(51584),M=u(13218),$=u(28219),W=u(99829);class Namespace{constructor(i){this.elementMap={},this.elementDetection=[],this.Element=W.Element,this.KeyValuePair=W.KeyValuePair,i&&i.noDefault||this.useDefault(),this._attributeElementKeys=[],this._attributeElementArrayKeys=[]}use(i){return i.namespace&&i.namespace({base:this}),i.load&&i.load({base:this}),this}useDefault(){return this.register("null",W.NullElement).register("string",W.StringElement).register("number",W.NumberElement).register("boolean",W.BooleanElement).register("array",W.ArrayElement).register("object",W.ObjectElement).register("member",W.MemberElement).register("ref",W.RefElement).register("link",W.LinkElement),this.detect(m,W.NullElement,!1).detect(v,W.StringElement,!1).detect(_,W.NumberElement,!1).detect(j,W.BooleanElement,!1).detect(Array.isArray,W.ArrayElement,!1).detect(M,W.ObjectElement,!1),this}register(i,s){return this._elements=void 0,this.elementMap[i]=s,this}unregister(i){return this._elements=void 0,delete this.elementMap[i],this}detect(i,s,u){return void 0===u||u?this.elementDetection.unshift([i,s]):this.elementDetection.push([i,s]),this}toElement(i){if(i instanceof this.Element)return i;let s;for(let u=0;u{const s=i[0].toUpperCase()+i.substr(1);this._elements[s]=this.elementMap[i]}))),this._elements}get serialiser(){return new $(this)}}$.prototype.Namespace=Namespace,i.exports=Namespace},87526:(i,s,u)=>{const m=u(94885),v=u(42566);class ObjectSlice extends v{map(i,s){return this.elements.map((u=>i.bind(s)(u.value,u.key,u)))}filter(i,s){return new ObjectSlice(this.elements.filter((u=>i.bind(s)(u.value,u.key,u))))}reject(i,s){return this.filter(m(i.bind(s)))}forEach(i,s){return this.elements.forEach(((u,m)=>{i.bind(s)(u.value,u.key,u,m)}))}keys(){return this.map(((i,s)=>s.toValue()))}values(){return this.map((i=>i.toValue()))}}i.exports=ObjectSlice},99829:(i,s,u)=>{const m=u(3079),v=u(96295),_=u(16036),j=u(91090),M=u(18866),$=u(35804),W=u(5946),X=u(76735),Y=u(59964),Z=u(38588),ee=u(42566),ae=u(87526),ie=u(17645);function refract(i){if(i instanceof m)return i;if("string"==typeof i)return new _(i);if("number"==typeof i)return new j(i);if("boolean"==typeof i)return new M(i);if(null===i)return new v;if(Array.isArray(i))return new $(i.map(refract));if("object"==typeof i){return new X(i)}return i}m.prototype.ObjectElement=X,m.prototype.RefElement=Z,m.prototype.MemberElement=W,m.prototype.refract=refract,ee.prototype.refract=refract,i.exports={Element:m,NullElement:v,StringElement:_,NumberElement:j,BooleanElement:M,ArrayElement:$,MemberElement:W,ObjectElement:X,LinkElement:Y,RefElement:Z,refract,ArraySlice:ee,ObjectSlice:ae,KeyValuePair:ie}},59964:(i,s,u)=>{const m=u(3079);i.exports=class LinkElement extends m{constructor(i,s,u){super(i||[],s,u),this.element="link"}get relation(){return this.attributes.get("relation")}set relation(i){this.attributes.set("relation",i)}get href(){return this.attributes.get("href")}set href(i){this.attributes.set("href",i)}}},38588:(i,s,u)=>{const m=u(3079);i.exports=class RefElement extends m{constructor(i,s,u){super(i||[],s,u),this.element="ref",this.path||(this.path="element")}get path(){return this.attributes.get("path")}set path(i){this.attributes.set("path",i)}}},43500:(i,s,u)=>{const m=u(78520),v=u(99829);s.lS=m,u(17645),s.O4=v.ArraySlice,v.ObjectSlice,s.W_=v.Element,s.RP=v.StringElement,s.VL=v.NumberElement,s.hh=v.BooleanElement,s.zr=v.NullElement,s.ON=v.ArrayElement,s.Sb=v.ObjectElement,s.c6=v.MemberElement,s.tK=v.RefElement,s.EA=v.LinkElement,s.Qc=v.refract,u(28219),u(3414)},35804:(i,s,u)=>{const m=u(94885),v=u(3079),_=u(42566);class ArrayElement extends v{constructor(i,s,u){super(i||[],s,u),this.element="array"}primitive(){return"array"}get(i){return this.content[i]}getValue(i){const s=this.get(i);if(s)return s.toValue()}getIndex(i){return this.content[i]}set(i,s){return this.content[i]=this.refract(s),this}remove(i){const s=this.content.splice(i,1);return s.length?s[0]:null}map(i,s){return this.content.map(i,s)}flatMap(i,s){return this.map(i,s).reduce(((i,s)=>i.concat(s)),[])}compactMap(i,s){const u=[];return this.forEach((m=>{const v=i.bind(s)(m);v&&u.push(v)})),u}filter(i,s){return new _(this.content.filter(i,s))}reject(i,s){return this.filter(m(i),s)}reduce(i,s){let u,m;void 0!==s?(u=0,m=this.refract(s)):(u=1,m="object"===this.primitive()?this.first.value:this.first);for(let s=u;s{i.bind(s)(u,this.refract(m))}))}shift(){return this.content.shift()}unshift(i){this.content.unshift(this.refract(i))}push(i){return this.content.push(this.refract(i)),this}add(i){this.push(i)}findElements(i,s){const u=s||{},m=!!u.recursive,v=void 0===u.results?[]:u.results;return this.forEach(((s,u,_)=>{m&&void 0!==s.findElements&&s.findElements(i,{results:v,recursive:m}),i(s,u,_)&&v.push(s)})),v}find(i){return new _(this.findElements(i,{recursive:!0}))}findByElement(i){return this.find((s=>s.element===i))}findByClass(i){return this.find((s=>s.classes.includes(i)))}getById(i){return this.find((s=>s.id.toValue()===i)).first}includes(i){return this.content.some((s=>s.equals(i)))}contains(i){return this.includes(i)}empty(){return new this.constructor([])}"fantasy-land/empty"(){return this.empty()}concat(i){return new this.constructor(this.content.concat(i.content))}"fantasy-land/concat"(i){return this.concat(i)}"fantasy-land/map"(i){return new this.constructor(this.map(i))}"fantasy-land/chain"(i){return this.map((s=>i(s)),this).reduce(((i,s)=>i.concat(s)),this.empty())}"fantasy-land/filter"(i){return new this.constructor(this.content.filter(i))}"fantasy-land/reduce"(i,s){return this.content.reduce(i,s)}get length(){return this.content.length}get isEmpty(){return 0===this.content.length}get first(){return this.getIndex(0)}get second(){return this.getIndex(1)}get last(){return this.getIndex(this.length-1)}}ArrayElement.empty=function empty(){return new this},ArrayElement["fantasy-land/empty"]=ArrayElement.empty,"undefined"!=typeof Symbol&&(ArrayElement.prototype[Symbol.iterator]=function symbol(){return this.content[Symbol.iterator]()}),i.exports=ArrayElement},18866:(i,s,u)=>{const m=u(3079);i.exports=class BooleanElement extends m{constructor(i,s,u){super(i,s,u),this.element="boolean"}primitive(){return"boolean"}}},3079:(i,s,u)=>{const m=u(18446),v=u(17645),_=u(42566);class Element{constructor(i,s,u){s&&(this.meta=s),u&&(this.attributes=u),this.content=i}freeze(){Object.isFrozen(this)||(this._meta&&(this.meta.parent=this,this.meta.freeze()),this._attributes&&(this.attributes.parent=this,this.attributes.freeze()),this.children.forEach((i=>{i.parent=this,i.freeze()}),this),this.content&&Array.isArray(this.content)&&Object.freeze(this.content),Object.freeze(this))}primitive(){}clone(){const i=new this.constructor;return i.element=this.element,this.meta.length&&(i._meta=this.meta.clone()),this.attributes.length&&(i._attributes=this.attributes.clone()),this.content?this.content.clone?i.content=this.content.clone():Array.isArray(this.content)?i.content=this.content.map((i=>i.clone())):i.content=this.content:i.content=this.content,i}toValue(){return this.content instanceof Element?this.content.toValue():this.content instanceof v?{key:this.content.key.toValue(),value:this.content.value?this.content.value.toValue():void 0}:this.content&&this.content.map?this.content.map((i=>i.toValue()),this):this.content}toRef(i){if(""===this.id.toValue())throw Error("Cannot create reference to an element that does not contain an ID");const s=new this.RefElement(this.id.toValue());return i&&(s.path=i),s}findRecursive(...i){if(arguments.length>1&&!this.isFrozen)throw new Error("Cannot find recursive with multiple element names without first freezing the element. Call `element.freeze()`");const s=i.pop();let u=new _;const append=(i,s)=>(i.push(s),i),checkElement=(i,u)=>{u.element===s&&i.push(u);const m=u.findRecursive(s);return m&&m.reduce(append,i),u.content instanceof v&&(u.content.key&&checkElement(i,u.content.key),u.content.value&&checkElement(i,u.content.value)),i};return this.content&&(this.content.element&&checkElement(u,this.content),Array.isArray(this.content)&&this.content.reduce(checkElement,u)),i.isEmpty||(u=u.filter((s=>{let u=s.parents.map((i=>i.element));for(const s in i){const m=i[s],v=u.indexOf(m);if(-1===v)return!1;u=u.splice(0,v)}return!0}))),u}set(i){return this.content=i,this}equals(i){return m(this.toValue(),i)}getMetaProperty(i,s){if(!this.meta.hasKey(i)){if(this.isFrozen){const i=this.refract(s);return i.freeze(),i}this.meta.set(i,s)}return this.meta.get(i)}setMetaProperty(i,s){this.meta.set(i,s)}get element(){return this._storedElement||"element"}set element(i){this._storedElement=i}get content(){return this._content}set content(i){if(i instanceof Element)this._content=i;else if(i instanceof _)this.content=i.elements;else if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||"null"===i||null==i)this._content=i;else if(i instanceof v)this._content=i;else if(Array.isArray(i))this._content=i.map(this.refract);else{if("object"!=typeof i)throw new Error("Cannot set content to given value");this._content=Object.keys(i).map((s=>new this.MemberElement(s,i[s])))}}get meta(){if(!this._meta){if(this.isFrozen){const i=new this.ObjectElement;return i.freeze(),i}this._meta=new this.ObjectElement}return this._meta}set meta(i){i instanceof this.ObjectElement?this._meta=i:this.meta.set(i||{})}get attributes(){if(!this._attributes){if(this.isFrozen){const i=new this.ObjectElement;return i.freeze(),i}this._attributes=new this.ObjectElement}return this._attributes}set attributes(i){i instanceof this.ObjectElement?this._attributes=i:this.attributes.set(i||{})}get id(){return this.getMetaProperty("id","")}set id(i){this.setMetaProperty("id",i)}get classes(){return this.getMetaProperty("classes",[])}set classes(i){this.setMetaProperty("classes",i)}get title(){return this.getMetaProperty("title","")}set title(i){this.setMetaProperty("title",i)}get description(){return this.getMetaProperty("description","")}set description(i){this.setMetaProperty("description",i)}get links(){return this.getMetaProperty("links",[])}set links(i){this.setMetaProperty("links",i)}get isFrozen(){return Object.isFrozen(this)}get parents(){let{parent:i}=this;const s=new _;for(;i;)s.push(i),i=i.parent;return s}get children(){if(Array.isArray(this.content))return new _(this.content);if(this.content instanceof v){const i=new _([this.content.key]);return this.content.value&&i.push(this.content.value),i}return this.content instanceof Element?new _([this.content]):new _}get recursiveChildren(){const i=new _;return this.children.forEach((s=>{i.push(s),s.recursiveChildren.forEach((s=>{i.push(s)}))})),i}}i.exports=Element},5946:(i,s,u)=>{const m=u(17645),v=u(3079);i.exports=class MemberElement extends v{constructor(i,s,u,v){super(new m,u,v),this.element="member",this.key=i,this.value=s}get key(){return this.content.key}set key(i){this.content.key=this.refract(i)}get value(){return this.content.value}set value(i){this.content.value=this.refract(i)}}},96295:(i,s,u)=>{const m=u(3079);i.exports=class NullElement extends m{constructor(i,s,u){super(i||null,s,u),this.element="null"}primitive(){return"null"}set(){return new Error("Cannot set the value of null")}}},91090:(i,s,u)=>{const m=u(3079);i.exports=class NumberElement extends m{constructor(i,s,u){super(i,s,u),this.element="number"}primitive(){return"number"}}},76735:(i,s,u)=>{const m=u(94885),v=u(13218),_=u(35804),j=u(5946),M=u(87526);i.exports=class ObjectElement extends _{constructor(i,s,u){super(i||[],s,u),this.element="object"}primitive(){return"object"}toValue(){return this.content.reduce(((i,s)=>(i[s.key.toValue()]=s.value?s.value.toValue():void 0,i)),{})}get(i){const s=this.getMember(i);if(s)return s.value}getMember(i){if(void 0!==i)return this.content.find((s=>s.key.toValue()===i))}remove(i){let s=null;return this.content=this.content.filter((u=>u.key.toValue()!==i||(s=u,!1))),s}getKey(i){const s=this.getMember(i);if(s)return s.key}set(i,s){if(v(i))return Object.keys(i).forEach((s=>{this.set(s,i[s])})),this;const u=i,m=this.getMember(u);return m?m.value=s:this.content.push(new j(u,s)),this}keys(){return this.content.map((i=>i.key.toValue()))}values(){return this.content.map((i=>i.value.toValue()))}hasKey(i){return this.content.some((s=>s.key.equals(i)))}items(){return this.content.map((i=>[i.key.toValue(),i.value.toValue()]))}map(i,s){return this.content.map((u=>i.bind(s)(u.value,u.key,u)))}compactMap(i,s){const u=[];return this.forEach(((m,v,_)=>{const j=i.bind(s)(m,v,_);j&&u.push(j)})),u}filter(i,s){return new M(this.content).filter(i,s)}reject(i,s){return this.filter(m(i),s)}forEach(i,s){return this.content.forEach((u=>i.bind(s)(u.value,u.key,u)))}}},16036:(i,s,u)=>{const m=u(3079);i.exports=class StringElement extends m{constructor(i,s,u){super(i,s,u),this.element="string"}primitive(){return"string"}get length(){return this.content.length}}},3414:(i,s,u)=>{const m=u(28219);i.exports=class JSON06Serialiser extends m{serialise(i){if(!(i instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${i}\` is not an Element instance`);let s;i._attributes&&i.attributes.get("variable")&&(s=i.attributes.get("variable"));const u={element:i.element};i._meta&&i._meta.length>0&&(u.meta=this.serialiseObject(i.meta));const m="enum"===i.element||-1!==i.attributes.keys().indexOf("enumerations");if(m){const s=this.enumSerialiseAttributes(i);s&&(u.attributes=s)}else if(i._attributes&&i._attributes.length>0){let{attributes:m}=i;m.get("metadata")&&(m=m.clone(),m.set("meta",m.get("metadata")),m.remove("metadata")),"member"===i.element&&s&&(m=m.clone(),m.remove("variable")),m.length>0&&(u.attributes=this.serialiseObject(m))}if(m)u.content=this.enumSerialiseContent(i,u);else if(this[`${i.element}SerialiseContent`])u.content=this[`${i.element}SerialiseContent`](i,u);else if(void 0!==i.content){let m;s&&i.content.key?(m=i.content.clone(),m.key.attributes.set("variable",s),m=this.serialiseContent(m)):m=this.serialiseContent(i.content),this.shouldSerialiseContent(i,m)&&(u.content=m)}else this.shouldSerialiseContent(i,i.content)&&i instanceof this.namespace.elements.Array&&(u.content=[]);return u}shouldSerialiseContent(i,s){return"parseResult"===i.element||"httpRequest"===i.element||"httpResponse"===i.element||"category"===i.element||"link"===i.element||void 0!==s&&(!Array.isArray(s)||0!==s.length)}refSerialiseContent(i,s){return delete s.attributes,{href:i.toValue(),path:i.path.toValue()}}sourceMapSerialiseContent(i){return i.toValue()}dataStructureSerialiseContent(i){return[this.serialiseContent(i.content)]}enumSerialiseAttributes(i){const s=i.attributes.clone(),u=s.remove("enumerations")||new this.namespace.elements.Array([]),m=s.get("default");let v=s.get("samples")||new this.namespace.elements.Array([]);if(m&&m.content&&(m.content.attributes&&m.content.attributes.remove("typeAttributes"),s.set("default",new this.namespace.elements.Array([m.content]))),v.forEach((i=>{i.content&&i.content.element&&i.content.attributes.remove("typeAttributes")})),i.content&&0!==u.length&&v.unshift(i.content),v=v.map((i=>i instanceof this.namespace.elements.Array?[i]:new this.namespace.elements.Array([i.content]))),v.length&&s.set("samples",v),s.length>0)return this.serialiseObject(s)}enumSerialiseContent(i){if(i._attributes){const s=i.attributes.get("enumerations");if(s&&s.length>0)return s.content.map((i=>{const s=i.clone();return s.attributes.remove("typeAttributes"),this.serialise(s)}))}if(i.content){const s=i.content.clone();return s.attributes.remove("typeAttributes"),[this.serialise(s)]}return[]}deserialise(i){if("string"==typeof i)return new this.namespace.elements.String(i);if("number"==typeof i)return new this.namespace.elements.Number(i);if("boolean"==typeof i)return new this.namespace.elements.Boolean(i);if(null===i)return new this.namespace.elements.Null;if(Array.isArray(i))return new this.namespace.elements.Array(i.map(this.deserialise,this));const s=this.namespace.getElementClass(i.element),u=new s;u.element!==i.element&&(u.element=i.element),i.meta&&this.deserialiseObject(i.meta,u.meta),i.attributes&&this.deserialiseObject(i.attributes,u.attributes);const m=this.deserialiseContent(i.content);if(void 0===m&&null!==u.content||(u.content=m),"enum"===u.element){u.content&&u.attributes.set("enumerations",u.content);let i=u.attributes.get("samples");if(u.attributes.remove("samples"),i){const m=i;i=new this.namespace.elements.Array,m.forEach((m=>{m.forEach((m=>{const v=new s(m);v.element=u.element,i.push(v)}))}));const v=i.shift();u.content=v?v.content:void 0,u.attributes.set("samples",i)}else u.content=void 0;let m=u.attributes.get("default");if(m&&m.length>0){m=m.get(0);const i=new s(m);i.element=u.element,u.attributes.set("default",i)}}else if("dataStructure"===u.element&&Array.isArray(u.content))[u.content]=u.content;else if("category"===u.element){const i=u.attributes.get("meta");i&&(u.attributes.set("metadata",i),u.attributes.remove("meta"))}else"member"===u.element&&u.key&&u.key._attributes&&u.key._attributes.getValue("variable")&&(u.attributes.set("variable",u.key.attributes.get("variable")),u.key.attributes.remove("variable"));return u}serialiseContent(i){if(i instanceof this.namespace.elements.Element)return this.serialise(i);if(i instanceof this.namespace.KeyValuePair){const s={key:this.serialise(i.key)};return i.value&&(s.value=this.serialise(i.value)),s}return i&&i.map?i.map(this.serialise,this):i}deserialiseContent(i){if(i){if(i.element)return this.deserialise(i);if(i.key){const s=new this.namespace.KeyValuePair(this.deserialise(i.key));return i.value&&(s.value=this.deserialise(i.value)),s}if(i.map)return i.map(this.deserialise,this)}return i}shouldRefract(i){return!!(i._attributes&&i.attributes.keys().length||i._meta&&i.meta.keys().length)||"enum"!==i.element&&(i.element!==i.primitive()||"member"===i.element)}convertKeyToRefract(i,s){return this.shouldRefract(s)?this.serialise(s):"enum"===s.element?this.serialiseEnum(s):"array"===s.element?s.map((s=>this.shouldRefract(s)||"default"===i?this.serialise(s):"array"===s.element||"object"===s.element||"enum"===s.element?s.children.map((i=>this.serialise(i))):s.toValue())):"object"===s.element?(s.content||[]).map(this.serialise,this):s.toValue()}serialiseEnum(i){return i.children.map((i=>this.serialise(i)))}serialiseObject(i){const s={};return i.forEach(((i,u)=>{if(i){const m=u.toValue();s[m]=this.convertKeyToRefract(m,i)}})),s}deserialiseObject(i,s){Object.keys(i).forEach((u=>{s.set(u,this.deserialise(i[u]))}))}}},28219:i=>{i.exports=class JSONSerialiser{constructor(i){this.namespace=i||new this.Namespace}serialise(i){if(!(i instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${i}\` is not an Element instance`);const s={element:i.element};i._meta&&i._meta.length>0&&(s.meta=this.serialiseObject(i.meta)),i._attributes&&i._attributes.length>0&&(s.attributes=this.serialiseObject(i.attributes));const u=this.serialiseContent(i.content);return void 0!==u&&(s.content=u),s}deserialise(i){if(!i.element)throw new Error("Given value is not an object containing an element name");const s=new(this.namespace.getElementClass(i.element));s.element!==i.element&&(s.element=i.element),i.meta&&this.deserialiseObject(i.meta,s.meta),i.attributes&&this.deserialiseObject(i.attributes,s.attributes);const u=this.deserialiseContent(i.content);return void 0===u&&null!==s.content||(s.content=u),s}serialiseContent(i){if(i instanceof this.namespace.elements.Element)return this.serialise(i);if(i instanceof this.namespace.KeyValuePair){const s={key:this.serialise(i.key)};return i.value&&(s.value=this.serialise(i.value)),s}if(i&&i.map){if(0===i.length)return;return i.map(this.serialise,this)}return i}deserialiseContent(i){if(i){if(i.element)return this.deserialise(i);if(i.key){const s=new this.namespace.KeyValuePair(this.deserialise(i.key));return i.value&&(s.value=this.deserialise(i.value)),s}if(i.map)return i.map(this.deserialise,this)}return i}serialiseObject(i){const s={};if(i.forEach(((i,u)=>{i&&(s[u.toValue()]=this.serialise(i))})),0!==Object.keys(s).length)return s}deserialiseObject(i,s){Object.keys(i).forEach((u=>{s.set(u,this.deserialise(i[u]))}))}}},27418:i=>{"use strict";var s=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable;i.exports=function shouldUseNative(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de","5"===Object.getOwnPropertyNames(i)[0])return!1;for(var s={},u=0;u<10;u++)s["_"+String.fromCharCode(u)]=u;if("0123456789"!==Object.getOwnPropertyNames(s).map((function(i){return s[i]})).join(""))return!1;var m={};return"abcdefghijklmnopqrst".split("").forEach((function(i){m[i]=i})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},m)).join("")}catch(i){return!1}}()?Object.assign:function(i,v){for(var _,j,M=function toObject(i){if(null==i)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}(i),$=1;${var m="function"==typeof Map&&Map.prototype,v=Object.getOwnPropertyDescriptor&&m?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,_=m&&v&&"function"==typeof v.get?v.get:null,j=m&&Map.prototype.forEach,M="function"==typeof Set&&Set.prototype,$=Object.getOwnPropertyDescriptor&&M?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,W=M&&$&&"function"==typeof $.get?$.get:null,X=M&&Set.prototype.forEach,Y="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,Z="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,ee="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ae=Boolean.prototype.valueOf,ie=Object.prototype.toString,le=Function.prototype.toString,ce=String.prototype.match,pe=String.prototype.slice,de=String.prototype.replace,fe=String.prototype.toUpperCase,ye=String.prototype.toLowerCase,be=RegExp.prototype.test,_e=Array.prototype.concat,we=Array.prototype.join,Se=Array.prototype.slice,xe=Math.floor,Pe="function"==typeof BigInt?BigInt.prototype.valueOf:null,Ie=Object.getOwnPropertySymbols,Te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Re="function"==typeof Symbol&&"object"==typeof Symbol.iterator,qe="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Re||"symbol")?Symbol.toStringTag:null,ze=Object.prototype.propertyIsEnumerable,Ve=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(i){return i.__proto__}:null);function addNumericSeparator(i,s){if(i===1/0||i===-1/0||i!=i||i&&i>-1e3&&i<1e3||be.call(/e/,s))return s;var u=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof i){var m=i<0?-xe(-i):xe(i);if(m!==i){var v=String(m),_=pe.call(s,v.length+1);return de.call(v,u,"$&_")+"."+de.call(de.call(_,/([0-9]{3})/g,"$&_"),/_$/,"")}}return de.call(s,u,"$&_")}var We=u(24654),He=We.custom,Xe=isSymbol(He)?He:null;function wrapQuotes(i,s,u){var m="double"===(u.quoteStyle||s)?'"':"'";return m+i+m}function quote(i){return de.call(String(i),/"/g,""")}function isArray(i){return!("[object Array]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}function isRegExp(i){return!("[object RegExp]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}function isSymbol(i){if(Re)return i&&"object"==typeof i&&i instanceof Symbol;if("symbol"==typeof i)return!0;if(!i||"object"!=typeof i||!Te)return!1;try{return Te.call(i),!0}catch(i){}return!1}i.exports=function inspect_(i,s,u,m){var v=s||{};if(has(v,"quoteStyle")&&"single"!==v.quoteStyle&&"double"!==v.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has(v,"maxStringLength")&&("number"==typeof v.maxStringLength?v.maxStringLength<0&&v.maxStringLength!==1/0:null!==v.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var M=!has(v,"customInspect")||v.customInspect;if("boolean"!=typeof M&&"symbol"!==M)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has(v,"indent")&&null!==v.indent&&"\t"!==v.indent&&!(parseInt(v.indent,10)===v.indent&&v.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has(v,"numericSeparator")&&"boolean"!=typeof v.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var $=v.numericSeparator;if(void 0===i)return"undefined";if(null===i)return"null";if("boolean"==typeof i)return i?"true":"false";if("string"==typeof i)return inspectString(i,v);if("number"==typeof i){if(0===i)return 1/0/i>0?"0":"-0";var ie=String(i);return $?addNumericSeparator(i,ie):ie}if("bigint"==typeof i){var fe=String(i)+"n";return $?addNumericSeparator(i,fe):fe}var be=void 0===v.depth?5:v.depth;if(void 0===u&&(u=0),u>=be&&be>0&&"object"==typeof i)return isArray(i)?"[Array]":"[Object]";var xe=function getIndent(i,s){var u;if("\t"===i.indent)u="\t";else{if(!("number"==typeof i.indent&&i.indent>0))return null;u=we.call(Array(i.indent+1)," ")}return{base:u,prev:we.call(Array(s+1),u)}}(v,u);if(void 0===m)m=[];else if(indexOf(m,i)>=0)return"[Circular]";function inspect(i,s,_){if(s&&(m=Se.call(m)).push(s),_){var j={depth:v.depth};return has(v,"quoteStyle")&&(j.quoteStyle=v.quoteStyle),inspect_(i,j,u+1,m)}return inspect_(i,v,u+1,m)}if("function"==typeof i&&!isRegExp(i)){var Ie=function nameOf(i){if(i.name)return i.name;var s=ce.call(le.call(i),/^function\s*([\w$]+)/);if(s)return s[1];return null}(i),He=arrObjKeys(i,inspect);return"[Function"+(Ie?": "+Ie:" (anonymous)")+"]"+(He.length>0?" { "+we.call(He,", ")+" }":"")}if(isSymbol(i)){var Ye=Re?de.call(String(i),/^(Symbol\(.*\))_[^)]*$/,"$1"):Te.call(i);return"object"!=typeof i||Re?Ye:markBoxed(Ye)}if(function isElement(i){if(!i||"object"!=typeof i)return!1;if("undefined"!=typeof HTMLElement&&i instanceof HTMLElement)return!0;return"string"==typeof i.nodeName&&"function"==typeof i.getAttribute}(i)){for(var Qe="<"+ye.call(String(i.nodeName)),et=i.attributes||[],tt=0;tt"}if(isArray(i)){if(0===i.length)return"[]";var rt=arrObjKeys(i,inspect);return xe&&!function singleLineValues(i){for(var s=0;s=0)return!1;return!0}(rt)?"["+indentedJoin(rt,xe)+"]":"[ "+we.call(rt,", ")+" ]"}if(function isError(i){return!("[object Error]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i)){var nt=arrObjKeys(i,inspect);return"cause"in Error.prototype||!("cause"in i)||ze.call(i,"cause")?0===nt.length?"["+String(i)+"]":"{ ["+String(i)+"] "+we.call(nt,", ")+" }":"{ ["+String(i)+"] "+we.call(_e.call("[cause]: "+inspect(i.cause),nt),", ")+" }"}if("object"==typeof i&&M){if(Xe&&"function"==typeof i[Xe]&&We)return We(i,{depth:be-u});if("symbol"!==M&&"function"==typeof i.inspect)return i.inspect()}if(function isMap(i){if(!_||!i||"object"!=typeof i)return!1;try{_.call(i);try{W.call(i)}catch(i){return!0}return i instanceof Map}catch(i){}return!1}(i)){var ot=[];return j&&j.call(i,(function(s,u){ot.push(inspect(u,i,!0)+" => "+inspect(s,i))})),collectionOf("Map",_.call(i),ot,xe)}if(function isSet(i){if(!W||!i||"object"!=typeof i)return!1;try{W.call(i);try{_.call(i)}catch(i){return!0}return i instanceof Set}catch(i){}return!1}(i)){var at=[];return X&&X.call(i,(function(s){at.push(inspect(s,i))})),collectionOf("Set",W.call(i),at,xe)}if(function isWeakMap(i){if(!Y||!i||"object"!=typeof i)return!1;try{Y.call(i,Y);try{Z.call(i,Z)}catch(i){return!0}return i instanceof WeakMap}catch(i){}return!1}(i))return weakCollectionOf("WeakMap");if(function isWeakSet(i){if(!Z||!i||"object"!=typeof i)return!1;try{Z.call(i,Z);try{Y.call(i,Y)}catch(i){return!0}return i instanceof WeakSet}catch(i){}return!1}(i))return weakCollectionOf("WeakSet");if(function isWeakRef(i){if(!ee||!i||"object"!=typeof i)return!1;try{return ee.call(i),!0}catch(i){}return!1}(i))return weakCollectionOf("WeakRef");if(function isNumber(i){return!("[object Number]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(inspect(Number(i)));if(function isBigInt(i){if(!i||"object"!=typeof i||!Pe)return!1;try{return Pe.call(i),!0}catch(i){}return!1}(i))return markBoxed(inspect(Pe.call(i)));if(function isBoolean(i){return!("[object Boolean]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(ae.call(i));if(function isString(i){return!("[object String]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(inspect(String(i)));if(!function isDate(i){return!("[object Date]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i)&&!isRegExp(i)){var it=arrObjKeys(i,inspect),st=Ve?Ve(i)===Object.prototype:i instanceof Object||i.constructor===Object,lt=i instanceof Object?"":"null prototype",ct=!st&&qe&&Object(i)===i&&qe in i?pe.call(toStr(i),8,-1):lt?"Object":"",ut=(st||"function"!=typeof i.constructor?"":i.constructor.name?i.constructor.name+" ":"")+(ct||lt?"["+we.call(_e.call([],ct||[],lt||[]),": ")+"] ":"");return 0===it.length?ut+"{}":xe?ut+"{"+indentedJoin(it,xe)+"}":ut+"{ "+we.call(it,", ")+" }"}return String(i)};var Ye=Object.prototype.hasOwnProperty||function(i){return i in this};function has(i,s){return Ye.call(i,s)}function toStr(i){return ie.call(i)}function indexOf(i,s){if(i.indexOf)return i.indexOf(s);for(var u=0,m=i.length;us.maxStringLength){var u=i.length-s.maxStringLength,m="... "+u+" more character"+(u>1?"s":"");return inspectString(pe.call(i,0,s.maxStringLength),s)+m}return wrapQuotes(de.call(de.call(i,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte),"single",s)}function lowbyte(i){var s=i.charCodeAt(0),u={8:"b",9:"t",10:"n",12:"f",13:"r"}[s];return u?"\\"+u:"\\x"+(s<16?"0":"")+fe.call(s.toString(16))}function markBoxed(i){return"Object("+i+")"}function weakCollectionOf(i){return i+" { ? }"}function collectionOf(i,s,u,m){return i+" ("+s+") {"+(m?indentedJoin(u,m):we.call(u,", "))+"}"}function indentedJoin(i,s){if(0===i.length)return"";var u="\n"+s.prev+s.base;return u+we.call(i,","+u)+"\n"+s.prev}function arrObjKeys(i,s){var u=isArray(i),m=[];if(u){m.length=i.length;for(var v=0;v{var s,u,m=i.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(i){if(s===setTimeout)return setTimeout(i,0);if((s===defaultSetTimout||!s)&&setTimeout)return s=setTimeout,setTimeout(i,0);try{return s(i,0)}catch(u){try{return s.call(null,i,0)}catch(u){return s.call(this,i,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(i){s=defaultSetTimout}try{u="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(i){u=defaultClearTimeout}}();var v,_=[],j=!1,M=-1;function cleanUpNextTick(){j&&v&&(j=!1,v.length?_=v.concat(_):M=-1,_.length&&drainQueue())}function drainQueue(){if(!j){var i=runTimeout(cleanUpNextTick);j=!0;for(var s=_.length;s;){for(v=_,_=[];++M1)for(var u=1;u{"use strict";var m=u(50414);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,i.exports=function(){function shim(i,s,u,v,_,j){if(j!==m){var M=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw M.name="Invariant Violation",M}}function getShim(){return shim}shim.isRequired=shim;var i={array:shim,bigint:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return i.PropTypes=i,i}},45697:(i,s,u)=>{i.exports=u(92703)()},50414:i=>{"use strict";i.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},55798:i=>{"use strict";var s=String.prototype.replace,u=/%20/g,m="RFC1738",v="RFC3986";i.exports={default:v,formatters:{RFC1738:function(i){return s.call(i,u,"+")},RFC3986:function(i){return String(i)}},RFC1738:m,RFC3986:v}},80129:(i,s,u)=>{"use strict";var m=u(58261),v=u(55235),_=u(55798);i.exports={formats:_,parse:v,stringify:m}},55235:(i,s,u)=>{"use strict";var m=u(12769),v=Object.prototype.hasOwnProperty,_=Array.isArray,j={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:m.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(i){return i.replace(/&#(\d+);/g,(function(i,s){return String.fromCharCode(parseInt(s,10))}))},parseArrayValue=function(i,s){return i&&"string"==typeof i&&s.comma&&i.indexOf(",")>-1?i.split(","):i},M=function parseQueryStringKeys(i,s,u,m){if(i){var _=u.allowDots?i.replace(/\.([^.[]+)/g,"[$1]"):i,j=/(\[[^[\]]*])/g,M=u.depth>0&&/(\[[^[\]]*])/.exec(_),$=M?_.slice(0,M.index):_,W=[];if($){if(!u.plainObjects&&v.call(Object.prototype,$)&&!u.allowPrototypes)return;W.push($)}for(var X=0;u.depth>0&&null!==(M=j.exec(_))&&X=0;--_){var j,M=i[_];if("[]"===M&&u.parseArrays)j=[].concat(v);else{j=u.plainObjects?Object.create(null):{};var $="["===M.charAt(0)&&"]"===M.charAt(M.length-1)?M.slice(1,-1):M,W=parseInt($,10);u.parseArrays||""!==$?!isNaN(W)&&M!==$&&String(W)===$&&W>=0&&u.parseArrays&&W<=u.arrayLimit?(j=[])[W]=v:"__proto__"!==$&&(j[$]=v):j={0:v}}v=j}return v}(W,s,u,m)}};i.exports=function(i,s){var u=function normalizeParseOptions(i){if(!i)return j;if(null!==i.decoder&&void 0!==i.decoder&&"function"!=typeof i.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==i.charset&&"utf-8"!==i.charset&&"iso-8859-1"!==i.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var s=void 0===i.charset?j.charset:i.charset;return{allowDots:void 0===i.allowDots?j.allowDots:!!i.allowDots,allowPrototypes:"boolean"==typeof i.allowPrototypes?i.allowPrototypes:j.allowPrototypes,allowSparse:"boolean"==typeof i.allowSparse?i.allowSparse:j.allowSparse,arrayLimit:"number"==typeof i.arrayLimit?i.arrayLimit:j.arrayLimit,charset:s,charsetSentinel:"boolean"==typeof i.charsetSentinel?i.charsetSentinel:j.charsetSentinel,comma:"boolean"==typeof i.comma?i.comma:j.comma,decoder:"function"==typeof i.decoder?i.decoder:j.decoder,delimiter:"string"==typeof i.delimiter||m.isRegExp(i.delimiter)?i.delimiter:j.delimiter,depth:"number"==typeof i.depth||!1===i.depth?+i.depth:j.depth,ignoreQueryPrefix:!0===i.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof i.interpretNumericEntities?i.interpretNumericEntities:j.interpretNumericEntities,parameterLimit:"number"==typeof i.parameterLimit?i.parameterLimit:j.parameterLimit,parseArrays:!1!==i.parseArrays,plainObjects:"boolean"==typeof i.plainObjects?i.plainObjects:j.plainObjects,strictNullHandling:"boolean"==typeof i.strictNullHandling?i.strictNullHandling:j.strictNullHandling}}(s);if(""===i||null==i)return u.plainObjects?Object.create(null):{};for(var $="string"==typeof i?function parseQueryStringValues(i,s){var u,M={},$=s.ignoreQueryPrefix?i.replace(/^\?/,""):i,W=s.parameterLimit===1/0?void 0:s.parameterLimit,X=$.split(s.delimiter,W),Y=-1,Z=s.charset;if(s.charsetSentinel)for(u=0;u-1&&(ae=_(ae)?[ae]:ae),v.call(M,ee)?M[ee]=m.combine(M[ee],ae):M[ee]=ae}return M}(i,u):i,W=u.plainObjects?Object.create(null):{},X=Object.keys($),Y=0;Y{"use strict";var m=u(37478),v=u(12769),_=u(55798),j=Object.prototype.hasOwnProperty,M={brackets:function brackets(i){return i+"[]"},comma:"comma",indices:function indices(i,s){return i+"["+s+"]"},repeat:function repeat(i){return i}},$=Array.isArray,W=String.prototype.split,X=Array.prototype.push,pushToArray=function(i,s){X.apply(i,$(s)?s:[s])},Y=Date.prototype.toISOString,Z=_.default,ee={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:v.encode,encodeValuesOnly:!1,format:Z,formatter:_.formatters[Z],indices:!1,serializeDate:function serializeDate(i){return Y.call(i)},skipNulls:!1,strictNullHandling:!1},ae={},ie=function stringify(i,s,u,_,j,M,X,Y,Z,ie,le,ce,pe,de,fe,ye){for(var be=i,_e=ye,we=0,Se=!1;void 0!==(_e=_e.get(ae))&&!Se;){var xe=_e.get(i);if(we+=1,void 0!==xe){if(xe===we)throw new RangeError("Cyclic object value");Se=!0}void 0===_e.get(ae)&&(we=0)}if("function"==typeof Y?be=Y(s,be):be instanceof Date?be=le(be):"comma"===u&&$(be)&&(be=v.maybeMap(be,(function(i){return i instanceof Date?le(i):i}))),null===be){if(j)return X&&!de?X(s,ee.encoder,fe,"key",ce):s;be=""}if(function isNonNullishPrimitive(i){return"string"==typeof i||"number"==typeof i||"boolean"==typeof i||"symbol"==typeof i||"bigint"==typeof i}(be)||v.isBuffer(be)){if(X){var Pe=de?s:X(s,ee.encoder,fe,"key",ce);if("comma"===u&&de){for(var Ie=W.call(String(be),","),Te="",Re=0;Re0?be.join(",")||null:void 0}];else if($(Y))qe=Y;else{var Ve=Object.keys(be);qe=Z?Ve.sort(Z):Ve}for(var We=_&&$(be)&&1===be.length?s+"[]":s,He=0;He0?fe+de:""}},12769:(i,s,u)=>{"use strict";var m=u(55798),v=Object.prototype.hasOwnProperty,_=Array.isArray,j=function(){for(var i=[],s=0;s<256;++s)i.push("%"+((s<16?"0":"")+s.toString(16)).toUpperCase());return i}(),M=function arrayToObject(i,s){for(var u=s&&s.plainObjects?Object.create(null):{},m=0;m1;){var s=i.pop(),u=s.obj[s.prop];if(_(u)){for(var m=[],v=0;v=48&&X<=57||X>=65&&X<=90||X>=97&&X<=122||_===m.RFC1738&&(40===X||41===X)?$+=M.charAt(W):X<128?$+=j[X]:X<2048?$+=j[192|X>>6]+j[128|63&X]:X<55296||X>=57344?$+=j[224|X>>12]+j[128|X>>6&63]+j[128|63&X]:(W+=1,X=65536+((1023&X)<<10|1023&M.charCodeAt(W)),$+=j[240|X>>18]+j[128|X>>12&63]+j[128|X>>6&63]+j[128|63&X])}return $},isBuffer:function isBuffer(i){return!(!i||"object"!=typeof i)&&!!(i.constructor&&i.constructor.isBuffer&&i.constructor.isBuffer(i))},isRegExp:function isRegExp(i){return"[object RegExp]"===Object.prototype.toString.call(i)},maybeMap:function maybeMap(i,s){if(_(i)){for(var u=[],m=0;m{"use strict";var u=Object.prototype.hasOwnProperty;function decode(i){try{return decodeURIComponent(i.replace(/\+/g," "))}catch(i){return null}}function encode(i){try{return encodeURIComponent(i)}catch(i){return null}}s.stringify=function querystringify(i,s){s=s||"";var m,v,_=[];for(v in"string"!=typeof s&&(s="?"),i)if(u.call(i,v)){if((m=i[v])||null!=m&&!isNaN(m)||(m=""),v=encode(v),m=encode(m),null===v||null===m)continue;_.push(v+"="+m)}return _.length?s+_.join("&"):""},s.parse=function querystring(i){for(var s,u=/([^=?#&]+)=?([^&]*)/g,m={};s=u.exec(i);){var v=decode(s[1]),_=decode(s[2]);null===v||null===_||v in m||(m[v]=_)}return m}},14419:(i,s,u)=>{const m=u(60697),v=u(69450),_=m.types;i.exports=class RandExp{constructor(i,s){if(this._setDefaults(i),i instanceof RegExp)this.ignoreCase=i.ignoreCase,this.multiline=i.multiline,i=i.source;else{if("string"!=typeof i)throw new Error("Expected a regexp or string");this.ignoreCase=s&&-1!==s.indexOf("i"),this.multiline=s&&-1!==s.indexOf("m")}this.tokens=m(i)}_setDefaults(i){this.max=null!=i.max?i.max:null!=RandExp.prototype.max?RandExp.prototype.max:100,this.defaultRange=i.defaultRange?i.defaultRange:this.defaultRange.clone(),i.randInt&&(this.randInt=i.randInt)}gen(){return this._gen(this.tokens,[])}_gen(i,s){var u,m,v,j,M;switch(i.type){case _.ROOT:case _.GROUP:if(i.followedBy||i.notFollowedBy)return"";for(i.remember&&void 0===i.groupNumber&&(i.groupNumber=s.push(null)-1),m="",j=0,M=(u=i.options?this._randSelect(i.options):i.stack).length;j{"use strict";var m=u(34155),v=65536,_=4294967295;var j=u(89509).Buffer,M=u.g.crypto||u.g.msCrypto;M&&M.getRandomValues?i.exports=function randomBytes(i,s){if(i>_)throw new RangeError("requested too many random bytes");var u=j.allocUnsafe(i);if(i>0)if(i>v)for(var $=0;${"use strict";function _typeof(i){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},_typeof(i)}Object.defineProperty(s,"__esModule",{value:!0}),s.CopyToClipboard=void 0;var m=_interopRequireDefault(u(67294)),v=_interopRequireDefault(u(20640)),_=["text","onCopy","options","children"];function _interopRequireDefault(i){return i&&i.__esModule?i:{default:i}}function ownKeys(i,s){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(i);s&&(m=m.filter((function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable}))),u.push.apply(u,m)}return u}function _objectSpread(i){for(var s=1;s=0||(v[u]=i[u]);return v}(i,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||Object.prototype.propertyIsEnumerable.call(i,u)&&(v[u]=i[u])}return v}function _defineProperties(i,s){for(var u=0;u{"use strict";var m=u(74300).CopyToClipboard;m.CopyToClipboard=m,i.exports=m},53441:(i,s,u)=>{"use strict";function _typeof(i){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},_typeof(i)}Object.defineProperty(s,"__esModule",{value:!0}),s.DebounceInput=void 0;var m=_interopRequireDefault(u(67294)),v=_interopRequireDefault(u(91296)),_=["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"];function _interopRequireDefault(i){return i&&i.__esModule?i:{default:i}}function _objectWithoutProperties(i,s){if(null==i)return{};var u,m,v=function _objectWithoutPropertiesLoose(i,s){if(null==i)return{};var u,m,v={},_=Object.keys(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||(v[u]=i[u]);return v}(i,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||Object.prototype.propertyIsEnumerable.call(i,u)&&(v[u]=i[u])}return v}function ownKeys(i,s){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(i);s&&(m=m.filter((function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable}))),u.push.apply(u,m)}return u}function _objectSpread(i){for(var s=1;s=m?u.notify(i):s.length>v.length&&u.notify(_objectSpread(_objectSpread({},i),{},{target:_objectSpread(_objectSpread({},i.target),{},{value:""})}))}))})),_defineProperty(_assertThisInitialized(u),"onKeyDown",(function(i){"Enter"===i.key&&u.forceNotify(i);var s=u.props.onKeyDown;s&&(i.persist(),s(i))})),_defineProperty(_assertThisInitialized(u),"onBlur",(function(i){u.forceNotify(i);var s=u.props.onBlur;s&&(i.persist(),s(i))})),_defineProperty(_assertThisInitialized(u),"createNotifier",(function(i){if(i<0)u.notify=function(){return null};else if(0===i)u.notify=u.doNotify;else{var s=(0,v.default)((function(i){u.isDebouncing=!1,u.doNotify(i)}),i);u.notify=function(i){u.isDebouncing=!0,s(i)},u.flush=function(){return s.flush()},u.cancel=function(){u.isDebouncing=!1,s.cancel()}}})),_defineProperty(_assertThisInitialized(u),"doNotify",(function(){u.props.onChange.apply(void 0,arguments)})),_defineProperty(_assertThisInitialized(u),"forceNotify",(function(i){var s=u.props.debounceTimeout;if(u.isDebouncing||!(s>0)){u.cancel&&u.cancel();var m=u.state.value,v=u.props.minLength;m.length>=v?u.doNotify(i):u.doNotify(_objectSpread(_objectSpread({},i),{},{target:_objectSpread(_objectSpread({},i.target),{},{value:m})}))}})),u.isDebouncing=!1,u.state={value:void 0===i.value||null===i.value?"":i.value};var m=u.props.debounceTimeout;return u.createNotifier(m),u}return function _createClass(i,s,u){return s&&_defineProperties(i.prototype,s),u&&_defineProperties(i,u),Object.defineProperty(i,"prototype",{writable:!1}),i}(DebounceInput,[{key:"componentDidUpdate",value:function componentDidUpdate(i){if(!this.isDebouncing){var s=this.props,u=s.value,m=s.debounceTimeout,v=i.debounceTimeout,_=i.value,j=this.state.value;void 0!==u&&_!==u&&j!==u&&this.setState({value:u}),m!==v&&this.createNotifier(m)}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.flush&&this.flush()}},{key:"render",value:function render(){var i,s,u=this.props,v=u.element,j=(u.onChange,u.value,u.minLength,u.debounceTimeout,u.forceNotifyByEnter),M=u.forceNotifyOnBlur,$=u.onKeyDown,W=u.onBlur,X=u.inputRef,Y=_objectWithoutProperties(u,_),Z=this.state.value;i=j?{onKeyDown:this.onKeyDown}:$?{onKeyDown:$}:{},s=M?{onBlur:this.onBlur}:W?{onBlur:W}:{};var ee=X?{ref:X}:{};return m.default.createElement(v,_objectSpread(_objectSpread(_objectSpread(_objectSpread({},Y),{},{onChange:this.onChange,value:Z},i),s),ee))}}]),DebounceInput}(m.default.PureComponent);s.DebounceInput=j,_defineProperty(j,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(i,s,u)=>{"use strict";var m=u(53441).DebounceInput;m.DebounceInput=m,i.exports=m},64448:(i,s,u)=>{"use strict";var m=u(67294),v=u(27418),_=u(63840);function y(i){for(var s="https://reactjs.org/docs/error-decoder.html?invariant="+i,u=1;u
"},UC.link_close=function(){return""},UC.image=function(i,s,u){var m=' src="'+escapeHtml(i[s].src)+'"',v=i[s].title?' title="'+escapeHtml(replaceEntities(i[s].title))+'"':"";return""},UC.table_open=function(){return"\n"},UC.table_close=function(){return"
\n"},UC.thead_open=function(){return"\n"},UC.thead_close=function(){return"\n"},UC.tbody_open=function(){return"\n"},UC.tbody_close=function(){return"\n"},UC.tr_open=function(){return""},UC.tr_close=function(){return"\n"},UC.th_open=function(i,s){var u=i[s];return""},UC.th_close=function(){return""},UC.td_open=function(i,s){var u=i[s];return""},UC.td_close=function(){return""},UC.strong_open=function(){return""},UC.strong_close=function(){return""},UC.em_open=function(){return""},UC.em_close=function(){return""},UC.del_open=function(){return""},UC.del_close=function(){return""},UC.ins_open=function(){return""},UC.ins_close=function(){return""},UC.mark_open=function(){return""},UC.mark_close=function(){return""},UC.sub=function(i,s){return""+escapeHtml(i[s].content)+""},UC.sup=function(i,s){return""+escapeHtml(i[s].content)+""},UC.hardbreak=function(i,s,u){return u.xhtmlOut?"
\n":"
\n"},UC.softbreak=function(i,s,u){return u.breaks?u.xhtmlOut?"
\n":"
\n":"\n"},UC.text=function(i,s){return escapeHtml(i[s].content)},UC.htmlblock=function(i,s){return i[s].content},UC.htmltag=function(i,s){return i[s].content},UC.abbr_open=function(i,s){return''},UC.abbr_close=function(){return""},UC.footnote_ref=function(i,s){var u=Number(i[s].id+1).toString(),m="fnref"+u;return i[s].subId>0&&(m+=":"+i[s].subId),'['+u+"]"},UC.footnote_block_open=function(i,s,u){return(u.xhtmlOut?'
\n':'
\n')+'
\n
    \n'},UC.footnote_block_close=function(){return"
\n
\n"},UC.footnote_open=function(i,s){return'
  • '},UC.footnote_close=function(){return"
  • \n"},UC.footnote_anchor=function(i,s){var u="fnref"+Number(i[s].id+1).toString();return i[s].subId>0&&(u+=":"+i[s].subId),' '},UC.dl_open=function(){return"
    \n"},UC.dt_open=function(){return"
    "},UC.dd_open=function(){return"
    "},UC.dl_close=function(){return"
    \n"},UC.dt_close=function(){return"\n"},UC.dd_close=function(){return"

    =rS6a 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 PBL5?s*_c)syGH*%6C!l2 literal 0 HcmV?d00001 diff --git a/app/static/img/branded.svg b/app/static/img/branded.svg new file mode 100644 index 0000000..3de745a --- /dev/null +++ b/app/static/img/branded.svg @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/creator.png b/app/static/img/creator.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf9fc92631ad0ba14ae81197a80f7415008c925 GIT binary patch literal 13658 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

    +z4i=kMVk{6GF< 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%0De&5r=)a>*yp5kXekTI|*Wd~~fMwLD>CwTB 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

    \n"};var VC=UC.getBreak=function getBreak(i,s){return(s=nextToken(i,s))1)break;if(41===u&&--m<0)break;s++}return _!==s&&(v=unescapeMd(i.src.slice(_,s)),!!i.parser.validateLink(v)&&(i.linkContent=v,i.pos=s,!0))}function parseLinkTitle(i,s){var u,m=s,v=i.posMax,_=i.src.charCodeAt(s);if(34!==_&&39!==_&&40!==_)return!1;for(s++,40===_&&(_=41);s=i.length)&&!YC.test(i[s])}function replaceAt(i,s,u){return i.substr(0,s)+u+i.substr(s+1)}var QC=[["block",function block(i){i.inlineMode?i.tokens.push({type:"inline",content:i.src.replace(/\n/g," ").trim(),level:0,lines:[0,1],children:[]}):i.block.parse(i.src,i.options,i.env,i.tokens)}],["abbr",function abbr(i){var s,u,m,v,_=i.tokens;if(!i.inlineMode)for(s=1,u=_.length-1;s0?j[s].count:1,m=0;m=0;s--)if("text"===(_=v[s]).type){for($=0,j=_.content,X.lastIndex=0,W=_.level,M=[];Y=X.exec(j);)X.lastIndex>$&&M.push({type:"text",content:j.slice($,Y.index+Y[1].length),level:W}),M.push({type:"abbr_open",title:i.env.abbreviations[":"+Y[2]],level:W++}),M.push({type:"text",content:Y[2],level:W}),M.push({type:"abbr_close",level:--W}),$=X.lastIndex-Y[3].length;M.length&&($=0;_--)if("inline"===i.tokens[_].type)for(s=(v=i.tokens[_].children).length-1;s>=0;s--)"text"===(u=v[s]).type&&(m=replaceScopedAbbr(m=u.content),KC.test(m)&&(m=m.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),u.content=m)}],["smartquotes",function smartquotes(i){var s,u,m,v,_,j,M,$,W,X,Y,Z,ee,ae,ie,le,ce;if(i.options.typographer)for(ce=[],ie=i.tokens.length-1;ie>=0;ie--)if("inline"===i.tokens[ie].type)for(le=i.tokens[ie].children,ce.length=0,s=0;s=0&&!(ce[ee].level<=M);ee--);ce.length=ee+1,_=0,j=(m=u.content).length;e:for(;_=0&&(X=ce[ee],!(ce[ee].level=(v=i.eMarks[s])||42!==(u=i.src.charCodeAt(m++))&&45!==u&&43!==u||m=v)return-1;if((u=i.src.charCodeAt(m++))<48||u>57)return-1;for(;;){if(m>=v)return-1;if(!((u=i.src.charCodeAt(m++))>=48&&u<=57)){if(41===u||46===u)break;return-1}}return m=this.eMarks[i]},StateBlock.prototype.skipEmptyLines=function skipEmptyLines(i){for(var s=this.lineMax;iu;)if(s!==this.src.charCodeAt(--i))return i+1;return i},StateBlock.prototype.getLines=function getLines(i,s,u,m){var v,_,j,M,$,W=i;if(i>=s)return"";if(W+1===s)return _=this.bMarks[W]+Math.min(this.tShift[W],u),j=m?this.eMarks[W]+1:this.eMarks[W],this.src.slice(_,j);for(M=new Array(s-i),v=0;Wu&&($=u),$<0&&($=0),_=this.bMarks[W]+$,j=W+1]/,rj=/^<\/([a-zA-Z]{1,15})[\s>]/;function index_browser_getLine(i,s){var u=i.bMarks[s]+i.blkIndent,m=i.eMarks[s];return i.src.substr(u,m-u)}function skipMarker(i,s){var u,m,v=i.bMarks[s]+i.tShift[s],_=i.eMarks[s];return v>=_||126!==(m=i.src.charCodeAt(v++))&&58!==m||v===(u=i.skipSpaces(v))||u>=_?-1:u}var nj=[["code",function code(i,s,u){var m,v;if(i.tShift[s]-i.blkIndent<4)return!1;for(v=m=s+1;m=4))break;v=++m}return i.line=m,i.tokens.push({type:"code",content:i.getLines(s,v,4+i.blkIndent,!0),block:!0,lines:[s,i.line],level:i.level}),!0}],["fences",function fences(i,s,u,m){var v,_,j,M,$,W=!1,X=i.bMarks[s]+i.tShift[s],Y=i.eMarks[s];if(X+3>Y)return!1;if(126!==(v=i.src.charCodeAt(X))&&96!==v)return!1;if($=X,(_=(X=i.skipChars(X,v))-$)<3)return!1;if((j=i.src.slice(X,Y).trim()).indexOf("`")>=0)return!1;if(m)return!0;for(M=s;!(++M>=u)&&!((X=$=i.bMarks[M]+i.tShift[M])<(Y=i.eMarks[M])&&i.tShift[M]=4||(X=i.skipChars(X,v))-$<_||(X=i.skipSpaces(X))le)return!1;if(62!==i.src.charCodeAt(ie++))return!1;if(i.level>=i.options.maxNesting)return!1;if(m)return!0;for(32===i.src.charCodeAt(ie)&&ie++,$=i.blkIndent,i.blkIndent=0,M=[i.bMarks[s]],i.bMarks[s]=ie,_=(ie=ie=le,j=[i.tShift[s]],i.tShift[s]=ie-i.bMarks[s],Y=i.parser.ruler.getRules("blockquote"),v=s+1;v=(le=i.eMarks[v]));v++)if(62!==i.src.charCodeAt(ie++)){if(_)break;for(ae=!1,Z=0,ee=Y.length;Z=le,j.push(i.tShift[v]),i.tShift[v]=ie-i.bMarks[v];for(W=i.parentType,i.parentType="blockquote",i.tokens.push({type:"blockquote_open",lines:X=[s,0],level:i.level++}),i.parser.tokenize(i,s,v),i.tokens.push({type:"blockquote_close",level:--i.level}),i.parentType=W,X[1]=i.line,Z=0;Z$)return!1;if(42!==(v=i.src.charCodeAt(M++))&&45!==v&&95!==v)return!1;for(_=1;M<$;){if((j=i.src.charCodeAt(M++))!==v&&32!==j)return!1;j===v&&_++}return!(_<3)&&(m||(i.line=s+1,i.tokens.push({type:"hr",lines:[s,i.line],level:i.level})),!0)},["paragraph","blockquote","list"]],["list",function index_browser_list(i,s,u,m){var v,_,j,M,$,W,X,Y,Z,ee,ae,ie,le,ce,pe,de,fe,ye,be,_e,we,Se=!0;if((Y=skipOrderedListMarker(i,s))>=0)ie=!0;else{if(!((Y=skipBulletListMarker(i,s))>=0))return!1;ie=!1}if(i.level>=i.options.maxNesting)return!1;if(ae=i.src.charCodeAt(Y-1),m)return!0;for(ce=i.tokens.length,ie?(X=i.bMarks[s]+i.tShift[s],ee=Number(i.src.substr(X,Y-X-1)),i.tokens.push({type:"ordered_list_open",order:ee,lines:de=[s,0],level:i.level++})):i.tokens.push({type:"bullet_list_open",lines:de=[s,0],level:i.level++}),v=s,pe=!1,ye=i.parser.ruler.getRules("list");!(!(v=i.eMarks[v]?1:le-Y)>4&&(Z=1),Z<1&&(Z=1),_=Y-i.bMarks[v]+Z,i.tokens.push({type:"list_item_open",lines:fe=[s,0],level:i.level++}),M=i.blkIndent,$=i.tight,j=i.tShift[s],W=i.parentType,i.tShift[s]=le-i.bMarks[s],i.blkIndent=_,i.tight=!0,i.parentType="list",i.parser.tokenize(i,s,u,!0),i.tight&&!pe||(Se=!1),pe=i.line-s>1&&i.isEmpty(i.line-1),i.blkIndent=M,i.tShift[s]=j,i.tight=$,i.parentType=W,i.tokens.push({type:"list_item_close",level:--i.level}),v=s=i.line,fe[1]=v,le=i.bMarks[s],v>=u)||i.isEmpty(v)||i.tShift[v]X)return!1;if(91!==i.src.charCodeAt(W))return!1;if(94!==i.src.charCodeAt(W+1))return!1;if(i.level>=i.options.maxNesting)return!1;for(M=W+2;M=X||58!==i.src.charCodeAt(++M))&&(m||(M++,i.env.footnotes||(i.env.footnotes={}),i.env.footnotes.refs||(i.env.footnotes.refs={}),$=i.src.slice(W+2,M-2),i.env.footnotes.refs[":"+$]=-1,i.tokens.push({type:"footnote_reference_open",label:$,level:i.level++}),v=i.bMarks[s],_=i.tShift[s],j=i.parentType,i.tShift[s]=i.skipSpaces(M)-M,i.bMarks[s]=M,i.blkIndent+=4,i.parentType="footnote",i.tShift[s]=$)return!1;if(35!==(v=i.src.charCodeAt(M))||M>=$)return!1;for(_=1,v=i.src.charCodeAt(++M);35===v&&M<$&&_<=6;)_++,v=i.src.charCodeAt(++M);return!(_>6||M<$&&32!==v)&&(m||($=i.skipCharsBack($,32,M),(j=i.skipCharsBack($,35,M))>M&&32===i.src.charCodeAt(j-1)&&($=j),i.line=s+1,i.tokens.push({type:"heading_open",hLevel:_,lines:[s,i.line],level:i.level}),M<$&&i.tokens.push({type:"inline",content:i.src.slice(M,$).trim(),level:i.level+1,lines:[s,i.line],children:[]}),i.tokens.push({type:"heading_close",hLevel:_,level:i.level})),!0)},["paragraph","blockquote"]],["lheading",function lheading(i,s,u){var m,v,_,j=s+1;return!(j>=u)&&(!(i.tShift[j]3)&&(!((v=i.bMarks[j]+i.tShift[j])>=(_=i.eMarks[j]))&&((45===(m=i.src.charCodeAt(v))||61===m)&&(v=i.skipChars(v,m),!((v=i.skipSpaces(v))<_)&&(v=i.bMarks[s]+i.tShift[s],i.line=j+1,i.tokens.push({type:"heading_open",hLevel:61===m?1:2,lines:[s,i.line],level:i.level}),i.tokens.push({type:"inline",content:i.src.slice(v,i.eMarks[s]).trim(),level:i.level+1,lines:[s,i.line-1],children:[]}),i.tokens.push({type:"heading_close",hLevel:61===m?1:2,level:i.level}),!0))))))}],["htmlblock",function htmlblock(i,s,u,m){var v,_,j,M=i.bMarks[s],$=i.eMarks[s],W=i.tShift[s];if(M+=W,!i.options.html)return!1;if(W>3||M+2>=$)return!1;if(60!==i.src.charCodeAt(M))return!1;if(33===(v=i.src.charCodeAt(M+1))||63===v){if(m)return!0}else{if(47!==v&&!function isLetter$1(i){var s=32|i;return s>=97&&s<=122}(v))return!1;if(47===v){if(!(_=i.src.slice(M,$).match(rj)))return!1}else if(!(_=i.src.slice(M,$).match(tj)))return!1;if(!0!==ZC[_[1].toLowerCase()])return!1;if(m)return!0}for(j=s+1;ju)return!1;if($=s+1,i.tShift[$]=i.eMarks[$])return!1;if(124!==(v=i.src.charCodeAt(j))&&45!==v&&58!==v)return!1;if(_=index_browser_getLine(i,s+1),!/^[-:| ]+$/.test(_))return!1;if((W=_.split("|"))<=2)return!1;for(Y=[],M=0;M=0;if(X=s+1,i.isEmpty(X)&&++X>u)return!1;if(i.tShift[X]=i.options.maxNesting)return!1;W=i.tokens.length,i.tokens.push({type:"dl_open",lines:$=[s,0],level:i.level++}),j=s,_=X;e:for(;;){for(ce=!0,le=!1,i.tokens.push({type:"dt_open",lines:[j,j],level:i.level++}),i.tokens.push({type:"inline",content:i.getLines(j,j+1,i.blkIndent,!1).trim(),level:i.level+1,lines:[j,j],children:[]}),i.tokens.push({type:"dt_close",level:--i.level});;){if(i.tokens.push({type:"dd_open",lines:M=[X,0],level:i.level++}),ie=i.tight,Z=i.ddIndent,Y=i.blkIndent,ae=i.tShift[_],ee=i.parentType,i.blkIndent=i.ddIndent=i.tShift[_]+2,i.tShift[_]=v-i.bMarks[_],i.tight=!0,i.parentType="deflist",i.parser.tokenize(i,_,u,!0),i.tight&&!le||(ce=!1),le=i.line-_>1&&i.isEmpty(i.line-1),i.tShift[_]=ae,i.tight=ie,i.parentType=ee,i.blkIndent=Y,i.ddIndent=Z,i.tokens.push({type:"dd_close",level:--i.level}),M[1]=X=i.line,X>=u)break e;if(i.tShift[X]=u)break;if(j=X,i.isEmpty(j))break;if(i.tShift[j]=u)break;if(i.isEmpty(_)&&_++,_>=u)break;if(i.tShift[_]3)){for(v=!1,_=0,j=M.length;_=u))&&!(i.tShift[j]=0&&(i=i.replace(oj,(function(s,u){var m;return 10===i.charCodeAt(u)?(_=u+1,j=0,s):(m=" ".slice((u-_-j)%4),j=u-_+1,m)}))),v=new StateBlock(i,this,s,u,m),this.tokenize(v,v.line,v.lineMax)};for(var pj=[],yj=0;yj<256;yj++)pj.push(0);function isAlphaNum(i){return i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122}function scanDelims(i,s){var u,m,v,_=s,j=!0,M=!0,$=i.posMax,W=i.src.charCodeAt(s);for(u=s>0?i.src.charCodeAt(s-1):-1;_<$&&i.src.charCodeAt(_)===W;)_++;return _>=$&&(j=!1),(v=_-s)>=4?j=M=!1:(32!==(m=_<$?i.src.charCodeAt(_):-1)&&10!==m||(j=!1),32!==u&&10!==u||(M=!1),95===W&&(isAlphaNum(u)&&(j=!1),isAlphaNum(m)&&(M=!1))),{can_open:j,can_close:M,delims:v}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach((function(i){pj[i.charCodeAt(0)]=1}));var vj=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;var _j=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;var Ej=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"],xj=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,Aj=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;function replace$1(i,s){return i=i.source,s=s||"",function self(u,m){return u?(m=m.source||m,i=i.replace(u,m),self):new RegExp(i,s)}}var Cj=replace$1(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",/[^"'=<>`\x00-\x20]+/)("single_quoted",/'[^']*'/)("double_quoted",/"[^"]*"/)(),jj=replace$1(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)("attr_value",Cj)(),Ij=replace$1(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",jj)(),Bj=replace$1(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",Ij)("close_tag",/<\/[A-Za-z][A-Za-z0-9]*\s*>/)("comment",/|/)("processing",/<[?].*?[?]>/)("declaration",/]*>/)("cdata",//)();var Dj=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,Fj=/^&([a-z][a-z0-9]{1,31});/i;var qj=[["text",function index_browser_text(i,s){for(var u=i.pos;u=0&&32===i.pending.charCodeAt(u))if(u>=1&&32===i.pending.charCodeAt(u-1)){for(var _=u-2;_>=0;_--)if(32!==i.pending.charCodeAt(_)){i.pending=i.pending.substring(0,_+1);break}i.push({type:"hardbreak",level:i.level})}else i.pending=i.pending.slice(0,-1),i.push({type:"softbreak",level:i.level});else i.push({type:"softbreak",level:i.level});for(v++;v=M)return!1;if(126!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),126===_)return!1;if(126===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m$+3)return i.pos+=m-$,s||(i.pending+=i.src.slice($,m)),!0;for(i.pos=$+2,v=1;i.pos+1=M)return!1;if(43!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),43===_)return!1;if(43===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m=M)return!1;if(61!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),61===_)return!1;if(61===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m=i.options.maxNesting)return!1;for(i.pos=X+u,M=[u];i.pos=v)return!1;if(i.level>=i.options.maxNesting)return!1;for(i.pos=_+1;i.pos=v)return!1;if(i.level>=i.options.maxNesting)return!1;for(i.pos=_+1;i.pos=i.options.maxNesting)return!1;if(u=ee+1,(m=parseLinkLabel(i,ee))<0)return!1;if((M=m+1)=Z)return!1;for(ee=M,parseLinkDestination(i,M)?(_=i.linkContent,M=i.pos):_="",ee=M;M=Z||41!==i.src.charCodeAt(M))return i.pos=Y,!1;M++}else{if(i.linkLevel>0)return!1;for(;M=0?v=i.src.slice(ee,M++):M=ee-1),v||(void 0===v&&(M=m+1),v=i.src.slice(u,m)),!($=i.env.references[normalizeReference(v)]))return i.pos=Y,!1;_=$.href,j=$.title}return s||(i.pos=u,i.posMax=m,X?i.push({type:"image",src:_,title:j,alt:i.src.substr(u,m-u),level:i.level}):(i.push({type:"link_open",href:_,title:j,level:i.level++}),i.linkLevel++,i.parser.tokenize(i),i.linkLevel--,i.push({type:"link_close",level:--i.level}))),i.pos=M,i.posMax=Z,!0}],["footnote_inline",function footnote_inline(i,s){var u,m,v,_,j=i.posMax,M=i.pos;return!(M+2>=j)&&(94===i.src.charCodeAt(M)&&(91===i.src.charCodeAt(M+1)&&(!(i.level>=i.options.maxNesting)&&(u=M+2,!((m=parseLinkLabel(i,M+1))<0)&&(s||(i.env.footnotes||(i.env.footnotes={}),i.env.footnotes.list||(i.env.footnotes.list=[]),v=i.env.footnotes.list.length,i.pos=u,i.posMax=m,i.push({type:"footnote_ref",id:v,level:i.level}),i.linkLevel++,_=i.tokens.length,i.parser.tokenize(i),i.env.footnotes.list[v]={tokens:i.tokens.splice(_)},i.linkLevel--),i.pos=m+1,i.posMax=j,!0)))))}],["footnote_ref",function footnote_ref(i,s){var u,m,v,_,j=i.posMax,M=i.pos;if(M+3>j)return!1;if(!i.env.footnotes||!i.env.footnotes.refs)return!1;if(91!==i.src.charCodeAt(M))return!1;if(94!==i.src.charCodeAt(M+1))return!1;if(i.level>=i.options.maxNesting)return!1;for(m=M+2;m=j)&&(m++,u=i.src.slice(M+2,m-1),void 0!==i.env.footnotes.refs[":"+u]&&(s||(i.env.footnotes.list||(i.env.footnotes.list=[]),i.env.footnotes.refs[":"+u]<0?(v=i.env.footnotes.list.length,i.env.footnotes.list[v]={label:u,count:0},i.env.footnotes.refs[":"+u]=v):v=i.env.footnotes.refs[":"+u],_=i.env.footnotes.list[v].count,i.env.footnotes.list[v].count++,i.push({type:"footnote_ref",id:v,subId:_,level:i.level})),i.pos=m,i.posMax=j,!0)))}],["autolink",function autolink(i,s){var u,m,v,_,j,M=i.pos;return 60===i.src.charCodeAt(M)&&(!((u=i.src.slice(M)).indexOf(">")<0)&&((m=u.match(Aj))?!(Ej.indexOf(m[1].toLowerCase())<0)&&(j=normalizeLink(_=m[0].slice(1,-1)),!!i.parser.validateLink(_)&&(s||(i.push({type:"link_open",href:j,level:i.level}),i.push({type:"text",content:_,level:i.level+1}),i.push({type:"link_close",level:i.level})),i.pos+=m[0].length,!0)):!!(v=u.match(xj))&&(j=normalizeLink("mailto:"+(_=v[0].slice(1,-1))),!!i.parser.validateLink(j)&&(s||(i.push({type:"link_open",href:j,level:i.level}),i.push({type:"text",content:_,level:i.level+1}),i.push({type:"link_close",level:i.level})),i.pos+=v[0].length,!0))))}],["htmltag",function htmltag(i,s){var u,m,v,_=i.pos;return!!i.options.html&&(v=i.posMax,!(60!==i.src.charCodeAt(_)||_+2>=v)&&(!(33!==(u=i.src.charCodeAt(_+1))&&63!==u&&47!==u&&!function isLetter$2(i){var s=32|i;return s>=97&&s<=122}(u))&&(!!(m=i.src.slice(_).match(Bj))&&(s||i.push({type:"htmltag",content:i.src.slice(_,_+m[0].length),level:i.level}),i.pos+=m[0].length,!0))))}],["entity",function entity(i,s){var u,m,v=i.pos,_=i.posMax;if(38!==i.src.charCodeAt(v))return!1;if(v+1<_)if(35===i.src.charCodeAt(v+1)){if(m=i.src.slice(v).match(Dj))return s||(u="x"===m[1][0].toLowerCase()?parseInt(m[1].slice(1),16):parseInt(m[1],10),i.pending+=isValidEntityCode(u)?fromCodePoint(u):fromCodePoint(65533)),i.pos+=m[0].length,!0}else if(m=i.src.slice(v).match(Fj)){var j=decodeEntity(m[1]);if(m[1]!==j)return s||(i.pending+=j),i.pos+=m[0].length,!0}return s||(i.pending+="&"),i.pos++,!0}]];function ParserInline(){this.ruler=new Ruler;for(var i=0;i0)i.pos=u;else{for(s=0;s=_)break}else i.pending+=i.src[i.pos++]}i.pending&&i.pushPending()},ParserInline.prototype.parse=function(i,s,u,m){var v=new StateInline(i,this,s,u,m);this.tokenize(v)};var $j={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","replacements","smartquotes","references","abbr2","footnote_tail"]},block:{rules:["blockquote","code","fences","footnote","heading","hr","htmlblock","lheading","list","paragraph","table"]},inline:{rules:["autolink","backticks","del","emphasis","entity","escape","footnote_ref","htmltag","links","newline","text"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","abbr2"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","htmltag","links","newline","text"]}}}};function StateCore(i,s,u){this.src=s,this.env=u,this.options=i.options,this.tokens=[],this.inlineMode=!1,this.inline=i.inline,this.block=i.block,this.renderer=i.renderer,this.typographer=i.typographer}function Remarkable(i,s){"string"!=typeof i&&(s=i,i="default"),s&&null!=s.linkify&&console.warn("linkify option is removed. Use linkify plugin instead:\n\nimport Remarkable from 'remarkable';\nimport linkify from 'remarkable/linkify';\nnew Remarkable().use(linkify)\n"),this.inline=new ParserInline,this.block=new ParserBlock,this.core=new Core,this.renderer=new Renderer,this.ruler=new Ruler,this.options={},this.configure($j[i]),this.set(s||{})}Remarkable.prototype.set=function(i){index_browser_assign(this.options,i)},Remarkable.prototype.configure=function(i){var s=this;if(!i)throw new Error("Wrong `remarkable` preset, check name/content");i.options&&s.set(i.options),i.components&&Object.keys(i.components).forEach((function(u){i.components[u].rules&&s[u].ruler.enable(i.components[u].rules,!0)}))},Remarkable.prototype.use=function(i,s){return i(this,s),this},Remarkable.prototype.parse=function(i,s){var u=new StateCore(this,i,s);return this.core.process(u),u.tokens},Remarkable.prototype.render=function(i,s){return s=s||{},this.renderer.render(this.parse(i,s),this.options,s)},Remarkable.prototype.parseInline=function(i,s){var u=new StateCore(this,i,s);return u.inlineMode=!0,this.core.process(u),u.tokens},Remarkable.prototype.renderInline=function(i,s){return s=s||{},this.renderer.render(this.parseInline(i,s),this.options,s)};function utils_indexOf(i,s){if(Array.prototype.indexOf)return i.indexOf(s);for(var u=0,m=i.length;u=0;u--)!0===s(i[u])&&i.splice(u,1)}function throwUnhandledCaseError(i){throw new Error("Unhandled case for value: '".concat(i,"'"))}var zj=function(){function HtmlTag(i){void 0===i&&(i={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=i.tagName||"",this.attrs=i.attrs||{},this.innerHTML=i.innerHtml||i.innerHTML||""}return HtmlTag.prototype.setTagName=function(i){return this.tagName=i,this},HtmlTag.prototype.getTagName=function(){return this.tagName||""},HtmlTag.prototype.setAttr=function(i,s){return this.getAttrs()[i]=s,this},HtmlTag.prototype.getAttr=function(i){return this.getAttrs()[i]},HtmlTag.prototype.setAttrs=function(i){return Object.assign(this.getAttrs(),i),this},HtmlTag.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},HtmlTag.prototype.setClass=function(i){return this.setAttr("class",i)},HtmlTag.prototype.addClass=function(i){for(var s,u=this.getClass(),m=this.whitespaceRegex,v=u?u.split(m):[],_=i.split(m);s=_.shift();)-1===utils_indexOf(v,s)&&v.push(s);return this.getAttrs().class=v.join(" "),this},HtmlTag.prototype.removeClass=function(i){for(var s,u=this.getClass(),m=this.whitespaceRegex,v=u?u.split(m):[],_=i.split(m);v.length&&(s=_.shift());){var j=utils_indexOf(v,s);-1!==j&&v.splice(j,1)}return this.getAttrs().class=v.join(" "),this},HtmlTag.prototype.getClass=function(){return this.getAttrs().class||""},HtmlTag.prototype.hasClass=function(i){return-1!==(" "+this.getClass()+" ").indexOf(" "+i+" ")},HtmlTag.prototype.setInnerHTML=function(i){return this.innerHTML=i,this},HtmlTag.prototype.setInnerHtml=function(i){return this.setInnerHTML(i)},HtmlTag.prototype.getInnerHTML=function(){return this.innerHTML||""},HtmlTag.prototype.getInnerHtml=function(){return this.getInnerHTML()},HtmlTag.prototype.toAnchorString=function(){var i=this.getTagName(),s=this.buildAttrsStr();return["<",i,s=s?" "+s:"",">",this.getInnerHtml(),""].join("")},HtmlTag.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var i=this.getAttrs(),s=[];for(var u in i)i.hasOwnProperty(u)&&s.push(u+'="'+i[u]+'"');return s.join(" ")},HtmlTag}();var Hj=function(){function AnchorTagBuilder(i){void 0===i&&(i={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=i.newWindow||!1,this.truncate=i.truncate||{},this.className=i.className||""}return AnchorTagBuilder.prototype.build=function(i){return new zj({tagName:"a",attrs:this.createAttrs(i),innerHtml:this.processAnchorText(i.getAnchorText())})},AnchorTagBuilder.prototype.createAttrs=function(i){var s={href:i.getAnchorHref()},u=this.createCssClass(i);return u&&(s.class=u),this.newWindow&&(s.target="_blank",s.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=_)return j.host.length==s?(j.host.substr(0,s-v)+u).substr(0,_+m):buildSegment($,_).substr(0,_+m);var W="";if(j.path&&(W+="/"+j.path),j.query&&(W+="?"+j.query),W){if(($+W).length>=_)return($+W).length==s?($+W).substr(0,s):($+buildSegment(W,_-$.length)).substr(0,_+m);$+=W}if(j.fragment){var X="#"+j.fragment;if(($+X).length>=_)return($+X).length==s?($+X).substr(0,s):($+buildSegment(X,_-$.length)).substr(0,_+m);$+=X}if(j.scheme&&j.host){var Y=j.scheme+"://";if(($+Y).length<_)return(Y+$).substr(0,s)}if($.length<=s)return $;var Z="";return _>0&&(Z=$.substr(-1*Math.floor(_/2))),($.substr(0,Math.ceil(_/2))+u+Z).substr(0,_+m)}(i,u):"middle"===m?function truncateMiddle(i,s,u){if(i.length<=s)return i;var m,v;null==u?(u="…",m=8,v=3):(m=u.length,v=u.length);var _=s-v,j="";return _>0&&(j=i.substr(-1*Math.floor(_/2))),(i.substr(0,Math.ceil(_/2))+u+j).substr(0,_+m)}(i,u):function truncateEnd(i,s,u){return function ellipsis(i,s,u){var m;return i.length>s&&(null==u?(u="…",m=3):m=u.length,i=i.substring(0,s-m)+u),i}(i,s,u)}(i,u)},AnchorTagBuilder}(),Jj=function(){function Match(i){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=i.tagBuilder,this.matchedText=i.matchedText,this.offset=i.offset}return Match.prototype.getMatchedText=function(){return this.matchedText},Match.prototype.setOffset=function(i){this.offset=i},Match.prototype.getOffset=function(){return this.offset},Match.prototype.getCssClassSuffixes=function(){return[this.getType()]},Match.prototype.buildTag=function(){return this.tagBuilder.build(this)},Match}(),extendStatics=function(i,s){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,s){i.__proto__=s}||function(i,s){for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(i[u]=s[u])},extendStatics(i,s)};function tslib_es6_extends(i,s){if("function"!=typeof s&&null!==s)throw new TypeError("Class extends value "+String(s)+" is not a constructor or null");function __(){this.constructor=i}extendStatics(i,s),i.prototype=null===s?Object.create(s):(__.prototype=s.prototype,new __)}var __assign=function(){return __assign=Object.assign||function __assign(i){for(var s,u=1,m=arguments.length;u-1},UrlMatchValidator.isValidUriScheme=function(i){var s=i.match(this.uriSchemeRegex),u=s&&s[0].toLowerCase();return"javascript:"!==u&&"vbscript:"!==u},UrlMatchValidator.urlMatchDoesNotHaveProtocolOrDot=function(i,s){return!(!i||s&&this.hasFullProtocolRegex.test(s)||-1!==i.indexOf("."))},UrlMatchValidator.urlMatchDoesNotHaveAtLeastOneWordChar=function(i,s){return!(!i||!s)&&(!this.hasFullProtocolRegex.test(s)&&!this.hasWordCharAfterProtocolRegex.test(i))},UrlMatchValidator.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,UrlMatchValidator.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,UrlMatchValidator.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+hP+"]"),UrlMatchValidator.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,UrlMatchValidator}(),AP=(Gj=new RegExp("[/?#](?:["+gP+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+gP+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,getDomainNameStr(2),")","|","(","(//)?",/(?:www\.)/.source,getDomainNameStr(6),")","|","(","(//)?",getDomainNameStr(10)+"\\.",EP.source,"(?![-"+mP+"])",")",")","(?::[0-9]+)?","(?:"+Gj.source+")?"].join(""),"gi")),CP=new RegExp("["+gP+"]"),jP=function(i){function UrlMatcher(s){var u=i.call(this,s)||this;return u.stripPrefix={scheme:!0,www:!0},u.stripTrailingSlash=!0,u.decodePercentEncoding=!0,u.matcherRegex=AP,u.wordCharRegExp=CP,u.stripPrefix=s.stripPrefix,u.stripTrailingSlash=s.stripTrailingSlash,u.decodePercentEncoding=s.decodePercentEncoding,u}return tslib_es6_extends(UrlMatcher,i),UrlMatcher.prototype.parseMatches=function(i){for(var s,u=this.matcherRegex,m=this.stripPrefix,v=this.stripTrailingSlash,_=this.decodePercentEncoding,j=this.tagBuilder,M=[],_loop_1=function(){var u=s[0],W=s[1],X=s[4],Y=s[5],Z=s[9],ee=s.index,ae=Y||Z,ie=i.charAt(ee-1);if(!OP.isValid(u,W))return"continue";if(ee>0&&"@"===ie)return"continue";if(ee>0&&ae&&$.wordCharRegExp.test(ie))return"continue";if(/\?$/.test(u)&&(u=u.substr(0,u.length-1)),$.matchHasUnbalancedClosingParen(u))u=u.substr(0,u.length-1);else{var le=$.matchHasInvalidCharAfterTld(u,W);le>-1&&(u=u.substr(0,le))}var ce=["http://","https://"].find((function(i){return!!W&&-1!==W.indexOf(i)}));if(ce){var pe=u.indexOf(ce);u=u.substr(pe),W=W.substr(pe),ee+=pe}var de=W?"scheme":X?"www":"tld",fe=!!W;M.push(new oP({tagBuilder:j,matchedText:u,offset:ee,urlMatchType:de,url:u,protocolUrlMatch:fe,protocolRelativeMatch:!!ae,stripPrefix:m,stripTrailingSlash:v,decodePercentEncoding:_}))},$=this;null!==(s=u.exec(i));)_loop_1();return M},UrlMatcher.prototype.matchHasUnbalancedClosingParen=function(i){var s,u=i.charAt(i.length-1);if(")"===u)s="(";else if("]"===u)s="[";else{if("}"!==u)return!1;s="{"}for(var m=0,v=0,_=i.length-1;v<_;v++){var j=i.charAt(v);j===s?m++:j===u&&(m=Math.max(m-1,0))}return 0===m},UrlMatcher.prototype.matchHasInvalidCharAfterTld=function(i,s){if(!i)return-1;var u=0;s&&(u=i.indexOf(":"),i=i.slice(u));var m=new RegExp("^((.?//)?[-."+gP+"]*[-"+gP+"]\\.[-"+gP+"]+)").exec(i);return null===m?-1:(u+=m[1].length,i=i.slice(m[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(i)?u:-1)},UrlMatcher}(aP),PP=new RegExp("[_".concat(gP,"]")),IP=function(i){function HashtagMatcher(s){var u=i.call(this,s)||this;return u.serviceName="twitter",u.serviceName=s.serviceName,u}return tslib_es6_extends(HashtagMatcher,i),HashtagMatcher.prototype.parseMatches=function(i){for(var s=this.tagBuilder,u=this.serviceName,m=[],v=i.length,_=0,j=-1,M=0;_-1&&_-j<=140){var v=i.slice(j,_),M=new tP({tagBuilder:s,matchedText:v,offset:j,serviceName:u,hashtag:v.slice(1)});m.push(M)}}},HashtagMatcher}(aP),NP=["twitter","facebook","instagram","tiktok"],TP=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),MP=function(i){function PhoneMatcher(){var s=null!==i&&i.apply(this,arguments)||this;return s.matcherRegex=TP,s}return tslib_es6_extends(PhoneMatcher,i),PhoneMatcher.prototype.parseMatches=function(i){for(var s,u=this.matcherRegex,m=this.tagBuilder,v=[];null!==(s=u.exec(i));){var _=s[0],j=_.replace(/[^0-9,;#]/g,""),M=!(!s[1]&&!s[2]),$=0==s.index?"":i.substr(s.index-1,1),W=i.substr(s.index+_.length,1),X=!$.match(/\d/)&&!W.match(/\d/);this.testMatch(s[3])&&this.testMatch(_)&&X&&v.push(new nP({tagBuilder:m,matchedText:_,offset:s.index,number:j,plusSign:M}))}return v},PhoneMatcher.prototype.testMatch=function(i){return lP.test(i)},PhoneMatcher}(aP),RP=new RegExp("@[_".concat(gP,"]{1,50}(?![_").concat(gP,"])"),"g"),BP=new RegExp("@[_.".concat(gP,"]{1,30}(?![_").concat(gP,"])"),"g"),DP=new RegExp("@[-_.".concat(gP,"]{1,50}(?![-_").concat(gP,"])"),"g"),LP=new RegExp("@[_.".concat(gP,"]{1,23}[_").concat(gP,"](?![_").concat(gP,"])"),"g"),FP=new RegExp("[^"+gP+"]"),qP=function(i){function MentionMatcher(s){var u=i.call(this,s)||this;return u.serviceName="twitter",u.matcherRegexes={twitter:RP,instagram:BP,soundcloud:DP,tiktok:LP},u.nonWordCharRegex=FP,u.serviceName=s.serviceName,u}return tslib_es6_extends(MentionMatcher,i),MentionMatcher.prototype.parseMatches=function(i){var s,u=this.serviceName,m=this.matcherRegexes[this.serviceName],v=this.nonWordCharRegex,_=this.tagBuilder,j=[];if(!m)return j;for(;null!==(s=m.exec(i));){var M=s.index,$=i.charAt(M-1);if(0===M||v.test($)){var W=s[0].replace(/\.+$/g,""),X=W.slice(1);j.push(new rP({tagBuilder:_,matchedText:W,offset:M,serviceName:u,mention:X}))}}return j},MentionMatcher}(aP);function parseHtml(i,s){for(var u=s.onOpenTag,m=s.onCloseTag,v=s.onText,_=s.onComment,j=s.onDoctype,M=new $P,$=0,W=i.length,X=0,Y=0,Z=M;$"===i?(Z=new $P(__assign(__assign({},Z),{name:captureTagName()})),emitTagAndPreviousTextNode()):iP.test(i)||sP.test(i)||":"===i||resetToDataState()}function stateEndTagOpen(i){">"===i?resetToDataState():iP.test(i)?X=3:resetToDataState()}function stateBeforeAttributeName(i){cP.test(i)||("/"===i?X=12:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():"="===i||uP.test(i)||pP.test(i)?resetToDataState():X=5)}function stateAttributeName(i){cP.test(i)?X=6:"/"===i?X=12:"="===i?X=7:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():uP.test(i)&&resetToDataState()}function stateAfterAttributeName(i){cP.test(i)||("/"===i?X=12:"="===i?X=7:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():uP.test(i)?resetToDataState():X=5)}function stateBeforeAttributeValue(i){cP.test(i)||('"'===i?X=8:"'"===i?X=9:/[>=`]/.test(i)?resetToDataState():"<"===i?startNewTag():X=10)}function stateAttributeValueDoubleQuoted(i){'"'===i&&(X=11)}function stateAttributeValueSingleQuoted(i){"'"===i&&(X=11)}function stateAttributeValueUnquoted(i){cP.test(i)?X=4:">"===i?emitTagAndPreviousTextNode():"<"===i&&startNewTag()}function stateAfterAttributeValueQuoted(i){cP.test(i)?X=4:"/"===i?X=12:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():(X=4,function reconsumeCurrentCharacter(){$--}())}function stateSelfClosingStartTag(i){">"===i?(Z=new $P(__assign(__assign({},Z),{isClosing:!0})),emitTagAndPreviousTextNode()):X=4}function stateMarkupDeclarationOpen(s){"--"===i.substr($,2)?($+=2,Z=new $P(__assign(__assign({},Z),{type:"comment"})),X=14):"DOCTYPE"===i.substr($,7).toUpperCase()?($+=7,Z=new $P(__assign(__assign({},Z),{type:"doctype"})),X=20):resetToDataState()}function stateCommentStart(i){"-"===i?X=15:">"===i?resetToDataState():X=16}function stateCommentStartDash(i){"-"===i?X=18:">"===i?resetToDataState():X=16}function stateComment(i){"-"===i&&(X=17)}function stateCommentEndDash(i){X="-"===i?18:16}function stateCommentEnd(i){">"===i?emitTagAndPreviousTextNode():"!"===i?X=19:"-"===i||(X=16)}function stateCommentEndBang(i){"-"===i?X=17:">"===i?emitTagAndPreviousTextNode():X=16}function stateDoctype(i){">"===i?emitTagAndPreviousTextNode():"<"===i&&startNewTag()}function resetToDataState(){X=0,Z=M}function startNewTag(){X=1,Z=new $P({idx:$})}function emitTagAndPreviousTextNode(){var s=i.slice(Y,Z.idx);s&&v(s,Y),"comment"===Z.type?_(Z.idx):"doctype"===Z.type?j(Z.idx):(Z.isOpening&&u(Z.name,Z.idx),Z.isClosing&&m(Z.name,Z.idx)),resetToDataState(),Y=$+1}function captureTagName(){var s=Z.idx+(Z.isClosing?2:1);return i.slice(s,$).toLowerCase()}Y<$&&function emitText(){var s=i.slice(Y,$);v(s,Y),Y=$+1}()}var $P=function $P(i){void 0===i&&(i={}),this.idx=void 0!==i.idx?i.idx:-1,this.type=i.type||"tag",this.name=i.name||"",this.isOpening=!!i.isOpening,this.isClosing=!!i.isClosing},zP=function(){function Autolinker(i){void 0===i&&(i={}),this.version=Autolinker.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(i.urls),this.email="boolean"==typeof i.email?i.email:this.email,this.phone="boolean"==typeof i.phone?i.phone:this.phone,this.hashtag=i.hashtag||this.hashtag,this.mention=i.mention||this.mention,this.newWindow="boolean"==typeof i.newWindow?i.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(i.stripPrefix),this.stripTrailingSlash="boolean"==typeof i.stripTrailingSlash?i.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof i.decodePercentEncoding?i.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=i.sanitizeHtml||!1;var s=this.mention;if(!1!==s&&-1===["twitter","instagram","soundcloud","tiktok"].indexOf(s))throw new Error("invalid `mention` cfg '".concat(s,"' - see docs"));var u=this.hashtag;if(!1!==u&&-1===NP.indexOf(u))throw new Error("invalid `hashtag` cfg '".concat(u,"' - see docs"));this.truncate=this.normalizeTruncateCfg(i.truncate),this.className=i.className||this.className,this.replaceFn=i.replaceFn||this.replaceFn,this.context=i.context||this}return Autolinker.link=function(i,s){return new Autolinker(s).link(i)},Autolinker.parse=function(i,s){return new Autolinker(s).parse(i)},Autolinker.prototype.normalizeUrlsCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{schemeMatches:i,wwwMatches:i,tldMatches:i}:{schemeMatches:"boolean"!=typeof i.schemeMatches||i.schemeMatches,wwwMatches:"boolean"!=typeof i.wwwMatches||i.wwwMatches,tldMatches:"boolean"!=typeof i.tldMatches||i.tldMatches}},Autolinker.prototype.normalizeStripPrefixCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{scheme:i,www:i}:{scheme:"boolean"!=typeof i.scheme||i.scheme,www:"boolean"!=typeof i.www||i.www}},Autolinker.prototype.normalizeTruncateCfg=function(i){return"number"==typeof i?{length:i,location:"end"}:function defaults(i,s){for(var u in s)s.hasOwnProperty(u)&&void 0===i[u]&&(i[u]=s[u]);return i}(i||{},{length:Number.POSITIVE_INFINITY,location:"end"})},Autolinker.prototype.parse=function(i){var s=this,u=["a","style","script"],m=0,v=[];return parseHtml(i,{onOpenTag:function(i){u.indexOf(i)>=0&&m++},onText:function(i,u){if(0===m){var _=function splitAndCapture(i,s){if(!s.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var u,m=[],v=0;u=s.exec(i);)m.push(i.substring(v,u.index)),m.push(u[0]),v=u.index+u[0].length;return m.push(i.substring(v)),m}(i,/( | |<|<|>|>|"|"|')/gi),j=u;_.forEach((function(i,u){if(u%2==0){var m=s.parseText(i,j);v.push.apply(v,m)}j+=i.length}))}},onCloseTag:function(i){u.indexOf(i)>=0&&(m=Math.max(m-1,0))},onComment:function(i){},onDoctype:function(i){}}),v=this.compactMatches(v),v=this.removeUnwantedMatches(v)},Autolinker.prototype.compactMatches=function(i){i.sort((function(i,s){return i.getOffset()-s.getOffset()}));for(var s=0;sv?s:s+1;i.splice(j,1);continue}if(i[s+1].getOffset()<_){i.splice(s+1,1);continue}}s++}return i},Autolinker.prototype.removeUnwantedMatches=function(i){return this.hashtag||utils_remove(i,(function(i){return"hashtag"===i.getType()})),this.email||utils_remove(i,(function(i){return"email"===i.getType()})),this.phone||utils_remove(i,(function(i){return"phone"===i.getType()})),this.mention||utils_remove(i,(function(i){return"mention"===i.getType()})),this.urls.schemeMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"scheme"===i.getUrlMatchType()})),this.urls.wwwMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"www"===i.getUrlMatchType()})),this.urls.tldMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"tld"===i.getUrlMatchType()})),i},Autolinker.prototype.parseText=function(i,s){void 0===s&&(s=0),s=s||0;for(var u=this.getMatchers(),m=[],v=0,_=u.length;v<_;v++){for(var j=u[v].parseMatches(i),M=0,$=j.length;M<$;M++)j[M].setOffset(s+j[M].getOffset());m.push.apply(m,j)}return m},Autolinker.prototype.link=function(i){if(!i)return"";this.sanitizeHtml&&(i=i.replace(//g,">"));for(var s=this.parse(i),u=[],m=0,v=0,_=s.length;v<_;v++){var j=s[v];u.push(i.substring(m,j.getOffset())),u.push(this.createMatchReturnVal(j)),m=j.getOffset()+j.getMatchedText().length}return u.push(i.substring(m)),u.join("")},Autolinker.prototype.createMatchReturnVal=function(i){var s;return this.replaceFn&&(s=this.replaceFn.call(this.context,i)),"string"==typeof s?s:!1===s?i.getMatchedText():s instanceof zj?s.toAnchorString():i.buildTag().toAnchorString()},Autolinker.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var i=this.getTagBuilder(),s=[new IP({tagBuilder:i,serviceName:this.hashtag}),new xP({tagBuilder:i}),new MP({tagBuilder:i}),new qP({tagBuilder:i,serviceName:this.mention}),new jP({tagBuilder:i,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=s},Autolinker.prototype.getTagBuilder=function(){var i=this.tagBuilder;return i||(i=this.tagBuilder=new Hj({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),i},Autolinker.version="3.16.2",Autolinker.AnchorTagBuilder=Hj,Autolinker.HtmlTag=zj,Autolinker.matcher={Email:xP,Hashtag:IP,Matcher:aP,Mention:qP,Phone:MP,Url:jP},Autolinker.match={Email:eP,Hashtag:tP,Match:Jj,Mention:rP,Phone:nP,Url:oP},Autolinker}();const UP=zP;var VP=/www|@|\:\/\//;function isLinkOpen(i){return/^\s]/i.test(i)}function isLinkClose(i){return/^<\/a\s*>/i.test(i)}function createLinkifier(){var i=[],s=new UP({stripPrefix:!1,url:!0,email:!0,replaceFn:function(s){switch(s.getType()){case"url":i.push({text:s.matchedText,url:s.getUrl()});break;case"email":i.push({text:s.matchedText,url:"mailto:"+s.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:i,autolinker:s}}function parseTokens(i){var s,u,m,v,_,j,M,$,W,X,Y,Z,ee,ae=i.tokens,ie=null;for(u=0,m=ae.length;u=0;s--)if("link_close"!==(_=v[s]).type){if("htmltag"===_.type&&(isLinkOpen(_.content)&&Y>0&&Y--,isLinkClose(_.content)&&Y++),!(Y>0)&&"text"===_.type&&VP.test(_.content)){if(ie||(Z=(ie=createLinkifier()).links,ee=ie.autolinker),j=_.content,Z.length=0,ee.link(j),!Z.length)continue;for(M=[],X=_.level,$=0;$({useUnsafeMarkdown:!1})};const HP=Markdown;function sanitizer(i){let{useUnsafeMarkdown:s=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u=s,m=s?[]:["style","class"];return s&&!sanitizer.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),sanitizer.hasWarnedAboutDeprecation=!0),KP().sanitize(i,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:u,FORBID_ATTR:m})}sanitizer.hasWarnedAboutDeprecation=!1;class BaseLayout extends He.Component{render(){const{errSelectors:i,specSelectors:s,getComponent:u}=this.props,m=u("SvgAssets"),v=u("InfoContainer",!0),_=u("VersionPragmaFilter"),j=u("operations",!0),M=u("Models",!0),$=u("Webhooks",!0),W=u("Row"),X=u("Col"),Y=u("errors",!0),Z=u("ServersContainer",!0),ee=u("SchemesContainer",!0),ae=u("AuthorizeBtnContainer",!0),ie=u("FilterContainer",!0),le=s.isSwagger2(),ce=s.isOAS3(),pe=s.isOAS31(),de=!s.specStr(),fe=s.loadingStatus();let ye=null;if("loading"===fe&&(ye=He.createElement("div",{className:"info"},He.createElement("div",{className:"loading-container"},He.createElement("div",{className:"loading"})))),"failed"===fe&&(ye=He.createElement("div",{className:"info"},He.createElement("div",{className:"loading-container"},He.createElement("h4",{className:"title"},"Failed to load API definition."),He.createElement(Y,null)))),"failedConfig"===fe){const s=i.lastError(),u=s?s.get("message"):"";ye=He.createElement("div",{className:"info failed-config"},He.createElement("div",{className:"loading-container"},He.createElement("h4",{className:"title"},"Failed to load remote configuration."),He.createElement("p",null,u)))}if(!ye&&de&&(ye=He.createElement("h4",null,"No API definition provided.")),ye)return He.createElement("div",{className:"swagger-ui"},He.createElement("div",{className:"loading-container"},ye));const be=s.servers(),_e=s.schemes(),we=be&&be.size,Se=_e&&_e.size,xe=!!s.securityDefinitions();return He.createElement("div",{className:"swagger-ui"},He.createElement(m,null),He.createElement(_,{isSwagger2:le,isOAS3:ce,alsoShow:He.createElement(Y,null)},He.createElement(Y,null),He.createElement(W,{className:"information-container"},He.createElement(X,{mobile:12},He.createElement(v,null))),we||Se||xe?He.createElement("div",{className:"scheme-container"},He.createElement(X,{className:"schemes wrapper",mobile:12},we?He.createElement(Z,null):null,Se?He.createElement(ee,null):null,xe?He.createElement(ae,null):null)):null,He.createElement(ie,null),He.createElement(W,null,He.createElement(X,{mobile:12,desktop:12},He.createElement(j,null))),pe&&He.createElement(W,{className:"webhooks-container"},He.createElement(X,{mobile:12,desktop:12},He.createElement($,null))),He.createElement(W,null,He.createElement(X,{mobile:12,desktop:12},He.createElement(M,null)))))}}const core_components=()=>({components:{App,authorizationPopup:AuthorizationPopup,authorizeBtn:AuthorizeBtn,AuthorizeBtnContainer,authorizeOperationBtn:AuthorizeOperationBtn,auths:Auths,AuthItem:auth_item_Auths,authError:AuthError,oauth2:Oauth2,apiKeyAuth:ApiKeyAuth,basicAuth:BasicAuth,clear:Clear,liveResponse:LiveResponse,InitializedInput,info:OC,InfoContainer,InfoUrl,InfoBasePath,Contact:AC,License:CC,JumpToPath,CopyToClipboardBtn,onlineValidatorBadge:OnlineValidatorBadge,operations:Operations,operation:operation_Operation,OperationSummary,OperationSummaryMethod,OperationSummaryPath,highlightCode:bC,responses:responses_Responses,response:response_Response,ResponseExtension:response_extension,responseBody:ResponseBody,parameters:Parameters,parameterRow:ParameterRow,execute:Execute,headers:headers_Headers,errors:Errors,contentType:ContentType,overview:Overview,footer:Footer,FilterContainer,ParamBody,curl:Curl,schemes:Schemes,SchemesContainer,modelExample:ModelExample,ModelWrapper,ModelCollapse,Model,Models,EnumModel:enum_model,ObjectModel,ArrayModel,PrimitiveModel:Primitive,Property:property,TryItOutButton,Markdown:HP,BaseLayout,VersionPragmaFilter,VersionStamp:version_stamp,OperationExt:operation_extensions,OperationExtRow:operation_extension_row,ParameterExt:parameter_extension,ParameterIncludeEmpty,OperationTag,OperationContainer,OpenAPIVersion:openapi_version,DeepLink:deep_link,SvgAssets:svg_assets,Example:example_Example,ExamplesSelect,ExamplesSelectValueRetainer}}),form_components=()=>({components:{...xe}});var JP=__webpack_require__(775),GP=__webpack_require__.n(JP);const XP={value:"",onChange:()=>{},schema:{},keyName:"",required:!1,errors:(0,et.List)()};class JsonSchemaForm extends He.Component{static defaultProps=XP;componentDidMount(){const{dispatchInitialValue:i,value:s,onChange:u}=this.props;i?u(s):!1===i&&u("")}render(){let{schema:i,errors:s,value:u,onChange:m,getComponent:v,fn:_,disabled:j}=this.props;const M=i&&i.get?i.get("format"):null,$=i&&i.get?i.get("type"):null;let getComponentSilently=i=>v(i,!1,{failSilently:!0}),W=$?getComponentSilently(M?`JsonSchema_${$}_${M}`:`JsonSchema_${$}`):v("JsonSchema_string");return W||(W=v("JsonSchema_string")),He.createElement(W,Ao()({},this.props,{errors:s,fn:_,getComponent:v,value:u,onChange:m,schema:i,disabled:j}))}}class JsonSchema_string extends He.Component{static defaultProps=XP;onChange=i=>{const s=this.props.schema&&"file"===this.props.schema.get("type")?i.target.files[0]:i.target.value;this.props.onChange(s,this.props.keyName)};onEnumChange=i=>this.props.onChange(i);render(){let{getComponent:i,value:s,schema:u,errors:m,required:v,description:_,disabled:j}=this.props;const M=u&&u.get?u.get("enum"):null,$=u&&u.get?u.get("format"):null,W=u&&u.get?u.get("type"):null,X=u&&u.get?u.get("in"):null;if(s||(s=""),m=m.toJS?m.toJS():[],M){const u=i("Select");return He.createElement(u,{className:m.length?"invalid":"",title:m.length?m:"",allowedValues:[...M],value:s,allowEmptyValue:!v,disabled:j,onChange:this.onEnumChange})}const Y=j||X&&"formData"===X&&!("FormData"in window),Z=i("Input");return W&&"file"===W?He.createElement(Z,{type:"file",className:m.length?"invalid":"",title:m.length?m:"",onChange:this.onChange,disabled:Y}):He.createElement(GP(),{type:$&&"password"===$?"password":"text",className:m.length?"invalid":"",title:m.length?m:"",value:s,minLength:0,debounceTimeout:350,placeholder:_,onChange:this.onChange,disabled:Y})}}class JsonSchema_array extends He.PureComponent{static defaultProps=XP;constructor(i,s){super(i,s),this.state={value:valueOrEmptyList(i.value),schema:i.schema}}UNSAFE_componentWillReceiveProps(i){const s=valueOrEmptyList(i.value);s!==this.state.value&&this.setState({value:s}),i.schema!==this.state.schema&&this.setState({schema:i.schema})}onChange=()=>{this.props.onChange(this.state.value)};onItemChange=(i,s)=>{this.setState((u=>{let{value:m}=u;return{value:m.set(s,i)}}),this.onChange)};removeItem=i=>{this.setState((s=>{let{value:u}=s;return{value:u.delete(i)}}),this.onChange)};addItem=()=>{const{fn:i}=this.props;let s=valueOrEmptyList(this.state.value);this.setState((()=>({value:s.push(i.getSampleSchema(this.state.schema.get("items"),!1,{includeWriteOnly:!0}))})),this.onChange)};onEnumChange=i=>{this.setState((()=>({value:i})),this.onChange)};render(){let{getComponent:i,required:s,schema:u,errors:m,fn:v,disabled:_}=this.props;m=m.toJS?m.toJS():Array.isArray(m)?m:[];const j=m.filter((i=>"string"==typeof i)),M=m.filter((i=>void 0!==i.needRemove)).map((i=>i.error)),$=this.state.value,W=!!($&&$.count&&$.count()>0),X=u.getIn(["items","enum"]),Y=u.getIn(["items","type"]),Z=u.getIn(["items","format"]),ee=u.get("items");let ae,ie=!1,le="file"===Y||"string"===Y&&"binary"===Z;if(Y&&Z?ae=i(`JsonSchema_${Y}_${Z}`):"boolean"!==Y&&"array"!==Y&&"object"!==Y||(ae=i(`JsonSchema_${Y}`)),ae||le||(ie=!0),X){const u=i("Select");return He.createElement(u,{className:m.length?"invalid":"",title:m.length?m:"",multiple:!0,value:$,disabled:_,allowedValues:X,allowEmptyValue:!s,onChange:this.onEnumChange})}const ce=i("Button");return He.createElement("div",{className:"json-schema-array"},W?$.map(((s,u)=>{const j=(0,et.fromJS)([...m.filter((i=>i.index===u)).map((i=>i.error))]);return He.createElement("div",{key:u,className:"json-schema-form-item"},le?He.createElement(JsonSchemaArrayItemFile,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j,getComponent:i}):ie?He.createElement(JsonSchemaArrayItemText,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j}):He.createElement(ae,Ao()({},this.props,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j,schema:ee,getComponent:i,fn:v})),_?null:He.createElement(ce,{className:`btn btn-sm json-schema-form-item-remove ${M.length?"invalid":null}`,title:M.length?M:"",onClick:()=>this.removeItem(u)}," - "))})):null,_?null:He.createElement(ce,{className:`btn btn-sm json-schema-form-item-add ${j.length?"invalid":null}`,title:j.length?j:"",onClick:this.addItem},"Add ",Y?`${Y} `:"","item"))}}class JsonSchemaArrayItemText extends He.Component{static defaultProps=XP;onChange=i=>{const s=i.target.value;this.props.onChange(s,this.props.keyName)};render(){let{value:i,errors:s,description:u,disabled:m}=this.props;return i||(i=""),s=s.toJS?s.toJS():[],He.createElement(GP(),{type:"text",className:s.length?"invalid":"",title:s.length?s:"",value:i,minLength:0,debounceTimeout:350,placeholder:u,onChange:this.onChange,disabled:m})}}class JsonSchemaArrayItemFile extends He.Component{static defaultProps=XP;onFileChange=i=>{const s=i.target.files[0];this.props.onChange(s,this.props.keyName)};render(){let{getComponent:i,errors:s,disabled:u}=this.props;const m=i("Input"),v=u||!("FormData"in window);return He.createElement(m,{type:"file",className:s.length?"invalid":"",title:s.length?s:"",onChange:this.onFileChange,disabled:v})}}class JsonSchema_boolean extends He.Component{static defaultProps=XP;onEnumChange=i=>this.props.onChange(i);render(){let{getComponent:i,value:s,errors:u,schema:m,required:v,disabled:_}=this.props;u=u.toJS?u.toJS():[];let j=m&&m.get?m.get("enum"):null,M=!j||!v,$=!j&&["true","false"];const W=i("Select");return He.createElement(W,{className:u.length?"invalid":"",title:u.length?u:"",value:String(s),disabled:_,allowedValues:j?[...j]:$,allowEmptyValue:M,onChange:this.onEnumChange})}}const stringifyObjectErrors=i=>i.map((i=>{const s=void 0!==i.propKey?i.propKey:i.index;let u="string"==typeof i?i:"string"==typeof i.error?i.error:null;if(!s&&u)return u;let m=i.error,v=`/${i.propKey}`;for(;"object"==typeof m;){const i=void 0!==m.propKey?m.propKey:m.index;if(void 0===i)break;if(v+=`/${i}`,!m.error)break;m=m.error}return`${v}: ${m}`}));class JsonSchema_object extends He.PureComponent{constructor(){super()}static defaultProps=XP;onChange=i=>{this.props.onChange(i)};handleOnChange=i=>{const s=i.target.value;this.onChange(s)};render(){let{getComponent:i,value:s,errors:u,disabled:m}=this.props;const v=i("TextArea");return u=u.toJS?u.toJS():Array.isArray(u)?u:[],He.createElement("div",null,He.createElement(v,{className:gC()({invalid:u.length}),title:u.length?stringifyObjectErrors(u).join(", "):"",value:stringify(s),disabled:m,onChange:this.handleOnChange}))}}function valueOrEmptyList(i){return et.List.isList(i)?i:Array.isArray(i)?(0,et.fromJS)(i):(0,et.List)()}const json_schema_components=()=>({components:{...Pe}}),base=()=>[configsPlugin,util,logs,view,plugins_spec,err,icons,plugins_layout,json_schema_5_samples,core_components,form_components,swagger_client,json_schema_components,auth,downloadUrlPlugin,deep_linking,filter,on_complete,plugins_request_snippets,safe_render()],YP=(0,et.Map)();function onlyOAS3(i){return(s,u)=>function(){if(u.getSystem().specSelectors.isOAS3()){const s=i(...arguments);return"function"==typeof s?s(u):s}return s(...arguments)}}const QP=onlyOAS3(Xt((()=>null))),ZP=onlyOAS3((()=>i=>{const s=i.getSystem().specSelectors.specJson().getIn(["components","schemas"]);return et.Map.isMap(s)?s:YP})),eI=onlyOAS3((()=>i=>i.getSystem().specSelectors.specJson().hasIn(["servers",0]))),tI=onlyOAS3(Xt(Ri,(i=>i.getIn(["components","securitySchemes"])||null))),wrap_selectors_validOperationMethods=(i,s)=>function(u){if(s.specSelectors.isOAS3())return s.oas3Selectors.validOperationMethods();for(var m=arguments.length,v=new Array(m>1?m-1:0),_=1;_function(){for(var m=arguments.length,v=new Array(m),_=0;_i),(i=>{let{specSelectors:s}=i;return s.securityDefinitions()}),((i,s)=>{let u=(0,et.List)();return s?(s.entrySeq().forEach((i=>{let[s,m]=i;const v=m.get("type");if("oauth2"===v&&m.get("flows").entrySeq().forEach((i=>{let[v,_]=i,j=(0,et.fromJS)({flow:v,authorizationUrl:_.get("authorizationUrl"),tokenUrl:_.get("tokenUrl"),scopes:_.get("scopes"),type:m.get("type"),description:m.get("description")});u=u.push(new et.Map({[s]:j.filter((i=>void 0!==i))}))})),"http"!==v&&"apiKey"!==v||(u=u.push(new et.Map({[s]:m}))),"openIdConnect"===v&&m.get("openIdConnectData")){let i=m.get("openIdConnectData");(i.get("grant_types_supported")||["authorization_code","implicit"]).forEach((v=>{let _=i.get("scopes_supported")&&i.get("scopes_supported").reduce(((i,s)=>i.set(s,"")),new et.Map),j=(0,et.fromJS)({flow:v,authorizationUrl:i.get("authorization_endpoint"),tokenUrl:i.get("token_endpoint"),scopes:_,type:"oauth2",openIdConnectUrl:m.get("openIdConnectUrl")});u=u.push(new et.Map({[s]:j.filter((i=>void 0!==i))}))}))}})),u):u})));function OAS3ComponentWrapFactory(i){return(s,u)=>m=>"function"==typeof u.specSelectors?.isOAS3?u.specSelectors.isOAS3()?He.createElement(i,Ao()({},m,u,{Ori:s})):He.createElement(s,m):(console.warn("OAS3 wrapper: couldn't get spec"),null)}const lI=(0,et.Map)(),selectors_isSwagger2=()=>i=>function isSwagger2(i){const s=i.get("swagger");return"string"==typeof s&&"2.0"===s}(i.getSystem().specSelectors.specJson()),selectors_isOAS30=()=>i=>function isOAS30(i){const s=i.get("openapi");return"string"==typeof s&&/^3\.0\.([0123])(?:-rc[012])?$/.test(s)}(i.getSystem().specSelectors.specJson()),selectors_isOAS3=()=>i=>i.getSystem().specSelectors.isOAS30();function selectors_onlyOAS3(i){return function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.specSelectors.isOAS3()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}}}const cI=selectors_onlyOAS3((()=>i=>i.specSelectors.specJson().get("servers",lI))),uI=selectors_onlyOAS3(((i,s)=>{let{callbacks:u,specPath:m}=s;return i=>{const s=i.specSelectors.validOperationMethods();return et.Map.isMap(u)?u.reduce(((i,u,v)=>{if(!et.Map.isMap(u))return i;const _=u.reduce(((i,u,_)=>{if(!et.Map.isMap(u))return i;const j=u.entrySeq().filter((i=>{let[u]=i;return s.includes(u)})).map((i=>{let[s,u]=i;return{operation:(0,et.Map)({operation:u}),method:s,path:_,callbackName:v,specPath:m.concat([v,_,s])}}));return i.concat(j)}),(0,et.List)());return i.concat(_)}),(0,et.List)()).groupBy((i=>i.callbackName)).map((i=>i.toArray())).toObject():{}}})),callbacks=i=>{let{callbacks:s,specPath:u,specSelectors:m,getComponent:v}=i;const _=m.callbacksOperations({callbacks:s,specPath:u}),j=Object.keys(_),M=v("OperationContainer",!0);return 0===j.length?He.createElement("span",null,"No callbacks"):He.createElement("div",null,j.map((i=>He.createElement("div",{key:`${i}`},He.createElement("h2",null,i),_[i].map((s=>He.createElement(M,{key:`${i}-${s.path}-${s.method}`,op:s.operation,tag:"callbacks",method:s.method,path:s.path,specPath:s.specPath,allowTryItOut:!1})))))))},getDefaultRequestBodyValue=(i,s,u,m)=>{const v=i.getIn(["content",s])??(0,et.OrderedMap)(),_=v.get("schema",(0,et.OrderedMap)()).toJS(),j=void 0!==v.get("examples"),M=v.get("example"),$=j?v.getIn(["examples",u,"value"]):M;return stringify(m.getSampleSchema(_,s,{includeWriteOnly:!0},$))},components_request_body=i=>{let{userHasEditedBody:s,requestBody:u,requestBodyValue:m,requestBodyInclusionSetting:v,requestBodyErrors:_,getComponent:j,getConfigs:M,specSelectors:$,fn:W,contentType:X,isExecute:Y,specPath:Z,onChange:ee,onChangeIncludeEmpty:ae,activeExamplesKey:ie,updateActiveExamplesKey:le,setRetainRequestBodyValueFlag:ce}=i;const handleFile=i=>{ee(i.target.files[0])},setIsIncludedOptions=i=>{let s={key:i,shouldDispatchInit:!1,defaultValue:!0};return"no value"===v.get(i,"no value")&&(s.shouldDispatchInit=!0),s},pe=j("Markdown",!0),de=j("modelExample"),fe=j("RequestBodyEditor"),ye=j("highlightCode"),be=j("ExamplesSelectValueRetainer"),_e=j("Example"),we=j("ParameterIncludeEmpty"),{showCommonExtensions:Se}=M(),xe=u?.get("description")??null,Pe=u?.get("content")??new et.OrderedMap;X=X||Pe.keySeq().first()||"";const Ie=Pe.get(X)??(0,et.OrderedMap)(),Te=Ie.get("schema",(0,et.OrderedMap)()),Re=Ie.get("examples",null),qe=Re?.map(((i,s)=>{const m=i?.get("value",null);return m&&(i=i.set("value",getDefaultRequestBodyValue(u,X,s,W),m)),i}));if(_=et.List.isList(_)?_:(0,et.List)(),!Ie.size)return null;const ze="object"===Ie.getIn(["schema","type"]),Ve="binary"===Ie.getIn(["schema","format"]),We="base64"===Ie.getIn(["schema","format"]);if("application/octet-stream"===X||0===X.indexOf("image/")||0===X.indexOf("audio/")||0===X.indexOf("video/")||Ve||We){const i=j("Input");return Y?He.createElement(i,{type:"file",onChange:handleFile}):He.createElement("i",null,"Example values are not available for ",He.createElement("code",null,X)," media types.")}if(ze&&("application/x-www-form-urlencoded"===X||0===X.indexOf("multipart/"))&&Te.get("properties",(0,et.OrderedMap)()).size>0){const i=j("JsonSchemaForm"),s=j("ParameterExt"),u=Te.get("properties",(0,et.OrderedMap)());return m=et.Map.isMap(m)?m:(0,et.OrderedMap)(),He.createElement("div",{className:"table-container"},xe&&He.createElement(pe,{source:xe}),He.createElement("table",null,He.createElement("tbody",null,et.Map.isMap(u)&&u.entrySeq().map((u=>{let[M,$]=u;if($.get("readOnly"))return;let X=Se?getCommonExtensions($):null;const Z=Te.get("required",(0,et.List)()).includes(M),ie=$.get("type"),le=$.get("format"),ce=$.get("description"),de=m.getIn([M,"value"]),fe=m.getIn([M,"errors"])||_,ye=v.get(M)||!1,be=$.has("default")||$.has("example")||$.hasIn(["items","example"])||$.hasIn(["items","default"]),_e=$.has("enum")&&(1===$.get("enum").size||Z),xe=be||_e;let Pe="";"array"!==ie||xe||(Pe=[]),("object"===ie||xe)&&(Pe=W.getSampleSchema($,!1,{includeWriteOnly:!0})),"string"!=typeof Pe&&"object"===ie&&(Pe=stringify(Pe)),"string"==typeof Pe&&"array"===ie&&(Pe=JSON.parse(Pe));const Ie="string"===ie&&("binary"===le||"base64"===le);return He.createElement("tr",{key:M,className:"parameters","data-property-name":M},He.createElement("td",{className:"parameters-col_name"},He.createElement("div",{className:Z?"parameter__name required":"parameter__name"},M,Z?He.createElement("span",null," *"):null),He.createElement("div",{className:"parameter__type"},ie,le&&He.createElement("span",{className:"prop-format"},"($",le,")"),Se&&X.size?X.entrySeq().map((i=>{let[u,m]=i;return He.createElement(s,{key:`${u}-${m}`,xKey:u,xVal:m})})):null),He.createElement("div",{className:"parameter__deprecated"},$.get("deprecated")?"deprecated":null)),He.createElement("td",{className:"parameters-col_description"},He.createElement(pe,{source:ce}),Y?He.createElement("div",null,He.createElement(i,{fn:W,dispatchInitialValue:!Ie,schema:$,description:M,getComponent:j,value:void 0===de?Pe:de,required:Z,errors:fe,onChange:i=>{ee(i,[M])}}),Z?null:He.createElement(we,{onChange:i=>ae(M,i),isIncluded:ye,isIncludedOptions:setIsIncludedOptions(M),isDisabled:Array.isArray(de)?0!==de.length:!isEmptyValue(de)})):null))})))))}const Xe=getDefaultRequestBodyValue(u,X,ie,W);let Ye=null;return getKnownSyntaxHighlighterLanguage(Xe)&&(Ye="json"),He.createElement("div",null,xe&&He.createElement(pe,{source:xe}),qe?He.createElement(be,{userHasEditedBody:s,examples:qe,currentKey:ie,currentUserInputValue:m,onSelect:i=>{le(i)},updateValue:ee,defaultToFirstExample:!0,getComponent:j,setRetainRequestBodyValueFlag:ce}):null,Y?He.createElement("div",null,He.createElement(fe,{value:m,errors:_,defaultValue:Xe,onChange:ee,getComponent:j})):He.createElement(de,{getComponent:j,getConfigs:M,specSelectors:$,expandDepth:1,isExecute:Y,schema:Ie.get("schema"),specPath:Z.push("content",X),example:He.createElement(ye,{className:"body-param__example",getConfigs:M,language:Ye,value:stringify(m)||Xe}),includeWriteOnly:!0}),qe?He.createElement(_e,{example:qe.get(ie),getComponent:j,getConfigs:M}):null)};class operation_link_OperationLink extends He.Component{render(){const{link:i,name:s,getComponent:u}=this.props,m=u("Markdown",!0);let v=i.get("operationId")||i.get("operationRef"),_=i.get("parameters")&&i.get("parameters").toJS(),j=i.get("description");return He.createElement("div",{className:"operation-link"},He.createElement("div",{className:"description"},He.createElement("b",null,He.createElement("code",null,s)),j?He.createElement(m,{source:j}):null),He.createElement("pre",null,"Operation `",v,"`",He.createElement("br",null),He.createElement("br",null),"Parameters ",function padString(i,s){if("string"!=typeof s)return"";return s.split("\n").map(((s,u)=>u>0?Array(i+1).join(" ")+s:s)).join("\n")}(0,JSON.stringify(_,null,2))||"{}",He.createElement("br",null)))}}const pI=operation_link_OperationLink;class servers_Servers extends He.Component{componentDidMount(){let{servers:i,currentServer:s}=this.props;s||this.setServer(i.first()?.get("url"))}UNSAFE_componentWillReceiveProps(i){let{servers:s,setServerVariableValue:u,getServerVariable:m}=i;if(this.props.currentServer!==i.currentServer||this.props.servers!==i.servers){let v=s.find((s=>s.get("url")===i.currentServer)),_=this.props.servers.find((i=>i.get("url")===this.props.currentServer))||(0,et.OrderedMap)();if(!v)return this.setServer(s.first().get("url"));let j=((_.get("variables")||(0,et.OrderedMap)()).find((i=>i.get("default")))||(0,et.OrderedMap)()).get("default"),M=v.get("variables")||(0,et.OrderedMap)(),$=(M.find((i=>i.get("default")))||(0,et.OrderedMap)()).get("default");M.map(((s,v)=>{m(i.currentServer,v)&&j===$||u({server:i.currentServer,key:v,val:s.get("default")||""})}))}}onServerChange=i=>{this.setServer(i.target.value)};onServerVariableValueChange=i=>{let{setServerVariableValue:s,currentServer:u}=this.props,m=i.target.getAttribute("data-variable"),v=i.target.value;"function"==typeof s&&s({server:u,key:m,val:v})};setServer=i=>{let{setSelectedServer:s}=this.props;s(i)};render(){let{servers:i,currentServer:s,getServerVariable:u,getEffectiveServerValue:m}=this.props,v=(i.find((i=>i.get("url")===s))||(0,et.OrderedMap)()).get("variables")||(0,et.OrderedMap)(),_=0!==v.size;return He.createElement("div",{className:"servers"},He.createElement("label",{htmlFor:"servers"},He.createElement("select",{onChange:this.onServerChange,value:s},i.valueSeq().map((i=>He.createElement("option",{value:i.get("url"),key:i.get("url")},i.get("url"),i.get("description")&&` - ${i.get("description")}`))).toArray())),_?He.createElement("div",null,He.createElement("div",{className:"computed-url"},"Computed URL:",He.createElement("code",null,m(s))),He.createElement("h4",null,"Server variables"),He.createElement("table",null,He.createElement("tbody",null,v.entrySeq().map((i=>{let[m,v]=i;return He.createElement("tr",{key:m},He.createElement("td",null,m),He.createElement("td",null,v.get("enum")?He.createElement("select",{"data-variable":m,onChange:this.onServerVariableValueChange},v.get("enum").map((i=>He.createElement("option",{selected:i===u(s,m),key:i,value:i},i)))):He.createElement("input",{type:"text",value:u(s,m)||"",onChange:this.onServerVariableValueChange,"data-variable":m})))}))))):null)}}class ServersContainer extends He.Component{render(){const{specSelectors:i,oas3Selectors:s,oas3Actions:u,getComponent:m}=this.props,v=i.servers(),_=m("Servers");return v&&v.size?He.createElement("div",null,He.createElement("span",{className:"servers-title"},"Servers"),He.createElement(_,{servers:v,currentServer:s.selectedServer(),setSelectedServer:u.setSelectedServer,setServerVariableValue:u.setServerVariableValue,getServerVariable:s.serverVariableValue,getEffectiveServerValue:s.serverEffectiveValue})):null}}const hI=Function.prototype;class RequestBodyEditor extends He.PureComponent{static defaultProps={onChange:hI,userHasEditedBody:!1};constructor(i,s){super(i,s),this.state={value:stringify(i.value)||i.defaultValue},i.onChange(i.value)}applyDefaultValue=i=>{const{onChange:s,defaultValue:u}=i||this.props;return this.setState({value:u}),s(u)};onChange=i=>{this.props.onChange(stringify(i))};onDomChange=i=>{const s=i.target.value;this.setState({value:s},(()=>this.onChange(s)))};UNSAFE_componentWillReceiveProps(i){this.props.value!==i.value&&i.value!==this.state.value&&this.setState({value:stringify(i.value)}),!i.value&&i.defaultValue&&this.state.value&&this.applyDefaultValue(i)}render(){let{getComponent:i,errors:s}=this.props,{value:u}=this.state,m=s.size>0;const v=i("TextArea");return He.createElement("div",{className:"body-param"},He.createElement(v,{className:gC()("body-param__text",{invalid:m}),title:s.size?s.join(", "):"",value:u,onChange:this.onDomChange}))}}class HttpAuth extends He.Component{constructor(i,s){super(i,s);let{name:u,schema:m}=this.props,v=this.getValue();this.state={name:u,schema:m,value:v}}getValue(){let{name:i,authorized:s}=this.props;return s&&s.getIn([i,"value"])}onChange=i=>{let{onChange:s}=this.props,{value:u,name:m}=i.target,v=Object.assign({},this.state.value);m?v[m]=u:v=u,this.setState({value:v},(()=>s(this.state)))};render(){let{schema:i,getComponent:s,errSelectors:u,name:m}=this.props;const v=s("Input"),_=s("Row"),j=s("Col"),M=s("authError"),$=s("Markdown",!0),W=s("JumpToPath",!0),X=(i.get("scheme")||"").toLowerCase();let Y=this.getValue(),Z=u.allErrors().filter((i=>i.get("authId")===m));if("basic"===X){let s=Y?Y.get("username"):null;return He.createElement("div",null,He.createElement("h4",null,He.createElement("code",null,m||i.get("name")),"  (http, Basic)",He.createElement(W,{path:["securityDefinitions",m]})),s&&He.createElement("h6",null,"Authorized"),He.createElement(_,null,He.createElement($,{source:i.get("description")})),He.createElement(_,null,He.createElement("label",null,"Username:"),s?He.createElement("code",null," ",s," "):He.createElement(j,null,He.createElement(v,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),He.createElement(_,null,He.createElement("label",null,"Password:"),s?He.createElement("code",null," ****** "):He.createElement(j,null,He.createElement(v,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),Z.valueSeq().map(((i,s)=>He.createElement(M,{error:i,key:s}))))}return"bearer"===X?He.createElement("div",null,He.createElement("h4",null,He.createElement("code",null,m||i.get("name")),"  (http, Bearer)",He.createElement(W,{path:["securityDefinitions",m]})),Y&&He.createElement("h6",null,"Authorized"),He.createElement(_,null,He.createElement($,{source:i.get("description")})),He.createElement(_,null,He.createElement("label",null,"Value:"),Y?He.createElement("code",null," ****** "):He.createElement(j,null,He.createElement(v,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),Z.valueSeq().map(((i,s)=>He.createElement(M,{error:i,key:s})))):He.createElement("div",null,He.createElement("em",null,He.createElement("b",null,m)," HTTP authentication: unsupported scheme ",`'${X}'`))}}class operation_servers_OperationServers extends He.Component{setSelectedServer=i=>{const{path:s,method:u}=this.props;return this.forceUpdate(),this.props.setSelectedServer(i,`${s}:${u}`)};setServerVariableValue=i=>{const{path:s,method:u}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...i,namespace:`${s}:${u}`})};getSelectedServer=()=>{const{path:i,method:s}=this.props;return this.props.getSelectedServer(`${i}:${s}`)};getServerVariable=(i,s)=>{const{path:u,method:m}=this.props;return this.props.getServerVariable({namespace:`${u}:${m}`,server:i},s)};getEffectiveServerValue=i=>{const{path:s,method:u}=this.props;return this.props.getEffectiveServerValue({server:i,namespace:`${s}:${u}`})};render(){const{operationServers:i,pathServers:s,getComponent:u}=this.props;if(!i&&!s)return null;const m=u("Servers"),v=i||s,_=i?"operation":"path";return He.createElement("div",{className:"opblock-section operation-servers"},He.createElement("div",{className:"opblock-section-header"},He.createElement("div",{className:"tab-header"},He.createElement("h4",{className:"opblock-title"},"Servers"))),He.createElement("div",{className:"opblock-description-wrapper"},He.createElement("h4",{className:"message"},"These ",_,"-level options override the global server options."),He.createElement(m,{servers:v,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}const dI={Callbacks:callbacks,HttpAuth,RequestBody:components_request_body,Servers:servers_Servers,ServersContainer,RequestBodyEditor,OperationServers:operation_servers_OperationServers,operationLink:pI},fI=new Remarkable("commonmark");fI.block.ruler.enable(["table"]),fI.set({linkTarget:"_blank"});const markdown_Markdown=i=>{let{source:s,className:u="",getConfigs:m}=i;if("string"!=typeof s)return null;if(s){const{useUnsafeMarkdown:i}=m(),v=sanitizer(fI.render(s),{useUnsafeMarkdown:i});let _;return"string"==typeof v&&(_=v.trim()),He.createElement("div",{dangerouslySetInnerHTML:{__html:_},className:gC()(u,"renderedMarkdown")})}return null};markdown_Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const mI=OAS3ComponentWrapFactory(markdown_Markdown),gI=OAS3ComponentWrapFactory((i=>{let{Ori:s,...u}=i;const{schema:m,getComponent:v,errSelectors:_,authorized:j,onAuthChange:M,name:$}=u,W=v("HttpAuth");return"http"===m.get("type")?He.createElement(W,{key:$,schema:m,name:$,errSelectors:_,authorized:j,getComponent:v,onChange:M}):He.createElement(s,u)})),yI=OAS3ComponentWrapFactory(OnlineValidatorBadge);class ModelComponent extends He.Component{render(){let{getConfigs:i,schema:s}=this.props,u=["model-box"],m=null;return!0===s.get("deprecated")&&(u.push("deprecated"),m=He.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),He.createElement("div",{className:u.join(" ")},m,He.createElement(Model,Ao()({},this.props,{getConfigs:i,depth:1,expandDepth:this.props.expandDepth||0})))}}const vI=OAS3ComponentWrapFactory(ModelComponent),bI=OAS3ComponentWrapFactory((i=>{let{Ori:s,...u}=i;const{schema:m,getComponent:v,errors:_,onChange:j}=u,M=m&&m.get?m.get("format"):null,$=m&&m.get?m.get("type"):null,W=v("Input");return $&&"string"===$&&M&&("binary"===M||"base64"===M)?He.createElement(W,{type:"file",className:_.length?"invalid":"",title:_.length?_:"",onChange:i=>{j(i.target.files[0])},disabled:s.isDisabled}):He.createElement(s,u)})),_I=function OAS30ComponentWrapFactory(i){return(s,u)=>m=>"function"==typeof u.specSelectors?.isOAS30?u.specSelectors.isOAS30()?He.createElement(i,Ao()({},m,u,{Ori:s})):He.createElement(s,m):(console.warn("OAS30 wrapper: couldn't get spec"),null)}((i=>{const{Ori:s}=i;return He.createElement(s,{oasVersion:"3.0"})})),EI={Markdown:mI,AuthItem:gI,OpenAPIVersion:_I,JsonSchema_string:bI,model:vI,onlineValidatorBadge:yI},wI="oas3_set_servers",SI="oas3_set_request_body_value",xI="oas3_set_request_body_retain_flag",kI="oas3_set_request_body_inclusion",OI="oas3_set_active_examples_member",AI="oas3_set_request_content_type",CI="oas3_set_response_content_type",jI="oas3_set_server_variable_value",PI="oas3_set_request_body_validate_error",II="oas3_clear_request_body_validate_error",NI="oas3_clear_request_body_value";function setSelectedServer(i,s){return{type:wI,payload:{selectedServerUrl:i,namespace:s}}}function setRequestBodyValue(i){let{value:s,pathMethod:u}=i;return{type:SI,payload:{value:s,pathMethod:u}}}const setRetainRequestBodyValueFlag=i=>{let{value:s,pathMethod:u}=i;return{type:xI,payload:{value:s,pathMethod:u}}};function setRequestBodyInclusion(i){let{value:s,pathMethod:u,name:m}=i;return{type:kI,payload:{value:s,pathMethod:u,name:m}}}function setActiveExamplesMember(i){let{name:s,pathMethod:u,contextType:m,contextName:v}=i;return{type:OI,payload:{name:s,pathMethod:u,contextType:m,contextName:v}}}function setRequestContentType(i){let{value:s,pathMethod:u}=i;return{type:AI,payload:{value:s,pathMethod:u}}}function setResponseContentType(i){let{value:s,path:u,method:m}=i;return{type:CI,payload:{value:s,path:u,method:m}}}function setServerVariableValue(i){let{server:s,namespace:u,key:m,val:v}=i;return{type:jI,payload:{server:s,namespace:u,key:m,val:v}}}const setRequestBodyValidateError=i=>{let{path:s,method:u,validationErrors:m}=i;return{type:PI,payload:{path:s,method:u,validationErrors:m}}},clearRequestBodyValidateError=i=>{let{path:s,method:u}=i;return{type:II,payload:{path:s,method:u}}},initRequestBodyValidateError=i=>{let{pathMethod:s}=i;return{type:II,payload:{path:s[0],method:s[1]}}},clearRequestBodyValue=i=>{let{pathMethod:s}=i;return{type:NI,payload:{pathMethod:s}}},oas3_selectors_onlyOAS3=i=>function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.getSystem().specSelectors.isOAS3()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}};const TI=oas3_selectors_onlyOAS3(((i,s)=>{const u=s?[s,"selectedServer"]:["selectedServer"];return i.getIn(u)||""})),MI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"bodyValue"])||null)),RI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"retainBodyValue"])||!1)),selectDefaultRequestBodyValue=(i,s,u)=>i=>{const{oas3Selectors:m,specSelectors:v,fn:_}=i.getSystem();if(v.isOAS3()){const i=m.requestContentType(s,u);if(i)return getDefaultRequestBodyValue(v.specResolvedSubtree(["paths",s,u,"requestBody"]),i,m.activeExamplesMember(s,u,"requestBody","requestBody"),_)}return null},BI=oas3_selectors_onlyOAS3(((i,s,u)=>i=>{const{oas3Selectors:m,specSelectors:v,fn:_}=i;let j=!1;const M=m.requestContentType(s,u);let $=m.requestBodyValue(s,u);const W=v.specResolvedSubtree(["paths",s,u,"requestBody"]);if(!W)return!1;if(et.Map.isMap($)&&($=stringify($.mapEntries((i=>et.Map.isMap(i[1])?[i[0],i[1].get("value")]:i)).toJS())),et.List.isList($)&&($=stringify($)),M){const i=getDefaultRequestBodyValue(W,M,m.activeExamplesMember(s,u,"requestBody","requestBody"),_);j=!!$&&$!==i}return j})),DI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"bodyInclusion"])||(0,et.Map)())),LI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"errors"])||null)),FI=oas3_selectors_onlyOAS3(((i,s,u,m,v)=>i.getIn(["examples",s,u,m,v,"activeExample"])||null)),qI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"requestContentType"])||null)),$I=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"responseContentType"])||null)),zI=oas3_selectors_onlyOAS3(((i,s,u)=>{let m;if("string"!=typeof s){const{server:i,namespace:v}=s;m=v?[v,"serverVariableValues",i,u]:["serverVariableValues",i,u]}else{m=["serverVariableValues",s,u]}return i.getIn(m)||null})),UI=oas3_selectors_onlyOAS3(((i,s)=>{let u;if("string"!=typeof s){const{server:i,namespace:m}=s;u=m?[m,"serverVariableValues",i]:["serverVariableValues",i]}else{u=["serverVariableValues",s]}return i.getIn(u)||(0,et.OrderedMap)()})),VI=oas3_selectors_onlyOAS3(((i,s)=>{var u,m;if("string"!=typeof s){const{server:v,namespace:_}=s;m=v,u=_?i.getIn([_,"serverVariableValues",m]):i.getIn(["serverVariableValues",m])}else m=s,u=i.getIn(["serverVariableValues",m]);u=u||(0,et.OrderedMap)();let v=m;return u.map(((i,s)=>{v=v.replace(new RegExp(`{${s}}`,"g"),i)})),v})),WI=function validateRequestBodyIsRequired(i){return function(){for(var s=arguments.length,u=new Array(s),m=0;m{const m=s.getSystem().specSelectors.specJson();let v=[...u][1]||[];return!m.getIn(["paths",...v,"requestBody","required"])||i(...u)}}}(((i,s)=>((i,s)=>(s=s||[],!!i.getIn(["requestData",...s,"bodyValue"])))(i,s))),validateShallowRequired=(i,s)=>{let{oas3RequiredRequestBodyContentType:u,oas3RequestContentType:m,oas3RequestBodyValue:v}=s,_=[];if(!et.Map.isMap(v))return _;let j=[];return Object.keys(u.requestContentType).forEach((i=>{if(i===m){u.requestContentType[i].forEach((i=>{j.indexOf(i)<0&&j.push(i)}))}})),j.forEach((i=>{v.getIn([i,"value"])||_.push(i)})),_},KI=Xt((()=>["get","put","post","delete","options","head","patch","trace"])),HI={[wI]:(i,s)=>{let{payload:{selectedServerUrl:u,namespace:m}}=s;const v=m?[m,"selectedServer"]:["selectedServer"];return i.setIn(v,u)},[SI]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;if(!et.Map.isMap(u))return i.setIn(["requestData",v,_,"bodyValue"],u);let j,M=i.getIn(["requestData",v,_,"bodyValue"])||(0,et.Map)();et.Map.isMap(M)||(M=(0,et.Map)());const[...$]=u.keys();return $.forEach((i=>{let s=u.getIn([i]);M.has(i)&&et.Map.isMap(s)||(j=M.setIn([i,"value"],s))})),i.setIn(["requestData",v,_,"bodyValue"],j)},[xI]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;return i.setIn(["requestData",v,_,"retainBodyValue"],u)},[kI]:(i,s)=>{let{payload:{value:u,pathMethod:m,name:v}}=s,[_,j]=m;return i.setIn(["requestData",_,j,"bodyInclusion",v],u)},[OI]:(i,s)=>{let{payload:{name:u,pathMethod:m,contextType:v,contextName:_}}=s,[j,M]=m;return i.setIn(["examples",j,M,v,_,"activeExample"],u)},[AI]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;return i.setIn(["requestData",v,_,"requestContentType"],u)},[CI]:(i,s)=>{let{payload:{value:u,path:m,method:v}}=s;return i.setIn(["requestData",m,v,"responseContentType"],u)},[jI]:(i,s)=>{let{payload:{server:u,namespace:m,key:v,val:_}}=s;const j=m?[m,"serverVariableValues",u,v]:["serverVariableValues",u,v];return i.setIn(j,_)},[PI]:(i,s)=>{let{payload:{path:u,method:m,validationErrors:v}}=s,_=[];if(_.push("Required field is not provided"),v.missingBodyValue)return i.setIn(["requestData",u,m,"errors"],(0,et.fromJS)(_));if(v.missingRequiredKeys&&v.missingRequiredKeys.length>0){const{missingRequiredKeys:s}=v;return i.updateIn(["requestData",u,m,"bodyValue"],(0,et.fromJS)({}),(i=>s.reduce(((i,s)=>i.setIn([s,"errors"],(0,et.fromJS)(_))),i)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),i},[II]:(i,s)=>{let{payload:{path:u,method:m}}=s;const v=i.getIn(["requestData",u,m,"bodyValue"]);if(!et.Map.isMap(v))return i.setIn(["requestData",u,m,"errors"],(0,et.fromJS)([]));const[..._]=v.keys();return _?i.updateIn(["requestData",u,m,"bodyValue"],(0,et.fromJS)({}),(i=>_.reduce(((i,s)=>i.setIn([s,"errors"],(0,et.fromJS)([]))),i))):i},[NI]:(i,s)=>{let{payload:{pathMethod:u}}=s,[m,v]=u;const _=i.getIn(["requestData",m,v,"bodyValue"]);return _?et.Map.isMap(_)?i.setIn(["requestData",m,v,"bodyValue"],(0,et.Map)()):i.setIn(["requestData",m,v,"bodyValue"],""):i}};function oas3(){return{components:dI,wrapComponents:EI,statePlugins:{spec:{wrapSelectors:Ie,selectors:Re},auth:{wrapSelectors:Te},oas3:{actions:{...qe},reducers:HI,selectors:{...ze}}}}}const webhooks=i=>{let{specSelectors:s,getComponent:u}=i;const m=s.selectWebhooksOperations(),v=Object.keys(m),_=u("OperationContainer",!0);return 0===v.length?null:He.createElement("div",{className:"webhooks"},He.createElement("h2",null,"Webhooks"),v.map((i=>He.createElement("div",{key:`${i}-webhook`},m[i].map((s=>He.createElement(_,{key:`${i}-${s.method}-webhook`,op:s.operation,tag:"webhooks",method:s.method,path:i,specPath:s.specPath,allowTryItOut:!1})))))))},oas31_components_license=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectLicenseNameField(),v=u.selectLicenseUrl(),_=s("Link");return He.createElement("div",{className:"info__license"},v?He.createElement("div",{className:"info__license__url"},He.createElement(_,{target:"_blank",href:sanitizeUrl(v)},m)):He.createElement("span",null,m))},oas31_components_contact=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectContactNameField(),v=u.selectContactUrl(),_=u.selectContactEmailField(),j=s("Link");return He.createElement("div",{className:"info__contact"},v&&He.createElement("div",null,He.createElement(j,{href:sanitizeUrl(v),target:"_blank"},m," - Website")),_&&He.createElement(j,{href:sanitizeUrl(`mailto:${_}`)},v?`Send email to ${m}`:`Contact ${m}`))},oas31_components_info=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.version(),v=u.url(),_=u.basePath(),j=u.host(),M=u.selectInfoSummaryField(),$=u.selectInfoDescriptionField(),W=u.selectInfoTitleField(),X=u.selectInfoTermsOfServiceUrl(),Y=u.selectExternalDocsUrl(),Z=u.selectExternalDocsDescriptionField(),ee=u.contact(),ae=u.license(),ie=s("Markdown",!0),le=s("Link"),ce=s("VersionStamp"),pe=s("OpenAPIVersion"),de=s("InfoUrl"),fe=s("InfoBasePath"),ye=s("License",!0),be=s("Contact",!0),_e=s("JsonSchemaDialect",!0);return He.createElement("div",{className:"info"},He.createElement("hgroup",{className:"main"},He.createElement("h2",{className:"title"},W,He.createElement("span",null,m&&He.createElement(ce,{version:m}),He.createElement(pe,{oasVersion:"3.1"}))),(j||_)&&He.createElement(fe,{host:j,basePath:_}),v&&He.createElement(de,{getComponent:s,url:v})),M&&He.createElement("p",{className:"info__summary"},M),He.createElement("div",{className:"info__description description"},He.createElement(ie,{source:$})),X&&He.createElement("div",{className:"info__tos"},He.createElement(le,{target:"_blank",href:sanitizeUrl(X)},"Terms of service")),ee.size>0&&He.createElement(be,null),ae.size>0&&He.createElement(ye,null),Y&&He.createElement(le,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(Y)},Z||Y),He.createElement(_e,null))},json_schema_dialect=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectJsonSchemaDialectField(),v=u.selectJsonSchemaDialectDefault(),_=s("Link");return He.createElement(He.Fragment,null,m&&m===v&&He.createElement("p",{className:"info__jsonschemadialect"},"JSON Schema dialect:"," ",He.createElement(_,{target:"_blank",href:sanitizeUrl(m)},m)),m&&m!==v&&He.createElement("div",{className:"error-wrapper"},He.createElement("div",{className:"no-margin"},He.createElement("div",{className:"errors"},He.createElement("div",{className:"errors-wrapper"},He.createElement("h4",{className:"center"},"Warning"),He.createElement("p",{className:"message"},He.createElement("strong",null,"OpenAPI.jsonSchemaDialect")," field contains a value different from the default value of"," ",He.createElement(_,{target:"_blank",href:v},v),". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value."))))))},version_pragma_filter=i=>{let{bypass:s,isSwagger2:u,isOAS3:m,isOAS31:v,alsoShow:_,children:j}=i;return s?He.createElement("div",null,j):u&&(m||v)?He.createElement("div",{className:"version-pragma"},_,He.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},He.createElement("div",null,He.createElement("h3",null,"Unable to render this definition"),He.createElement("p",null,He.createElement("code",null,"swagger")," and ",He.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),He.createElement("p",null,"Supported version fields are ",He.createElement("code",null,'swagger: "2.0"')," and those that match ",He.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",He.createElement("code",null,"openapi: 3.1.0"),").")))):u||m||v?He.createElement("div",null,j):He.createElement("div",{className:"version-pragma"},_,He.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},He.createElement("div",null,He.createElement("h3",null,"Unable to render this definition"),He.createElement("p",null,"The provided definition does not specify a valid version field."),He.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",He.createElement("code",null,'swagger: "2.0"')," and those that match ",He.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",He.createElement("code",null,"openapi: 3.1.0"),")."))))},getModelName=i=>"string"==typeof i&&i.includes("#/components/schemas/")?(i=>{const s=i.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(s)}catch{return s}})(i.replace(/^.*#\/components\/schemas\//,"")):null,JI=(0,He.forwardRef)(((i,s)=>{let{schema:u,getComponent:m,onToggle:v}=i;const _=m("JSONSchema202012"),j=getModelName(u.get("$$ref")),M=(0,He.useCallback)(((i,s)=>{v(j,s)}),[j,v]);return He.createElement(_,{name:j,schema:u.toJS(),ref:s,onExpand:M})}));JI.defaultProps={name:"",displayName:"",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const GI=JI,models=i=>{let{specActions:s,specSelectors:u,layoutSelectors:m,layoutActions:v,getComponent:_,getConfigs:j}=i;const M=u.selectSchemas(),$=Object.keys(M).length>0,W=["components","schemas"],{docExpansion:X,defaultModelsExpandDepth:Y}=j(),Z=Y>0&&"none"!==X,ee=m.isShown(W,Z),ae=_("Collapse"),ie=_("JSONSchema202012"),le=_("ArrowUpIcon"),ce=_("ArrowDownIcon");(0,He.useEffect)((()=>{const i=ee&&Y>1,m=null!=u.specResolvedSubtree(W);i&&!m&&s.requestResolvedSubtree(W)}),[ee,Y]);const pe=(0,He.useCallback)((()=>{v.show(W,!ee)}),[ee]),de=(0,He.useCallback)((i=>{null!==i&&v.readyToScroll(W,i)}),[]),handleJSONSchema202012Ref=i=>s=>{null!==s&&v.readyToScroll([...W,i],s)},handleJSONSchema202012Expand=i=>(m,v)=>{if(v){const m=[...W,i];null!=u.specResolvedSubtree(m)||s.requestResolvedSubtree([...W,i])}};return!$||Y<0?null:He.createElement("section",{className:gC()("models",{"is-open":ee}),ref:de},He.createElement("h4",null,He.createElement("button",{"aria-expanded":ee,className:"models-control",onClick:pe},He.createElement("span",null,"Schemas"),ee?He.createElement(le,null):He.createElement(ce,null))),He.createElement(ae,{isOpened:ee},Object.entries(M).map((i=>{let[s,u]=i;return He.createElement(ie,{key:s,ref:handleJSONSchema202012Ref(s),schema:u,name:s,onExpand:handleJSONSchema202012Expand(s)})}))))},mutual_tls_auth=i=>{let{schema:s,getComponent:u}=i;const m=u("JumpToPath",!0);return He.createElement("div",null,He.createElement("h4",null,s.get("name")," (mutualTLS)"," ",He.createElement(m,{path:["securityDefinitions",s.get("name")]})),He.createElement("p",null,"Mutual TLS is required by this API/Operation. Certificates are managed via your Operating System and/or your browser."),He.createElement("p",null,s.get("description")))};class auths_Auths extends He.Component{constructor(i,s){super(i,s),this.state={}}onAuthChange=i=>{let{name:s}=i;this.setState({[s]:i})};submitAuth=i=>{i.preventDefault();let{authActions:s}=this.props;s.authorizeWithPersistOption(this.state)};logoutClick=i=>{i.preventDefault();let{authActions:s,definitions:u}=this.props,m=u.map(((i,s)=>s)).toArray();this.setState(m.reduce(((i,s)=>(i[s]="",i)),{})),s.logoutWithPersistOption(m)};close=i=>{i.preventDefault();let{authActions:s}=this.props;s.showDefinitions(!1)};render(){let{definitions:i,getComponent:s,authSelectors:u,errSelectors:m}=this.props;const v=s("AuthItem"),_=s("oauth2",!0),j=s("Button"),M=u.authorized(),$=i.filter(((i,s)=>!!M.get(s))),W=i.filter((i=>"oauth2"!==i.get("type")&&"mutualTLS"!==i.get("type"))),X=i.filter((i=>"oauth2"===i.get("type"))),Y=i.filter((i=>"mutualTLS"===i.get("type")));return He.createElement("div",{className:"auth-container"},W.size>0&&He.createElement("form",{onSubmit:this.submitAuth},W.map(((i,u)=>He.createElement(v,{key:u,schema:i,name:u,getComponent:s,onAuthChange:this.onAuthChange,authorized:M,errSelectors:m}))).toArray(),He.createElement("div",{className:"auth-btn-wrapper"},W.size===$.size?He.createElement(j,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):He.createElement(j,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),He.createElement(j,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),X.size>0?He.createElement("div",null,He.createElement("div",{className:"scope-def"},He.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),He.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),i.filter((i=>"oauth2"===i.get("type"))).map(((i,s)=>He.createElement("div",{key:s},He.createElement(_,{authorized:M,schema:i,name:s})))).toArray()):null,Y.size>0&&He.createElement("div",null,Y.map(((i,u)=>He.createElement(v,{key:u,schema:i,name:u,getComponent:s,onAuthChange:this.onAuthChange,authorized:M,errSelectors:m}))).toArray()))}}const XI=auths_Auths,isOAS31=i=>{const s=i.get("openapi");return"string"==typeof s&&/^3\.1\.(?:[1-9]\d*|0)$/.test(s)},fn_createOnlyOAS31Selector=i=>function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.getSystem().specSelectors.isOAS31()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}},createOnlyOAS31SelectorWrapper=i=>(s,u)=>function(m){for(var v=arguments.length,_=new Array(v>1?v-1:0),j=1;jfunction(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{const v=i(s,u,...m);return"function"==typeof v?v(u):v}},createOnlyOAS31ComponentWrapper=i=>(s,u)=>m=>u.specSelectors.isOAS31()?He.createElement(i,Ao()({},m,{originalComponent:s,getSystem:u.getSystem})):He.createElement(s,m),YI=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31License",!0);return He.createElement(u,null)})),QI=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31Contact",!0);return He.createElement(u,null)})),ZI=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31Info",!0);return He.createElement(u,null)})),makeIsExpandable=(i,s)=>{const{fn:u}=s();if("function"!=typeof i)return null;const{hasKeyword:m}=u.jsonSchema202012;return s=>i(s)||m(s,"example")||s?.xml||s?.discriminator||s?.externalDocs},getProperties=(i,s)=>{let{includeReadOnly:u,includeWriteOnly:m}=s;if(!i?.properties)return{};const v=Object.entries(i.properties).filter((i=>{let[,s]=i;return(!(!0===s?.readOnly)||u)&&(!(!0===s?.writeOnly)||m)}));return Object.fromEntries(v)},eN=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s,...u}=i;const m=s(),{getComponent:v,fn:_,getConfigs:j}=m,M=j(),$=v("OAS31Model"),W=v("JSONSchema202012"),X=v("JSONSchema202012Keyword$schema"),Y=v("JSONSchema202012Keyword$vocabulary"),Z=v("JSONSchema202012Keyword$id"),ee=v("JSONSchema202012Keyword$anchor"),ae=v("JSONSchema202012Keyword$dynamicAnchor"),ie=v("JSONSchema202012Keyword$ref"),le=v("JSONSchema202012Keyword$dynamicRef"),ce=v("JSONSchema202012Keyword$defs"),pe=v("JSONSchema202012Keyword$comment"),de=v("JSONSchema202012KeywordAllOf"),fe=v("JSONSchema202012KeywordAnyOf"),ye=v("JSONSchema202012KeywordOneOf"),be=v("JSONSchema202012KeywordNot"),_e=v("JSONSchema202012KeywordIf"),we=v("JSONSchema202012KeywordThen"),Se=v("JSONSchema202012KeywordElse"),xe=v("JSONSchema202012KeywordDependentSchemas"),Pe=v("JSONSchema202012KeywordPrefixItems"),Ie=v("JSONSchema202012KeywordItems"),Te=v("JSONSchema202012KeywordContains"),Re=v("JSONSchema202012KeywordProperties"),qe=v("JSONSchema202012KeywordPatternProperties"),ze=v("JSONSchema202012KeywordAdditionalProperties"),Ve=v("JSONSchema202012KeywordPropertyNames"),We=v("JSONSchema202012KeywordUnevaluatedItems"),Xe=v("JSONSchema202012KeywordUnevaluatedProperties"),Ye=v("JSONSchema202012KeywordType"),Qe=v("JSONSchema202012KeywordEnum"),et=v("JSONSchema202012KeywordConst"),tt=v("JSONSchema202012KeywordConstraint"),rt=v("JSONSchema202012KeywordDependentRequired"),nt=v("JSONSchema202012KeywordContentSchema"),ot=v("JSONSchema202012KeywordTitle"),at=v("JSONSchema202012KeywordDescription"),it=v("JSONSchema202012KeywordDefault"),st=v("JSONSchema202012KeywordDeprecated"),lt=v("JSONSchema202012KeywordReadOnly"),ct=v("JSONSchema202012KeywordWriteOnly"),ut=v("JSONSchema202012Accordion"),pt=v("JSONSchema202012ExpandDeepButton"),ht=v("JSONSchema202012ChevronRightIcon"),dt=v("withJSONSchema202012Context")($,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:M.defaultModelExpandDepth,includeReadOnly:Boolean(u.includeReadOnly),includeWriteOnly:Boolean(u.includeWriteOnly)},components:{JSONSchema:W,Keyword$schema:X,Keyword$vocabulary:Y,Keyword$id:Z,Keyword$anchor:ee,Keyword$dynamicAnchor:ae,Keyword$ref:ie,Keyword$dynamicRef:le,Keyword$defs:ce,Keyword$comment:pe,KeywordAllOf:de,KeywordAnyOf:fe,KeywordOneOf:ye,KeywordNot:be,KeywordIf:_e,KeywordThen:we,KeywordElse:Se,KeywordDependentSchemas:xe,KeywordPrefixItems:Pe,KeywordItems:Ie,KeywordContains:Te,KeywordProperties:Re,KeywordPatternProperties:qe,KeywordAdditionalProperties:ze,KeywordPropertyNames:Ve,KeywordUnevaluatedItems:We,KeywordUnevaluatedProperties:Xe,KeywordType:Ye,KeywordEnum:Qe,KeywordConst:et,KeywordConstraint:tt,KeywordDependentRequired:rt,KeywordContentSchema:nt,KeywordTitle:ot,KeywordDescription:at,KeywordDefault:it,KeywordDeprecated:st,KeywordReadOnly:lt,KeywordWriteOnly:ct,Accordion:ut,ExpandDeepButton:pt,ChevronRightIcon:ht},fn:{upperFirst:_.upperFirst,isExpandable:makeIsExpandable(_.jsonSchema202012.isExpandable,s),getProperties}});return He.createElement(dt,u)})),tN=eN,rN=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const{getComponent:u,fn:m,getConfigs:v}=s(),_=v();if(rN.ModelsWithJSONSchemaContext)return He.createElement(rN.ModelsWithJSONSchemaContext,null);const j=u("OAS31Models",!0),M=u("JSONSchema202012"),$=u("JSONSchema202012Keyword$schema"),W=u("JSONSchema202012Keyword$vocabulary"),X=u("JSONSchema202012Keyword$id"),Y=u("JSONSchema202012Keyword$anchor"),Z=u("JSONSchema202012Keyword$dynamicAnchor"),ee=u("JSONSchema202012Keyword$ref"),ae=u("JSONSchema202012Keyword$dynamicRef"),ie=u("JSONSchema202012Keyword$defs"),le=u("JSONSchema202012Keyword$comment"),ce=u("JSONSchema202012KeywordAllOf"),pe=u("JSONSchema202012KeywordAnyOf"),de=u("JSONSchema202012KeywordOneOf"),fe=u("JSONSchema202012KeywordNot"),ye=u("JSONSchema202012KeywordIf"),be=u("JSONSchema202012KeywordThen"),_e=u("JSONSchema202012KeywordElse"),we=u("JSONSchema202012KeywordDependentSchemas"),Se=u("JSONSchema202012KeywordPrefixItems"),xe=u("JSONSchema202012KeywordItems"),Pe=u("JSONSchema202012KeywordContains"),Ie=u("JSONSchema202012KeywordProperties"),Te=u("JSONSchema202012KeywordPatternProperties"),Re=u("JSONSchema202012KeywordAdditionalProperties"),qe=u("JSONSchema202012KeywordPropertyNames"),ze=u("JSONSchema202012KeywordUnevaluatedItems"),Ve=u("JSONSchema202012KeywordUnevaluatedProperties"),We=u("JSONSchema202012KeywordType"),Xe=u("JSONSchema202012KeywordEnum"),Ye=u("JSONSchema202012KeywordConst"),Qe=u("JSONSchema202012KeywordConstraint"),et=u("JSONSchema202012KeywordDependentRequired"),tt=u("JSONSchema202012KeywordContentSchema"),rt=u("JSONSchema202012KeywordTitle"),nt=u("JSONSchema202012KeywordDescription"),ot=u("JSONSchema202012KeywordDefault"),at=u("JSONSchema202012KeywordDeprecated"),it=u("JSONSchema202012KeywordReadOnly"),st=u("JSONSchema202012KeywordWriteOnly"),lt=u("JSONSchema202012Accordion"),ct=u("JSONSchema202012ExpandDeepButton"),ut=u("JSONSchema202012ChevronRightIcon"),pt=u("withJSONSchema202012Context");return rN.ModelsWithJSONSchemaContext=pt(j,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:_.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:M,Keyword$schema:$,Keyword$vocabulary:W,Keyword$id:X,Keyword$anchor:Y,Keyword$dynamicAnchor:Z,Keyword$ref:ee,Keyword$dynamicRef:ae,Keyword$defs:ie,Keyword$comment:le,KeywordAllOf:ce,KeywordAnyOf:pe,KeywordOneOf:de,KeywordNot:fe,KeywordIf:ye,KeywordThen:be,KeywordElse:_e,KeywordDependentSchemas:we,KeywordPrefixItems:Se,KeywordItems:xe,KeywordContains:Pe,KeywordProperties:Ie,KeywordPatternProperties:Te,KeywordAdditionalProperties:Re,KeywordPropertyNames:qe,KeywordUnevaluatedItems:ze,KeywordUnevaluatedProperties:Ve,KeywordType:We,KeywordEnum:Xe,KeywordConst:Ye,KeywordConstraint:Qe,KeywordDependentRequired:et,KeywordContentSchema:tt,KeywordTitle:rt,KeywordDescription:nt,KeywordDefault:ot,KeywordDeprecated:at,KeywordReadOnly:it,KeywordWriteOnly:st,Accordion:lt,ExpandDeepButton:ct,ChevronRightIcon:ut},fn:{upperFirst:m.upperFirst,isExpandable:m.jsonSchema202012.isExpandable,getProperties:m.jsonSchema202012.getProperties}}),He.createElement(rN.ModelsWithJSONSchemaContext,null)}));rN.ModelsWithJSONSchemaContext=null;const nN=rN,wrap_components_version_pragma_filter=(i,s)=>i=>{const u=s.specSelectors.isOAS31(),m=s.getComponent("OAS31VersionPragmaFilter");return He.createElement(m,Ao()({isOAS31:u},i))},oN=createOnlyOAS31ComponentWrapper((i=>{let{originalComponent:s,...u}=i;const{getComponent:m,schema:v}=u,_=m("MutualTLSAuth",!0);return"mutualTLS"===v.get("type")?He.createElement(_,{schema:v}):He.createElement(s,u)})),aN=oN,iN=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s,...u}=i;const m=s().getComponent("OAS31Auths",!0);return He.createElement(m,u)})),sN=iN,lN=(0,et.Map)(),cN=Xt(((i,s)=>s.specSelectors.specJson()),isOAS31),selectors_webhooks=()=>i=>i.specSelectors.specJson().get("webhooks",lN),uN=Xt(((i,s)=>s.specSelectors.webhooks()),((i,s)=>s.specSelectors.validOperationMethods()),((i,s)=>s.specSelectors.specResolvedSubtree(["webhooks"])),((i,s)=>et.Map.isMap(i)?i.reduce(((i,u,m)=>{if(!et.Map.isMap(u))return i;const v=u.entrySeq().filter((i=>{let[u]=i;return s.includes(u)})).map((i=>{let[s,u]=i;return{operation:(0,et.Map)({operation:u}),method:s,path:m,specPath:(0,et.List)(["webhooks",m,s])}}));return i.concat(v)}),(0,et.List)()).groupBy((i=>i.path)).map((i=>i.toArray())).toObject():{})),selectors_license=()=>i=>i.specSelectors.info().get("license",lN),selectLicenseNameField=()=>i=>i.specSelectors.license().get("name","License"),selectLicenseUrlField=()=>i=>i.specSelectors.license().get("url"),pN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectLicenseUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectLicenseIdentifierField=()=>i=>i.specSelectors.license().get("identifier"),selectors_contact=()=>i=>i.specSelectors.info().get("contact",lN),selectContactNameField=()=>i=>i.specSelectors.contact().get("name","the developer"),selectContactEmailField=()=>i=>i.specSelectors.contact().get("email"),selectContactUrlField=()=>i=>i.specSelectors.contact().get("url"),hN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectContactUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectInfoTitleField=()=>i=>i.specSelectors.info().get("title"),selectInfoSummaryField=()=>i=>i.specSelectors.info().get("summary"),selectInfoDescriptionField=()=>i=>i.specSelectors.info().get("description"),selectInfoTermsOfServiceField=()=>i=>i.specSelectors.info().get("termsOfService"),dN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectInfoTermsOfServiceField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectExternalDocsDescriptionField=()=>i=>i.specSelectors.externalDocs().get("description"),selectExternalDocsUrlField=()=>i=>i.specSelectors.externalDocs().get("url"),fN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectExternalDocsUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectJsonSchemaDialectField=()=>i=>i.specSelectors.specJson().get("jsonSchemaDialect"),selectJsonSchemaDialectDefault=()=>"https://spec.openapis.org/oas/3.1/dialect/base",mN=Xt(((i,s)=>s.specSelectors.definitions()),((i,s)=>s.specSelectors.specResolvedSubtree(["components","schemas"])),((i,s)=>et.Map.isMap(i)?et.Map.isMap(s)?Object.entries(i.toJS()).reduce(((i,u)=>{let[m,v]=u;const _=s.get(m);return i[m]=_?.toJS()||v,i}),{}):i.toJS():{})),wrap_selectors_isOAS3=(i,s)=>function(u){const m=s.specSelectors.isOAS31();for(var v=arguments.length,_=new Array(v>1?v-1:0),j=1;j(i,s)=>s.oas31Selectors.selectLicenseUrl())),yN=createOnlyOAS31SelectorWrapper((()=>(i,s)=>{const u=s.specSelectors.securityDefinitions();let m=i();return u?(u.entrySeq().forEach((i=>{let[s,u]=i;"mutualTLS"===u.get("type")&&(m=m.push(new et.Map({[s]:u})))})),m):m})),vN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectLicenseUrlField()),((i,s)=>s.specSelectors.selectLicenseIdentifierField()),((i,s,u,m)=>u?safeBuildUrl(u,i,{selectedServer:s}):m?`https://spdx.org/licenses/${m}.html`:void 0)),keywords_Example=i=>{let{schema:s,getSystem:u}=i;const{fn:m}=u(),{hasKeyword:v,stringify:_}=m.jsonSchema202012.useFn();return v(s,"example")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--example"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Example"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},_(s.example))):null},keywords_Xml=i=>{let{schema:s,getSystem:u}=i;const m=s?.xml||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!!(m.name||m.namespace||m.prefix),[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ae=M("Accordion"),ie=M("ExpandDeepButton"),le=_("JSONSchema202012DeepExpansionContext")(),ce=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),pe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(le.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml"},W?He.createElement(He.Fragment,null,He.createElement(ae,{expanded:X,onChange:ce},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML")),He.createElement(ie,{expanded:X,onClick:pe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML"),!0===m.attribute&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"attribute"),!0===m.wrapped&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"wrapped"),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement(He.Fragment,null,m.name&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"name"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.name))),m.namespace&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"namespace"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.namespace))),m.prefix&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"prefix"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.prefix)))))))},DiscriminatorMapping_DiscriminatorMapping=i=>{let{discriminator:s}=i;const u=s?.mapping||{};return 0===Object.keys(u).length?null:Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("div",{key:`${s}-${u}`,className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},s),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},u))}))};DiscriminatorMapping_DiscriminatorMapping.defaultProps={mapping:void 0};const bN=DiscriminatorMapping_DiscriminatorMapping,keywords_Discriminator_Discriminator=i=>{let{schema:s,getSystem:u}=i;const m=s?.discriminator||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!!m.mapping,[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ae=M("Accordion"),ie=M("ExpandDeepButton"),le=_("JSONSchema202012DeepExpansionContext")(),ce=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),pe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(le.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator"},W?He.createElement(He.Fragment,null,He.createElement(ae,{expanded:X,onChange:ce},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator")),He.createElement(ie,{expanded:X,onClick:pe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator"),m.propertyName&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},m.propertyName),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement(bN,{discriminator:m})))))},keywords_ExternalDocs=i=>{let{schema:s,getSystem:u}=i;const m=s?.externalDocs||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!(!m.description&&!m.url),[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ae=M("Accordion"),ie=M("ExpandDeepButton"),le=_("JSONSchema202012KeywordDescription"),ce=_("Link"),pe=_("JSONSchema202012DeepExpansionContext")(),de=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),fe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(pe.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs"},W?He.createElement(He.Fragment,null,He.createElement(ae,{expanded:X,onChange:de},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation")),He.createElement(ie,{expanded:X,onClick:fe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation"),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement(He.Fragment,null,m.description&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement(le,{schema:m,getSystem:u})),m.url&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"url"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},He.createElement(ce,{target:"_blank",href:sanitizeUrl(m.url)},m.url))))))))},keywords_Description=i=>{let{schema:s,getSystem:u}=i;if(!s?.description)return null;const{getComponent:m}=u(),v=m("Markdown");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},He.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},He.createElement(v,{source:s.description})))},_N=createOnlyOAS31ComponentWrapper(keywords_Description),EN=createOnlyOAS31ComponentWrapper((i=>{let{schema:s,getSystem:u,originalComponent:m}=i;const{getComponent:v}=u(),_=v("JSONSchema202012KeywordDiscriminator"),j=v("JSONSchema202012KeywordXml"),M=v("JSONSchema202012KeywordExample"),$=v("JSONSchema202012KeywordExternalDocs");return He.createElement(He.Fragment,null,He.createElement(m,{schema:s}),He.createElement(_,{schema:s,getSystem:u}),He.createElement(j,{schema:s,getSystem:u}),He.createElement($,{schema:s,getSystem:u}),He.createElement(M,{schema:s,getSystem:u}))})),wN=EN,keywords_Properties=i=>{let{schema:s,getSystem:u}=i;const{fn:m}=u(),{useComponent:v}=m.jsonSchema202012,{getDependentRequired:_,getProperties:j}=m.jsonSchema202012.useFn(),M=m.jsonSchema202012.useConfig(),$=Array.isArray(s?.required)?s.required:[],W=v("JSONSchema"),X=j(s,M);return 0===Object.keys(X).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},He.createElement("ul",null,Object.entries(X).map((i=>{let[u,m]=i;const v=$.includes(u),j=_(u,s);return He.createElement("li",{key:u,className:gC()("json-schema-2020-12-property",{"json-schema-2020-12-property--required":v})},He.createElement(W,{name:u,schema:m,dependentRequired:j}))}))))},SN=createOnlyOAS31ComponentWrapper(keywords_Properties);const xN=function afterLoad(i){let{fn:s,getSystem:u}=i;if(s.jsonSchema202012){const i=makeIsExpandable(s.jsonSchema202012.isExpandable,u);Object.assign(this.fn.jsonSchema202012,{isExpandable:i,getProperties})}if("function"==typeof s.sampleFromSchema&&s.jsonSchema202012){const i=((i,s)=>{const{fn:u,specSelectors:m}=s;return Object.fromEntries(Object.entries(i).map((i=>{let[s,v]=i;const _=u[s];return[s,function(){return m.isOAS31()?v(...arguments):"function"==typeof _?_(...arguments):void 0}]})))})({sampleFromSchema:s.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:s.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:s.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:s.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:s.jsonSchema202012.memoizedCreateXMLExample},u());Object.assign(this.fn,i)}},oas31=i=>{let{fn:s}=i;const u=s.createSystemSelector||fn_createSystemSelector,m=s.createOnlyOAS31Selector||fn_createOnlyOAS31Selector;return{afterLoad:xN,fn:{isOAS31,createSystemSelector:fn_createSystemSelector,createOnlyOAS31Selector:fn_createOnlyOAS31Selector},components:{Webhooks:webhooks,JsonSchemaDialect:json_schema_dialect,MutualTLSAuth:mutual_tls_auth,OAS31Info:oas31_components_info,OAS31License:oas31_components_license,OAS31Contact:oas31_components_contact,OAS31VersionPragmaFilter:version_pragma_filter,OAS31Model:GI,OAS31Models:models,OAS31Auths:XI,JSONSchema202012KeywordExample:keywords_Example,JSONSchema202012KeywordXml:keywords_Xml,JSONSchema202012KeywordDiscriminator:keywords_Discriminator_Discriminator,JSONSchema202012KeywordExternalDocs:keywords_ExternalDocs},wrapComponents:{InfoContainer:ZI,License:YI,Contact:QI,VersionPragmaFilter:wrap_components_version_pragma_filter,Model:tN,Models:nN,AuthItem:aN,auths:sN,JSONSchema202012KeywordDescription:_N,JSONSchema202012KeywordDefault:wN,JSONSchema202012KeywordProperties:SN},statePlugins:{auth:{wrapSelectors:{definitionsToAuthorize:yN}},spec:{selectors:{isOAS31:u(cN),license:selectors_license,selectLicenseNameField,selectLicenseUrlField,selectLicenseIdentifierField:m(selectLicenseIdentifierField),selectLicenseUrl:u(pN),contact:selectors_contact,selectContactNameField,selectContactEmailField,selectContactUrlField,selectContactUrl:u(hN),selectInfoTitleField,selectInfoSummaryField:m(selectInfoSummaryField),selectInfoDescriptionField,selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:u(dN),selectExternalDocsDescriptionField,selectExternalDocsUrlField,selectExternalDocsUrl:u(fN),webhooks:m(selectors_webhooks),selectWebhooksOperations:m(u(uN)),selectJsonSchemaDialectField,selectJsonSchemaDialectDefault,selectSchemas:u(mN)},wrapSelectors:{isOAS3:wrap_selectors_isOAS3,selectLicenseUrl:gN}},oas31:{selectors:{selectLicenseUrl:m(u(vN))}}}}},kN=TC().object,ON=TC().bool,AN=(TC().oneOfType([kN,ON]),(0,He.createContext)(null));AN.displayName="JSONSchemaContext";const CN=(0,He.createContext)(0);CN.displayName="JSONSchemaLevelContext";const jN=(0,He.createContext)(!1);jN.displayName="JSONSchemaDeepExpansionContext";const PN=(0,He.createContext)(new Set),useConfig=()=>{const{config:i}=(0,He.useContext)(AN);return i},useComponent=i=>{const{components:s}=(0,He.useContext)(AN);return s[i]||null},useFn=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:s}=(0,He.useContext)(AN);return void 0!==i?s[i]:s},useLevel=()=>{const i=(0,He.useContext)(CN);return[i,i+1]},useIsExpandedDeeply=()=>(0,He.useContext)(jN),useRenderedSchemas=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===i)return(0,He.useContext)(PN);const s=(0,He.useContext)(PN);return new Set([...s,i])},IN=(0,He.forwardRef)(((i,s)=>{let{schema:u,name:m,dependentRequired:v,onExpand:_}=i;const j=useFn(),M=(()=>{const[i]=useLevel(),{defaultExpandedLevels:s}=useConfig();return s-i>0})(),$=useIsExpandedDeeply(),[W,X]=(0,He.useState)(M||$),[Y,Z]=(0,He.useState)($),[ee,ae]=useLevel(),ie=(()=>{const[i]=useLevel();return i>0})(),le=j.isExpandable(u)||v.length>0,ce=(i=>useRenderedSchemas().has(i))(u),pe=useRenderedSchemas(u),de=j.stringifyConstraints(u),fe=useComponent("Accordion"),ye=useComponent("Keyword$schema"),be=useComponent("Keyword$vocabulary"),_e=useComponent("Keyword$id"),we=useComponent("Keyword$anchor"),Se=useComponent("Keyword$dynamicAnchor"),xe=useComponent("Keyword$ref"),Pe=useComponent("Keyword$dynamicRef"),Ie=useComponent("Keyword$defs"),Te=useComponent("Keyword$comment"),Re=useComponent("KeywordAllOf"),qe=useComponent("KeywordAnyOf"),ze=useComponent("KeywordOneOf"),Ve=useComponent("KeywordNot"),We=useComponent("KeywordIf"),Xe=useComponent("KeywordThen"),Ye=useComponent("KeywordElse"),Qe=useComponent("KeywordDependentSchemas"),et=useComponent("KeywordPrefixItems"),tt=useComponent("KeywordItems"),rt=useComponent("KeywordContains"),nt=useComponent("KeywordProperties"),ot=useComponent("KeywordPatternProperties"),at=useComponent("KeywordAdditionalProperties"),it=useComponent("KeywordPropertyNames"),st=useComponent("KeywordUnevaluatedItems"),lt=useComponent("KeywordUnevaluatedProperties"),ct=useComponent("KeywordType"),ut=useComponent("KeywordEnum"),pt=useComponent("KeywordConst"),ht=useComponent("KeywordConstraint"),dt=useComponent("KeywordDependentRequired"),mt=useComponent("KeywordContentSchema"),gt=useComponent("KeywordTitle"),yt=useComponent("KeywordDescription"),vt=useComponent("KeywordDefault"),bt=useComponent("KeywordDeprecated"),_t=useComponent("KeywordReadOnly"),Et=useComponent("KeywordWriteOnly"),wt=useComponent("ExpandDeepButton");(0,He.useEffect)((()=>{Z($)}),[$]),(0,He.useEffect)((()=>{Z(Y)}),[Y]);const St=(0,He.useCallback)(((i,s)=>{X(s),!s&&Z(!1),_(i,s,!1)}),[_]),xt=(0,He.useCallback)(((i,s)=>{X(s),Z(s),_(i,s,!0)}),[_]);return He.createElement(CN.Provider,{value:ae},He.createElement(jN.Provider,{value:Y},He.createElement(PN.Provider,{value:pe},He.createElement("article",{ref:s,"data-json-schema-level":ee,className:gC()("json-schema-2020-12",{"json-schema-2020-12--embedded":ie,"json-schema-2020-12--circular":ce})},He.createElement("div",{className:"json-schema-2020-12-head"},le&&!ce?He.createElement(He.Fragment,null,He.createElement(fe,{expanded:W,onChange:St},He.createElement(gt,{title:m,schema:u})),He.createElement(wt,{expanded:W,onClick:xt})):He.createElement(gt,{title:m,schema:u}),He.createElement(bt,{schema:u}),He.createElement(_t,{schema:u}),He.createElement(Et,{schema:u}),He.createElement(ct,{schema:u,isCircular:ce}),de.length>0&&de.map((i=>He.createElement(ht,{key:`${i.scope}-${i.value}`,constraint:i})))),He.createElement("div",{className:gC()("json-schema-2020-12-body",{"json-schema-2020-12-body--collapsed":!W})},W&&He.createElement(He.Fragment,null,He.createElement(yt,{schema:u}),!ce&&le&&He.createElement(He.Fragment,null,He.createElement(nt,{schema:u}),He.createElement(ot,{schema:u}),He.createElement(at,{schema:u}),He.createElement(lt,{schema:u}),He.createElement(it,{schema:u}),He.createElement(Re,{schema:u}),He.createElement(qe,{schema:u}),He.createElement(ze,{schema:u}),He.createElement(Ve,{schema:u}),He.createElement(We,{schema:u}),He.createElement(Xe,{schema:u}),He.createElement(Ye,{schema:u}),He.createElement(Qe,{schema:u}),He.createElement(et,{schema:u}),He.createElement(tt,{schema:u}),He.createElement(st,{schema:u}),He.createElement(rt,{schema:u}),He.createElement(mt,{schema:u})),He.createElement(ut,{schema:u}),He.createElement(pt,{schema:u}),He.createElement(dt,{schema:u,dependentRequired:v}),He.createElement(vt,{schema:u}),He.createElement(ye,{schema:u}),He.createElement(be,{schema:u}),He.createElement(_e,{schema:u}),He.createElement(we,{schema:u}),He.createElement(Se,{schema:u}),He.createElement(xe,{schema:u}),!ce&&le&&He.createElement(Ie,{schema:u}),He.createElement(Pe,{schema:u}),He.createElement(Te,{schema:u})))))))}));IN.defaultProps={name:"",dependentRequired:[],onExpand:()=>{}};const NN=IN,keywords_$schema=i=>{let{schema:s}=i;return s?.$schema?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$schema"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$schema)):null},$vocabulary_$vocabulary=i=>{let{schema:s}=i;const u=useIsExpandedDeeply(),[m,v]=(0,He.useState)(u),_=useComponent("Accordion"),j=(0,He.useCallback)((()=>{v((i=>!i))}),[]);return s?.$vocabulary?"object"!=typeof s.$vocabulary?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary"},He.createElement(_,{expanded:m,onChange:j},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$vocabulary")),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",null,m&&Object.entries(s.$vocabulary).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:gC()("json-schema-2020-12-$vocabulary-uri",{"json-schema-2020-12-$vocabulary-uri--disabled":!u})},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s))})))):null},keywords_$id=i=>{let{schema:s}=i;return s?.$id?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$id"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$id)):null},keywords_$anchor=i=>{let{schema:s}=i;return s?.$anchor?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$anchor"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$anchor)):null},keywords_$dynamicAnchor=i=>{let{schema:s}=i;return s?.$dynamicAnchor?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicAnchor"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$dynamicAnchor)):null},keywords_$ref=i=>{let{schema:s}=i;return s?.$ref?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$ref"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$ref)):null},keywords_$dynamicRef=i=>{let{schema:s}=i;return s?.$dynamicRef?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicRef"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$dynamicRef)):null},keywords_$defs=i=>{let{schema:s}=i;const u=s?.$defs||{},m=useIsExpandedDeeply(),[v,_]=(0,He.useState)(m),[j,M]=(0,He.useState)(!1),$=useComponent("Accordion"),W=useComponent("ExpandDeepButton"),X=useComponent("JSONSchema"),Y=(0,He.useCallback)((()=>{_((i=>!i))}),[]),Z=(0,He.useCallback)(((i,s)=>{_(s),M(s)}),[]);return 0===Object.keys(u).length?null:He.createElement(jN.Provider,{value:j},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs"},He.createElement($,{expanded:v,onChange:Y},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$defs")),He.createElement(W,{expanded:v,onClick:Z}),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!v})},v&&He.createElement(He.Fragment,null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(X,{name:s,schema:u}))}))))))},keywords_$comment=i=>{let{schema:s}=i;return s?.$comment?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$comment"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$comment)):null},keywords_AllOf=i=>{let{schema:s}=i;const u=s?.allOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"All of")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{allOf:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_AnyOf=i=>{let{schema:s}=i;const u=s?.anyOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Any of")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{anyOf:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_OneOf=i=>{let{schema:s}=i;const u=s?.oneOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"One of")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{oneOf:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_Not=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"not"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Not");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--not"},He.createElement(m,{name:v,schema:s.not}))},keywords_If=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"if"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"If");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},He.createElement(m,{name:v,schema:s.if}))},keywords_Then=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"then"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Then");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--then"},He.createElement(m,{name:v,schema:s.then}))},keywords_Else=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"else"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Else");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},He.createElement(m,{name:v,schema:s.else}))},keywords_DependentSchemas=i=>{let{schema:s}=i;const u=s?.dependentSchemas||[],m=useIsExpandedDeeply(),[v,_]=(0,He.useState)(m),[j,M]=(0,He.useState)(!1),$=useComponent("Accordion"),W=useComponent("ExpandDeepButton"),X=useComponent("JSONSchema"),Y=(0,He.useCallback)((()=>{_((i=>!i))}),[]),Z=(0,He.useCallback)(((i,s)=>{_(s),M(s)}),[]);return"object"!=typeof u||0===Object.keys(u).length?null:He.createElement(jN.Provider,{value:j},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas"},He.createElement($,{expanded:v,onChange:Y},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Dependent schemas")),He.createElement(W,{expanded:v,onClick:Z}),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!v})},v&&He.createElement(He.Fragment,null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(X,{name:s,schema:u}))}))))))},keywords_PrefixItems=i=>{let{schema:s}=i;const u=s?.prefixItems||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Prefix items")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{prefixItems:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_Items=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"items"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Items");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--items"},He.createElement(m,{name:v,schema:s.items}))},keywords_Contains=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"contains"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Contains");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains"},He.createElement(m,{name:v,schema:s.contains}))},keywords_Properties_Properties=i=>{let{schema:s}=i;const u=useFn(),m=s?.properties||{},v=Array.isArray(s?.required)?s.required:[],_=useComponent("JSONSchema");return 0===Object.keys(m).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},He.createElement("ul",null,Object.entries(m).map((i=>{let[m,j]=i;const M=v.includes(m),$=u.getDependentRequired(m,s);return He.createElement("li",{key:m,className:gC()("json-schema-2020-12-property",{"json-schema-2020-12-property--required":M})},He.createElement(_,{name:m,schema:j,dependentRequired:$}))}))))},keywords_PatternProperties_PatternProperties=i=>{let{schema:s}=i;const u=s?.patternProperties||{},m=useComponent("JSONSchema");return 0===Object.keys(u).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties"},He.createElement("ul",null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(m,{name:s,schema:u}))}))))},keywords_AdditionalProperties=i=>{let{schema:s}=i;const u=useFn(),{additionalProperties:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"additionalProperties"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Additional properties");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties"},!0===m?He.createElement(He.Fragment,null,_,He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"allowed")):!1===m?He.createElement(He.Fragment,null,_,He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"forbidden")):He.createElement(v,{name:_,schema:m}))},keywords_PropertyNames=i=>{let{schema:s}=i;const u=useFn(),{propertyNames:m}=s,v=useComponent("JSONSchema"),_=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Property names");return u.hasKeyword(s,"propertyNames")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames"},He.createElement(v,{name:_,schema:m})):null},keywords_UnevaluatedItems=i=>{let{schema:s}=i;const u=useFn(),{unevaluatedItems:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"unevaluatedItems"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated items");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems"},He.createElement(v,{name:_,schema:m}))},keywords_UnevaluatedProperties=i=>{let{schema:s}=i;const u=useFn(),{unevaluatedProperties:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"unevaluatedProperties"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated properties");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties"},He.createElement(v,{name:_,schema:m}))},Type_Type=i=>{let{schema:s,isCircular:u}=i;const m=useFn().getType(s),v=u?" [circular]":"";return He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},`${m}${v}`)};Type_Type.defaultProps={isCircular:!1};const TN=Type_Type,Enum_Enum=i=>{let{schema:s}=i;const u=useFn();return Array.isArray(s?.enum)?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Allowed values"),He.createElement("ul",null,s.enum.map((i=>{const s=u.stringify(i);return He.createElement("li",{key:s},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},s))})))):null},keywords_Const=i=>{let{schema:s}=i;const u=useFn();return u.hasKeyword(s,"const")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--const"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Const"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},u.stringify(s.const))):null},Constraint=i=>{let{constraint:s}=i;return He.createElement("span",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${s.scope}`},s.value)},MN=He.memo(Constraint),DependentRequired_DependentRequired=i=>{let{dependentRequired:s}=i;return 0===s.length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Required when defined"),He.createElement("ul",null,s.map((i=>He.createElement("li",{key:i},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning"},i))))))},keywords_ContentSchema=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"contentSchema"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Content schema");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema"},He.createElement(m,{name:v,schema:s.contentSchema}))},Title=i=>{let{title:s,schema:u}=i;const m=useFn();return s||m.getTitle(u)?He.createElement("div",{className:"json-schema-2020-12__title"},s||m.getTitle(u)):null};Title.defaultProps={title:""};const RN=Title,keywords_Description_Description=i=>{let{schema:s}=i;return s?.description?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},He.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},s.description)):null},keywords_Default=i=>{let{schema:s}=i;const u=useFn();return u.hasKeyword(s,"default")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--default"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Default"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},u.stringify(s.default))):null},keywords_Deprecated=i=>{let{schema:s}=i;return!0!==s?.deprecated?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning"},"deprecated")},keywords_ReadOnly=i=>{let{schema:s}=i;return!0!==s?.readOnly?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"read-only")},keywords_WriteOnly=i=>{let{schema:s}=i;return!0!==s?.writeOnly?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"write-only")},Accordion=i=>{let{expanded:s,children:u,onChange:m}=i;const v=useComponent("ChevronRightIcon"),_=(0,He.useCallback)((i=>{m(i,!s)}),[s,m]);return He.createElement("button",{type:"button",className:"json-schema-2020-12-accordion",onClick:_},He.createElement("div",{className:"json-schema-2020-12-accordion__children"},u),He.createElement("span",{className:gC()("json-schema-2020-12-accordion__icon",{"json-schema-2020-12-accordion__icon--expanded":s,"json-schema-2020-12-accordion__icon--collapsed":!s})},He.createElement(v,null)))};Accordion.defaultProps={expanded:!1};const BN=Accordion,ExpandDeepButton_ExpandDeepButton=i=>{let{expanded:s,onClick:u}=i;const m=(0,He.useCallback)((i=>{u(i,!s)}),[s,u]);return He.createElement("button",{type:"button",className:"json-schema-2020-12-expand-deep-button",onClick:m},s?"Collapse all":"Expand all")},icons_ChevronRight=()=>He.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},He.createElement("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})),fn_upperFirst=i=>"string"==typeof i?`${i.charAt(0).toUpperCase()}${i.slice(1)}`:i,getTitle=i=>{const s=useFn();return i?.title?s.upperFirst(i.title):i?.$anchor?s.upperFirst(i.$anchor):i?.$id?i.$id:""},getType=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;const u=useFn();if(null==i)return"any";if(u.isBooleanJSONSchema(i))return i?"any":"never";if("object"!=typeof i)return"any";if(s.has(i))return"any";s.add(i);const{type:m,prefixItems:v,items:_}=i,getArrayType=()=>{if(Array.isArray(v)){const i=v.map((i=>getType(i,s))),u=_?getType(_,s):"any";return`array<[${i.join(", ")}], ${u}>`}if(_){return`array<${getType(_,s)}>`}return"array"};if(i.not&&"any"===getType(i.not))return"never";const handleCombiningKeywords=(u,m)=>{if(Array.isArray(i[u])){return`(${i[u].map((i=>getType(i,s))).join(m)})`}return null},j=[Array.isArray(m)?m.map((i=>"array"===i?getArrayType():i)).join(" | "):"array"===m?getArrayType():["null","boolean","object","array","number","integer","string"].includes(m)?m:(()=>{if(Object.hasOwn(i,"prefixItems")||Object.hasOwn(i,"items")||Object.hasOwn(i,"contains"))return getArrayType();if(Object.hasOwn(i,"properties")||Object.hasOwn(i,"additionalProperties")||Object.hasOwn(i,"patternProperties"))return"object";if(["int32","int64"].includes(i.format))return"integer";if(["float","double"].includes(i.format))return"number";if(Object.hasOwn(i,"minimum")||Object.hasOwn(i,"maximum")||Object.hasOwn(i,"exclusiveMinimum")||Object.hasOwn(i,"exclusiveMaximum")||Object.hasOwn(i,"multipleOf"))return"number | integer";if(Object.hasOwn(i,"pattern")||Object.hasOwn(i,"format")||Object.hasOwn(i,"minLength")||Object.hasOwn(i,"maxLength"))return"string";if(void 0!==i.const){if(null===i.const)return"null";if("boolean"==typeof i.const)return"boolean";if("number"==typeof i.const)return Number.isInteger(i.const)?"integer":"number";if("string"==typeof i.const)return"string";if(Array.isArray(i.const))return"array";if("object"==typeof i.const)return"object"}return null})(),handleCombiningKeywords("oneOf"," | "),handleCombiningKeywords("anyOf"," | "),handleCombiningKeywords("allOf"," & ")].filter(Boolean).join(" | ");return s.delete(i),j||"any"},isBooleanJSONSchema=i=>"boolean"==typeof i,hasKeyword=(i,s)=>null!==i&&"object"==typeof i&&Object.hasOwn(i,s),isExpandable=i=>{const s=useFn();return i?.$schema||i?.$vocabulary||i?.$id||i?.$anchor||i?.$dynamicAnchor||i?.$ref||i?.$dynamicRef||i?.$defs||i?.$comment||i?.allOf||i?.anyOf||i?.oneOf||s.hasKeyword(i,"not")||s.hasKeyword(i,"if")||s.hasKeyword(i,"then")||s.hasKeyword(i,"else")||i?.dependentSchemas||i?.prefixItems||s.hasKeyword(i,"items")||s.hasKeyword(i,"contains")||i?.properties||i?.patternProperties||s.hasKeyword(i,"additionalProperties")||s.hasKeyword(i,"propertyNames")||s.hasKeyword(i,"unevaluatedItems")||s.hasKeyword(i,"unevaluatedProperties")||i?.description||i?.enum||s.hasKeyword(i,"const")||s.hasKeyword(i,"contentSchema")||s.hasKeyword(i,"default")},fn_stringify=i=>null===i||["number","bigint","boolean"].includes(typeof i)?String(i):Array.isArray(i)?`[${i.map(fn_stringify).join(", ")}]`:JSON.stringify(i),stringifyConstraintRange=(i,s,u)=>{const m="number"==typeof s,v="number"==typeof u;return m&&v?s===u?`${s} ${i}`:`[${s}, ${u}] ${i}`:m?`>= ${s} ${i}`:v?`<= ${u} ${i}`:null},stringifyConstraints=i=>{const s=[],u=(i=>{if("number"!=typeof i?.multipleOf)return null;if(i.multipleOf<=0)return null;if(1===i.multipleOf)return null;const{multipleOf:s}=i;if(Number.isInteger(s))return`multiple of ${s}`;const u=10**s.toString().split(".")[1].length;return`multiple of ${s*u}/${u}`})(i);null!==u&&s.push({scope:"number",value:u});const m=(i=>{const s=i?.minimum,u=i?.maximum,m=i?.exclusiveMinimum,v=i?.exclusiveMaximum,_="number"==typeof s,j="number"==typeof u,M="number"==typeof m,$="number"==typeof v,W=M&&(!_||sv);if((_||M)&&(j||$))return`${W?"(":"["}${W?m:s}, ${X?v:u}${X?")":"]"}`;if(_||M)return`${W?">":"≥"} ${W?m:s}`;if(j||$)return`${X?"<":"≤"} ${X?v:u}`;return null})(i);null!==m&&s.push({scope:"number",value:m}),i?.format&&s.push({scope:"string",value:i.format});const v=stringifyConstraintRange("characters",i?.minLength,i?.maxLength);null!==v&&s.push({scope:"string",value:v}),i?.pattern&&s.push({scope:"string",value:`matches ${i?.pattern}`}),i?.contentMediaType&&s.push({scope:"string",value:`media type: ${i.contentMediaType}`}),i?.contentEncoding&&s.push({scope:"string",value:`encoding: ${i.contentEncoding}`});const _=stringifyConstraintRange(i?.hasUniqueItems?"unique items":"items",i?.minItems,i?.maxItems);null!==_&&s.push({scope:"array",value:_});const j=stringifyConstraintRange("contained items",i?.minContains,i?.maxContains);null!==j&&s.push({scope:"array",value:j});const M=stringifyConstraintRange("properties",i?.minProperties,i?.maxProperties);return null!==M&&s.push({scope:"object",value:M}),s},getDependentRequired=(i,s)=>s?.dependentRequired?Array.from(Object.entries(s.dependentRequired).reduce(((s,u)=>{let[m,v]=u;return Array.isArray(v)&&v.includes(i)?(s.add(m),s):s}),new Set)):[],withJSONSchemaContext=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u={components:{JSONSchema:NN,Keyword$schema:keywords_$schema,Keyword$vocabulary:$vocabulary_$vocabulary,Keyword$id:keywords_$id,Keyword$anchor:keywords_$anchor,Keyword$dynamicAnchor:keywords_$dynamicAnchor,Keyword$ref:keywords_$ref,Keyword$dynamicRef:keywords_$dynamicRef,Keyword$defs:keywords_$defs,Keyword$comment:keywords_$comment,KeywordAllOf:keywords_AllOf,KeywordAnyOf:keywords_AnyOf,KeywordOneOf:keywords_OneOf,KeywordNot:keywords_Not,KeywordIf:keywords_If,KeywordThen:keywords_Then,KeywordElse:keywords_Else,KeywordDependentSchemas:keywords_DependentSchemas,KeywordPrefixItems:keywords_PrefixItems,KeywordItems:keywords_Items,KeywordContains:keywords_Contains,KeywordProperties:keywords_Properties_Properties,KeywordPatternProperties:keywords_PatternProperties_PatternProperties,KeywordAdditionalProperties:keywords_AdditionalProperties,KeywordPropertyNames:keywords_PropertyNames,KeywordUnevaluatedItems:keywords_UnevaluatedItems,KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,KeywordType:TN,KeywordEnum:Enum_Enum,KeywordConst:keywords_Const,KeywordConstraint:MN,KeywordDependentRequired:DependentRequired_DependentRequired,KeywordContentSchema:keywords_ContentSchema,KeywordTitle:RN,KeywordDescription:keywords_Description_Description,KeywordDefault:keywords_Default,KeywordDeprecated:keywords_Deprecated,KeywordReadOnly:keywords_ReadOnly,KeywordWriteOnly:keywords_WriteOnly,Accordion:BN,ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,ChevronRightIcon:icons_ChevronRight,...s.components},config:{default$schema:"https://json-schema.org/draft/2020-12/schema",defaultExpandedLevels:0,...s.config},fn:{upperFirst:fn_upperFirst,getTitle,getType,isBooleanJSONSchema,hasKeyword,isExpandable,stringify:fn_stringify,stringifyConstraints,getDependentRequired,...s.fn}},HOC=s=>He.createElement(AN.Provider,{value:u},He.createElement(i,s));return HOC.contexts={JSONSchemaContext:AN},HOC.displayName=i.displayName,HOC},json_schema_2020_12=()=>({components:{JSONSchema202012:NN,JSONSchema202012Keyword$schema:keywords_$schema,JSONSchema202012Keyword$vocabulary:$vocabulary_$vocabulary,JSONSchema202012Keyword$id:keywords_$id,JSONSchema202012Keyword$anchor:keywords_$anchor,JSONSchema202012Keyword$dynamicAnchor:keywords_$dynamicAnchor,JSONSchema202012Keyword$ref:keywords_$ref,JSONSchema202012Keyword$dynamicRef:keywords_$dynamicRef,JSONSchema202012Keyword$defs:keywords_$defs,JSONSchema202012Keyword$comment:keywords_$comment,JSONSchema202012KeywordAllOf:keywords_AllOf,JSONSchema202012KeywordAnyOf:keywords_AnyOf,JSONSchema202012KeywordOneOf:keywords_OneOf,JSONSchema202012KeywordNot:keywords_Not,JSONSchema202012KeywordIf:keywords_If,JSONSchema202012KeywordThen:keywords_Then,JSONSchema202012KeywordElse:keywords_Else,JSONSchema202012KeywordDependentSchemas:keywords_DependentSchemas,JSONSchema202012KeywordPrefixItems:keywords_PrefixItems,JSONSchema202012KeywordItems:keywords_Items,JSONSchema202012KeywordContains:keywords_Contains,JSONSchema202012KeywordProperties:keywords_Properties_Properties,JSONSchema202012KeywordPatternProperties:keywords_PatternProperties_PatternProperties,JSONSchema202012KeywordAdditionalProperties:keywords_AdditionalProperties,JSONSchema202012KeywordPropertyNames:keywords_PropertyNames,JSONSchema202012KeywordUnevaluatedItems:keywords_UnevaluatedItems,JSONSchema202012KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,JSONSchema202012KeywordType:TN,JSONSchema202012KeywordEnum:Enum_Enum,JSONSchema202012KeywordConst:keywords_Const,JSONSchema202012KeywordConstraint:MN,JSONSchema202012KeywordDependentRequired:DependentRequired_DependentRequired,JSONSchema202012KeywordContentSchema:keywords_ContentSchema,JSONSchema202012KeywordTitle:RN,JSONSchema202012KeywordDescription:keywords_Description_Description,JSONSchema202012KeywordDefault:keywords_Default,JSONSchema202012KeywordDeprecated:keywords_Deprecated,JSONSchema202012KeywordReadOnly:keywords_ReadOnly,JSONSchema202012KeywordWriteOnly:keywords_WriteOnly,JSONSchema202012Accordion:BN,JSONSchema202012ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,JSONSchema202012ChevronRightIcon:icons_ChevronRight,withJSONSchema202012Context:withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>jN},fn:{upperFirst:fn_upperFirst,jsonSchema202012:{isExpandable,hasKeyword,useFn,useConfig,useComponent,useIsExpandedDeeply}}});var DN=__webpack_require__(68630),LN=__webpack_require__.n(DN);const array=(i,s)=>{let{sample:u}=s;return function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:u,maxItems:m,uniqueItems:v}=s,{contains:_,minContains:j,maxContains:M}=s;let $=[...i];if(null!=_&&"object"==typeof _){if(Number.isInteger(j)&&j>1){const i=$.at(0);for(let s=1;s0&&($=i.slice(0,m)),Number.isInteger(u)&&u>0)for(let i=0;$.length{throw new Error("Not implemented")},bytes=i=>jt()(i),random_pick=i=>i.at(0),predicates_isBooleanJSONSchema=i=>"boolean"==typeof i,isJSONSchemaObject=i=>LN()(i),isJSONSchema=i=>predicates_isBooleanJSONSchema(i)||isJSONSchemaObject(i),email=()=>"user@example.com",idn_email=()=>"실례@example.com",hostname=()=>"example.com",idn_hostname=()=>"실례.com",ipv4=()=>"198.51.100.42",ipv6=()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",uri=()=>"https://example.com/",uri_reference=()=>"path/index.html",iri=()=>"https://실례.com/",iri_reference=()=>"path/실례.html",uuid=()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",uri_template=()=>"https://example.com/dictionary/{term:1}/{term}",json_pointer=()=>"/a/b/c",relative_json_pointer=()=>"1/0",date_time=()=>(new Date).toISOString(),date=()=>(new Date).toISOString().substring(0,10),time=()=>(new Date).toISOString().substring(11),duration=()=>"P3D",generators_password=()=>"********",regex=()=>"^[a-z]+$";const FN=class Registry{data={};register(i,s){this.data[i]=s}unregister(i){void 0===i?this.data={}:delete this.data[i]}get(i){return this.data[i]}},qN=new FN,api_formatAPI=(i,s)=>"function"==typeof s?qN.register(i,s):null===s?qN.unregister(i):qN.get(i);var $N=__webpack_require__(48764).Buffer;const _7bit=i=>$N.from(i).toString("ascii");var zN=__webpack_require__(48764).Buffer;const _8bit=i=>zN.from(i).toString("utf8");var UN=__webpack_require__(48764).Buffer;const encoders_binary=i=>UN.from(i).toString("binary"),quoted_printable=i=>{let s="";for(let u=0;u=33&&m<=60||m>=62&&m<=126||9===m||32===m)s+=i.charAt(u);else if(13===m||10===m)s+="\r\n";else if(m>126){const m=unescape(encodeURIComponent(i.charAt(u)));for(let i=0;iVN.from(i).toString("hex");var WN=__webpack_require__(48764).Buffer;const base32=i=>{const s=WN.from(i).toString("utf8"),u="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let m=0,v="",_=0,j=0;for(let i=0;i=5;)v+=u.charAt(_>>>j-5&31),j-=5;j>0&&(v+=u.charAt(_<<5-j&31),m=(8-8*s.length%5)%5);for(let i=0;iKN.from(i).toString("base64");const HN=new class EncoderRegistry extends FN{#e={"7bit":_7bit,"8bit":_8bit,binary:encoders_binary,"quoted-printable":quoted_printable,base16,base32,base64};data={...this.#e};get defaults(){return{...this.#e}}},encoderAPI=(i,s)=>"function"==typeof s?HN.register(i,s):null===s?HN.unregister(i):HN.get(i);encoderAPI.getDefaults=()=>HN.defaults;const JN=encoderAPI,GN={"text/plain":()=>"string","text/css":()=>".selector { border: 1px solid red }","text/csv":()=>"value1,value2,value3","text/html":()=>"

    content

    ","text/calendar":()=>"BEGIN:VCALENDAR","text/javascript":()=>"console.dir('Hello world!');","text/xml":()=>'John Doe',"text/*":()=>"string"},XN={"image/*":()=>bytes(25).toString("binary")},YN={"audio/*":()=>bytes(25).toString("binary")},QN={"video/*":()=>bytes(25).toString("binary")},ZN={"application/json":()=>'{"key":"value"}',"application/ld+json":()=>'{"name": "John Doe"}',"application/x-httpd-php":()=>"Hello World!

    '; ?>","application/rtf":()=>String.raw`{\rtf1\adeflang1025\ansi\ansicpg1252\uc1`,"application/x-sh":()=>'echo "Hello World!"',"application/xhtml+xml":()=>"

    content

    ","application/*":()=>bytes(25).toString("binary")};const eT=new class MediaTypeRegistry extends FN{#e={...GN,...XN,...YN,...QN,...ZN};data={...this.#e};get defaults(){return{...this.#e}}},mediaTypeAPI=(i,s)=>{if("function"==typeof s)return eT.register(i,s);if(null===s)return eT.unregister(i);const u=i.split(";").at(0),m=`${u.split("/").at(0)}/*`;return eT.get(i)||eT.get(u)||eT.get(m)};mediaTypeAPI.getDefaults=()=>eT.defaults;const tT=mediaTypeAPI,types_string=function(i){let{sample:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:u,contentMediaType:m,contentSchema:v}=i,{pattern:_,format:j}=i,M=JN(u)||sC();let $;if("string"==typeof _)$=(i=>{try{return new(Aa())(i).gen()}catch{return"string"}})(_);else if("string"==typeof j)$=(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"email":return email();case"idn-email":return idn_email();case"hostname":return hostname();case"idn-hostname":return idn_hostname();case"ipv4":return ipv4();case"ipv6":return ipv6();case"uri":return uri();case"uri-reference":return uri_reference();case"iri":return iri();case"iri-reference":return iri_reference();case"uuid":return uuid();case"uri-template":return uri_template();case"json-pointer":return json_pointer();case"relative-json-pointer":return relative_json_pointer();case"date-time":return date_time();case"date":return date();case"time":return time();case"duration":return duration();case"password":return generators_password();case"regex":return regex()}return"string"})(i);else if(isJSONSchema(v)&&"string"==typeof m&&void 0!==s)$=Array.isArray(s)||"object"==typeof s?JSON.stringify(s):String(s);else if("string"==typeof m){const s=tT(m);"function"==typeof s&&($=s(i))}else $="string";return M(function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:u,minLength:m}=s;let v=i;if(Number.isInteger(u)&&u>0&&(v=v.slice(0,u)),Number.isInteger(m)&&m>0){let i=0;for(;v.length.1,generators_double=()=>.1,types_number=i=>{const{format:s}=i;let u;return u="string"==typeof s?(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"float":return generators_float();case"double":return generators_double()}return 0})(i):0,function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:u,maximum:m,exclusiveMinimum:v,exclusiveMaximum:_}=s,{multipleOf:j}=s,M=Number.isInteger(i)?1:Number.EPSILON;let $="number"==typeof u?u:null,W="number"==typeof m?m:null,X=i;if("number"==typeof v&&($=null!==$?Math.max($,v+M):v+M),"number"==typeof _&&(W=null!==W?Math.min(W,_-M):_-M),X=$>W&&i||$||W||X,"number"==typeof j&&j>0){const i=X%j;X=0===i?X:X+j-i}return X}(u,i)},int32=()=>2**30>>>0,int64=()=>2**53-1,types_integer=i=>{const{format:s}=i;return"string"==typeof s?(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"int32":return int32();case"int64":return int64()}return 0})(i):0},types_boolean=i=>"boolean"!=typeof i.default||i.default,rT=new Proxy({array,object,string:types_string,number:types_number,integer:types_integer,boolean:types_boolean,null:()=>null},{get:(i,s)=>"string"==typeof s&&Object.hasOwn(i,s)?i[s]:()=>`Unknown Type: ${s}`}),nT=["array","object","number","integer","string","boolean","null"],hasExample=i=>{if(!isJSONSchemaObject(i))return!1;const{examples:s,example:u,default:m}=i;return!!(Array.isArray(s)&&s.length>=1)||(void 0!==m||void 0!==u)},extractExample=i=>{if(!isJSONSchemaObject(i))return null;const{examples:s,example:u,default:m}=i;return Array.isArray(s)&&s.length>=1?s.at(0):void 0!==m?m:void 0!==u?u:void 0},oT={array:["items","prefixItems","contains","maxContains","minContains","maxItems","minItems","uniqueItems","unevaluatedItems"],object:["properties","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","required","dependentSchemas","dependentRequired","unevaluatedProperties"],string:["pattern","format","minLength","maxLength","contentEncoding","contentMediaType","contentSchema"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"]};oT.number=oT.integer;const aT="string",inferTypeFromValue=i=>void 0===i?null:null===i?"null":Array.isArray(i)?"array":Number.isInteger(i)?"integer":typeof i,foldType=i=>{if(Array.isArray(i)&&i.length>=1){if(i.includes("array"))return"array";if(i.includes("object"))return"object";{const s=random_pick(i);if(nT.includes(s))return s}}return nT.includes(i)?i:null},inferType=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;if(!isJSONSchemaObject(i))return aT;if(s.has(i))return aT;s.add(i);let{type:u,const:m}=i;if(u=foldType(u),"string"!=typeof u){const s=Object.keys(oT);e:for(let m=0;m{if(Array.isArray(i[u])){const m=i[u].map((i=>inferType(i,s)));return foldType(m)}return null},m=combineTypes("allOf"),v=combineTypes("anyOf"),_=combineTypes("oneOf"),j=i.not?inferType(i.not,s):null;(m||v||_||j)&&(u=foldType([m,v,_,j].filter(Boolean)))}if("string"!=typeof u&&hasExample(i)){const s=extractExample(i),m=inferTypeFromValue(s);u="string"==typeof m?m:u}return s.delete(i),u||aT},type_getType=i=>inferType(i),typeCast=i=>predicates_isBooleanJSONSchema(i)?(i=>!1===i?{not:{}}:{})(i):isJSONSchemaObject(i)?i:{},merge_merge=function(i,s){let u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(predicates_isBooleanJSONSchema(i)&&!0===i)return!0;if(predicates_isBooleanJSONSchema(i)&&!1===i)return!1;if(predicates_isBooleanJSONSchema(s)&&!0===s)return!0;if(predicates_isBooleanJSONSchema(s)&&!1===s)return!1;if(!isJSONSchema(i))return s;if(!isJSONSchema(s))return i;const m={...s,...i};if(s.type&&i.type&&Array.isArray(s.type)&&"string"==typeof s.type){const u=normalizeArray(s.type).concat(i.type);m.type=Array.from(new Set(u))}if(Array.isArray(s.required)&&Array.isArray(i.required)&&(m.required=[...new Set([...i.required,...s.required])]),s.properties&&i.properties){const v=new Set([...Object.keys(s.properties),...Object.keys(i.properties)]);m.properties={};for(const _ of v){const v=s.properties[_]||{},j=i.properties[_]||{};v.readOnly&&!u.includeReadOnly||v.writeOnly&&!u.includeWriteOnly?m.required=(m.required||[]).filter((i=>i!==_)):m.properties[_]=merge_merge(j,v,u)}}return isJSONSchema(s.items)&&isJSONSchema(i.items)&&(m.items=merge_merge(i.items,s.items,u)),isJSONSchema(s.contains)&&isJSONSchema(i.contains)&&(m.contains=merge_merge(i.contains,s.contains,u)),isJSONSchema(s.contentSchema)&&isJSONSchema(i.contentSchema)&&(m.contentSchema=merge_merge(i.contentSchema,s.contentSchema,u)),m},iT=merge_merge,main_sampleFromSchemaGeneric=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,m=arguments.length>3&&void 0!==arguments[3]&&arguments[3];"function"==typeof i?.toJS&&(i=i.toJS()),i=typeCast(i);let v=void 0!==u||hasExample(i);const _=!v&&Array.isArray(i.oneOf)&&i.oneOf.length>0,j=!v&&Array.isArray(i.anyOf)&&i.anyOf.length>0;if(!v&&(_||j)){const u=typeCast(random_pick(_?i.oneOf:i.anyOf));!(i=iT(i,u,s)).xml&&u.xml&&(i.xml=u.xml),hasExample(i)&&hasExample(u)&&(v=!0)}const M={};let{xml:$,properties:W,additionalProperties:X,items:Y,contains:Z}=i||{},ee=type_getType(i),{includeReadOnly:ae,includeWriteOnly:ie}=s;$=$||{};let le,{name:ce,prefix:pe,namespace:de}=$,fe={};if(Object.hasOwn(i,"type")||(i.type=ee),m&&(ce=ce||"notagname",le=(pe?`${pe}:`:"")+ce,de)){M[pe?`xmlns:${pe}`:"xmlns"]=de}m&&(fe[le]=[]);const ye=objectify(W);let be,_e=0;const hasExceededMaxProperties=()=>Number.isInteger(i.maxProperties)&&i.maxProperties>0&&_e>=i.maxProperties,canAddProperty=s=>!(Number.isInteger(i.maxProperties)&&i.maxProperties>0)||!hasExceededMaxProperties()&&(!(s=>!Array.isArray(i.required)||0===i.required.length||!i.required.includes(s))(s)||i.maxProperties-_e-(()=>{if(!Array.isArray(i.required)||0===i.required.length)return 0;let s=0;return m?i.required.forEach((i=>s+=void 0===fe[i]?0:1)):i.required.forEach((i=>{s+=void 0===fe[le]?.find((s=>void 0!==s[i]))?0:1})),i.required.length-s})()>0);if(be=m?function(u){let v=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(i&&ye[u]){if(ye[u].xml=ye[u].xml||{},ye[u].xml.attribute){const i=Array.isArray(ye[u].enum)?random_pick(ye[u].enum):void 0;if(hasExample(ye[u]))M[ye[u].xml.name||u]=extractExample(ye[u]);else if(void 0!==i)M[ye[u].xml.name||u]=i;else{const i=typeCast(ye[u]),s=type_getType(i),m=ye[u].xml.name||u;M[m]=rT[s](i)}return}ye[u].xml.name=ye[u].xml.name||u}else ye[u]||!1===X||(ye[u]={xml:{name:u}});let _=main_sampleFromSchemaGeneric(ye[u],s,v,m);canAddProperty(u)&&(_e++,Array.isArray(_)?fe[le]=fe[le].concat(_):fe[le].push(_))}:(u,v)=>{if(canAddProperty(u)){if(LN()(i.discriminator?.mapping)&&i.discriminator.propertyName===u&&"string"==typeof i.$$ref){for(const s in i.discriminator.mapping)if(-1!==i.$$ref.search(i.discriminator.mapping[s])){fe[u]=s;break}}else fe[u]=main_sampleFromSchemaGeneric(ye[u],s,v,m);_e++}},v){let v;if(v=void 0!==u?u:extractExample(i),!m){if("number"==typeof v&&"string"===ee)return`${v}`;if("string"!=typeof v||"string"===ee)return v;try{return JSON.parse(v)}catch{return v}}if("array"===ee){if(!Array.isArray(v)){if("string"==typeof v)return v;v=[v]}let u=[];return isJSONSchemaObject(Y)&&(Y.xml=Y.xml||$||{},Y.xml.name=Y.xml.name||$.name,u=v.map((i=>main_sampleFromSchemaGeneric(Y,s,i,m)))),isJSONSchemaObject(Z)&&(Z.xml=Z.xml||$||{},Z.xml.name=Z.xml.name||$.name,u=[main_sampleFromSchemaGeneric(Z,s,void 0,m),...u]),u=rT.array(i,{sample:u}),$.wrapped?(fe[le]=u,ja()(M)||fe[le].push({_attr:M})):fe=u,fe}if("object"===ee){if("string"==typeof v)return v;for(const i in v)Object.hasOwn(v,i)&&(ye[i]?.readOnly&&!ae||ye[i]?.writeOnly&&!ie||(ye[i]?.xml?.attribute?M[ye[i].xml.name||i]=v[i]:be(i,v[i])));return ja()(M)||fe[le].push({_attr:M}),fe}return fe[le]=ja()(M)?v:[{_attr:M},v],fe}if("array"===ee){let u=[];if(isJSONSchemaObject(Z))if(m&&(Z.xml=Z.xml||i.xml||{},Z.xml.name=Z.xml.name||$.name),Array.isArray(Z.anyOf))u.push(...Z.anyOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Z,s),s,void 0,m))));else if(Array.isArray(Z.oneOf))u.push(...Z.oneOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Z,s),s,void 0,m))));else{if(!(!m||m&&$.wrapped))return main_sampleFromSchemaGeneric(Z,s,void 0,m);u.push(main_sampleFromSchemaGeneric(Z,s,void 0,m))}if(isJSONSchemaObject(Y))if(m&&(Y.xml=Y.xml||i.xml||{},Y.xml.name=Y.xml.name||$.name),Array.isArray(Y.anyOf))u.push(...Y.anyOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Y,s),s,void 0,m))));else if(Array.isArray(Y.oneOf))u.push(...Y.oneOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Y,s),s,void 0,m))));else{if(!(!m||m&&$.wrapped))return main_sampleFromSchemaGeneric(Y,s,void 0,m);u.push(main_sampleFromSchemaGeneric(Y,s,void 0,m))}return u=rT.array(i,{sample:u}),m&&$.wrapped?(fe[le]=u,ja()(M)||fe[le].push({_attr:M}),fe):u}if("object"===ee){for(let i in ye)Object.hasOwn(ye,i)&&(ye[i]?.deprecated||ye[i]?.readOnly&&!ae||ye[i]?.writeOnly&&!ie||be(i));if(m&&M&&fe[le].push({_attr:M}),hasExceededMaxProperties())return fe;if(predicates_isBooleanJSONSchema(X)&&X)m?fe[le].push({additionalProp:"Anything can be here"}):fe.additionalProp1={},_e++;else if(isJSONSchemaObject(X)){const u=X,v=main_sampleFromSchemaGeneric(u,s,void 0,m);if(m&&"string"==typeof u?.xml?.name&&"notagname"!==u?.xml?.name)fe[le].push(v);else{const s=Number.isInteger(i.minProperties)&&i.minProperties>0&&_e{const m=main_sampleFromSchemaGeneric(i,s,u,!0);if(m)return"string"==typeof m?m:ka()(m,{declaration:!0,indent:"\t"})},main_sampleFromSchema=(i,s,u)=>main_sampleFromSchemaGeneric(i,s,u,!1),main_resolver=(i,s,u)=>[i,JSON.stringify(s),JSON.stringify(u)],sT=utils_memoizeN(main_createXMLExample,main_resolver),lT=utils_memoizeN(main_sampleFromSchema,main_resolver),cT=[{when:/json/,shouldStringifyTypes:["string"]}],uT=["object"],fn_get_json_sample_schema=i=>(s,u,m,v)=>{const{fn:_}=i(),j=_.jsonSchema202012.memoizedSampleFromSchema(s,u,v),M=typeof j,$=cT.reduce(((i,s)=>s.when.test(m)?[...i,...s.shouldStringifyTypes]:i),uT);return Et()($,(i=>i===M))?JSON.stringify(j,null,2):j},fn_get_yaml_sample_schema=i=>(s,u,m,v)=>{const{fn:_}=i(),j=_.jsonSchema202012.getJsonSampleSchema(s,u,m,v);let M;try{M=ao.dump(ao.load(j),{lineWidth:-1},{schema:Jn}),"\n"===M[M.length-1]&&(M=M.slice(0,M.length-1))}catch(i){return console.error(i),"error: could not generate yaml example"}return M.replace(/\t/g," ")},fn_get_xml_sample_schema=i=>(s,u,m)=>{const{fn:v}=i();if(s&&!s.xml&&(s.xml={}),s&&!s.xml.name){if(!s.$$ref&&(s.type||s.items||s.properties||s.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(s.$$ref){let i=s.$$ref.match(/\S*\/(\S+)$/);s.xml.name=i[1]}}return v.jsonSchema202012.memoizedCreateXMLExample(s,u,m)},fn_get_sample_schema=i=>function(s){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",m=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},v=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:_}=i();return"function"==typeof s?.toJS&&(s=s.toJS()),"function"==typeof v?.toJS&&(v=v.toJS()),/xml/.test(u)?_.jsonSchema202012.getXmlSampleSchema(s,m,v):/(yaml|yml)/.test(u)?_.jsonSchema202012.getYamlSampleSchema(s,m,u,v):_.jsonSchema202012.getJsonSampleSchema(s,m,u,v)},json_schema_2020_12_samples=i=>{let{getSystem:s}=i;const u=fn_get_json_sample_schema(s),m=fn_get_yaml_sample_schema(s),v=fn_get_xml_sample_schema(s),_=fn_get_sample_schema(s);return{fn:{jsonSchema202012:{sampleFromSchema:main_sampleFromSchema,sampleFromSchemaGeneric:main_sampleFromSchemaGeneric,sampleEncoderAPI:JN,sampleFormatAPI:api_formatAPI,sampleMediaTypeAPI:tT,createXMLExample:main_createXMLExample,memoizedSampleFromSchema:lT,memoizedCreateXMLExample:sT,getJsonSampleSchema:u,getYamlSampleSchema:m,getXmlSampleSchema:v,getSampleSchema:_}}}};function PresetApis(){return[base,oas3,json_schema_2020_12,json_schema_2020_12_samples,oas31]}const{GIT_DIRTY:pT,GIT_COMMIT:hT,PACKAGE_VERSION:dT,BUILD_TIME:fT}={PACKAGE_VERSION:"5.9.0",GIT_COMMIT:"gaa9cf563",GIT_DIRTY:!0,BUILD_TIME:"Fri, 29 Sep 2023 12:26:06 GMT"};function SwaggerUI(i){dt.versions=dt.versions||{},dt.versions.swaggerUi={version:dT,gitRevision:hT,gitDirty:pT,buildTimestamp:fT};const s={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:i=>i,responseInterceptor:i=>i,showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[PresetApis],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}};let u=i.queryConfigEnabled?(()=>{let i={},s=dt.location.search;if(!s)return{};if(""!=s){let u=s.substr(1).split("&");for(let s in u)Object.prototype.hasOwnProperty.call(u,s)&&(s=u[s].split("="),i[decodeURIComponent(s[0])]=s[1]&&decodeURIComponent(s[1])||"")}return i})():{};const m=i.domNode;delete i.domNode;const v=We()({},s,i,u),_={system:{configs:v.configs},plugins:v.presets,pluginsOptions:v.pluginsOptions,state:We()({layout:{layout:v.layout,filter:v.filter},spec:{spec:"",url:v.url},requestSnippets:v.requestSnippets},v.initialState)};if(v.initialState)for(var j in v.initialState)Object.prototype.hasOwnProperty.call(v.initialState,j)&&void 0===v.initialState[j]&&delete _.state[j];var M=new Store(_);M.register([v.plugins,()=>({fn:v.fn,components:v.components,state:v.state})]);var $=M.getSystem();const downloadSpec=i=>{let s=$.specSelectors.getLocalConfig?$.specSelectors.getLocalConfig():{},_=We()({},s,v,i||{},u);if(m&&(_.domNode=m),M.setConfigs(_),$.configsActions.loaded(),null!==i&&(!u.url&&"object"==typeof _.spec&&Object.keys(_.spec).length?($.specActions.updateUrl(""),$.specActions.updateLoadingStatus("success"),$.specActions.updateSpec(JSON.stringify(_.spec))):$.specActions.download&&_.url&&!_.urls&&($.specActions.updateUrl(_.url),$.specActions.download(_.url))),_.domNode)$.render(_.domNode,"App");else if(_.dom_id){let i=document.querySelector(_.dom_id);$.render(i,"App")}else null===_.dom_id||null===_.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return $},W=u.config||v.configUrl;return W&&$.specActions&&$.specActions.getConfigByUrl?($.specActions.getConfigByUrl({url:W,loadRemoteConfig:!0,requestInterceptor:v.requestInterceptor,responseInterceptor:v.responseInterceptor},downloadSpec),$):downloadSpec()}SwaggerUI.System=Store,SwaggerUI.presets={base,apis:PresetApis},SwaggerUI.plugins={Auth:auth,Configs:configsPlugin,DeepLining:deep_linking,Err:err,Filter:filter,Icons:icons,JSONSchema5Samples:json_schema_5_samples,JSONSchema202012:json_schema_2020_12,JSONSchema202012Samples:json_schema_2020_12_samples,Layout:plugins_layout,Logs:logs,OpenAPI30:oas3,OpenAPI31:oas3,OnComplete:on_complete,RequestSnippets:plugins_request_snippets,Spec:plugins_spec,SwaggerClient:swagger_client,Util:util,View:view,DownloadUrl:downloadUrlPlugin,SafeRender:safe_render};const mT=SwaggerUI})(),u=u.default})())); +//# sourceMappingURL=swagger-ui-bundle.js.map \ No newline at end of file diff --git a/app/static/swagger/swagger-ui-bundle.js.map b/app/static/swagger/swagger-ui-bundle.js.map new file mode 100644 index 0000000..aae06bb --- /dev/null +++ b/app/static/swagger/swagger-ui-bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui-bundle.js","mappings":"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K,EAAKnJ,QAAQ8T,EAAQ,CACnBzR,UAAW,KAInB,aCtHA,MAAMP,EAAW,2BACXkS,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,WAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAoFIC,EAAY,GAAG95C,OAlCI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGyB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,SACA,UA9EY,CACZ,OACA,WACA,SACA,OACA,OACA,SACA,SACA,SACA,WACA,UACA,QACA,SACA,MACA,MACA,UACA,UACA,QACA,UACA,OACA,UACA,eACA,aACA,aACA,YACA,cACA,cACA,eACA,QACA,aACA,oBACA,cACA,gBACA,iBACA,UAGkB,CAClB,YACA,gBACA,aACA,iBACA,cACA,YACA,aAgEF,SAAS+5C,UAAUvS,GACjB,OAAOxnC,OAAO,MAAOwnC,EAAI,IAC3B,CAMA,SAASxnC,UAAU8X,GAEjB,OADeA,EAAKkS,KAAKlqB,GApB3B,SAAS2R,OAAO+1B,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAG/1B,OAHM,IAIlB,CAeiCA,CAAO3R,KAAIjJ,KAAK,GAEjD,CA+aApD,EAAOD,QAraP,SAASwmD,WAAWjL,GAQlB,MAMMkL,EAAavS,EACbwS,EACG,KADHA,EAEC,MAEDC,EAAU,CACdnS,MAAO,sBACP7wC,IAAK,4BAKLijD,kBAAmB,CAAC3lD,EAAOs1C,KACzB,MAAMsQ,EAAkB5lD,EAAM,GAAG4B,OAAS5B,EAAMiW,MAC1C4vC,EAAW7lD,EAAMqT,MAAMuyC,GAIZ,MAAbC,EAMa,MAAbA,IA9Bc,EAAC7lD,GAAS8lD,YAC9B,MAAMrpC,EAAM,KAA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AI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GA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GAKN,MAHjBnyN,EAAWp6C,EAAMQ,EAAM4Z,EAAM9R,IAAItS,WAAWgK,IAAQ,IAGd,KAAbo6C,IAAqBkyN,GAAW,GACxC,KAAbjtH,GAAkC,KAAbA,IAAqBktH,GAAY,GAE3C,KAAXx5K,IAEEq5K,WAAW/sH,KAAaitH,GAAW,GACnCF,WAAWhyN,KAAamyN,GAAY,KAIrC,CACLD,SAAUA,EACVC,UAAWA,EACXC,OAAQlvO,EAEZ,CA7XA,qCACGj1B,MAAM,IAAIuX,SAAQ,SAASoqG,GAAMmiJ,GAAQniJ,EAAGh0H,WAAW,IAAM,CAAG,IAqenE,IAAIy2Q,GAAc,8CAyDlB,IAAIC,GAAgB,8CA2UpB,IAAIC,GAAc,CAChB,OACA,MACA,aACA,MACA,OACA,QACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,KACA,SACA,OACA,OACA,QACA,MACA,OACA,KACA,OACA,OACA,MACA,OACA,YACA,WACA,YACA,WACA,OACA,SACA,MACA,OACA,QACA,OACA,UACA,OACA,MACA,KACA,MACA,OACA,kBACA,MACA,OACA,OACA,UACA,UACA,QACA,QACA,MACA,OACA,MACA,OACA,YACA,aACA,MACA,MACA,SACA,OACA,cACA,SACA,MACA,KACA,MACA,QACA,KACA,MACA,OACA,cACA,cACA,eACA,OACA,UACA,UACA,YACA,MACA,MACA,MACA,MACA,aACA,KACA,UACA,UACA,OACA,SACA,SACA,mBACA,0BACA,UACA,MACA,kBACA,qBACA,MACA,MACA,OACA,WACA,OACA,SACA,OACA,KACA,MACA,eACA,QACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,MACA,UACA,SACA,QACA,SACA,OACA,SACA,UACA,MACA,UACA,QACA,SACA,MACA,QACA,MACA,OACA,YACA,WACA,QACA,OACA,QACA,MACA,WACA,MACA,QACA,OACA,aACA,OACA,MACA,QACA,MACA,SACA,UACA,MACA,QACA,MACA,YACA,SACA,MACA,SACA,SACA,WACA,cACA,SACA,OACA,UAC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","sources":["webpack://SwaggerUIBundle/webpack/universalModuleDefinition","webpack://SwaggerUIBundle/./node_modules/@braintree/sanitize-url/dist/index.js","webpack://SwaggerUIBundle/./node_modules/base64-js/index.js","webpack://SwaggerUIBundle/./node_modules/buffer/index.js","webpack://SwaggerUIBundle/./node_modules/call-bind/callBound.js","webpack://SwaggerUIBundle/./node_modules/call-bind/index.js","webpack://SwaggerUIBundle/./node_modules/classnames/index.js","webpack://SwaggerUIBundle/./node_modules/cookie/index.js","webpack://SwaggerUIBundle/./node_modules/copy-to-clipboard/index.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/function/virtual/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/a-callable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/a-possible-prototype.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/add-to-unscopables.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/an-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/array-includes.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/array-slice.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/classof-raw.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/classof.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/copy-constructor-properties.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/correct-prototype-getter.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-iter-result-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-non-enumerable-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-property-descriptor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/define-built-in.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/define-global-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/descriptors.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/document-all.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/document-create-element.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/dom-iterables.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/engine-user-agent.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/engine-v8-version.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/entry-virtual.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/enum-bug-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-clear.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-install.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-installable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/export.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/fails.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-apply.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind-context.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind-native.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-call.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-name.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this-clause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-built-in.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-iterator-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/global.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/has-own-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/hidden-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/html.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/ie8-dom-define.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/indexed-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/inherit-if-required.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/install-error-cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/internal-state.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-array-iterator-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-callable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-forced.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-null-or-undefined.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-pure.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-symbol.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterate.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-close.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-create-constructor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-define.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterators-core.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterators.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/length-of-array-like.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/math-trunc.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/normalize-string-argument.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-create.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-define-properties.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-define-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-names.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-symbols.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-is-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-keys-internal.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-property-is-enumerable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-set-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/ordinary-to-primitive.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/own-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/path.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/proxy-accessor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/require-object-coercible.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/set-to-string-tag.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared-key.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared-store.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/string-multibyte.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/symbol-constructor-detection.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-absolute-index.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-indexed-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-integer-or-infinity.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-length.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-primitive.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-property-key.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-string-tag-support.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/try-to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/uid.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/use-symbol-as-uid.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/v8-prototype-define-bug.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/weak-map-basic-detection.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/well-known-symbol.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/wrap-error-constructor-with-cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.array.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.error.cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.function.bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.object.assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.string.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/esnext.aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/web.dom-collections.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/object/assign.js","webpack://SwaggerUIBundle/./node_modules/css.escape/css.escape.js","webpack://SwaggerUIBundle/./node_modules/deep-extend/lib/deep-extend.js","webpack://SwaggerUIBundle/./node_modules/deepmerge/dist/cjs.js","webpack://SwaggerUIBundle/./node_modules/dompurify/dist/purify.js","webpack://SwaggerUIBundle/./node_modules/drange/lib/index.js","webpack://SwaggerUIBundle/./node_modules/events/events.js","webpack://SwaggerUIBundle/./node_modules/fault/index.js","webpack://SwaggerUIBundle/./node_modules/format/format.js","webpack://SwaggerUIBundle/./node_modules/function-bind/implementation.js","webpack://SwaggerUIBundle/./node_modules/function-bind/index.js","webpack://SwaggerUIBundle/./node_modules/get-intrinsic/index.js","webpack://SwaggerUIBundle/./node_modules/has-proto/index.js","webpack://SwaggerUIBundle/./node_modules/has-symbols/index.js","webpack://SwaggerUIBundle/./node_modules/has-symbols/shams.js","webpack://SwaggerUIBundle/./node_modules/has/src/index.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/core.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/bash.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/http.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/javascript.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/json.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/powershell.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/xml.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/yaml.js","webpack://SwaggerUIBundle/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://SwaggerUIBundle/./node_modules/ieee754/index.js","webpack://SwaggerUIBundle/./node_modules/immutable/dist/immutable.js","webpack://SwaggerUIBundle/./node_modules/inherits/inherits_browser.js","webpack://SwaggerUIBundle/./node_modules/js-file-download/file-download.js","webpack://SwaggerUIBundle/./node_modules/lodash.debounce/index.js","webpack://SwaggerUIBundle/./node_modules/lodash/_DataView.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Hash.js","webpack://SwaggerUIBundle/./node_modules/lodash/_LazyWrapper.js","webpack://SwaggerUIBundle/./node_modules/lodash/_ListCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_LodashWrapper.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Map.js","webpack://SwaggerUIBundle/./node_modules/lodash/_MapCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Promise.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Set.js","webpack://SwaggerUIBundle/./node_modules/lodash/_SetCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Stack.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Symbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Uint8Array.js","webpack://SwaggerUIBundle/./node_modules/lodash/_WeakMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_apply.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayFilter.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayIncludes.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayLikeKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayPush.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayReduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arraySome.js","webpack://SwaggerUIBundle/./node_modules/lodash/_asciiToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_asciiWords.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assignMergeValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assignValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assocIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssign.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssignIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssignValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseCreate.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFindIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFlatten.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseForOwn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGetAllKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGetTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseHasIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsArguments.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsEqual.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsEqualDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsMatch.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsNaN.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsNative.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIteratee.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseLodash.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMatches.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMatchesProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMerge.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMergeDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_basePropertyDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_basePropertyOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseReduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSetData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSetToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSlice.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSome.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseTimes.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseTrim.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseUnary.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseUnset.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseZipObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_castPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_castSlice.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneArrayBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneDataView.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneRegExp.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneSymbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_composeArgs.js","webpack://SwaggerUIBundle/./node_modules/lodash/_composeArgsRight.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copyArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copyObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copySymbols.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copySymbolsIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_coreJsData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_countHolders.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createAssigner.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBaseEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBaseFor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBind.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCaseFirst.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCompounder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCtor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCurry.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createFind.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createHybrid.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createPartial.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createRecurry.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createWrap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_customOmitClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/_deburrLetter.js","webpack://SwaggerUIBundle/./node_modules/lodash/_defineProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalArrays.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalByTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalObjects.js","webpack://SwaggerUIBundle/./node_modules/lodash/_flatRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_freeGlobal.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getAllKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getAllKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getFuncName.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getHolder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getMapData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getMatchData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getNative.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getPrototype.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getRawTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getSymbols.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getSymbolsIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasUnicode.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasUnicodeWord.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneByTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_insertWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isFlattenable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isIterateeCall.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isKey.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isKeyable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isLaziable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isMasked.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isPrototype.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isStrictComparable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_matchesStrictComparable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_memoizeCapped.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mergeData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_metaMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeCreate.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nodeUtil.js","webpack://SwaggerUIBundle/./node_modules/lodash/_objectToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_overArg.js","webpack://SwaggerUIBundle/./node_modules/lodash/_overRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_parent.js","webpack://SwaggerUIBundle/./node_modules/lodash/_realNames.js","webpack://SwaggerUIBundle/./node_modules/lodash/_reorder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_replaceHolders.js","webpack://SwaggerUIBundle/./node_modules/lodash/_root.js","webpack://SwaggerUIBundle/./node_modules/lodash/_safeGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setCacheAdd.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setWrapToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_shortOut.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_strictIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stringToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stringToPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_toKey.js","webpack://SwaggerUIBundle/./node_modules/lodash/_toSource.js","webpack://SwaggerUIBundle/./node_modules/lodash/_trimmedEndIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_unicodeToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_unicodeWords.js","webpack://SwaggerUIBundle/./node_modules/lodash/_updateWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_wrapperClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/ary.js","webpack://SwaggerUIBundle/./node_modules/lodash/camelCase.js","webpack://SwaggerUIBundle/./node_modules/lodash/capitalize.js","webpack://SwaggerUIBundle/./node_modules/lodash/clone.js","webpack://SwaggerUIBundle/./node_modules/lodash/constant.js","webpack://SwaggerUIBundle/./node_modules/lodash/curry.js","webpack://SwaggerUIBundle/./node_modules/lodash/debounce.js","webpack://SwaggerUIBundle/./node_modules/lodash/deburr.js","webpack://SwaggerUIBundle/./node_modules/lodash/eq.js","webpack://SwaggerUIBundle/./node_modules/lodash/find.js","webpack://SwaggerUIBundle/./node_modules/lodash/findIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/flatten.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_baseConvert.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_mapping.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_util.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/assocPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/convert.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/placeholder.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/set.js","webpack://SwaggerUIBundle/./node_modules/lodash/get.js","webpack://SwaggerUIBundle/./node_modules/lodash/hasIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/identity.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArguments.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArrayLike.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArrayLikeObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isBoolean.js","webpack://SwaggerUIBundle/./node_modules/lodash/isBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/isEmpty.js","webpack://SwaggerUIBundle/./node_modules/lodash/isEqual.js","webpack://SwaggerUIBundle/./node_modules/lodash/isError.js","webpack://SwaggerUIBundle/./node_modules/lodash/isFunction.js","webpack://SwaggerUIBundle/./node_modules/lodash/isLength.js","webpack://SwaggerUIBundle/./node_modules/lodash/isMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/isNull.js","webpack://SwaggerUIBundle/./node_modules/lodash/isNumber.js","webpack://SwaggerUIBundle/./node_modules/lodash/isObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isObjectLike.js","webpack://SwaggerUIBundle/./node_modules/lodash/isPlainObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/isString.js","webpack://SwaggerUIBundle/./node_modules/lodash/isSymbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/isTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/isWeakMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/iteratee.js","webpack://SwaggerUIBundle/./node_modules/lodash/keys.js","webpack://SwaggerUIBundle/./node_modules/lodash/keysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/last.js","webpack://SwaggerUIBundle/./node_modules/lodash/memoize.js","webpack://SwaggerUIBundle/./node_modules/lodash/merge.js","webpack://SwaggerUIBundle/./node_modules/lodash/negate.js","webpack://SwaggerUIBundle/./node_modules/lodash/noop.js","webpack://SwaggerUIBundle/./node_modules/lodash/now.js","webpack://SwaggerUIBundle/./node_modules/lodash/omit.js","webpack://SwaggerUIBundle/./node_modules/lodash/property.js","webpack://SwaggerUIBundle/./node_modules/lodash/rearg.js","webpack://SwaggerUIBundle/./node_modules/lodash/reduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/set.js","webpack://SwaggerUIBundle/./node_modules/lodash/some.js","webpack://SwaggerUIBundle/./node_modules/lodash/stubArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/stubFalse.js","webpack://SwaggerUIBundle/./node_modules/lodash/toFinite.js","webpack://SwaggerUIBundle/./node_modules/lodash/toInteger.js","webpack://SwaggerUIBundle/./node_modules/lodash/toLower.js","webpack://SwaggerUIBundle/./node_modules/lodash/toNumber.js","webpack://SwaggerUIBundle/./node_modules/lodash/toPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/toPlainObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/toString.js","webpack://SwaggerUIBundle/./node_modules/lodash/upperFirst.js","webpack://SwaggerUIBundle/./node_modules/lodash/words.js","webpack://SwaggerUIBundle/./node_modules/lodash/wrapperLodash.js","webpack://SwaggerUIBundle/./node_modules/lodash/zipObject.js","webpack://SwaggerUIBundle/./node_modules/lowlight/lib/core.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/ArraySlice.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/KeyValuePair.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/Namespace.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/ObjectSlice.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements/LinkElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements/RefElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/minim.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/ArrayElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/BooleanElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/Element.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/MemberElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/NullElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/NumberElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/ObjectElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/StringElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/serialisers/JSON06Serialiser.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/serialisers/JSONSerialiser.js","webpack://SwaggerUIBundle/./node_modules/object-assign/index.js","webpack://SwaggerUIBundle/./node_modules/object-inspect/index.js","webpack://SwaggerUIBundle/./node_modules/process/browser.js","webpack://SwaggerUIBundle/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://SwaggerUIBundle/./node_modules/prop-types/index.js","webpack://SwaggerUIBundle/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/formats.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/index.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/parse.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/stringify.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/utils.js","webpack://SwaggerUIBundle/./node_modules/querystringify/index.js","webpack://SwaggerUIBundle/./node_modules/randexp/lib/randexp.js","webpack://SwaggerUIBundle/./node_modules/randombytes/browser.js","webpack://SwaggerUIBundle/./node_modules/react-copy-to-clipboard/lib/Component.js","webpack://SwaggerUIBundle/./node_modules/react-copy-to-clipboard/lib/index.js","webpack://SwaggerUIBundle/./node_modules/react-debounce-input/lib/Component.js","webpack://SwaggerUIBundle/./node_modules/react-debounce-input/lib/index.js","webpack://SwaggerUIBundle/./node_modules/react-dom/cjs/react-dom.production.min.js","webpack://SwaggerUIBundle/./node_modules/react-dom/index.js","webpack://SwaggerUIBundle/./node_modules/react-immutable-proptypes/dist/ImmutablePropTypes.js","webpack://SwaggerUIBundle/./node_modules/react-is/cjs/react-is.production.min.js","webpack://SwaggerUIBundle/./node_modules/react-is/index.js","webpack://SwaggerUIBundle/./node_modules/react/cjs/react.production.min.js","webpack://SwaggerUIBundle/./node_modules/react/index.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/errors-browser.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_readable.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_transform.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_writable.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/combineReducers.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/index.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/getStateName.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/getUnexpectedInvocationParameterMessage.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/index.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/validateNextState.js","webpack://SwaggerUIBundle/./node_modules/repeat-string/index.js","webpack://SwaggerUIBundle/./node_modules/requires-port/index.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/index.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/positions.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/sets.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/types.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/util.js","webpack://SwaggerUIBundle/./node_modules/safe-buffer/index.js","webpack://SwaggerUIBundle/./node_modules/scheduler/cjs/scheduler.production.min.js","webpack://SwaggerUIBundle/./node_modules/scheduler/index.js","webpack://SwaggerUIBundle/./node_modules/serialize-error/index.js","webpack://SwaggerUIBundle/./node_modules/sha.js/hash.js","webpack://SwaggerUIBundle/./node_modules/sha.js/index.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha1.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha224.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha256.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha384.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha512.js","webpack://SwaggerUIBundle/./node_modules/side-channel/index.js","webpack://SwaggerUIBundle/./node_modules/stampit/dist/stampit.min.js","webpack://SwaggerUIBundle/./node_modules/stream-browserify/index.js","webpack://SwaggerUIBundle/./node_modules/string_decoder/lib/string_decoder.js","webpack://SwaggerUIBundle/./node_modules/toggle-selection/index.js","webpack://SwaggerUIBundle/./node_modules/traverse/index.js","webpack://SwaggerUIBundle/./node_modules/url-parse/index.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/shim/index.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/shim/with-selector.js","webpack://SwaggerUIBundle/./node_modules/util-deprecate/browser.js","webpack://SwaggerUIBundle/./node_modules/xml-but-prettier/dist/index.js","webpack://SwaggerUIBundle/./node_modules/xml/lib/escapeForXML.js","webpack://SwaggerUIBundle/./node_modules/xml/lib/xml.js","webpack://SwaggerUIBundle/./node_modules/zenscroll/zenscroll.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime-corejs3/core-js/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime-corejs3/helpers/extends.js","webpack://SwaggerUIBundle/webpack/bootstrap","webpack://SwaggerUIBundle/webpack/runtime/compat get default export","webpack://SwaggerUIBundle/webpack/runtime/define property getters","webpack://SwaggerUIBundle/webpack/runtime/global","webpack://SwaggerUIBundle/webpack/runtime/hasOwnProperty shorthand","webpack://SwaggerUIBundle/webpack/runtime/make namespace object","webpack://SwaggerUIBundle/webpack/runtime/node module decorator","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://SwaggerUIBundle/./node_modules/redux/es/redux.js","webpack://SwaggerUIBundle/./src/core/plugins/err/actions.js","webpack://SwaggerUIBundle/./src/core/window.js","webpack://SwaggerUIBundle/./src/core/utils/get-parameter-schema.js","webpack://SwaggerUIBundle/./src/core/utils/index.js","webpack://SwaggerUIBundle/./src/core/system.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/reducers.js","webpack://SwaggerUIBundle/./node_modules/reselect/es/defaultMemoize.js","webpack://SwaggerUIBundle/./node_modules/reselect/es/index.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/spec-extensions/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/configs-extensions/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/components/lock-auth-icon.jsx","webpack://SwaggerUIBundle/./src/core/plugins/auth/components/unlock-auth-icon.jsx","webpack://SwaggerUIBundle/./src/core/plugins/auth/index.js","webpack://SwaggerUIBundle/./node_modules/js-yaml/dist/js-yaml.mjs","webpack://SwaggerUIBundle/./src/core/plugins/configs/helpers.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/spec-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/index.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/helpers.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/layout.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/operation-wrapper.jsx","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/operation-tag-wrapper.jsx","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/index.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/transformers/not-of-type.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/transformers/parameter-oneof.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/hook.js","webpack://SwaggerUIBundle/./src/core/plugins/err/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/err/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/err/index.js","webpack://SwaggerUIBundle/./src/core/plugins/filter/opsFilter.js","webpack://SwaggerUIBundle/./src/core/plugins/filter/index.js","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow-up.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow-down.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/close.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/copy.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/lock.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/unlock.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/index.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/spec-extensions/wrap-selector.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/index.js","webpack://SwaggerUIBundle/./src/core/plugins/logs/index.js","webpack://SwaggerUIBundle/./src/core/plugins/on-complete/index.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/selectors.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/create-element.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/checkForListedLanguage.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/highlight.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/light.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/javascript.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/json.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/xml.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/bash.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/yaml.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/http.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/powershell.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/agate.js","webpack://SwaggerUIBundle/./src/core/syntax-highlighting.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/arta.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/monokai.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/nord.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/obsidian.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/idea.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/request-snippets.jsx","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/index.js","webpack://SwaggerUIBundle/./src/core/utils/memoizeN.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-json-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-yaml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-xml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/index.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/index.js","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/helpers.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/core.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/duplex.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/index.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/F.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/T.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isPlaceholder.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry1.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry2.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArray.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_dispatchable.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isTransformer.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_reduced.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xfBase.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xall.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/all.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curryN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/curryN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arrayFromIterator.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_includesWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_has.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_objectIs.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArguments.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/keys.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/type.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_equals.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_functionName.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/equals.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_includes.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_indexOf.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_map.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_quote.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_toISOString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_complement.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arrayReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isObject.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xfilter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/filter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_filter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reject.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_toString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/toString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/max.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xmap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/map.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/nth.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/prop.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pluck.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry3.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArrayLike.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_createReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xArrayReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/bind.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xwrap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/allPass.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/always.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/anyPass.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_reduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/ap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_concat.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/apply.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/values.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/isNil.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/assocPath.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_assoc.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/and.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/liftN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/lift.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/both.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/comparator.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/complement.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/not.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_pipe.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_checkForMethod.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/slice.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/tail.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pipe.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/converge.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_cloneRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_clone.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xreduceBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduceBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/curry.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/defaultTo.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_Set.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/difference.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xtake.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/take.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_dropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xdropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/dropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xdropWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/dropWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/or.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/either.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/empty.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isTypedArray.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/flip.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/groupBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/hasPath.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/has.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/hasIn.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/head.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/identical.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_identity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/identity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/ifElse.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/includes.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/init.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_objectAssign.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/invoker.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/isEmpty.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/join.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/last.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/lens.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/paths.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/path.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mapObjIndexed.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeWithKey.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeDeepWithKey.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeDeepRight.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/none.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/omit.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/over.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pathOr.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pathSatisfies.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pick.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propEq.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propOr.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propSatisfies.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isNumber.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/range.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduced.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/replace.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/sort.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/split.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/startsWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/test.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/trim.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xuniqWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/uniqWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/when.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/included.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/trimCharsEnd.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/stubUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isGeneratorFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isAsyncFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isString.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/escapeRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/String.replaceAll.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/replaceAll.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/url.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/fetch-ponyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/create-error.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/fetch-polyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/constants.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/helpers.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/refs.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/all-of.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/parameters.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/properties.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/context-tree.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/replace-special-chars-with-underscore.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/op-id.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/id-from-path-method/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/normalize.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/utils/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/style-serializer.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/http/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/utils/options.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/resolve.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/openapi-predicates.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-2/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-2/resolve.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-0/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-0/resolve.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/Annotation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/Comment.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/ParseResult.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/SourceMap.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isEmptyArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/invokeArgs.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/predicates/helpers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/predicates/index.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNull.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotNull.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/isOfTypeObject.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isObjLike.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isPlainObj.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMAggregateError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ast/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/plugins/utils/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transcluder/Transcluder.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/ast/ephemeral-array.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/ast/ephemeral-object.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/escape.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMStructuredError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/JsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/CompilationJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/compile.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/Number.isFinite.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNumber.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isFinite.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/Number.isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isEmptyString.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/trimCharsStart.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/unescape.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/InvalidJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/parse.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/EvaluationJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/evaluate.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Callback.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Components.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Contact.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Discriminator.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Encoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Example.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/ExternalDocumentation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Header.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Info.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/License.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Link.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/MediaType.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OAuthFlow.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OAuthFlows.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Openapi.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OpenApi3-0.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Operation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Parameter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/PathItem.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Paths.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/RequestBody.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Response.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Responses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/JSONSchema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/JSONReference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/Media.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/LinkDescription.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/Visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/FallbackVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/noop.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/SpecificationVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/FixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/IdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/$schemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MultipleOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ExclusiveMaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ExclusiveMinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PatternVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ParentSchemaAwareVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/UniqueItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotObj.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isObj.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotEmpty.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNonEmptyString.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/PatternedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/MapVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PatternPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DependenciesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DefinitionsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/FormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/BaseVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ReadOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/json-reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/json-reference/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotNil.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNonEmptyArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/dispatch.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/AlternatingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/JSONSchemaOrJSONReferenceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/BinaryEncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/HrefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/RelVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/MediaTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/MethodVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/EncTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Schema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/SecurityRequirement.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/SecurityScheme.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Server.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/ServerVariable.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Tag.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Xml.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/Visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/SpecificationVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/FixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/FallbackVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/OpenapiVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/SpecificationExtensionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/TermsOfServiceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/VersionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/EmailVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/OperationRefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/OperationIdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/PatternedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/MapVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/LinkParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/RequestBodyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Servers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ServerVariables.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/VariablesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/AlternatingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/MediaTypeExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/MediaTypeEncoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/EncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-requirement/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Security.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/SecurityVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/reference/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/InVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/AllowEmptyValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/AllowEmptyValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/HeaderExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/HeaderContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DefinitionsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DependenciesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/ItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/PatternPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/NullableVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/WriteOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/SchemaOrReferenceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/inherited-fixed-fields.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/PropertyNameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/DiscriminatorMapping.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/MappingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/NamespaceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/PrefixVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/AttributeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/WrappedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ParameterExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ParameterContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsSchemas.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/SchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsResponses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ResponsesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsRequestBodies.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/RequestBodiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsSecuritySchemes.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/SecuritySchemesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsLinks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsCallbacks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/CallbacksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/ValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/ExternalValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/ContentTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/EncodingHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/paths/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/RequestBodyContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/callback/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseLinks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/MixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/responses/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/responses/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationTags.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/TagsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/OperationIdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/RequestBodyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationCallbacks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/CallbacksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationSecurity.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/SecurityVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationServers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/PathItemServers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/PathItemParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/InVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/SchemeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/BearerFormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/OpenIdConnectUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flows/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/AuthorizationUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/TokenUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/RefreshUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OAuthFlowScopes.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/ScopesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Tags.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/TagsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Callback.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Components.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Contact.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Discriminator.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Encoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Example.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/ExternalDocumentation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Header.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Info.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/JsonSchemaDialect.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/License.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Link.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/MediaType.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OAuthFlow.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OAuthFlows.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Openapi.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OpenApi3-1.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Operation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Parameter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/PathItem.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Paths.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/RequestBody.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Response.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Responses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Schema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/SecurityRequirement.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/SecurityScheme.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Server.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/ServerVariable.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Tag.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Xml.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/info/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/info/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/contact/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/license/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/license/IdentifierVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/link/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/server/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/server-variable/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/media-type/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/security-requirement/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/tag/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/parameter/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/header/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$schemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$idVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$anchorVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$refVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$defsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$commentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PatternProperties.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ConstVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PatternVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/FormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/distriminator/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/xml/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/SchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/nces/ComponentsPathItems.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/PathItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/example/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/external-documentation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/encoding/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/paths/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/request-body/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/callback/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/response/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/responses/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/operation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/path-item/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/security-scheme/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/oauth-flows/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/oauth-flow/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/nces/Webhooks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/WebhooksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/UnsupportedOperationError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/NotImplementedError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/media-types.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/media-types.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/ReferenceSet.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/options/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/options/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/File.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/PluginError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/plugins.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/ParserError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/UnmatchedDereferenceStrategyError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/DereferenceError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/NotImplementedError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/parsers/Parser.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/parsers/binary/index-browser.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/ResolveStrategy.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/allP.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/ResolverError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/MaximumResolverDepthError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/MaximumDereferenceDepthError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/UnmatchedResolverError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/filter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/uri/errors/EvaluationJsonSchemaUriError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/find.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/InvalidSelectorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor/errors/InvalidJsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor/errors/EvaluationJsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/uri/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-operation-ids.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-parameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-security-requirements.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-servers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-parameter-examples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-header-examples.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/normalize.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/resolvers/Resolver.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/resolvers/HttpResolver.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/abortcontroller-ponyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/abortcontroller-polyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/resolve/resolvers/http-swagger-client/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/json/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/yaml-1-2/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-json-3-1/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-yaml-3-1/index.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/DereferenceStrategy.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/to-path.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/get-root-cause.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/errors/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/dereference.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/compose.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/parameters.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/properties.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/deepmerge.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/all-of.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/resolve.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transcluder/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/node_modules/is-plain-object/dist/is-plain-object.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/swagger2/parameter-builders.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/content-serializer.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/parameter-builders.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/btoa.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/build-request.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/swagger2/build-request.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/id-from-path-method/legacy.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/get-operation-raw.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/find-operation.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/each-operation.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/subtree-resolver/index.js","webpack://SwaggerUIBundle/./src/core/plugins/swagger-client/configs-wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/swagger-client/index.js","webpack://SwaggerUIBundle/./src/core/plugins/util/index.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/batch.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/Context.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/hooks/useSelector.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/selectorFactory.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/invalidArgFactory.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mergeProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/Subscription.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/shallowEqual.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/useSyncExternalStore.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/connect.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mapStateToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/bindActionCreators.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/Provider.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/index.js","webpack://SwaggerUIBundle/./src/core/plugins/view/root-injects.jsx","webpack://SwaggerUIBundle/./src/core/plugins/view/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/view/index.js","webpack://SwaggerUIBundle/./src/core/plugins/download-url/index.js","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/fn.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/components/fallback.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/components/error-boundary.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/index.js","webpack://SwaggerUIBundle/./src/core/components/app.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorization-popup.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorize-btn.jsx","webpack://SwaggerUIBundle/./src/core/containers/authorize-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorize-operation-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/auths.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/error.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/api-key-auth.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/basic-auth.jsx","webpack://SwaggerUIBundle/./src/core/components/example.jsx","webpack://SwaggerUIBundle/./src/core/components/examples-select.jsx","webpack://SwaggerUIBundle/./src/core/components/examples-select-value-retainer.jsx","webpack://SwaggerUIBundle/./src/core/oauth2-authorize.js","webpack://SwaggerUIBundle/./src/core/components/auth/oauth2.jsx","webpack://SwaggerUIBundle/./src/core/components/clear.jsx","webpack://SwaggerUIBundle/./src/core/components/live-response.jsx","webpack://SwaggerUIBundle/./src/core/components/online-validator-badge.jsx","webpack://SwaggerUIBundle/./src/core/components/operations.jsx","webpack://SwaggerUIBundle/./src/core/utils/url.js","webpack://SwaggerUIBundle/./src/core/components/operation-tag.jsx","webpack://SwaggerUIBundle/./src/core/assets/rolling-load.svg","webpack://SwaggerUIBundle/./src/core/components/operation.jsx","webpack://SwaggerUIBundle/./src/core/containers/OperationContainer.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary-method.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary-path.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-extensions.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-extension-row.jsx","webpack://SwaggerUIBundle/./src/core/components/highlight-code.jsx","webpack://SwaggerUIBundle/./src/core/components/responses.jsx","webpack://SwaggerUIBundle/./src/core/utils/create-html-ready-id.js","webpack://SwaggerUIBundle/./src/core/utils/jsonParse.js","webpack://SwaggerUIBundle/./src/core/components/response.jsx","webpack://SwaggerUIBundle/./src/core/components/response-extension.jsx","webpack://SwaggerUIBundle/./src/core/components/response-body.jsx","webpack://SwaggerUIBundle/./src/core/components/parameters/parameters.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-extension.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-include-empty.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-row.jsx","webpack://SwaggerUIBundle/./src/core/components/execute.jsx","webpack://SwaggerUIBundle/./src/core/components/headers.jsx","webpack://SwaggerUIBundle/./src/core/components/errors.jsx","webpack://SwaggerUIBundle/./src/core/components/content-type.jsx","webpack://SwaggerUIBundle/./src/core/components/layout-utils.jsx","webpack://SwaggerUIBundle/./src/core/components/overview.jsx","webpack://SwaggerUIBundle/./src/core/components/initialized-input.jsx","webpack://SwaggerUIBundle/./src/core/components/info.jsx","webpack://SwaggerUIBundle/./src/core/containers/info.jsx","webpack://SwaggerUIBundle/./src/core/components/contact.jsx","webpack://SwaggerUIBundle/./src/core/components/license.jsx","webpack://SwaggerUIBundle/./src/core/components/jump-to-path.jsx","webpack://SwaggerUIBundle/./src/core/components/copy-to-clipboard-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/footer.jsx","webpack://SwaggerUIBundle/./src/core/containers/filter.jsx","webpack://SwaggerUIBundle/./src/core/components/param-body.jsx","webpack://SwaggerUIBundle/./src/core/components/curl.jsx","webpack://SwaggerUIBundle/./src/core/components/schemes.jsx","webpack://SwaggerUIBundle/./src/core/containers/schemes.jsx","webpack://SwaggerUIBundle/./src/core/components/model-collapse.jsx","webpack://SwaggerUIBundle/./src/core/components/model-example.jsx","webpack://SwaggerUIBundle/./src/core/components/model-wrapper.jsx","webpack://SwaggerUIBundle/./node_modules/react-immutable-pure-component/lib/react-immutable-pure-component.es.js","webpack://SwaggerUIBundle/./src/core/components/model.jsx","webpack://SwaggerUIBundle/./src/core/components/models.jsx","webpack://SwaggerUIBundle/./src/core/components/enum-model.jsx","webpack://SwaggerUIBundle/./src/core/components/object-model.jsx","webpack://SwaggerUIBundle/./src/core/components/array-model.jsx","webpack://SwaggerUIBundle/./src/core/components/primitive-model.jsx","webpack://SwaggerUIBundle/./src/core/components/property.jsx","webpack://SwaggerUIBundle/./src/core/components/try-it-out-button.jsx","webpack://SwaggerUIBundle/./src/core/components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/components/version-stamp.jsx","webpack://SwaggerUIBundle/./src/core/components/openapi-version.jsx","webpack://SwaggerUIBundle/./src/core/components/deep-link.jsx","webpack://SwaggerUIBundle/./src/core/components/svg-assets.jsx","webpack://SwaggerUIBundle/./node_modules/remarkable/dist/esm/index.browser.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/utils.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/html-tag.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/anchor-tag-builder.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-smart.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-middle.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-end.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/match.js","webpack://SwaggerUIBundle/./node_modules/tslib/tslib.es6.mjs","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/email-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/url-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/hashtag-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/mention-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/phone-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/url-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/regex-lib.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/tld-regex.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/email-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/url-match-validator.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/hashtag-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/phone-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/mention-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/htmlParser/parse-html.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/autolinker.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/version.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/index.js","webpack://SwaggerUIBundle/./node_modules/remarkable/dist/esm/linkify.js","webpack://SwaggerUIBundle/./src/core/components/providers/markdown.jsx","webpack://SwaggerUIBundle/./src/core/components/layouts/base.jsx","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/core-components/index.js","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/form-components/index.js","webpack://SwaggerUIBundle/./src/core/components/json-schema-components.jsx","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/json-schema-components/index.js","webpack://SwaggerUIBundle/./src/core/presets/base/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/spec-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/auth-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/helpers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/spec-extensions/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/callbacks.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/request-body.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/operation-link.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/servers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/servers-container.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/request-body-editor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/auth/http-auth.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/operation-servers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/markdown.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/online-validator-badge.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/json-schema-string.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/openapi-version.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/webhooks.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/license.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/contact.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/info.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/json-schema-dialect.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/model/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/models/models.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/auth/mutual-tls-auth.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/auth/auths.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/license.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/contact.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/info.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/models.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/auths.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/spec-extensions/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/spec-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/auth-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/after-load.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/prop-types.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/context.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/hooks.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$schema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$id.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$ref.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$defs.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$comment.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Not.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/If.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Then.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Else.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Items.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Type.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Const.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Default.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/hoc.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/array.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/object.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/random.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/predicates.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/email.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-email.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/hostname.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-hostname.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv4.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv6.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-reference.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri-reference.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uuid.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-template.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/json-pointer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/relative-json-pointer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date-time.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/time.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/duration.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/password.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/regex.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/Registry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/formatAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/7bit.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/8bit.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/binary.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/quoted-printable.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base16.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base32.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base64.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/EncoderRegistry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/encoderAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/text.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/image.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/audio.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/video.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/application.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/MediaTypeRegistry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/mediaTypeAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/string.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/float.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/double.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/number.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int32.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int64.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/integer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/boolean.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/null.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/constants.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/example.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/type.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/utils.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/merge.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/main.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-json-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-yaml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-xml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/index.js","webpack://SwaggerUIBundle/./src/core/presets/apis/index.js","webpack://SwaggerUIBundle/./src/core/index.js","webpack://SwaggerUIBundle/./src/index.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","this","invalidProtocolRegex","htmlEntitiesRegex","htmlCtrlEntityRegex","ctrlCharactersRegex","urlSchemeRegex","relativeFirstCharacters","sanitizeUrl","url","sanitizedUrl","decodeHtmlCharacters","str","replace","match","dec","String","fromCharCode","trim","isRelativeUrlWithoutProtocol","indexOf","urlSchemeParseResults","urlScheme","test","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","start","end","num","output","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","fromString","string","encoding","isEncoding","actual","write","slice","ArrayBuffer","isView","fromArrayView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","SharedArrayBuffer","valueOf","b","fromObject","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","byteArray","base64Write","ucs2Write","utf16leToBytes","units","c","hi","lo","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","apply","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","proto","foo","e","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","NodeError","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","split","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","applyBind","hasOwn","hasOwnProperty","classNames","classes","argType","inner","key","default","parse","options","decode","index","eqIdx","endIdx","tryDecode","serialize","opt","enc","encode","fieldContentRegExp","maxAge","isNaN","domain","path","expires","isDate","__toString","Date","toUTCString","httpOnly","secure","priority","sameSite","decodeURIComponent","encodeURIComponent","deselectCurrent","clipboardToIE11Formatting","text","debug","reselectPrevious","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","preventDefault","clipboardData","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","err","copyKey","navigator","userAgent","prompt","removeRange","removeAllRanges","removeChild","parent","AggregateError","entryVirtual","isPrototypeOf","method","FunctionPrototype","Function","it","own","assign","isCallable","tryToString","$TypeError","argument","$String","isObject","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","uncurryThis","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","wellKnownSymbol","$Object","CORRECT_ARGUMENTS","tag","result","tryGet","callee","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","source","exceptions","keys","f","getOwnPropertyDescriptor","fails","F","getPrototypeOf","done","DESCRIPTORS","createPropertyDescriptor","object","bitmap","createNonEnumerableProperty","global","documentAll","IS_HTMLDDA","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","version","process","Deno","versions","v8","CONSTRUCTOR","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","dropEntries","prepareStackTrace","clearErrorStack","ERROR_STACK_INSTALLABLE","captureStackTrace","C","isForced","wrapConstructor","NativeConstructor","Wrapper","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","descriptor","TARGET","GLOBAL","STATIC","stat","PROTO","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","sham","real","exec","NATIVE_BIND","Reflect","aCallable","that","arraySlice","$Function","factories","Prototype","partArgs","boundFunction","bound","args","argsLength","construct","getDescriptor","PROPER","something","CONFIGURABLE","uncurryThisWithBind","aFunction","variable","namespace","classof","getMethod","isNullOrUndefined","Iterators","ITERATOR","anObject","getIteratorMethod","usingIterator","iteratorMethod","V","P","check","globalThis","self","g","toObject","getBuiltIn","propertyIsEnumerable","dummy","NewTarget","NewTargetPrototype","cause","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","state","store","metadata","facade","STATE","enforce","getterFor","TYPE","ArrayPrototype","$documentAll","replacement","feature","detection","normalize","POLYFILL","NATIVE","USE_SYMBOL_AS_UID","$Symbol","isArrayIteratorMethod","getIterator","iteratorClose","Result","stopped","ResultPrototype","iterable","unboundFunction","iterator","iterFn","next","step","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","kind","innerResult","innerError","IteratorPrototype","create","setToStringTag","returnThis","IteratorConstructor","NAME","ENUMERABLE_NEXT","$","IS_PURE","FunctionName","createIteratorConstructor","defineBuiltIn","IteratorsCore","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","values","entries","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","PrototypeOfArrayIteratorPrototype","arrayIterator","toLength","ceil","trunc","$default","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","IndexedObject","$assign","A","B","symbol","forEach","chr","T","argumentsLength","getOwnPropertySymbols","S","activeXDocument","definePropertiesModule","enumBugKeys","html","documentCreateElement","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","JS","display","contentWindow","open","Properties","V8_PROTOTYPE_DEFINE_BUG","defineProperties","props","IE8_DOM_DEFINE","toPropertyKey","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","internalObjectKeys","getOwnPropertyNames","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","uncurryThisAccessor","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","pref","getOwnPropertyNamesModule","Target","Source","TAG","SET_METHOD","uid","defineGlobalProperty","SHARED","mode","copyright","license","toIntegerOrInfinity","requireObjectCoercible","charAt","CONVERT_TO_STRING","second","codeAt","V8_VERSION","integer","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","id","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","copyConstructorProperties","proxyAccessor","inheritIfRequired","normalizeStringArgument","installErrorCause","installErrorStack","FULL_NAME","wrapper","IS_AGGREGATE_ERROR","STACK_TRACE_LIMIT","OPTIONS_POSITION","ERROR_NAME","OriginalError","OriginalErrorPrototype","BaseError","WrappedError","wrapErrorConstructorWithCause","AGGREGATE_ERROR","$AggregateError","arity","init","iterate","AggregateErrorPrototype","errorsArray","addToUnscopables","InternalStateModule","defineIterator","createIterResultObject","ARRAY_ITERATOR","setInternalState","getInternalState","iterated","Arguments","WEB_ASSEMBLY","WebAssembly","exportGlobalErrorCauseWrapper","exportWebAssemblyErrorCauseWrapper","EvalError","ReferenceError","SyntaxError","URIError","CompileError","LinkError","RuntimeError","STRING_ITERATOR","point","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","CSS","escape","cssEscape","codeUnit","firstCodeUnit","isSpecificValue","RegExp","cloneSpecificValue","getTime","deepCloneArray","clone","item","deepExtend","safeGetProperty","property","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","$$typeof","REACT_ELEMENT_TYPE","for","cloneUnlessOtherwiseSpecified","deepmerge","emptyTarget","defaultArrayMerge","map","element","getKeys","getEnumerableOwnPropertySymbols","filter","propertyIsOnObject","_","mergeObject","destination","propertyIsUnsafe","getMergeFunction","customMerge","arrayMerge","sourceIsArray","deepmergeAll","reduce","prev","deepmerge_1","isFrozen","freeze","seal","fun","thisValue","Func","arrayForEach","unapply","arrayPop","pop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","unconstruct","thisArg","_len","_key","_len2","_key2","addToSet","transformCaseFunc","l","lcElement","newObject","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","EXPRESSIONS","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","createDOMPurify","DOMPurify","removed","nodeType","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","MozNamedAttrMap","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","remove","_removeAttribute","attribute","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","insertBefore","createTextNode","childNodes","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isClobbered","elm","nodeName","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","firstChild","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","SubRange","low","high","overlaps","touches","add","subtract","DRange","ranges","_update_length","previous","_add","subrange","newRanges","_subtract","intersect","_intersect","numbers","subranges","ReflectOwnKeys","R","ReflectApply","receiver","NumberIsNaN","EventEmitter","once","emitter","Promise","resolve","reject","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","handler","flags","on","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","newListener","emit","unshift","warned","w","count","ProcessEmitWarning","warning","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","originalListener","shift","spliceOne","off","removeAllListeners","rawListeners","eventNames","formatter","fault","EConstructor","FormattedError","displayName","eval","reference","syntax","uri","fmt","precision","argIndex","escaped","leadingZero","nextArg","slurpNumber","digits","parseFloat","toFixed","JSON","stringify","toUpperCase","vsprintf","replacements","log","printf","toStr","boundLength","boundArgs","Empty","$SyntaxError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","hasProto","getProto","needsEval","TypedArray","INTRINSICS","Atomics","BigInt64Array","BigUint64Array","DataView","decodeURI","encodeURI","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Map","Proxy","Set","Uint8ClampedArray","Uint16Array","Uint32Array","WeakRef","WeakSet","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","splice","$replace","$strSlice","$exec","rePropName","reEscapeChar","getBaseIntrinsic","alias","intrinsicName","stringToPath","quote","subString","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","origSymbol","hasSymbolSham","hasNativeSymbols","symObj","syms","deepFreeze","clear","delete","deepFreezeEs6","_default","Response","isMatchIgnored","ignoreMatch","escapeHTML","inherit","original","objects","emitsWrappingTags","HTMLRenderer","parseTree","classPrefix","walk","addText","openNode","className","sublanguage","span","closeNode","TokenTree","rootNode","children","closeAllNodes","builder","_walk","child","_collapse","every","TokenTreeEmitter","addKeyword","addSublanguage","toHTML","finalize","re","BACKREF_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","begin","relevance","APOS_STRING_MODE","illegal","contains","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","MATCH_NOTHING_RE","RE_STARTERS_RE","SHEBANG","opts","beginShebang","binary","resp","END_SAME_AS_BEGIN","_beginMatch","skipIfhasPrecedingDot","response","beginKeywords","__beforeBegin","keywords","compileIllegal","_parent","either","compileMatch","compileRelevance","COMMON_KEYWORDS","DEFAULT_KEYWORD_CLASSNAME","compileKeywords","rawKeywords","caseInsensitive","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","compileLanguage","language","plugins","langRe","case_insensitive","MultiRegex","matchIndexes","regexes","matchAt","addRule","countMatchGroups","compile","terminators","matcherRe","regexps","separator","numCaptures","regex","substring","lastIndex","s","findIndex","matchData","ResumableMultiRegex","rules","multiRegexes","regexIndex","getMatcher","matcher","resumingScanAtSamePosition","considerAll","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","keywordPattern","$pattern","lexemes","keywordPatternRe","beginRe","endSameAsBegin","endsWithParent","endRe","terminatorEnd","illegalRe","expandOrCloneMode","variants","cachedVariants","variant","dependencyOnParent","starts","buildModeRegex","mm","term","rule","BuildVuePlugin","hljs","Component","detectedLanguage","unknownLanguage","computed","highlighted","autoDetect","getLanguage","highlightAuto","highlight","ignoreIllegals","hasValueOrEmptyAttribute","autodetect","render","class","domProps","VuePlugin","install","Vue","component","mergeHTMLPlugin","originalStream","nodeStream","resultNode","mergeStreams","processed","nodeStack","selectStream","event","attributeString","stream","reverse","_nodeStream","nextSibling","nodeValue","seenDeprecations","deprecated","escape$1","inherit$1","NO_MATCH","languages","aliases","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","noHighlightRe","languageDetectRe","tabReplace","useBR","__emitter","shouldNotHighlight","languageName","codeOrlanguageName","optionsOrCode","continuation","fire","_highlight","codeToHighlight","keywordData","matchText","processBuffer","subLanguage","processSubLanguage","modeBuffer","continuations","processKeywords","keywordRelevance","startsWith","cssClass","startNewMode","endOfMode","matchPlusRemainder","matched","lexeme","endsParent","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","skip","excludeBegin","returnBegin","doEndMatch","endMode","origin","returnEnd","excludeEnd","lastMatch","processLexeme","textBeforeMatch","badRule","iterations","md","processContinuations","processedCount","illegalBy","sofar","errorRaised","languageSubset","plaintext","justTextHighlightResult","results","autoDetection","sorted","sort","supersetOf","best","secondBest","second_best","brPlugin","TAB_REPLACE_RE","tabReplacePlugin","highlightElement","blockLanguage","block","find","_class","updateClassName","currentLang","resultLang","classList","relavance","initHighlighting","called","querySelectorAll","wantsHighlight","highlightAll","readyState","registerAliases","aliasList","lang","plugin","boot","fixMarkup","deprecateFixMarkup","highlightBlock","deprecateHighlightBlock","configure","userOptions","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","unregisterLanguage","listLanguages","requireLanguage","addPlugin","upgradePluginAPI","vuePlugin","debugMode","safeMode","versionString","HLJS","bash","VAR","BRACED_VAR","SUBST","HERE_DOC","QUOTE_STRING","ARITHMETIC","KNOWN_SHEBANG","FUNCTION","literal","built_in","http","VERSION","HEADER","HEADERS_AND_BODY","KEYWORDS","LITERALS","BUILT_INS","lookahead","javascript","IDENT_RE$1","FRAGMENT","XML_TAG","isTrulyOpeningTag","afterMatchIndex","nextChar","after","hasClosingTag","KEYWORDS$1","decimalDigits","frac","decimalInteger","NUMBER","HTML_TEMPLATE","CSS_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","label","json","ALLOWED_COMMENTS","TYPES","VALUE_CONTAINER","OBJECT","ARRAY","powershell","BACKTICK_ESCAPE","APOS_STRING","PS_COMMENT","CMDLETS","PS_CLASS","PS_FUNCTION","PS_USING","PS_ARGUMENTS","PS_METHODS","GENTLEMANS_SET","PS_TYPE","TAG_NAME_RE","optional","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","yaml","URI_CHARACTERS","STRING","CONTAINER_STRING","TIMESTAMP","VALUE_MODES","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","NaN","rt","LN2","SLICE$0","createClass","ctor","superClass","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","Keyed","Indexed","DELETE","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","newArr","ii","ensureSize","iter","__iterate","returnTrue","wrapIndex","uint32Index","wholeSlice","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","iteratorValue","k","v","iteratorResult","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","iteratorFn","isArrayLike","emptySequence","toSeq","seqFromValue","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","entrySeq","toIndexedSeq","indexedSeqFromValue","toSetSeq","toSource","of","cacheResult","_cache","__iterateUncached","toArray","seqIterate","__iterator","seqIterator","isSeq","EMPTY_SEQ","EMPTY_REPEAT","EMPTY_RANGE","IS_SEQ_SENTINEL","ArraySeq","_array","ObjectSeq","_object","_keys","IterableSeq","_iterable","IteratorSeq","_iterator","_iteratorCache","maybeSeq","seq","maybeIndexedSeqFromValue","useKeys","cache","maxIndex","entry","__iteratorUncached","fromJS","converter","fromJSWith","fromJSDefault","parentJSON","isPlainObj","toList","toMap","is","valueA","valueB","deepEqual","__hash","notAssociative","flipped","allEqual","bSize","Repeat","times","_value","invariant","Range","_start","_end","_step","KeyedCollection","IndexedCollection","SetCollection","notSetValue","searchValue","this$0","other","possibleIndex","offsetValue","imul","smi","i32","hash","o","h","STRING_HASH_CACHE_MIN_STRLEN","cachedHashString","hashString","hashCode","hashJSObj","stringHashCache","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","getIENodeHash","objHashUID","isExtensible","uniqueID","assertNotInfinite","emptyMap","isMap","withMutations","maybeMap","IS_MAP_SENTINEL","keyValues","_root","updateMap","setIn","keyPath","updateIn","deleteIn","update","updater","updatedValue","updateInDeepMap","forceIterator","__ownerID","__altered","merge","mergeIntoMapWith","mergeWith","merger","mergeIn","iters","mergeDeep","deepMerger","mergeDeepWith","deepMergerWith","mergeDeepIn","comparator","OrderedMap","sortFactory","sortBy","mapper","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","MapIterator","ownerID","makeMap","EMPTY_MAP","MapPrototype","ArrayMapNode","BitmapIndexedNode","nodes","HashArrayMapNode","HashCollisionNode","keyHash","ValueNode","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","__prev","newRoot","newSize","didChangeSize","didAlter","updateNode","isLeafNode","mergeIntoNode","newNode","idx1","idx2","createNodes","packNodes","excluding","packedII","packedNodes","bit","expandNodes","including","expandedNodes","iterables","mergeIntoCollectionWith","nextValue","collection","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","popCount","idx","canEdit","newArray","spliceIn","newLen","spliceOut","removeIn","exists","MAX_ARRAY_MAP_SIZE","isEditable","newEntries","keyHashFrag","MAX_BITMAP_INDEXED_SIZE","newBitmap","newNodes","newCount","MIN_HASH_ARRAY_MAP_SIZE","keyMatch","subNode","List","empty","emptyList","isList","makeList","VNode","setSize","maybeList","IS_LIST_SENTINEL","listNodeFor","_origin","updateList","insert","_capacity","_level","_tail","oldSize","setListBounds","mergeIntoListWith","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","EMPTY_ORDERED_MAP","left","right","tailPos","getTailOffset","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","to","capacity","newTail","updateVNode","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","maybeOrderedMap","makeOrderedMap","omap","_map","_list","updateOrderedMap","newMap","newList","flip","ToKeyedSequence","indexed","_iter","_useKeys","ToIndexedSequence","ToSetSequence","FromEntriesSequence","flipFactory","flipSequence","makeSequence","reversedSequence","cacheResultThrough","mapFactory","mappedSequence","reverseFactory","filterFactory","predicate","filterSequence","countByFactory","grouper","groups","groupByFactory","isKeyedIter","coerce","iterableClass","reify","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","takeWhileFactory","takeSequence","iterating","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","singleton","concatSeq","flatten","sum","flattenFactory","depth","flatSequence","flatDeep","currentDepth","flatMapFactory","interposeFactory","interposedSequence","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","some","validateEntry","resolveSize","Record","defaultValues","hasInitialized","RecordType","setProps","RecordTypePrototype","_name","_defaultValues","RecordPrototype","valueSeq","indexedIterable","recordName","defaultVal","_empty","makeRecord","likeRecord","record","setProp","emptySet","isSet","maybeSet","IS_SET_SENTINEL","fromKeys","keySeq","updateSet","union","originalSet","OrderedSet","__make","EMPTY_SET","SetPrototype","__empty","makeSet","emptyOrderedSet","isOrderedSet","maybeOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Stack","emptyStack","isStack","unshiftAll","maybeStack","IS_STACK_SENTINEL","head","_head","peek","makeStack","pushAll","EMPTY_STACK","StackPrototype","mixin","keyCopier","toJS","__toJS","toOrderedMap","toOrderedSet","toSet","toStack","__toStringMapper","returnValue","findEntry","sideEffect","joined","isFirst","reducer","initialReduction","reduction","useFirst","reduceRight","reversed","not","butLast","isEmpty","countBy","entriesSequence","entryMapper","filterNot","findKey","findLast","findLastEntry","findLastKey","flatMap","searchKey","getIn","searchKeyPath","nested","groupBy","hasIn","isSubset","isSuperset","keyOf","keyMapper","lastKeyOf","maxBy","neg","defaultNegComparator","minBy","rest","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeUntil","hashIterable","quoteString","chain","mapEntries","mapKeys","KeyedIterablePrototype","defaultZipper","ordered","keyed","murmurHashOfSize","hashMerge","removeNum","numArgs","spliced","findLastIndex","interpose","interleave","zipped","interleaved","zip","zipWith","inherits","superCtor","super_","TempCtor","filename","mime","bom","blob","Blob","msSaveBlob","blobURL","URL","createObjectURL","webkitURL","tempLink","href","download","click","setTimeout","revokeObjectURL","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","objectToString","nativeMax","nativeMin","now","toNumber","isObjectLike","isBinary","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","debounced","isInvoking","leadingEdge","cancel","clearTimeout","flush","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","LodashWrapper","chainAll","__chain__","__index__","__values__","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","arrayEach","iteratee","arrayFilter","resIndex","baseIndexOf","arrayIncludes","baseTimes","isArguments","isIndex","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","arrayMap","arrayReduce","accumulator","initAccum","arraySome","asciiToArray","reAsciiWord","asciiWords","baseAssignValue","eq","assignMergeValue","assignValue","objValue","assocIndexOf","copyObject","baseAssign","keysIn","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFlat","isFull","isFunc","stacked","subValue","objectCreate","baseForOwn","baseEach","createBaseEach","baseFindIndex","fromRight","isFlattenable","baseFlatten","isStrict","baseFor","createBaseFor","castPath","toKey","baseGet","baseGetAllKeys","keysFunc","symbolsFunc","getRawTag","symToStringTag","toStringTag","baseGetTag","baseHasIn","baseIsNaN","strictIndexOf","baseIsArguments","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsMap","baseIsMatch","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","baseIsNative","baseIsSet","isLength","typedArrayTags","baseIsTypedArray","baseMatches","baseMatchesProperty","identity","baseIteratee","isPrototype","nativeKeys","baseKeys","nativeKeysIn","baseKeysIn","isProto","getMatchData","matchesStrictComparable","isKey","isStrictComparable","baseMergeDeep","safeGet","baseMerge","srcIndex","cloneTypedArray","isArrayLikeObject","isPlainObject","toPlainObject","mergeFunc","isCommon","isTyped","baseProperty","basePropertyDeep","basePropertyOf","baseReduce","eachFunc","overRest","setToString","baseRest","baseSet","metaMap","baseSetData","constant","baseSetToString","baseSlice","baseSome","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","baseTrim","baseUnary","baseUnset","baseZipObject","assignFunc","valsLength","cacheHas","castSlice","cloneArrayBuffer","arrayBuffer","freeExports","freeModule","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","typedArray","composeArgs","partials","holders","isCurried","argsIndex","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","coreJsData","countHolders","placeholder","isIterateeCall","createAssigner","assigner","sources","guard","createCtor","createBind","isBind","Ctor","hasUnicode","stringToArray","createCaseFirst","methodName","strSymbols","deburr","words","reApos","createCompounder","callback","thisBinding","createHybrid","createRecurry","getHolder","replaceHolders","createCurry","createFind","findIndexFunc","reorder","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","createPartial","isLaziable","setWrapToString","wrapFunc","isCurry","newData","getData","mergeData","toInteger","createWrap","customOmitClone","deburrLetter","isPartial","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","flatRest","noop","realNames","getFuncName","otherFunc","isKeyable","getMapData","getValue","getPrototype","overArg","nativeObjectToString","unmasked","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","reWrapDetails","reSplitDetails","getWrapDetails","hasPath","hasFunc","reHasUnicode","reHasUnicodeWord","hasUnicodeWord","nativeCreate","reWrapComment","insertWrapDetails","details","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","lodash","funcName","maskSrcKey","memoize","memoizeCapped","PLACEHOLDER","WRAP_ARY_FLAG","srcBitmask","newBitmask","isCombo","freeProcess","nodeUtil","types","require","binding","transform","otherArgs","indexes","oldArray","shortOut","updateWrapDetails","nativeNow","lastCalled","stamp","pairs","LARGE_ARRAY_SIZE","unicodeToArray","reWhitespace","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsModifier","rsEmoji","reUnicodeWord","unicodeWords","wrapFlags","wrapperClone","capitalize","camelCase","word","upperFirst","curry","timeWaiting","reLatin","reComboMark","mapping","fallbackHolder","baseAry","cloneArray","wrapImmutable","cloner","baseConvert","util","isLib","isObj","config","cap","fixed","immutable","rearg","defaultHolder","forceCurry","forceFixed","forceRearg","pristine","runInContext","helpers","isError","isWeakMap","toPath","each","aryMethodKeys","aryMethod","wrappers","castArray","nthArg","castCap","iterateeRearg","baseArity","iterateeAry","castFixed","skipFixed","methodSpread","flatSpread","castRearg","skipRearg","methodRearg","aryRearg","cloneByPath","createConverter","realName","aliasToReal","remap","oldOptions","newUtil","newFunc","newOptions","mutate","createCloner","aryKey","otherName","afterRearg","castCurry","convertLib","realToAlias","defaultValue","isBoolean","stubFalse","isEqual","nodeIsMap","isNull","isNumber","objectCtorString","nodeIsSet","isString","nodeIsTypedArray","memoized","Cache","negate","omit","paths","CLONE_DEEP_FLAG","INFINITY","toFinite","remainder","toLower","pattern","zipObject","settings","subset","prefix","defaultPrefix","registerAlias","Emitter","properties","toHtmlNoop","before","coerceElementMatchingCallback","extend","ArraySlice","elements","toValue","compactMap","initialValue","refract","KeyValuePair","JSONSerialiser","Namespace","elementMap","elementDetection","noDefault","useDefault","_attributeElementKeys","_attributeElementArrayKeys","use","base","load","register","NullElement","StringElement","NumberElement","BooleanElement","ArrayElement","ObjectElement","MemberElement","RefElement","LinkElement","detect","ElementClass","_elements","unregister","givenPrepend","toElement","getElementClass","fromRefract","serialiser","deserialise","toRefract","serialise","pascal","ObjectSlice","member","meta","relation","primitive","indexOrKey","getIndex","startIndex","memo","findElements","givenOptions","recursive","keyOrIndex","findByElement","findByClass","getById","_meta","_attributes","toRef","findRecursive","elementNames","elementName","append","checkElement","items","parentElements","parents","namesIndex","getMetaProperty","hasKey","setMetaProperty","_storedElement","_content","title","description","links","recursiveChildren","getMember","getKey","keyOrObject","objectKey","JSON06Serialiser","payload","serialiseObject","isEnum","enumSerialiseAttributes","enumSerialiseContent","serialiseContent","shouldSerialiseContent","refSerialiseContent","sourceMapSerialiseContent","dataStructureSerialiseContent","enumerations","samples","sample","enumeration","Null","deserialiseObject","deserialiseContent","existingSamples","existingSample","enumElement","defaultElement","shouldRefract","convertKeyToRefract","serialiseEnum","subItem","subSubItem","keyValue","propIsEnumerable","shouldUseNative","test1","test2","test3","letter","symbols","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setForEach","weakMapHas","weakSetHas","weakRefDeref","deref","booleanValueOf","functionToString","$match","$slice","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","bigIntValueOf","gOPS","symToString","hasShammedSymbols","isEnumerable","gPO","addNumericSeparator","sepRegex","int","intStr","utilInspect","inspectCustom","custom","inspectSymbol","wrapQuotes","defaultStyle","quoteChar","quoteStyle","isRegExp","inspect_","maxStringLength","customInspect","indent","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","baseIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","HTMLElement","attrs","xs","singleLineValues","indentedJoin","mapParts","collectionOf","setParts","weakCollectionOf","isWeakSet","isWeakRef","isBigInt","ys","protoTag","stringTag","trailer","lowbyte","lineJoiner","symMap","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","marker","Item","nextTick","browser","env","argv","cwd","chdir","umask","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","percentTwenties","Format","formatters","RFC1738","RFC3986","formats","utils","defaults","allowDots","allowPrototypes","allowSparse","arrayLimit","charset","charsetSentinel","comma","decoder","delimiter","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","$0","numberStr","parseArrayValue","parseKeys","parseQueryStringKeys","givenKey","valuesParsed","segment","leaf","cleanRoot","parseObject","normalizeParseOptions","tempObj","parseQueryStringValues","cleanStr","skipIndex","bracketEqualsPos","encodedVal","combine","parseValues","newObj","compact","getSideChannel","arrayPrefixGenerators","brackets","indices","repeat","pushToArray","valueOrArray","toISO","toISOString","defaultFormat","addQueryPrefix","encoder","encodeValuesOnly","serializeDate","date","skipNulls","sentinel","generateArrayPrefix","commaRoundTrip","sideChannel","tmpSc","findFlag","isNonNullishPrimitive","valuesArray","valuesJoined","objKeys","adjustedPrefix","keyPrefix","valueSideChannel","normalizeStringifyOptions","arrayFormat","hexTable","arrayToObject","assignSingleSource","acc","refs","compactQueue","compacted","strWithoutPlus","unescape","defaultEncoder","mapped","mergeTarget","targetItem","querystringify","querystring","query","parser","RandExp","_setDefaults","ignoreCase","multiline","tokens","defaultRange","randInt","_gen","token","ROOT","GROUP","followedBy","notFollowedBy","remember","groupNumber","_randSelect","POSITION","SET","expandedSet","_expand","REPETITION","REFERENCE","CHAR","_randBool","_toOtherCase","RANGE","drange","otherCaseCode","_range","randexp","_randexp","sugar","MAX_BYTES","MAX_UINT32","crypto","msCrypto","getRandomValues","randomBytes","generated","oldBrowser","_typeof","CopyToClipboard","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","enumerableOnly","_objectSpread","_defineProperty","getOwnPropertyDescriptors","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceKeys","sourceSymbolKeys","_defineProperties","_setPrototypeOf","p","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","_React$PureComponent","_inherits","subClass","_super","_this","_classCallCheck","instance","Constructor","_this$props","elem","Children","only","onClick","_createClass","protoProps","staticProps","_this$props2","cloneElement","PureComponent","DebounceInput","_lodash","persist","oldValue","minLength","setState","notify","forceNotify","onKeyDown","onBlur","debounceTimeout","doNotify","debouncedChangeFunc","isDebouncing","onChange","_debounceTimeout2","createNotifier","componentDidUpdate","prevProps","oldTimeout","stateValue","componentWillUnmount","maybeOnKeyDown","maybeOnBlur","forceNotifyByEnter","forceNotifyOnBlur","inputRef","maybeRef","aa","r","ba","ca","da","ea","fa","ha","ia","ja","ka","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","D","oa","pa","qa","na","ma","la","xlinkHref","ra","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ma","Ka","La","Na","Oa","Pa","Qa","_render","Ra","_context","_payload","_init","Sa","Ta","Va","_valueTracker","Ua","setValue","stopTracking","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","controlled","$a","ab","bb","eb","db","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","ib","jb","kb","mathml","lb","mb","nb","ob","MSApp","execUnsafeLocalFunction","pb","lastChild","qb","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","rb","sb","tb","setProperty","ub","menuitem","area","br","col","embed","hr","img","keygen","link","param","track","wbr","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","Rb","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","ac","cc","bc","sibling","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","nc","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","hydrate","containerInfo","xc","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","transition","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","clz32","ad","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","cancelBubble","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","locale","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","datetime","email","month","password","search","tel","week","me","ne","oe","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ge","Ie","Je","Ke","Le","Me","compareDocumentPosition","Ne","HTMLIFrameElement","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","G","$e","af","bf","cf","df","capture","passive","Nb","z","u","q","t","ef","ff","gf","hf","J","K","Q","L","je","ke","char","jf","kf","lf","mf","autoFocus","nf","__html","pf","qf","rf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","H","I","Cf","M","N","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","ReactCurrentBatchConfig","lg","mg","ng","og","pg","qg","rg","_currentValue","sg","childLanes","tg","dependencies","firstContext","lanes","ug","vg","observedBits","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","pending","effects","yg","zg","eventTime","lane","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Kg","isMounted","_reactInternals","enqueueSetState","Hg","Ig","Jg","enqueueReplaceState","enqueueForceUpdate","Lg","shouldComponentUpdate","isPureReactComponent","Mg","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Pg","Qg","_owner","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","memoizedProps","revealOrder","jh","kh","lh","mh","nh","oh","pendingProps","ph","qh","rh","sh","th","uh","_workInProgressVersionPrimary","vh","ReactCurrentDispatcher","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","baseQueue","Ih","Jh","Kh","lastRenderedReducer","action","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","U","useState","getSnapshot","subscribe","useEffect","setSnapshot","Oh","Ph","Qh","Rh","destroy","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","readContext","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","ReactCurrentOwner","fi","gi","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","qi","ri","pendingContext","Bi","Ci","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","xi","yi","zi","isBackwards","rendering","renderingStartTime","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onclick","createElementNS","Hi","Ii","W","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","Vi","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","Zi","$i","focus","aj","bj","onCommitFiberUnmount","cj","dj","ej","fj","gj","hj","_reactRootContainer","ij","jj","kj","lj","then","mj","nj","oj","pj","X","Y","qj","rj","sj","tj","uj","vj","wj","ck","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","setStart","setEnd","scrollLeft","scrollTop","onCommitFiberRoot","fk","gk","ik","isReactComponent","pendingChildren","jk","mutableSourceEagerHydrationData","lk","mk","nk","ok","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","sk","uk","kk","hk","_calculateChangedBits","unstable_observedBits","unmount","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","pk","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","__REACT_DEVTOOLS_GLOBAL_HOOK__","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","ImmutablePropTypes","Immutable","ANONYMOUS","productionTypeChecker","getProductionTypeChecker","getPropType","propValue","propType","createChainableTypeChecker","validate","checkType","chainedCheckType","createIterableSubclassTypeChecker","subclassName","validator","createImmutableTypeChecker","immutableClassName","immutableClassTypeValidator","listOf","mapOf","orderedMapOf","setOf","orderedSetOf","stackOf","iterableOf","recordOf","mapContains","orderedMapContains","orderedMap","orderedSet","ContextConsumer","ContextProvider","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","forceUpdate","__self","__source","_status","_result","IsSomeRendererActing","createContext","_currentValue2","_threadCount","Provider","Consumer","createFactory","createRef","forwardRef","isValidElement","lazy","codes","createErrorType","_Base","arg1","arg2","arg3","_inheritsLoose","expected","thing","determiner","endsWith","this_len","Duplex","Readable","Writable","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","PassThrough","Transform","_transform","chunk","ReadableState","EElistenerCount","Stream","OurUint8Array","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","onEofChunk","emitReadable","emitReadable_","chunkInvalid","_isUint8Array","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","nOrig","doRead","pipe","dest","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanup","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","pipeOnDrain","pipeOnDrainFunctionResult","pause","dests","ev","methodWrap","methodWrapReturnFunction","asyncIterator","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","_write","err2","CorkedRequest","finish","onCorkedFinish","corkReq","pendingcb","corkedRequestsFree","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","onwriteStateUpdate","writelen","onwriteError","finishMaybe","errorEmitted","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","writableStateBufferGetter","hasInstance","writeAfterEnd","validChunk","writeOrBuffer","newChunk","decodeChunk","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_toPropertyKey","_toPrimitive","hint","prim","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","promise","lastPromise","wrapForNext","_return","_this2","_Object$create","hasStrings","_getString","_getBuffer","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","req","isRequest","setHeader","abort","ERR_MISSING_ARGS","pipeline","streams","popCallback","destroys","destroyer","closed","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","_immutable2","_utilities","reducers","getDefaultState","reducerKeys","inputState","temporaryState","reducerName","nextDomainState","validateNextState","_combineReducers3","_getStateName2","reducerNames","stateName","isImmutable","unexpectedStatePropertyNames","getUnexpectedInvocationParameterMessage","getStateName","_getStateName3","_getUnexpectedInvocationParameterMessage3","_validateNextState3","nextState","required","port","protocol","sets","positions","regexpStr","lastGroup","groupStack","repeatErr","strToChars","wordBoundary","nonWordBoundary","notWords","ints","notInts","whitespace","notWhitespace","classTokens","tokenizeClass","anyChar","group","INTS","WORDS","WHITESPACE","SLSH","lbs","a16","b16","c8","dctrl","eslsh","copyProps","SafeBuffer","performance","MessageChannel","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","port2","port1","onmessage","postMessage","sortIndex","startTime","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","NonError","_prepareSuperMessage","commonProperties","isCalled","destroyCircular","to_","forceEnumerable","serializeError","POSITIVE_INFINITY","deserializeError","newError","blockSize","finalSize","_block","_finalSize","_blockSize","accum","assigned","_update","digest","rem","bits","lowBits","highBits","_hash","SHA","algorithm","Algorithm","sha","sha1","sha224","sha256","sha384","sha512","Sha","_w","rotl30","ft","_a","_b","_c","_d","_e","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","T1","T2","SHA512","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","al","bl","cl","dl","fl","gl","hl","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","callBound","$WeakMap","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","curr","$wm","$m","$o","channel","assert","listGet","listHas","listSet","statics","conf","composables","stampit","EE","_isStdio","didOnEnd","normalizeEncoding","nenc","_normalizeEncoding","retried","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8End","utf8Text","total","utf8CheckIncomplete","active","getRangeAt","blur","toS","alive","walker","node_","modifiers","keepGoing","isRoot","circular","stopHere","pre","post","updateState","isLeaf","notLeaf","notRoot","isLast","Traverse","traverse","ps","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","address","ignore","lolcation","loc","finaldestination","Url","pathname","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","instructions","up","host","hostname","username","auth","ins","inst","useSyncExternalStore","useSyncExternalStoreWithSelector","hasValue","localStorage","trace","isClosingTag","isSelfClosingTag","isOpeningTag","isTag","getType","indentor","textNodesOnSameLine","indicesToRemove","rawResult","lexer","xmlStr","splitOnTags","line","indentation","oneBefore","twoBefore","XML_CHARACTER_MAP","escapeForXML","indent_count","indent_spaces","create_indent","character","_elem","icount","indents","interrupt","isStringContent","get_attributes","_attr","_cdata","proceed","interrupted","instant","declaration","addXmlDeclaration","standalone","isNativeSmoothScrollEnabledOn","getComputedStyle","makeScroller","container","defaultDuration","edgeOffset","scrollTimeoutId","setScrollTimeoutId","stopScroll","getTopWithEdgeOffset","getTopOf","scrollToY","targetY","duration","onDone","toY","startY","getY","distance","loopScroll","getHeight","scrollHeight","scrollToElem","scrollIntoView","elemHeight","getBoundingClientRect","elemBottom","containerHeight","containerBottom","scrollToCenterOf","setup","newDefaultDuration","newEdgeOffset","intoView","center","moving","docElem","getDocY","scrollY","zenscroll","scrollingElement","scrollTo","innerHeight","clientHeight","offsetTop","createScroller","scrollContainer","noZensmooth","isHistorySupported","history","isScrollRestorationSupported","scrollRestoration","zenscrollY","targetElem","getElementById","diff","RE_noZensmooth","anchor","historyState","replaceState","pushState","_Object$assign","_bindInstanceProperty","_extends","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","definition","nmd","_objectSpread2","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","isSubscribed","unsubscribe","replaceReducer","nextReducer","_ref","outerSubscribe","observer","observeState","bindActionCreator","actionCreator","funcs","NEW_THROWN_ERR","NEW_THROWN_ERR_BATCH","NEW_SPEC_ERR","NEW_SPEC_ERR_BATCH","NEW_AUTH_ERR","CLEAR","CLEAR_BY","newThrownErr","newThrownErrBatch","newSpecErr","newSpecErrBatch","errArray","newAuthErr","clearBy","makeWindow","win","File","FormData","swagger2SchemaKeys","Im","getParameterSchema","parameter","isOAS3","schema","parameterContentMediaType","DEFAULT_RESPONSE_KEY","maybe","objectify","fromJSOrdered","js","objWithHashedKeys","createObjWithHashedKeys","fdObj","hashIdx","trackKeys","containsMultiple","normalizeArray","isFn","_memoize","objMap","objReduce","systemThunkMiddleware","getSystem","validateValueBySchema","requiredByParam","bypassRequiredCheck","nullable","requiredBySchema","maximum","minimum","maxLength","uniqueItems","maxItems","minItems","schemaRequiresValue","stringCheck","arrayCheck","arrayListCheck","passedAnyCheck","objectVal","propKey","errs","validatePattern","rxPattern","validateMinItems","validateMaxItems","needRemove","errorPerItem","validateUniqueItems","errorsPerIndex","validateMaxLength","validateMinLength","validateMaximum","validateMinimum","validateDateTime","validateGuid","validateString","validateBoolean","validateInteger","validateFile","btoa","sorters","operationsSorter","alpha","localeCompare","tagsSorter","buildFormData","formArr","shallowEqualKeys","braintreeSanitizeUrl","requiresValidationURL","createDeepLinkPath","escapeDeepLinkPath","getExtensions","defObj","getCommonExtensions","deeplyStripKey","keyToStrip","paramToIdentifier","returnAll","allowHashes","paramName","paramIn","generatedIdentifiers","paramToValue","paramValues","b64toB64UrlEncoded","isEmptyValue","idFn","createStoreWithMiddleware","rootReducer","initialState","middlwares","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","middlewares","_dispatch","middlewareAPI","middleware","Store","pluginsOptions","system","configs","components","rootInjects","statePlugins","boundSystem","toolbox","_getSystem","configureStore","buildSystem","getStore","rebuild","pluginSystem","combinePlugins","systemExtend","callAfterLoad","buildReducer","getRootInjects","getWrappedAndBoundActions","getWrappedAndBoundSelectors","getStateThunks","getFn","getConfigs","rebuildReducer","getComponents","_getConfigs","React","setConfigs","states","allReducers","reducerSystem","makeReducer","reducerObj","redFn","wrapWithTryCatch","combineReducers","upName","getSelectors","getActions","actions","actionName","getBoundActions","actionGroupName","wrapActions","newAction","getBoundSelectors","selectors","selectorGroupName","wrapSelectors","selector","selectorName","wrappedSelector","getStates","ori","creator","bindActionCreators","actionCreators","boundActionCreators","getMapStateToProps","getMapDispatchToProps","extras","pluginOptions","pluginLoadType","hasLoaded","calledSomething","afterLoad","wrapComponents","wrapperFn","namespaceObj","logErrors","_len3","_key3","SHOW_AUTH_POPUP","AUTHORIZE","LOGOUT","PRE_AUTHORIZE_OAUTH2","AUTHORIZE_OAUTH2","VALIDATE","CONFIGURE_AUTH","RESTORE_AUTHORIZATION","showDefinitions","authorize","authorizeWithPersistOption","authActions","persistAuthorizationIfNeeded","logout","logoutWithPersistOption","preAuthorizeImplicit","_ref3","errActions","isValid","swaggerUIRedirectOauth2","authId","authorizeOauth2WithPersistOption","authorizeOauth2","_ref4","authorizePassword","_ref5","passwordType","clientId","clientSecret","grant_type","scope","scopes","headers","setClientIdAndSecret","client_id","client_secret","Authorization","authorizeRequest","authorizeApplication","_ref6","authorizeAccessCodeWithFormParams","_ref7","redirectUrl","_ref8","codeVerifier","redirect_uri","code_verifier","authorizeAccessCodeWithBasicAuthentication","_ref9","_ref10","_ref11","parsedUrl","oas3Selectors","specSelectors","authSelectors","additionalQueryStringParams","finalServerUrl","serverEffectiveValue","selectedServer","parseUrl","fetchUrl","_headers","fetch","requestInterceptor","responseInterceptor","parseError","statusText","catch","errData","jsonResponse","error_description","jsonError","configureAuth","restoreAuthorization","_ref12","persistAuthorization","authorized","setItem","authPopup","securities","security","header","parsedAuth","NOT_FOUND","defaultEqualityCheck","defaultMemoize","equalityCheckOrOptions","providedOptions","equalityCheck","_providedOptions$equa","_providedOptions$maxS","resultEqualityCheck","createCacheKeyComparator","areArgumentsShallowlyEqual","createSingletonCache","put","getEntries","createLruCache","cacheIndex","matchingEntry","clearCache","createSelectorCreator","memoizeOptionsFromArgs","createSelector","_lastResult","_recomputations","directlyPassedOptions","memoizeOptions","resultFunc","_directlyPassedOption2","finalMemoizeOptions","getDependencies","dep","dependencyTypes","memoizedResultFunc","recomputationWrapper","dependenciesChecker","params","lastResult","recomputations","resetRecomputations","shownDefinitions","definitionsToAuthorize","definitions","securityDefinitions","getDefinitionsByNames","allowedScopes","definitionsForRequirements","allDefinitions","sec","securityScopes","definitionScopes","isAuthorized","execute","oriAction","operation","specSecurity","getItem","isApiKeyAuth","isInCookie","cookie","authorizedName","cookieName","LockAuthIcon","mapStateToProps","ownProps","getComponent","LockIcon","UnlockAuthIcon","UnlockIcon","initOAuth","preauthorizeApiKey","preauthorizeBasic","LockAuthOperationIcon","UnlockAuthOperationIcon","wrappedAuthorizeAction","wrappedLogoutAction","spec","specJson","definitionBase","isNothing","subject","repeat_1","cycle","isNegativeZero_1","isNegativeZero","NEGATIVE_INFINITY","common","sequence","formatError","exception","where","reason","column","snippet","YAMLException$1","getLine","lineStart","lineEnd","maxLineLength","maxHalfLength","padStart","makeSnippet","linesBefore","linesAfter","lineStarts","lineEnds","foundLineNo","lineNoLength","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","Type$1","represent","representName","multi","styleAliases","compileStyleAliases","currentType","newIndex","previousType","previousIndex","Schema$1","implicit","explicit","type$1","loadKind","compiledImplicit","compiledExplicit","compiledTypeMap","compileMap","scalar","collectType","failsafe","_null","resolveYamlNull","constructYamlNull","canonical","lowercase","uppercase","camelcase","resolveYamlBoolean","constructYamlBoolean","isOctCode","isDecCode","resolveYamlInteger","hasDigits","constructYamlInteger","sign","octal","decimal","hexadecimal","YAML_FLOAT_PATTERN","SCIENTIFIC_WITHOUT_DOT","resolveYamlFloat","constructYamlFloat","isFloat","representYamlFloat","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","timestamp","resolveYamlTimestamp","constructYamlTimestamp","year","day","hour","minute","fraction","delta","UTC","setTime","representYamlTimestamp","resolveYamlMerge","BASE64_MAP","resolveYamlBinary","bitlen","constructYamlBinary","tailbits","representYamlBinary","_hasOwnProperty$3","_toString$2","resolveYamlOmap","pairKey","pairHasKey","constructYamlOmap","_toString$1","resolveYamlPairs","constructYamlPairs","_hasOwnProperty$2","resolveYamlSet","constructYamlSet","_hasOwnProperty$1","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","simpleEscapeSequence","charFromCodepoint","simpleEscapeCheck","simpleEscapeMap","State$1","onWarning","legacy","implicitTypes","typeMap","lineIndent","firstTabInLine","documents","generateError","throwError","throwWarning","directiveHandlers","YAML","handleYamlDirective","major","minor","checkLineBreaks","handleTagDirective","handle","tagMap","captureSegment","checkJson","_position","_length","_character","mergeMappings","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readBlockSequence","nodeIndent","_line","_tag","_anchor","detected","anchorMap","composeNode","readTagProperty","tagHandle","isVerbatim","isNamed","readAnchorProperty","parentIndent","nodeContext","allowToSeek","allowCompact","allowBlockStyles","allowBlockScalars","allowBlockCollections","typeIndex","typeQuantity","typeList","flowIndent","blockIndent","indentStatus","atNewLine","hasContent","readBlockMapping","following","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readFlowCollection","_lineStart","_pos","terminator","isPair","isExplicitPair","isMapping","readNext","readBlockScalar","captureStart","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readSingleQuotedScalar","captureEnd","readDoubleQuotedScalar","hexLength","hexResult","readAlias","readPlainScalar","withinFlowCollection","hasPendingContent","_lineIndent","_kind","readDocument","directiveName","directiveArgs","documentStart","hasDirectives","loadDocuments","nullpos","loader","loadAll","loadAll$1","load$1","_hasOwnProperty","CHAR_BOM","CHAR_TAB","CHAR_LINE_FEED","CHAR_CARRIAGE_RETURN","CHAR_SPACE","CHAR_EXCLAMATION","CHAR_DOUBLE_QUOTE","CHAR_SHARP","CHAR_PERCENT","CHAR_AMPERSAND","CHAR_SINGLE_QUOTE","CHAR_ASTERISK","CHAR_COMMA","CHAR_MINUS","CHAR_COLON","CHAR_EQUALS","CHAR_GREATER_THAN","CHAR_QUESTION","CHAR_COMMERCIAL_AT","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_GRAVE_ACCENT","CHAR_LEFT_CURLY_BRACKET","CHAR_VERTICAL_LINE","CHAR_RIGHT_CURLY_BRACKET","ESCAPE_SEQUENCES","DEPRECATED_BOOLEANS_SYNTAX","DEPRECATED_BASE60_SYNTAX","encodeHex","QUOTING_TYPE_SINGLE","QUOTING_TYPE_DOUBLE","State","noArrayIndent","skipInvalid","flowLevel","styleMap","compileStyleMap","sortKeys","lineWidth","noRefs","noCompatMode","condenseFlow","quotingType","forceQuotes","replacer","explicitTypes","duplicates","usedDuplicates","indentString","spaces","ind","generateNextLine","isWhitespace","isPrintable","isNsCharOrWhitespace","isPlainSafe","inblock","cIsNsCharOrWhitespace","cIsNsChar","codePointAt","needIndentIndicator","STYLE_PLAIN","STYLE_SINGLE","STYLE_LITERAL","STYLE_FOLDED","STYLE_DOUBLE","chooseScalarStyle","singleLineOnly","indentPerLevel","testAmbiguousType","prevChar","hasLineBreak","hasFoldableLine","shouldTrackWidth","previousLineBreak","plain","isPlainSafeFirst","isPlainSafeLast","writeScalar","iskey","dump","testAmbiguity","testImplicitResolving","blockHeader","dropEndingNewline","foldString","moreIndented","lineRe","nextLF","foldLine","prevMoreIndented","escapeString","escapeSeq","indentIndicator","breakRe","writeBlockSequence","writeNode","detectType","isblockseq","tagStr","duplicateIndex","duplicate","objectOrArray","writeBlockMapping","objectValue","explicitPair","pairBuffer","objectKeyList","writeFlowMapping","writeFlowSequence","getDuplicateReferences","duplicatesIndexes","inspectNode","dump_1","dump$1","renamed","Type","Schema","FAILSAFE_SCHEMA","JSON_SCHEMA","CORE_SCHEMA","DEFAULT_SCHEMA","YAMLException","float","null","safeLoad","safeLoadAll","safeDump","parseYamlConfig","UPDATE_CONFIGS","TOGGLE_CONFIGS","configName","configValue","toggle","downloadConfig","getConfigByUrl","specActions","status","updateLoadingStatus","updateUrl","oriVal","getLocalConfig","configsPlugin","setHash","SCROLL_TO","CLEAR_SCROLL_TO","getScrollParent","includeHidden","LAST_RESORT","excludeStaticParent","overflowRegex","parentElement","overflow","overflowY","overflowX","layout","scrollToElement","clearScrollTo","readyToScroll","isShownKey","scrollToKey","layoutSelectors","getScrollToKey","layoutActions","parseDeepLinkHash","rawHash","deepLinking","hashArray","isShownKeyFromUrlHashArray","tagId","maybeOperationId","tagIsShownKey","show","urlHashArray","operationId","urlHashArrayFromIsShownKey","tokenArray","shown","assetName","Ori","OperationWrapper","onLoad","OperationTagWrapper","OperationTag","seekStr","makeNewMessage","jsSpec","errorTransformers","NotOfType","ParameterOneOf","transformErrors","inputs","transformedErrors","transformer","DEFAULT_ERROR_STRUCTURE","allErrors","lastError","newErrors","errValue","filterValue","taggedOps","phrase","tagObj","opsFilter","ArrowUp","xmlns","viewBox","focusable","ArrowDown","Arrow","Close","Copy","fillRule","Lock","Unlock","IconsPlugin","ArrowUpIcon","ArrowDownIcon","ArrowIcon","CloseIcon","CopyIcon","UPDATE_LAYOUT","UPDATE_FILTER","UPDATE_MODE","SHOW","updateLayout","updateFilter","changeMode","isShown","thingToShow","currentFilter","def","whatMode","showSummary","taggedOperations","oriSelector","maxDisplayedTags","levels","getLevel","logLevel","logLevelInt","info","engaged","updateSpec","updateJsonSpec","onComplete","extractKey","escapeShell","escapeCMD","escapePowershell","curlify","request","newLine","isMultipartFormDataRequest","curlified","addWords","addWordsWithoutLeadingSpace","addNewLine","addIndent","extractedKey","reqBody","getStringBodyOfMap","curlifyToJoin","requestSnippetGenerator_curl_powershell","requestSnippetGenerator_curl_bash","requestSnippetGenerator_curl_cmd","getGenerators","languageKeys","generators","getSnippetGenerators","genFn","getGenFn","getActiveLanguage","getDefaultExpanded","_arrayLikeToArray","arr2","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","minLen","_nonIterableSpread","classNameCombinations","createStyleObject","elementStyle","stylesheet","getClassNameCombinations","powerSetPermutations","styleObject","createClassNameString","_ref$style","useInlineStyles","TagName","childrenCreator","createChildren","childrenCount","allStylesheetSelectors","startingClassName","astGenerator","newLineRegex","AllLineNumbers","codeString","codeStyle","_ref2$containerStyle","containerStyle","paddingRight","_ref2$numberStyle","numberStyle","startingLineNumber","getAllLineNumbers","lines","getInlineLineNumber","lineNumber","inlineLineNumberStyle","assembleLineNumberStyles","lineNumberStyle","largestLineNumber","defaultLineNumberStyle","minWidth","textAlign","customLineNumberStyle","createLineElement","showInlineLineNumbers","_ref3$lineProps","lineProps","_ref3$className","showLineNumbers","wrapLongLines","flattenCodeTree","tree","newTree","processLines","codeTree","wrapLines","lastLineBreakIndex","createLine","createWrappedLine","createUnwrappedLine","_loop","newLines","getNewLines","splitValue","stringChild","lastLineInPreviousSpan","newElem","_line2","_line3","defaultRenderer","rows","isHighlightJs","SyntaxHighlighter","defaultAstGenerator","_ref7$style","_ref7$customStyle","customStyle","_ref7$codeTagProps","codeTagProps","_ref7$useInlineStyles","_ref7$showLineNumbers","_ref7$showInlineLineN","_ref7$startingLineNum","lineNumberContainerStyle","_ref7$lineNumberStyle","_ref7$wrapLongLines","_ref7$lineProps","renderer","_ref7$PreTag","PreTag","_ref7$CodeTag","CodeTag","_ref7$code","allLineNumbers","defaultPreStyle","backgroundColor","generatorClassName","preProps","defaultCodeValue","getCodeTree","hasLanguage","checkForListedLanguage","styles","agate","arta","monokai","nord","obsidian","idea","availableStyles","getStyle","cursor","paddingBottom","paddingTop","border","borderRadius","boxShadow","borderBottom","activeStyle","marginTop","marginRight","marginLeft","requestSnippetsSelectors","canSyntaxHighlight","rootRef","activeLanguage","setActiveLanguage","isExpanded","setIsExpanded","handlePreventYScrollingBeyondElement","snippetGenerators","activeGenerator","handleSetIsExpanded","handleGetBtnStyle","contentHeight","offsetHeight","visibleHeight","SnippetComponent","readOnly","justifyContent","alignItems","marginBottom","background","paddingLeft","handleGenChange","RequestSnippets","requestSnippets","shallowArrayEquals","foundKey","OriginalCache","primitives","generateStringFromRegex","string_email","string_date-time","string_date","string_uuid","string_hostname","string_ipv4","string_ipv6","number_float","sanitizeRef","objectContracts","arrayContracts","numberContracts","stringContracts","liftSampleHelper","oldSchema","setIfNotDefinedInTarget","includeReadOnly","writeOnly","includeWriteOnly","sampleFromSchemaGeneric","exampleOverride","respectXML","usePlainValue","example","hasOneOf","hasAnyOf","anyOf","schemaToAdd","additionalProperties","schemaHasAny","enum","handleMinMaxItems","sampleArray","addPropertyToResult","propertyAddedCounter","hasExceededMaxProperties","maxProperties","canAddProperty","isOptionalProperty","requiredPropertiesToAdd","addedCount","overrideE","enumAttrVal","attrExample","attrDefault","discriminator","$$ref","itemSchema","itemSamples","additionalProp","additionalProp1","additionalProps","additionalPropSample","toGenerateCount","minProperties","exclusiveMinimum","exclusiveMaximum","inferSchema","createXMLExample","XML","sampleFromSchema","memoizedCreateXMLExample","memoizeN","memoizedSampleFromSchema","shouldStringifyTypesConfig","when","shouldStringifyTypes","defaultStringifyTypes","contentType","resType","typesToStringify","nextConfig","jsonExample","getJsonSampleSchema","yamlString","getXmlSampleSchema","getYamlSampleSchema","makeGetJsonSampleSchema","makeGetYamlSampleSchema","makeGetXmlSampleSchema","getSampleSchema","makeGetSampleSchema","jsonSchema5","OPERATION_METHODS","specStr","specSource","specJS","specResolved","specResolvedSubtree","mergerFn","oldVal","newVal","specJsonWithResolvedSubtrees","returnSelfOrNewMap","externalDocs","semver","validOperationMethods","operations","pathName","consumes","produces","findDefinition","resolvedRes","unresolvedRes","basePath","schemes","operationsWithRootInherited","ops","op","tags","tagDetails","operationsWithTags","taggedMap","ar","tagA","tagB","sortFn","responses","requests","mutatedRequests","responseFor","requestFor","mutatedRequestFor","allowTryItOutFor","parameterWithMetaByIdentity","pathMethod","opParams","metaParams","currentParam","inNameKeyedMeta","hashKeyedMeta","parameterInclusionSettingFor","paramKey","parameterWithMeta","operationWithMeta","mergedParams","getParameter","inType","hasHost","parameterValues","isXml","parametersIncludeIn","parameters","inValue","parametersIncludeType","typeValue","contentTypeValues","producesValue","currentProducesFor","requestContentType","responseContentType","currentProducesValue","firstProducesArrayItem","producesOptionsFor","operationProduces","pathItemProduces","globalProduces","consumesOptionsFor","operationConsumes","pathItemConsumes","globalConsumes","operationScheme","matchResult","canExecuteScheme","validationErrors","validateBeforeExecute","getOAS3RequiredRequestBodyContentType","requiredObj","requestBody","isMediaTypeSchemaPropertiesEqual","currentMediaType","targetMediaType","requestBodyContent","currentMediaTypeSchemaProperties","targetMediaTypeSchemaProperties","UPDATE_SPEC","UPDATE_URL","UPDATE_JSON","UPDATE_PARAM","UPDATE_EMPTY_PARAM_INCLUSION","VALIDATE_PARAMS","SET_RESPONSE","SET_REQUEST","SET_MUTATED_REQUEST","LOG_REQUEST","CLEAR_RESPONSE","CLEAR_REQUEST","CLEAR_VALIDATE_PARAMS","UPDATE_OPERATION_META_VALUE","UPDATE_RESOLVED","UPDATE_RESOLVED_SUBTREE","SET_SCHEME","cleanSpec","updateResolved","parseToJson","hasWarnedAboutResolveSpecDeprecation","resolveSpec","AST","modelPropertyMacro","parameterMacro","getLineNumberForPath","baseDoc","baseURI","preparedErrors","fullPath","requestBatch","debResolveSubtrees","systemPartitionedBatches","async","systemRequestBatch","resolveSubtree","errSelectors","batchResult","resultMap","specWithCurrentSubtrees","oidcScheme","openIdConnectUrl","openIdConnectData","assocPath","ImmutableMap","updateResolvedSubtree","requestResolvedSubtree","batchedPath","batchedSystem","changeParam","changeParamByIdentity","invalidateResolvedSubtreeCache","validateParams","updateEmptyParamInclusion","includeEmptyValue","clearValidateParams","changeConsumesValue","changeProducesValue","setResponse","setRequest","setMutatedRequest","logRequest","executeRequest","paramValue","contextUrl","opId","server","namespaceVariables","serverVariables","globalVariables","requestBodyValue","requestBodyInclusionSetting","parsedRequest","buildRequest","mutatedRequest","parsedMutatedRequest","clearResponse","clearRequest","setScheme","valueKey","paramMeta","isEmptyValueIncluded","paramRequired","paramDetails","validateParam","statusCode","newState","operationPath","metaPath","pathItems","$ref","SpecPlugin","__extends","extendStatics","__","_objectKeys","keys_1","_deepClone","escapePathComponent","unescapePathComponent","hasUndefined","i_1","objKeysLength","patchErrorMessageFormatter","messageParts","PatchError","_newTarget","JsonPatchError","deepClone","objOps","newDocument","move","getValueByPointer","originalValue","applyOperation","valueToCopy","_areEquals","_get","arrOps","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","existingPathFragment","validateFunction","applyPatch","patch","length_1","applyReducer","operationResult","pathLen","existingPathLen","externalValidator","arrA","arrB","beforeDict","Mirror","observers","ObserverInfo","unobserve","observe","mirror","getMirror","observerInfo","getObserverFromMirror","dirtyCheck","generate","fastCheck","patches","removeObserverFromMirror","invertible","_generate","newKeys","oldKeys","deleted","tree1","tree2","normalizeJSONPath","getInByJsonPath","currentValue","allowMetaPatches","isAdditiveMutation","parentPathMatch","fullyNormalizeArray","cleanArray","isPromise","forEachNew","mutations","forEachNewPatch","forEachNewPrimitive","forEachPrimitive","isJsonPatch","isContextPatch","isPatch","isMutation","isGenerator","mutation","newResults","arrayResults","moreResults","jsonPath","_isPlaceholder","f1","f2","_isArray","methodNames","transducerCreator","transducer","XAll","_xall","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","combined","argsIdx","combinedIdx","curryN","_arrayFromIterator","_includesWith","pred","_objectIs","_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","nIdx","ks","checkArgsLength","_uniqContentEquals","aIterator","bIterator","stackA","stackB","_equals","aItem","typeA","_functionName","sticky","unicode","keysA","extendedStackA","extendedStackB","_includes","inf","functor","_quote","pad","_toISOString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","_complement","_arrayReduce","XFilter","_xfilter","filterable","recur","mapPairs","repr","safeMax","maxByValue","maxByType","stringA","maxByStringValue","XMap","_xmap","_isInteger","nth","pluck","f3","symIterator","_createReduce","methodReduce","iterableReduce","_reduce","thisObj","_xIterableReduce","_xMethodReduce","XWrap","allPass","preds","always","anyPass","_iterableReduce","_methodReduce","ap","applyF","applyX","set1","set2","len1","vals","isNil","nextObj","and","liftN","lifted","lift","both","_both","_pipe","methodname","toIndex","converge","fns","_cloneRegExp","dotAll","_clone","deep","_ObjectMap","_isPrimitive","copiedValue","cachedCopy","hashedKey","bucket","XReduceBy","valueFn","valueAcc","keyFn","_xreduceBy","reduceBy","elt","defaultTo","hasOrAdd","shouldAdd","prevSize","_items","_nativeSet","bIdx","_Set","difference","firstLen","secondLen","toFilterOut","XTake","_xtake","dropLastWhile","XDropLastWhile","retained","retain","_xdropLastWhile","XDropWhile","_xdropWhile","dropWhile","or","_either","_isTypedArray","_path","identical","unaryIdentical","ifElse","onTrue","onFalse","_ifElse","invoker","toFunctorFn","pathsArray","pathAr","mapObjIndexed","mergeWithKey","mergeDeepWithKey","lObj","rObj","lVal","rVal","mergeDeepRight","none","Identity","over","pathOr","pathSatisfies","propPath","pick","propEq","propOr","propSatisfies","_isNumber","_isRegExp","ws","XUniqWith","_xuniqWith","whenTrueFn","trimCharsEnd","chars","checkValue","valueName","replaceAll","replaceValue","checkArguments","checkSearchValue","replaceAllPonyfill","replaceAllInvoker","isWindows","getProtocol","isFileSystemPath","isHttpUrl","toFileSystemPath","urlDecodePatterns","keepFileProtocol","isWindowsPredicate","isFileUrl","getHash","hashIndex","stripHash","hashStrippedUri","resolvedUrl","urlEncodePatterns","fromFileSystemPath","unsanitize","Headers","Request","ACCEPT_HEADER_VALUE_FOR_DOCUMENTS","DEFAULT_BASE_URL","freelyNamedKeyParents","nonFreelyNamedKeyGrandparents","freelyNamedPaths","freelyNamedAncestors","isFreelyNamed","parentPath","parentKey","grandparentKey","parentStr","absolutifyPointer","baseUrl","urlPart","fragmentPart","safeBaseUrl","safeUrlPart","newRefUrlPart","absoluteBaseUrl","rawRefUrlPart","ABSOLUTE_URL_REGEXP","JSONRefError","extra","oriError","originalError","docCache","specmapRefs","skipResolutionTestFns","specmap","specmapInstance","getInstance","shouldSkipResolution","getContext","splitString","refPath","promOrVal","absoluteify","wrapError","pointerAlreadyInPath","parentPointer","arrayToJsonPointer","escapeJsonPointerToken","fullyQualifiedPointer","safeParentPointer","rootDoc","contextTree","pointerIsAParent","currPath","hasIndirectCycle","useCircularStructures","absolutifiedRef","jsonPointerToArray","extractFromDoc","__value","patchValueAlreadyInPath","ancestors","pointToAncestor","mod","getDoc","fetchJSON","docPath","Accept","loadSpec","extract","unescapeJsonPointerToken","_doc","URLSearchParams","pointerBoundaryChar","lastParentChar","alreadyAddError","originalDefinitionObj","allOf","toMerge","absoluteRefPatches","generateAbsoluteRefPatches","getBaseUrlForNodePath","targetKeys","nodePath","absolutifiedRefValue","opPath","ContextTree","createNode","getParent","branch","protoValue","ensureExists","SpecMap","getPluginName","pluginName","getPatchesOfType","debugLevel","pluginHistory","promisedPatches","showDebug","allPatches","pluginProp","libMethods","_getContext","hasRun","_hasRun","wrappedPlugins","wrapPlugin","updatePatches","verbose","pathDiscriminator","ctx","createKeyBasedPlugin","pluginObj","isSubPath","tested","generator","refCache","parentIndex","indexOfFirstProperties","isRootProperties","traversed","updatedPath","objRef","isWithinPathDiscriminator","nextPlugin","getMutationsForPlugin","nextPromisedPatch","race","getPluginHistory","getPluginRunCount","getPluginHistoryTip","getPluginMutationIndex","mutationIndex","updatePluginHistory","promisedPatchThen","setContext","updateMutations","removePromisedPatch","promisedPatch","getMutations","getCurrentMutations","getCurrentPlugin","tip","currentPlugin","getLib","nextPromise","pluginCount","promises","executePlugin","lastMutationIndex","yieldedPatches","v2OperationIdCompatibilityMode","idFromPathMethod","parsedSpec","$$normalized","pathParameters","oid","opList","__originalOperationId","inheritsList","toBeInherit","inheritName","opParam","makeFetchJSON","credentials","withCredentials","isRfc3986Reserved","isRrc3986Unreserved","encodeDisallowedCharacters","TextEncoder","encodedByte","stylize","encodeArray","explode","valueEncoder","encodeObject","valueKeys","encodePrimitive","serializeRes","mergeInQueryOrForm","headerName","userFetch","resError","responseError","shouldDownloadAsText","oriRes","serializeHeaders","useText","parseBody","serializeHeaderValue","isFile","navigatorObj","product","isArrayOfFile","STYLE_SEPARATORS","spaceDelimited","pipeDelimited","SEPARATORS","csv","ssv","tsv","FileWithData","formatKeyValue","skipEncoding","collectionFormat","allowEmptyValue","serializationOption","encodeFn","encodedKey","formatKeyValueBySerializationOption","allowReserved","encodedJson","encodedData","encodeKeyFn","encodeFormOrQuery","encodedQuery","parameterName","hasFile","formdata","reqForm","formData","oriSearch","newStr","oriQuery","finalStr","strs","joinSearch","resolveGenericStrategy","skipNormalization","retrievalURI","httpClient","doResolve","_spec","plugs","mapSpec","genericStrategy","normalized","isOpenAPI30","openapi","isOpenAPI31","isOpenAPI3","openApi2Strategy","swagger","isOpenAPI2","resolveOpenAPI2Strategy","openApi30Strategy","resolveOpenAPI30Strategy","Annotation","Comment","ParseResult","api","annotations","warnings","replaceResult","searchIndex","SourceMap","positionStart","positionEnd","row","invokeArgs","mpath","boundMethod","hasMethod","hasBasicElementProps","primitiveEq","_obj$primitive","hasClass","cls","_obj$classes","_obj$classes$includes","isElementType","predicateCreator","isStringElement","isNumberElement","isNullElement","isBooleanElement","isObjectElement","isArrayElement","isMemberElement","isLinkElement","isRefElement","isAnnotationElement","isCommentElement","isParseResultElement","isSourceMapElement","isPrimitiveElement","hasElementSourceMap","_element$meta","_element$meta$get","includesSymbols","elementSymbols","includesClasses","isOfTypeObject","isObjectConstructor","hasObjectConstructor","createNamespace","namespacePlugin","namespaceInstance","predicates","ApiDOMAggregateError","ApiDOMError","getVisitFn","visitor","isLeaving","typeVisitor","typeSpecificVisitor","leave","enter","specificVisitor","specificTypeVisitor","BREAK","getNodeType","isNode","visitors","visitFnGetter","nodeTypeGetter","visit","keyMap","breakSymbol","deleteNodeSymbol","skipVisitingNodeSymbol","nodePredicate","detectCycles","visitorKeys","inArray","edits","isEdited","editOffset","editKey","editValue","visitFn","stateKey","keyMapDefault","ParseResultElement","PredicateVisitor","returnOnTrue","returnOnFalse","dispatchPlugins","toolboxCreator","visitorOptions","pluginsSpecs","pluginsVisitor","newElement","createRefractor","computeEdges","edges","childElement","TranscluderConstructor","transclude","_edges","objectElement","transcludeChildOfObjectElement","arrayElement","transcludeChildOfArrayElement","memberElement","transcludeChildOfMemberElement","EphemeralObject","EphemeralArray","toReference","fromEntries","Visitor","_Visitor","references","_BooleanElement","_NumberElement","_StringElement","_NullElement","ephemeral","ApiDOMStructuredError","structuredOptions","JsonPointerError","CompilationJsonPointerError","isFinitePonyfill","isIntegerPonyfill","trimCharsStart","encodedURIComponent","InvalidJsonPointerError","uriToPointer","EvaluationJsonPointerError","failedToken","failedTokenPosition","elementSourceMap","tokenPosition","Callback","Components","schemas","examples","requestBodies","securitySchemes","callbacks","Contact","Discriminator","Encoding","allowedReserved","Example","summary","externalValue","ExternalDocumentation","Header","contentProp","Info","termsOfService","tos","contact","contactElement","licenseElement","License","Link","operationRef","_this$operationRef","_this$operationId","MediaType","OAuthFlow","authorizationUrl","tokenUrl","refreshUrl","OAuthFlows","clientCredentials","authorizationCode","Openapi","OpenApi3_0","servers","Operation","Parameter","PathItem","GET","PUT","POST","OPTIONS","HEAD","PATCH","TRACE","Paths","Reference","RequestBody","Responses","JSONSchema","idProp","$schema","multipleOf","additionalItems","patternProperties","enumValue","media","JSONReference","Media","binaryEncoding","LinkDescription","rel","targetSchema","mediaType","encType","dereference","rootObject","copyMetaAndAttributes","JSONSchemaDraft4Element","JSONReferenceElement","MediaElement","LinkDescriptionElement","specObj","passingOptionsNames","retrievePassingOptions","retrieveFixedFields","specPath","retrieveVisitor","retrieveVisitorInstance","passingOpts","toRefractedElement","visitorPrototype","fallbackVisitorPrototype","FixedFieldsVisitor","ignoredFields","fields","fixedFieldElement","newMemberElement","isJSONReferenceLikeElement","PatternedFieldsJsonObjectVisitor","fieldPatternPredicate","patternedFieldElement","stringElement","linkDescriptionElement","getMaxArity","dispatchImpl","functions","AlternatingVisitor","alternator","JSONSchemaOrJSONReferenceVisitor","$visitor","fixedFields","isJSONSchemaElement","isJSONReferenceElement","isMediaElement","isLinkDescriptionElement","jsonSchemaDraft4","specificationObj","resolvedSpec","rootVisitor","SecurityRequirement","SecurityScheme","inVal","bearerFormat","flows","Server","variables","ServerVariable","Tag","Xml","CallbackElement","ComponentsElement","ContactElement","DiscriminatorElement","ExternalDocumentationElement","HeaderElement","InfoElement","LicenseElement","MediaTypeElement","OAuthFlowElement","OAuthFlowsElement","OpenApi3_0Element","OperationElement","ParameterElement","PathItemElement","PathsElement","ReferenceElement","RequestBodyElement","ResponseElement","ResponsesElement","SchemaElement","SecurityRequirementElement","SecuritySchemeElement","ServerElement","ServerVariableElement","TagElement","openApiGenericElement","openApiSemanticElement","isOpenApi3_0LikeElement","isParameterLikeElement","isReferenceLikeElement","isRequestBodyLikeElement","isResponseLikeElement","isServerLikeElement","isTagLikeElement","isOpenApiExtension","canSupportSpecificationExtensions","specificationExtensionPredicate","extensionElement","unrefractedElement","openapiElement","LinkParameters","static","primaryClass","Servers","ServerVariables","isCallbackElement","isComponentsElement","isContactElement","isExampleElement","isExternalDocumentationElement","isHeaderElement","isInfoElement","isLicenseElement","isLinkElementExternal","isOpenapiElement","isOpenApi3_0Element","isOperationElement","isParameterElement","isPathItemElement","isPathItemElementExternal","isPathsElement","isReferenceElement","isReferenceElementExternal","isRequestBodyElement","isResponseElement","isResponsesElement","isSchemaElement","isBooleanJsonSchemaElement","isSecurityRequirementElement","isServerElement","isServerVariableElement","isMediaTypeElement","referenceElement","MediaTypeExamples","MediaTypeEncoding","Security","mediaTypeElement","HeaderExamples","HeaderContent","JSONSchemaAllOfVisitor","JSONSchemaAnyOfVisitor","JSONSchemaOneOfVisitor","JSONSchemaDefinitionsVisitor","JSONSchemaDependenciesVisitor","JSONSchemaItemsVisitor","JSONSchemaPropertiesVisitor","JSONSchemaPatternPropertiesVisitor","JSONSchemaTypeVisitor","fieldName","DiscriminatorMapping","ParameterExamples","ParameterContent","ComponentsSchemas","ComponentsResponses","ResponsesVisitor","ComponentsParameters","ComponentsExamples","ComponentsRequestBodies","ComponentsHeaders","HeadersVisitor","ComponentsSecuritySchemes","ComponentsLinks","ComponentsCallbacks","headerElement","EncodingHeaders","pathItemElement","RequestBodyContent","ResponseHeaders","ResponseContent","ResponseLinks","specPathFixedFields","specPathPatternedFields","httpStatusCode","OperationTags","OperationParameters","OperationCallbacks","OperationSecurity","OperationServers","operationElement","httpMethodElementCI","httpMethodElementCS","PathItemServers","PathItemParameters","OAuthFlowScopes","Tags","ReferenceSpecification","SchemaSpecification","OpenApi","in","extension","openApi3_0","JsonSchemaDialect","identifier","OpenApi3_1","jsonSchemaDialect","webhooks","$vocabulary","$id","$anchor","$dynamicAnchor","$dynamicRef","$defs","$comment","ifSchema","thenSchema","elseSchema","dependentSchemas","prefixItems","containsProp","propertyNames","unevaluatedItems","unevaluatedProperties","enumVal","constVal","maxContains","minContains","dependentRequired","contentEncoding","contentMediaType","contentSchema","BaseInfoVisitor","BaseContactVisitor","BaseLicenseVisitor","BaseLinkVisitor","jsonSchemaDialectElement","BaseServerVisitor","BaseServerVariableVisitor","BaseMediaTypeVisitor","BaseSecurityRequirementVisitor","BaseComponentsVisitor","BaseTagVisitor","BaseReferenceVisitor","BaseParameterVisitor","BaseHeaderVisitor","isJsonSchemaDialectElement","isOpenApi3_1Element","getJsonSchemaDialect","handle$schema","_this$parent$meta$get","_this$parent$$schema","inherited$schema","handle$id","_objectElement$get","inherited$id","_ObjectElement","booleanElement","schemaElement","BaseDiscriminatorVisitor","BaseXMLVisitor","ComponentsPathItems","BaseExampleVisitor","BaseExternalDocumentationVisitor","BaseEncodingVisitor","BasePathsVisitor","BaseRequestBodyVisitor","BaseCallbackVisitor","BaseResponseVisitor","BaseResponsesVisitor","BaseOperationVisitor","BasePathItemVisitor","BaseSecuritySchemeVisitor","BaseOAuthFlowsVisitor","BaseOAuthFlowVisitor","Webhooks","if","else","const","OpenApi3_1Element","openApi3_1","UnsupportedOperationError","NotImplementedError","MediaTypes","unknownMediaType","filterByFormat","findBy","latest","OpenAPIMediaTypes","effectiveFormat","refSet","ReferenceSet","anotherRefSet","clean","parsers","parserOpts","resolvers","resolverOpts","strategies","external","baseURILens","baseURIDefault","parseResult","lastDotPosition","TextDecoder","PluginError","file","pluginResults","ParserError","UnmatchedDereferenceStrategyError","DereferenceError","dereferenceApiDOM","surrogateWrapping","elementClone","dereferenceStrategies","mergedOptions","withoutDefaults","Parser","allowEmpty","sourceMap","fileExtensions","mediaTypes","canParse","binaryString","base64String","parseResultElement","base64StringElement","canResolve","ResolverError","MaximumResolverDepthError","MaximumDereferenceDepthError","UnmatchedResolverError","optsBoundResolvers","clonedResolver","optsBoundParsers","clonedParser","parseFile","EvaluationJsonSchemaUriError","InvalidSelectorError","InvalidJsonSchema$anchorError","EvaluationJsonSchema$anchorError","isAnchor","uriToAnchor","_e$$anchor","resolveSchema$refField","$refBaseURI","refractToSchemaElement","refracted","maybeRefractToSchemaElement","uriStrippedHash","isSchemaElementWith$id","schemaObjectElements","$idBaseURI","resolveSchema$idField","fragmentEvaluate","visitAsync","OpenApi3_1ResolveVisitor","indirections","crawledElements","crawlingMap","visited","toBaseURI","_referenceElement$$re","_pathItemElement$$ref","linkElement","_linkElement$operatio","ExampleElement","exampleElement","_exampleElement$exter","$refBaseURIStrippedHash","isUnknownURI","canRead","isURL","isExternal","crawlReferenceElement","_referenceElement$$re2","jsonPointer","referencedElementType","crawl","crawlPathItemElement","_pathItemElement$$ref2","referencedElement","crawlSchemaElement","referencingElement","OpenApi3_1ResolveStrategy","_file$parseResult","removeSpaces","normalizeOperationId","withoutSpaces","createNormalizedOperationId","operationIdNormalizer","normalizedOperations","normalizedOperationGroups","normalizedOperationId","operationElements","indexedNormalizedOperationId","_operationElement$ope","linkOperationId","normalizedOperationElement","originalOperationId","parameterEquals","parameter1","parameter2","pathItemParameters","parentPathItemParameters","operationParameters","mergedParameters","topLevelSecurity","_topLevelSecurity","openAPIServers","pathItemServers","_openapiElement$serve","parentPathItemServers","parameterElement","_parameterElement$sch","_parameterElement$sch2","_example$value","_headerElement$schema","_headerElement$schema2","pojoAdapter","normalizeFn","openApiElement","Resolver","redirects","getHttpClient","AbortController","AbortSignal","swaggerHTTPClient","swaggerHTTPClientConfig","client","controller","signal","timeoutID","redirect","follow","resource","hasSupportedFileExtension","hasSupportedMediaType","pojo","detectionRegExp","refractorOpts","canDereference","OpenApi3_1DereferenceVisitor","toAncestorLineage","directAncestors","_referencingElement$$","_referencingElement$$2","_referencingElement$$3","_referencingElement$d","_referencingElement$s","ancestorsLineage","ancs","hasDescription","hasSummary","_referencingElement$$4","_referencingElement$$5","_referencingElement$$6","mergedResult","keyElement","_linkElement$operatio2","_linkElement$operatio3","_linkElement$operatio4","_linkElement$operatio5","valueElement","_referencingElement$$8","_referencingElement$$7","referencedElementClone","OpenApi3_1DereferenceStrategy","dereferencedElement","elementPath","elementPathSanitized","trimParseResult","SchemaRefError","OpenApi3_1SwaggerClientDereferenceVisitor","_this$basePath","_referenceElement$des","_referenceElement$sum","cycledReferenceElement","objectFragment","_this$basePath2","_this$options$derefer","_this$options$derefer2","rootCause","wrappedError","dereferenceOpts","_this$basePath3","cycledPathItemElement","mergedPathItemElement","_this$basePath4","_this$options$derefer3","_this$options$derefer4","_this$basePath5","cycledSchemaElement","mergeVisitor","jsonSchemaBooleanElement","mergedSchemaElement","memberValue","memberKey","_this$basePath6","_this$options$derefer5","_this$options$derefer6","_this$basePath7","_this$options$derefer7","_this$options$derefer8","macroOperation","pojoOperation","pojoParameter","macroValue","macroError","ModelPropertyMacroVisitor","emptyElement","cloneMemberElement","isMergeableElement","mergeArrayElement","targetElement","sourceElement","mergeObjectElement","clonedMember","targetValue","_mergedOptions$isMerg","_mergedOptions$arrayE","_mergedOptions$object","defaultOptions","arrayElementMerge","objectElementMerge","sourceIsArrayElement","OpenApi3_1SwaggerClientDereferenceStrategy","_options$dereference$","dereferenceVisitor","parameterMacroVisitor","modelPropertyMacroVisitor","allOfVisitor","resolveOpenAPI31Strategy","openApiParseResultElement","jsonPointerURI","fragmentElement","openApiElementReference","transcluded","openApi31ApiDOMStrategy","makeResolve","retrievedSpec","strategyOptions","strg","generic","prot","bodyBuilder","headerBuilder","queryBuilder","pathBuilder","formDataBuilder","effectiveMediaType","styledValue","serializedValue","PARAMETER_HEADER_BLACKLIST","Cookie","globalObject","attachContentTypeForEmptyPayload","applySecurities","_spec$components","securityDef","securityObj","cookies","encoded","tokenValue","tokenType","token_type","requestBodyDef","requestBodyMediaTypes","isExplicitContentTypeValid","firstMediaType","accept","_requestBodyDef$conte","_requestBodyDef$conte2","tokenName","oauthToken","authorization","isBodyParamPresent","isFormDataParamPresent","idFromPathMethodLegacy","arrayOrEmpty","parseURIReference","uriReference","parsedURL","searchParams","OperationNotFoundError","findParametersWithName","deduplicateParameters","paramsMap","dedupedParameters","userHttp","parameterBuilders","specIsOAS3","operationRaw","getOperationRaw","findOperation","eachOperation","operationObj","cbValue","rawOperationId","oas3BaseUrl","_spec$paths","_spec$paths2","selectedServerUrl","selectedServerObj","serverUrls","srv","varNames","getVariableTemplateNames","vari","variableDefinition","variableValue","buildOas3UrlWithContext","ourUrl","parsedContextUrl","computedScheme","stripNonAlpha","computedHost","computedPath","swagger2BaseUrl","firstSchemeInSpec","combinedParameters","versionSpecificOptions","cookieString","cookieValue","makeResolveSubtree","returnEntireTree","resolveOptions","pathSegment","httpFn","Http","preFetch","postFetch","openApi31ApiDOMResolveStrategy","openApi30ResolveStrategy","openApi2ResolveStrategy","genericResolveStrategy","freshConfigs","batch","defaultNoopBatch","getBatch","ContextKey","gT","_gT$ContextKey","contextMap","realContext","pureFinalPropsSelectorFactory","mapDispatchToProps","mergeProps","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","stateProps","dispatchProps","mergedProps","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","handleNewPropsAndNewState","dependsOnOwnProps","handleNewProps","handleNewState","nextStateProps","statePropsChanged","pureFinalPropsSelector","handleFirstCall","firstState","firstOwnProps","wrapMapToPropsConstant","getConstant","initConstantSelector","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","initProxySelector","proxy","mapToPropsProxy","stateOrDispatch","detectFactoryAndVerify","createInvalidArgFactory","wrappedComponentName","defaultMergeProps","nullListeners","createSubscription","parentSub","handleChangeWrapper","subscription","onStateChange","trySubscribe","addNestedSub","createListenerCollection","notifyNestedSubs","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","shallowEqual","objA","objB","keysB","NO_SUBSCRIPTION_ARRAY","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","strictEqual","connect","pure","areMergedPropsEqual","Context","initMapStateToProps","mapStateToPropsFactory","initMapDispatchToProps","mapDispatchToPropsFactory","initMergeProps","mergePropsFactory","wrapMergePropsFunc","initMergePropsProxy","hasRunOnce","mergePropsProxy","nextMergedProps","shouldHandleStateChanges","WrappedComponent","selectorFactoryOptions","ConnectFunction","propsContext","reactReduxForwardedRef","ContextToUse","contextValue","didStoreComeFromProps","didStoreComeFromContext","getServerState","childPropsSelector","finalPropsSelectorFactory","overriddenContextValue","latestSubscriptionCallbackError","actualChildPropsSelector","subscribeForReact","reactListener","subscribeUpdates","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","actualChildProps","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","renderedWrappedComponent","Connect","_forwarded","forwardConnectRef","forwarded","serverState","stabilityCheck","noopCheck","previousState","newBatch","initializeConnect","withSystem","WithSystem","getDisplayName","withRoot","reduxStore","WithRoot","withConnect","customMapStateToProps","handleProps","oldProps","withMappedContainer","memGetComponent","WithMappedContainer","nextProps","cleanProps","domNode","App","ReactDOM","failSilently","memoizeForGetComponent","memMakeMappedContainer","memoizeForWithMappedContainer","makeMappedContainer","downloadUrlPlugin","checkPossibleFailReasons","specUrl","enums","loadingStatus","spec_update_loading_status","withErrorBoundary","ErrorBoundary","targetName","WithErrorBoundary","isClassComponent","hasError","errorInfo","FallbackComponent","Fallback","componentList","fullOverride","mergedComponentList","wrapFactory","Original","getLayout","layoutName","Layout","AuthorizationPopup","Auths","AuthorizeBtn","showPopup","AuthorizeBtnContainer","authorizableDefinitions","AuthorizeOperationBtn","onAuthChange","submitAuth","logoutClick","auths","AuthItem","Oauth2","Button","authorizedAuth","nonOauthDefinitions","oauthDefinitions","onSubmit","ApiKeyAuth","BasicAuth","authEl","AuthError","Input","Row","Col","Markdown","JumpToPath","autoComplete","showValue","HighlightCode","ExamplesSelect","onSelect","currentExampleKey","showLabels","_onSelect","isSyntheticChange","_onDomSelect","selectedOptions","getCurrentExample","currentExamplePerProps","firstExamplesKey","firstExample","firstExampleKey","isValueModified","isModifiedValueAvailable","exampleName","stringifyUnlessList","ExamplesSelectValueRetainer","userHasEditedBody","currentNamespace","setRetainRequestBodyValueFlag","updateValue","valueFromExample","_getCurrentExampleValue","lastUserEditedValue","currentUserInputValue","lastDownstreamValue","isModifiedValueSelected","_getStateForCurrentNamespace","_setStateForCurrentNamespace","_setStateForNamespace","newStateForNamespace","_isCurrentUserInputSameAsExampleValue","_getValueForExample","exampleKey","currentKey","_onExamplesSelect","valueFromCurrentExample","examplesMatchingNewValue","authConfigs","currentServer","oauth2RedirectUrl","scopesArray","scopeSeparator","realm","usePkceWithAuthorizationCodeGrant","generateCodeVerifier","codeChallenge","createCodeChallenge","shaJs","sanitizedAuthorizationUrl","useBasicAuthenticationWithAccessCodeGrant","errCb","appName","oauth2Authorize","onScopeChange","dataset","newScopes","onInputChange","selectScopes","InitializedInput","oidcUrl","AUTH_FLOW_IMPLICIT","AUTH_FLOW_PASSWORD","AUTH_FLOW_ACCESS_CODE","AUTH_FLOW_APPLICATION","isPkceCodeGrant","flowToDisplay","htmlFor","tablet","desktop","Clear","Duration","LiveResponse","displayRequestDuration","showMutatedRequest","requestSnippetsEnabled","curlRequest","notDocumented","headersKeys","ResponseBody","returnObject","joinedHeaders","hasHeaders","Curl","OnlineValidatorBadge","validatorUrl","getDefinitionUrl","sanitizedValidatorUrl","ValidatorImage","alt","Image","onload","Operations","renderOperationTag","OperationContainer","isAbsoluteUrl","buildBaseUrl","addProtocol","safeBuildUrl","buildUrl","docExpansion","isDeepLinkingEnabled","Collapse","DeepLink","tagExternalDocsUrl","tagDescription","tagExternalDocsDescription","rawTagExternalDocsUrl","showTag","enabled","isOpened","_circle","preserveAspectRatio","backgroundImage","backgroundPosition","backgroundRepeat","cx","cy","stroke","calcMode","dur","keyTimes","repeatCount","toggleShown","onTryoutClick","onResetClick","onCancelClick","onExecute","oas3Actions","operationProps","allowTryItOut","tryItOutEnabled","executeInProgress","externalDocsUrl","getList","extensions","Parameters","Execute","Schemes","OperationExt","OperationSummary","showExtensions","onChangeKey","RollingLoadSVG","operationServers","pathServers","getSelectedServer","setSelectedServer","setServerVariableValue","getServerVariable","serverVariableValue","getEffectiveServerValue","currentScheme","tryItOutResponse","displayOperationId","supportedSubmitMethods","jumpToKey","resolvedSubtree","getResolvedSubtree","defaultRequestBodyValue","selectDefaultRequestBodyValue","setRequestBodyValue","unresolvedOp","resolvedSummary","OperationSummaryMethod","OperationSummaryPath","CopyToClipboardBtn","hasSecurity","securityIsOptional","allowAnonymous","textToCopy","applicableDefinitions","tabIndex","pathParts","OperationExtRow","xKey","xVal","xNormalizedValue","fileName","downloadable","canCopy","handleDownload","saveAs","onChangeProducesWrapper","onResponseContentTypeChange","controlsAcceptHeader","setResponseContentType","defaultCode","defaultStatusCode","ContentType","acceptControllingResponse","getAcceptControllingResponse","suitable2xxResponse","defaultResponse","suitableDefaultResponse","regionId","createHtmlReadyId","controlId","ariaControls","ariaLabel","contentTypes","role","isDefault","onContentTypeChange","activeExamplesKey","activeExamplesMember","getKnownSyntaxHighlighterLanguage","isValidJson","canJsonParse","_onContentTypeChange","getTargetExamplesKey","activeContentType","ResponseExtension","ModelExample","OperationLink","specPathWithPossibleSchema","activeMediaType","examplesForMediaType","oas3SchemaForContentType","mediaTypeExample","sampleSchema","shouldOverrideSchemaExample","sampleGenConfig","targetExamplesKey","getMediaTypeExample","targetExample","oldOASMediaTypeExample","getExampleComponent","sampleResponse","setActiveExamplesMember","contextName","omitValue","parsedContent","updateParsedContent","prevContent","reader","FileReader","readAsText","downloadName","bodyEl","disposition","responseFilename","extractFileNameFromContentDispositionHeader","msSaveOrOpenBlob","formatXml","controls","callbackVisible","parametersVisible","onChangeConsumesWrapper","toggleTab","tab","onChangeMediaType","hasUserEditedBody","shouldRetainRequestBodyValue","setRequestContentType","initRequestBodyValidateError","ParameterRow","TryItOutButton","Callbacks","isExecute","groupedParametersArr","rawParam","onChangeConsumes","requestBodyErrors","updateActiveExamplesKey","lastValue","usableValue","onChangeIncludeEmpty","setRequestBodyInclusion","ParameterIncludeEmptyDefaultProps","isIncludedOptions","ParameterIncludeEmpty","shouldDispatchInit","onCheckboxChange","isIncluded","setDefaultValue","onChangeWrapper","numberToString","valueForUpstream","_onExampleSelect","getParamKey","paramWithMeta","parameterMediaType","generatedSampleValue","isSwagger2","showCommonExtensions","JsonSchemaForm","ParamBody","bodyParam","consumesValue","ParameterExt","paramItems","paramEnum","paramDefaultValue","paramExample","itemType","isFormData","isFormDataSupported","commonExt","isDisplayParamEnum","defaultToFirstExample","handleValidateParameters","handleValidateRequestBody","missingBodyValue","missingRequiredKeys","clearRequestBodyValidateError","oas3RequiredRequestBodyContentType","oas3RequestBodyValue","oas3ValidateBeforeExecuteSuccess","oas3RequestContentType","setRequestBodyValidateError","validateShallowRequired","missingKey","handleValidationResultPass","handleValidationResultFail","handleValidationResult","isPass","paramsResult","requestBodyResult","Property","schemaExample","propVal","propClass","Errors","editorActions","jumpToLine","allErrorsToDisplay","isVisible","sortedJSErrors","toggleVisibility","animated","ThrownErrorItem","SpecErrorItem","errorLine","toTitleCase","locationMessage","xclass","Container","fullscreen","full","containerClass","DEVICES","hide","keepContents","mobile","large","classesAr","device","deviceClass","TextArea","Select","option","allowedValues","NoMargin","renderNotAnimated","Overview","setTagShown","_setTagShown","showTagId","showOp","toggleShow","showOpIdPrefix","showOpId","_onClick","otherProps","InfoBasePath","InfoUrl","termsOfServiceUrl","contactData","licenseData","externalDocsDescription","VersionStamp","OpenAPIVersion","oasVersion","InfoContainer","Footer","FilterContainer","onFilterChange","isLoading","isFailed","NOOP","isEditBox","updateValues","isJson","_onChange","handleOnChange","inputValue","toggleIsEditBox","defaultProp","curl","curlBlock","SchemesContainer","ModelCollapse","collapsedContent","expanded","onToggle","hideSelfOnExpand","modelName","toggleCollapsed","defaultModelRendering","activeTab","defaultModelExpandDepth","ModelWrapper","exampleTabId","examplePanelId","modelTabId","modelPanelId","inactive","expandDepth","Model","isInvalid","isMapLike","checkItem","createChecker","checklist","_React$Component","ImmutablePureComponent","updateOnProps","updateOnStates","decodeRefName","unescaped","ImPropTypes","isRef","getModelName","getRefSchema","model","ObjectModel","ArrayModel","PrimitiveModel","Models","getSchemaBasePath","getCollapsedContent","handleToggle","onLoadModels","onLoadModel","defaultModelsExpandDepth","specPathBase","showModels","schemaValue","rawSchemaValue","rawSchema","requiredProperties","infoProperties","JumpToPathSection","titleEl","isDeprecated","normalizedValue","Primitive","enumArray","EnumModel","showReset","VersionPragmaFilter","alsoShow","bypass","SvgAssets","xmlnsXlink","decodeEntity","UNESCAPE_MD_RE","unescapeMd","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","NAMED_ENTITY_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","replaceEntities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","nextToken","tight","blockquote_open","blockquote_close","getBreak","fence","fences","fenceName","langClass","langPrefix","fence_custom","heading_open","hLevel","heading_close","xhtmlOut","bullet_list_open","bullet_list_close","list_item_open","list_item_close","ordered_list_open","ordered_list_close","paragraph_open","paragraph_close","addBreak","link_open","linkTarget","link_close","image","table_open","table_close","thead_open","thead_close","tbody_open","tbody_close","tr_open","tr_close","th_open","align","th_close","td_open","td_close","strong_open","strong_close","em_open","em_close","del_open","del_close","ins_open","ins_close","mark_open","mark_close","sup","hardbreak","softbreak","breaks","htmlblock","htmltag","abbr_open","abbr_close","footnote_ref","subId","footnote_block_open","footnote_block_close","footnote_open","footnote_close","footnote_anchor","dl_open","dt_open","dd_open","dl_close","dt_close","dd_close","Renderer","Ruler","__rules__","__cache__","StateInline","parserInline","outTokens","posMax","pendingLevel","isInLabel","linkLevel","linkContent","labelUnmatchedScopes","parseLinkLabel","labelEnd","oldPos","oldFlag","skipToken","parseAbbr","abbreviations","normalizeLink","parseLinkDestination","validateLink","parseLinkTitle","normalizeReference","parseReference","renderInline","_rules","__find__","__compile__","chains","altName","at","beforeName","ruleName","afterName","enable","strict","disable","getRules","chainName","pushPending","cacheSet","cacheGet","PUNCT_CHARS","regEscape","RARE_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceScopedAbbr","QUOTE_TEST_RE","QUOTE_RE","PUNCT_RE","isLetter","replaceAt","inlineMode","abbr","inline","tok","footnote_block","lastParagraph","currentLabel","insideRef","refTokens","footnotes","abbr2","reg","regText","blockTokens","abbrRegExp","inlineTokens","blkIdx","typographer","smartquotes","thisLevel","lastSpace","nextSpace","canOpen","canClose","isSingle","OUTER","single","quotes","Core","ruler","StateBlock","indent_found","bMarks","eMarks","tShift","blkIndent","lineMax","parentType","ddIndent","skipBulletListMarker","skipOrderedListMarker","skipEmptyLines","skipSpaces","skipChars","skipCharsBack","getLines","keepLastLF","html_blocks","HTML_TAG_OPEN_RE","HTML_TAG_CLOSE_RE","skipMarker","_rules$1","endLine","nextLine","silent","mem","haveEndMarker","blockquote","lastLineEmpty","oldTShift","oldBMarks","oldIndent","oldParentType","terminatorRules","terminate","maxNesting","tokenize","cnt","oldTight","posAfterMarker","indentAfterMarker","markerValue","markerCharCode","contentStart","listTokIdx","prevEmptyEnd","listLines","itemLines","markTightParagraphs","footnote","oldBMark","heading","lheading","isLetter$1","lineText","cell","aligns","tableLines","tbodyLines","deflist","ddLine","dtLine","oldDDIndent","markTightParagraphs$1","paragraph","ParserBlock","hasEmptyLines","TABS_SCAN_RE","NEWLINES_RE","SPACES_RE","isTerminatorChar","lastTabPos","ESCAPED","isAlphaNum","scanDelims","can_open","can_close","delims","UNESCAPE_RE","UNESCAPE_RE$1","url_schemas","EMAIL_RE","AUTOLINK_RE","replace$1","attr_value","open_tag","HTML_TAG_RE","DIGITAL_RE","NAMED_RE","_rules$2","newline","pmax","backticks","matchStart","matchEnd","del","emphasis","startCount","oldCount","labelStart","isImage","footnote_inline","footnoteId","oldLength","footnoteSubId","autolink","linkMatch","emailMatch","fullUrl","isLetter$2","entity","ParserInline","cached_pos","StateCore","Remarkable","preset","linkify","presets","parseInline","throwUnhandledCaseError","theValue","HtmlTag","whitespaceRegex","innerHtml","setTagName","getTagName","setAttr","getAttrs","getAttr","setAttrs","setClass","addClass","newClass","classAttr","getClass","newClasses","removeClass","removeClasses","setInnerHTML","setInnerHtml","getInnerHTML","getInnerHtml","toAnchorString","attrsStr","buildAttrsStr","attrsArr","AnchorTagBuilder","newWindow","truncate","build","createAttrs","processAnchorText","getAnchorText","getAnchorHref","createCssClass","returnClasses","cssClassSuffixes","getCssClassSuffixes","anchorText","doTruncate","truncateLength","truncateLocation","truncateSmart","truncateLen","ellipsisChars","ellipsisLengthBeforeParsing","ellipsisLength","urlObj","buildSegment","remainingAvailableLength","remainingAvailableLengthHalf","startOffset","endOffset","availableLength","urlSub","parse_url","matchQuery","pathAndQuery","truncateMiddle","truncateEnd","ellipsis","Match","__jsduckDummyDocProp","matchedText","tagBuilder","getMatchedText","setOffset","getOffset","buildTag","__assign","SuppressedError","urlSuffixRegex","EmailMatch","getEmail","HashtagMatch","serviceName","hashtag","getServiceName","getHashtag","MentionMatch","mention","getMention","PhoneMatch","plusSign","getPhoneNumber","getNumber","UrlMatch","urlMatchType","protocolUrlMatch","protocolRelativeMatch","stripPrefix","www","stripTrailingSlash","decodePercentEncoding","schemePrefixRegex","wwwPrefixRegex","protocolRelativeRegex","protocolPrepended","getUrlMatchType","getUrl","stripProtocolRelativePrefix","stripSchemePrefix","stripWwwPrefix","removeTrailingSlash","removePercentEncoding","preProcessedEntityAnchorText","Matcher","letterRe","digitRe","nonDigitRe","whitespaceRe","quoteRe","controlCharsRe","alphaCharsStr","alphaCharsAndMarksStr","decimalNumbersStr","alphaNumericCharsStr","alphaNumericAndMarksCharsStr","alphaNumericAndMarksCharRe","ipStr","domainLabelStr","getDomainLabelStr","getDomainNameStr","domainNameCharRegex","tldRegex","localPartCharRegex","strictTldRegex","EmailMatcher","parseMatches","noCurrentEmailMatch","CurrentEmailMatch","mailtoTransitions","charIdx","currentEmailMatch","stateNonEmailAddress","stateMailTo","stateLocalPart","stateLocalPartDot","stateAtSign","stateDomainChar","stateDomainHyphen","stateDomainDot","captureMatchIfValidAndReset","beginEmailMatch","hasMailtoPrefix","resetToNonEmailMatchState","hasDomainDot","emailAddress","doesEmailHaveValidTld","emailAddressTld","emailAddressNormalized","UrlMatchValidator","urlMatch","isValidUriScheme","urlMatchDoesNotHaveProtocolOrDot","urlMatchDoesNotHaveAtLeastOneWordChar","isValidIpAddress","containsMultipleDots","uriSchemeMatch","newRegex","hasFullProtocolRegex","ipRegex","stringBeforeSlash","uriSchemeMatchArr","uriSchemeRegex","uriScheme","hasWordCharAfterProtocolRegex","matcherRegex","wordCharRegExp","UrlMatcher","_loop_1","matchStr","schemeUrlMatch","wwwUrlMatch","wwwProtocolRelativeMatch","tldProtocolRelativeMatch","this_1","matchHasUnbalancedClosingParen","matchHasInvalidCharAfterTld","foundCommonScheme","commonScheme","indexOfSchemeStart","startChar","endChar","numOpenBraces","hashtagTextCharRe","HashtagMatcher","hashCharIdx","stateNone","stateNonHashtagWordChar","stateHashtagHashChar","stateHashtagTextChar","captureMatchIfValid","hashtagServices","phoneMatcherRegex","PhoneMatcher","cleanNumber","contextClear","testMatch","twitterRegex","instagramRegex","soundcloudRegex","tiktokRegex","nonWordCharRegex","MentionMatcher","matcherRegexes","twitter","instagram","soundcloud","tiktok","parseHtml","onOpenTag","onCloseTag","onText","onComment","onDoctype","noCurrentTag","CurrentTag","currentDataIdx","currentTag","stateData","stateTagOpen","stateEndTagOpen","stateTagName","stateBeforeAttributeName","stateAttributeName","stateAfterAttributeName","stateBeforeAttributeValue","stateAttributeValueDoubleQuoted","stateAttributeValueSingleQuoted","stateAttributeValueUnquoted","stateAfterAttributeValueQuoted","stateSelfClosingStartTag","stateMarkupDeclarationOpen","stateCommentStart","stateCommentStartDash","stateComment","stateCommentEndDash","stateCommentEnd","stateCommentEndBang","stateDoctype","startNewTag","isClosing","isOpening","captureTagName","emitTagAndPreviousTextNode","resetToDataState","reconsumeCurrentCharacter","textBeforeTag","startIdx","emitText","Autolinker","urls","phone","replaceFn","sanitizeHtml","matchers","normalizeUrlsCfg","normalizeStripPrefixCfg","normalizeTruncateCfg","textOrHtml","schemeMatches","wwwMatches","tldMatches","skipTagNames","skipTagsStackCount","textSplit","splitAndCapture","splitRegex","lastIdx","currentOffset_1","splitText","textNodeMatches","parseText","compactMatches","removeUnwantedMatches","matchedTextLength","removeIdx","getMatchers","numMatchers","textMatches","numTextMatches","newHtml","createMatchReturnVal","replaceFnResult","getTagBuilder","Email","Hashtag","Mention","Phone","LINK_SCAN_RE","isLinkOpen","isLinkClose","createLinkifier","autolinker","parseTokens","ln","htmlLinkLevel","linkifier","useUnsafeMarkdown","sanitized","sanitizer","DomPurify","hasWarnedAboutDeprecation","BaseLayout","ServersContainer","isOAS31","isSpecEmpty","loadingMessage","lastErr","lastErrMsg","hasServers","hasSchemes","hasSecurityDefinitions","CoreComponentsPlugin","authorizationPopup","authorizeBtn","authorizeOperationBtn","authError","oauth2","apiKeyAuth","basicAuth","liveResponse","onlineValidatorBadge","highlightCode","responseBody","parameterRow","overview","footer","modelExample","FormComponentsPlugin","LayoutUtils","JsonSchemaDefaultProps","keyName","dispatchInitialValue","getComponentSilently","Comp","JsonSchema_string","files","onEnumChange","schemaIn","JsonSchema_array","valueOrEmptyList","onItemChange","itemVal","removeItem","addItem","arrayErrors","needsRemoveError","shouldRenderValue","schemaItemsEnum","schemaItemsType","schemaItemsFormat","schemaItemsSchema","ArrayItemsComponent","isArrayItemText","isArrayItemFile","itemErrors","JsonSchemaArrayItemFile","JsonSchemaArrayItemText","onFileChange","JsonSchema_boolean","booleanValue","stringifyObjectErrors","stringError","currentError","JsonSchema_object","invalid","JSONSchemaComponentsPlugin","JSONSchemaComponents","BasePreset","ConfigsPlugin","UtilPlugin","LogsPlugin","ViewPlugin","ErrPlugin","LayoutPlugin","JSONSchema5SamplesPlugin","SwaggerClientPlugin","AuthPlugin","DownloadUrlPlugin","DeepLinkingPlugin","FilterPlugin","OnCompletePlugin","RequestSnippetsPlugin","SafeRenderPlugin","onlyOAS3","OAS3NullSelector","resolvedSchemes","defName","flowKey","flowVal","translatedDef","oidcData","grant","translatedScopes","cur","OAS3ComponentWrapFactory","swaggerVersion","isSwagger2Helper","isOAS30","isOAS30Helper","selectedValue","callbacksOperations","allOperations","callbackName","callbackOperations","callbackOps","pathItem","expression","pathItemOperations","operationDTO","operationDTOs","callbackNames","getDefaultRequestBodyValue","mediaTypeValue","hasExamplesKey","exampleSchema","handleFile","setIsIncludedOptions","RequestBodyEditor","requestBodyDescription","schemaForMediaType","rawExamplesOfMediaType","sampleForMediaType","isObjectContent","isBinaryFormat","isBase64Format","bodyProperties","currentErrors","included","useInitialValFromSchemaSamples","useInitialValFromEnum","useInitialValue","sampleRequestBody","targetOp","padString","setServer","currentServerDefinition","prevServerDefinition","prevServerVariableDefaultValue","currentServerVariableDefs","currentServerVariableDefaultValue","onServerChange","onServerVariableValueChange","variableName","newVariableValue","shouldShowVariableUI","applyDefaultValue","onDomChange","HttpAuth","serversToDisplay","displaying","operationLink","trimmed","ModelComponent","OAS30ComponentWrapFactory","UPDATE_SELECTED_SERVER","UPDATE_REQUEST_BODY_VALUE","UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG","UPDATE_REQUEST_BODY_INCLUSION","UPDATE_ACTIVE_EXAMPLES_MEMBER","UPDATE_REQUEST_CONTENT_TYPE","UPDATE_RESPONSE_CONTENT_TYPE","UPDATE_SERVER_VARIABLE_VALUE","SET_REQUEST_BODY_VALIDATE_ERROR","CLEAR_REQUEST_BODY_VALIDATE_ERROR","CLEAR_REQUEST_BODY_VALUE","clearRequestBodyValue","userEditedRequestBody","kv","currentMediaTypeDefaultBodyValue","locationData","varValues","serverValue","validateRequestBodyIsRequired","validateRequestBodyValueExists","requiredKeys","requiredKey","currentVal","valueKeyVal","missingKeyValues","bodyValue","currentMissingKey","bodyValues","specWrapSelectors","authWrapSelectors","oas3","selectWebhooksOperations","pathItemNames","pathItemName","selectLicenseNameField","selectLicenseUrl","selectContactNameField","selectContactUrl","selectContactEmailField","selectInfoSummaryField","selectInfoDescriptionField","selectInfoTitleField","selectInfoTermsOfServiceUrl","selectExternalDocsUrl","externalDocsDesc","selectExternalDocsDescriptionField","selectJsonSchemaDialectField","jsonSchemaDialectDefault","selectJsonSchemaDialectDefault","JSONSchema202012","handleExpand","onExpand","selectSchemas","hasSchemas","schemasPath","isOpenDefault","isOpen","isOpenAndExpanded","isResolved","handleModelsExpand","handleModelsRef","handleJSONSchema202012Ref","schemaName","handleJSONSchema202012Expand","schemaPath","mutualTLSDefinitions","createOnlyOAS31Selector","createOnlyOAS31SelectorWrapper","createSystemSelector","createOnlyOAS31ComponentWrapper","originalComponent","OAS31License","OAS31Contact","OAS31Info","makeIsExpandable","hasKeyword","jsonSchema202012","getProperties","filteredProperties","Keyword$schema","Keyword$vocabulary","Keyword$id","Keyword$anchor","Keyword$dynamicAnchor","Keyword$ref","Keyword$dynamicRef","Keyword$defs","Keyword$comment","KeywordAllOf","KeywordAnyOf","KeywordOneOf","KeywordNot","KeywordIf","KeywordThen","KeywordElse","KeywordDependentSchemas","KeywordPrefixItems","KeywordItems","KeywordContains","KeywordProperties","KeywordPatternProperties","KeywordAdditionalProperties","KeywordPropertyNames","KeywordUnevaluatedItems","KeywordUnevaluatedProperties","KeywordType","KeywordEnum","KeywordConst","KeywordConstraint","KeywordDependentRequired","KeywordContentSchema","KeywordTitle","KeywordDescription","KeywordDefault","KeywordDeprecated","KeywordReadOnly","KeywordWriteOnly","Accordion","ExpandDeepButton","ChevronRightIcon","ModelWithJSONSchemaContext","withSchemaContext","default$schema","defaultExpandedLevels","isExpandable","ModelsWrapper","ModelsWithJSONSchemaContext","VersionPragmaFilterWrapper","OAS31VersionPragmaFilter","MutualTLSAuth","AuthsWrapper","OAS31Auths","isOAS31Fn","selectLicenseUrlField","selectLicenseIdentifierField","selectContactUrlField","selectInfoTermsOfServiceField","selectExternalDocsUrlField","rawSchemas","resolvedSchemas","resolvedSchema","oas31Selectors","useFn","useIsExpandedDeeply","useComponent","isExpandedDeeply","setExpanded","expandedDeeply","setExpandedDeeply","JSONSchemaDeepExpansionContext","handleExpansion","handleExpansionDeep","expandedDeepNew","MarkDown","DescriptionKeyword","DefaultWrapper","KeywordDiscriminator","KeywordXml","KeywordExample","KeywordExternalDocs","getDependentRequired","useConfig","propertySchema","PropertiesKeyword","wrappedFns","wrapOAS31Fn","systemFn","newImpl","oriImpl","createSystemSelectorFn","createOnlyOAS31SelectorFn","OAS31Model","OAS31Models","JSONSchema202012KeywordExample","JSONSchema202012KeywordXml","JSONSchema202012KeywordDiscriminator","JSONSchema202012KeywordExternalDocs","InfoWrapper","LicenseWrapper","ContactWrapper","AuthItemWrapper","JSONSchema202012KeywordDescription","JSONSchema202012KeywordDescriptionWrapper","JSONSchema202012KeywordDefault","JSONSchema202012KeywordDefaultWrapper","JSONSchema202012KeywordProperties","JSONSchema202012KeywordPropertiesWrapper","definitionsToAuthorizeWrapper","selectIsOAS31","selectLicense","selectContact","selectWebhooks","isOAS3SelectorWrapper","selectLicenseUrlWrapper","oas31","selectOAS31LicenseUrl","objectSchema","booleanSchema","JSONSchemaContext","JSONSchemaLevelContext","JSONSchemaCyclesContext","fnName","useLevel","useRenderedSchemas","renderedSchemas","useIsExpanded","nextLevel","isEmbedded","useIsEmbedded","isCircular","useIsCircular","constraints","stringifyConstraints","expandedNew","constraint","getTitle","circularSuffix","strigifiedElement","Constraint","Title","ChevronRight","processedSchemas","isBooleanJSONSchema","getArrayType","prefixItemsTypes","itemsType","handleCombiningKeywords","subSchema","combinedStrings","inferType","stringifyConstraintRange","hasMin","hasMax","stringifyConstraintMultipleOf","factor","numberRange","stringifyConstraintNumberRange","hasMinimum","hasMaximum","hasExclusiveMinimum","hasExclusiveMaximum","isMinExclusive","isMaxExclusive","stringRange","arrayRange","hasUniqueItems","containsRange","objectRange","withJSONSchemaContext","overrides","HOC","contexts","JSONSchema202012Plugin","JSONSchema202012Keyword$schema","JSONSchema202012Keyword$vocabulary","JSONSchema202012Keyword$id","JSONSchema202012Keyword$anchor","JSONSchema202012Keyword$dynamicAnchor","JSONSchema202012Keyword$ref","JSONSchema202012Keyword$dynamicRef","JSONSchema202012Keyword$defs","JSONSchema202012Keyword$comment","JSONSchema202012KeywordAllOf","JSONSchema202012KeywordAnyOf","JSONSchema202012KeywordOneOf","JSONSchema202012KeywordNot","JSONSchema202012KeywordIf","JSONSchema202012KeywordThen","JSONSchema202012KeywordElse","JSONSchema202012KeywordDependentSchemas","JSONSchema202012KeywordPrefixItems","JSONSchema202012KeywordItems","JSONSchema202012KeywordContains","JSONSchema202012KeywordPatternProperties","JSONSchema202012KeywordAdditionalProperties","JSONSchema202012KeywordPropertyNames","JSONSchema202012KeywordUnevaluatedItems","JSONSchema202012KeywordUnevaluatedProperties","JSONSchema202012KeywordType","JSONSchema202012KeywordEnum","JSONSchema202012KeywordConst","JSONSchema202012KeywordConstraint","JSONSchema202012KeywordDependentRequired","JSONSchema202012KeywordContentSchema","JSONSchema202012KeywordTitle","JSONSchema202012KeywordDeprecated","JSONSchema202012KeywordReadOnly","JSONSchema202012KeywordWriteOnly","JSONSchema202012Accordion","JSONSchema202012ExpandDeepButton","JSONSchema202012ChevronRightIcon","withJSONSchema202012Context","JSONSchema202012DeepExpansionContext","arrayType","constrainedArray","containsItem","applyArrayConstraints","objectType","isJSONSchemaObject","isJSONSchema","emailGenerator","idnEmailGenerator","hostnameGenerator","idnHostnameGenerator","ipv4Generator","ipv6Generator","uriGenerator","uriReferenceGenerator","iriGenerator","iriReferenceGenerator","uuidGenerator","uriTemplateGenerator","jsonPointerGenerator","relativeJsonPointerGenerator","dateTimeGenerator","dateGenerator","timeGenerator","durationGenerator","passwordGenerator","regexGenerator","Registry","registry","formatAPI","quotedPrintable","utf8","utf8Value","base32Alphabet","paddingCount","base32Str","bufferLength","EncoderRegistry","encode7bit","encode8bit","encodeBinary","encodeQuotedPrintable","base16","base32","encoderAPI","encodingName","getDefaults","text/plain","text/css","text/csv","text/html","text/calendar","text/javascript","text/xml","text/*","image/*","audio/*","video/*","application/json","application/ld+json","application/x-httpd-php","application/rtf","raw","application/x-sh","application/xhtml+xml","application/*","MediaTypeRegistry","textMediaTypesGenerators","imageMediaTypesGenerators","audioMediaTypesGenerators","videoMediaTypesGenerators","applicationMediaTypesGenerators","mediaTypeAPI","mediaTypeNoParams","topLevelMediaType","generatedString","generateFormat","formatGenerator","mediaTypeGenerator","constrainedString","applyStringConstraints","floatGenerator","doubleGenerator","generatedNumber","epsilon","EPSILON","minValue","maxValue","constrainedNumber","applyNumberConstraints","int32Generator","int64Generator","stringType","numberType","integerType","boolean","booleanType","nullType","ALL_TYPES","hasExample","extractExample","inferringKeywords","fallbackType","inferTypeFromValue","foldType","pickedType","randomPick","inferringTypes","inferringType","inferringTypeKeywords","inferringKeyword","constType","combineTypes","combinedTypes","exampleType","typeCast","fromJSONBooleanSchema","merged","mergedType","ensureArray","allPropertyNames","propSchema","propSchemaType","anyOfSchema","oneOfSchema","contentSample","sampleEncoderAPI","sampleFormatAPI","sampleMediaTypeAPI","PresetApis","OpenAPI30Plugin","JSONSchema202012SamplesPlugin","OpenAPI31Plugin","GIT_DIRTY","GIT_COMMIT","PACKAGE_VERSION","BUILD_TIME","buildInfo","SwaggerUI","swaggerUi","gitRevision","gitDirty","buildTimestamp","dom_id","defaultExpanded","queryConfigEnabled","ApisPreset","syntaxHighlight","activated","theme","queryConfig","parseSearch","constructorConfig","storeConfigs","System","inlinePlugin","downloadSpec","fetchedConfig","localConfig","mergedConfig","configsActions","querySelector","configUrl","loadRemoteConfig","apis","Auth","Configs","DeepLining","Err","Filter","Icons","JSONSchema5Samples","JSONSchema202012Samples","Logs","OpenAPI30","OpenAPI31","OnComplete","Spec","SwaggerClient","Util","View","DownloadUrl","SafeRender"],"sourceRoot":""} \ No newline at end of file diff --git a/app/static/swagger/swagger-ui-es-bundle-core.js b/app/static/swagger/swagger-ui-es-bundle-core.js new file mode 100644 index 0000000..c99791f --- /dev/null +++ b/app/static/swagger/swagger-ui-es-bundle-core.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-es-bundle-core.js.LICENSE.txt */ +import*as e from"base64-js";import*as t from"ieee754";import*as r from"repeat-string";import*as n from"react";import*as a from"redux";import*as o from"immutable";import*as s from"redux-immutable";import*as l from"serialize-error";import*as i from"lodash/merge";import*as c from"@braintree/sanitize-url";import*as u from"lodash/camelCase";import*as d from"lodash/upperFirst";import*as p from"lodash/memoize";import*as m from"lodash/find";import*as f from"lodash/some";import*as h from"lodash/eq";import*as g from"lodash/isFunction";import*as y from"css.escape";import*as v from"url-parse";import*as S from"reselect";import*as _ from"prop-types";import*as b from"lodash/omit";import*as w from"js-yaml";import*as C from"zenscroll";import*as x from"react-immutable-proptypes";import*as O from"lodash/reduce";import*as k from"lodash/get";import*as N from"@babel/runtime-corejs3/helpers/extends";import*as A from"react-copy-to-clipboard";import*as I from"react-syntax-highlighter/dist/esm/light";import*as R from"react-syntax-highlighter/dist/esm/languages/hljs/javascript";import*as T from"react-syntax-highlighter/dist/esm/languages/hljs/json";import*as B from"react-syntax-highlighter/dist/esm/languages/hljs/bash";import*as j from"react-syntax-highlighter/dist/esm/languages/hljs/yaml";import*as P from"react-syntax-highlighter/dist/esm/languages/hljs/http";import*as M from"react-syntax-highlighter/dist/esm/languages/hljs/powershell";import*as q from"react-syntax-highlighter/dist/esm/styles/hljs/agate";import*as L from"react-syntax-highlighter/dist/esm/styles/hljs/arta";import*as D from"react-syntax-highlighter/dist/esm/styles/hljs/monokai";import*as U from"react-syntax-highlighter/dist/esm/styles/hljs/nord";import*as $ from"react-syntax-highlighter/dist/esm/styles/hljs/obsidian";import*as J from"react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night";import*as V from"react-syntax-highlighter/dist/esm/styles/hljs/idea";import*as K from"randexp";import*as z from"lodash/isEmpty";import*as F from"lodash/isString";import*as W from"lodash/debounce";import*as H from"lodash/set";import*as G from"lodash/fp/assocPath";import*as X from"lodash/constant";import*as Y from"swagger-client/es/resolver/strategies/generic";import*as Q from"swagger-client/es/resolver/strategies/openapi-2";import*as Z from"swagger-client/es/resolver/strategies/openapi-3-0";import*as ee from"swagger-client/es/resolver/strategies/openapi-3-1-apidom";import*as te from"swagger-client/es/resolver";import*as re from"swagger-client/es/execute";import*as ne from"swagger-client/es/http";import*as ae from"swagger-client/es/subtree-resolver";import*as oe from"swagger-client/es/helpers";import*as se from"react-dom";import*as le from"react-redux";import*as ie from"lodash/identity";import*as ce from"lodash/zipObject";import*as ue from"lodash/toString";import*as de from"classnames";import*as pe from"js-file-download";import*as me from"lodash/toLower";import*as fe from"react-immutable-pure-component";import*as he from"remarkable";import*as ge from"remarkable/linkify";import*as ye from"dompurify";import*as Ee from"react-debounce-input";import*as ve from"lodash/isPlainObject";var Se={764:function(e,t,r){const n=r(780),a=r(294),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=Buffer,t.SlowBuffer=function SlowBuffer(e){+e!=e&&(e=0);return Buffer.alloc(+e)},t.INSPECT_MAX_BYTES=50;const s=2147483647;function createBuffer(e){if(e>s)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,Buffer.prototype),t}function Buffer(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(e)}return from(e,t,r)}function from(e,t,r){if("string"==typeof e)return function fromString(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!Buffer.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|byteLength(e,t);let n=createBuffer(r);const a=n.write(e,t);a!==r&&(n=n.slice(0,a));return n}(e,t);if(ArrayBuffer.isView(e))return function fromArrayView(e){if(isInstance(e,Uint8Array)){const t=new Uint8Array(e);return fromArrayBuffer(t.buffer,t.byteOffset,t.byteLength)}return fromArrayLike(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer))return fromArrayBuffer(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(isInstance(e,SharedArrayBuffer)||e&&isInstance(e.buffer,SharedArrayBuffer)))return fromArrayBuffer(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return Buffer.from(n,t,r);const a=function fromObject(e){if(Buffer.isBuffer(e)){const t=0|checked(e.length),r=createBuffer(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||numberIsNaN(e.length)?createBuffer(0):fromArrayLike(e);if("Buffer"===e.type&&Array.isArray(e.data))return fromArrayLike(e.data)}(e);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return Buffer.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function assertSize(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function allocUnsafe(e){return assertSize(e),createBuffer(e<0?0:0|checked(e))}function fromArrayLike(e){const t=e.length<0?0:0|checked(e.length),r=createBuffer(t);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|e}function byteLength(e,t){if(Buffer.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||isInstance(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let a=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(e).length;default:if(a)return n?-1:utf8ToBytes(e).length;t=(""+t).toLowerCase(),a=!0}}function slowToString(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return hexSlice(this,t,r);case"utf8":case"utf-8":return utf8Slice(this,t,r);case"ascii":return asciiSlice(this,t,r);case"latin1":case"binary":return latin1Slice(this,t,r);case"base64":return base64Slice(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function swap(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function bidirectionalIndexOf(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),numberIsNaN(r=+r)&&(r=a?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=Buffer.from(t,n)),Buffer.isBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,r,n,a);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):arrayIndexOf(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,r,n,a){let o,s=1,l=e.length,i=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,l/=2,i/=2,r/=2}function read(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(a){let n=-1;for(o=r;ol&&(r=l-i),o=r;o>=0;o--){let r=!0;for(let n=0;na&&(n=a):n=a;const o=t.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function base64Slice(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function utf8Slice(e,t,r){r=Math.min(e.length,r);const n=[];let a=t;for(;a239?4:t>223?3:t>191?2:1;if(a+s<=r){let r,n,l,i;switch(s){case 1:t<128&&(o=t);break;case 2:r=e[a+1],128==(192&r)&&(i=(31&t)<<6|63&r,i>127&&(o=i));break;case 3:r=e[a+1],n=e[a+2],128==(192&r)&&128==(192&n)&&(i=(15&t)<<12|(63&r)<<6|63&n,i>2047&&(i<55296||i>57343)&&(o=i));break;case 4:r=e[a+1],n=e[a+2],l=e[a+3],128==(192&r)&&128==(192&n)&&128==(192&l)&&(i=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&l,i>65535&&i<1114112&&(o=i))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),a+=s}return function decodeCodePointsArray(e){const t=e.length;if(t<=l)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(Buffer.isBuffer(t)||(t=Buffer.from(t)),t.copy(n,a)):Uint8Array.prototype.set.call(n,t,a);else{if(!Buffer.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,a)}a+=t.length}return n},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},o&&(Buffer.prototype[o]=Buffer.prototype.inspect),Buffer.prototype.compare=function compare(e,t,r,n,a){if(isInstance(e,Uint8Array)&&(e=Buffer.from(e,e.offset,e.byteLength)),!Buffer.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&t>=r)return 0;if(n>=a)return-1;if(t>=r)return 1;if(this===e)return 0;let o=(a>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0);const l=Math.min(o,s),i=this.slice(n,a),c=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const a=this.length-t;if((void 0===r||r>a)&&(r=a),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return hexWrite(this,e,t,r);case"utf8":case"utf-8":return utf8Write(this,e,t,r);case"ascii":case"latin1":case"binary":return asciiWrite(this,e,t,r);case"base64":return base64Write(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const l=4096;function asciiSlice(e,t,r){let n="";r=Math.min(e.length,r);for(let a=t;an)&&(r=n);let a="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function checkInt(e,t,r,n,a,o){if(!Buffer.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError("Index out of range")}function wrtBigUInt64LE(e,t,r,n,a){checkIntBI(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,r}function wrtBigUInt64BE(e,t,r,n,a){checkIntBI(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s>>=8,e[r+2]=s,s>>=8,e[r+1]=s,s>>=8,e[r]=s,r+8}function checkIEEE754(e,t,r,n,a,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(e,t,r,n,o){return t=+t,r>>>=0,o||checkIEEE754(e,0,r,4),a.write(e,t,r,n,23,4),r+4}function writeDouble(e,t,r,n,o){return t=+t,r>>>=0,o||checkIEEE754(e,0,r,8),a.write(e,t,r,n,52,8),r+8}Buffer.prototype.slice=function slice(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e],a=1,o=0;for(;++o>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e+--t],a=1;for(;t>0&&(a*=256);)n+=this[e+--t]*a;return n},Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(e,t){return e>>>=0,t||checkOffset(e,1,this.length),this[e]},Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]|this[e+1]<<8},Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]<<8|this[e+1]},Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(e){validateNumber(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,a=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(a)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],a=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e],a=1,o=0;for(;++o=a&&(n-=Math.pow(2,8*t)),n},Buffer.prototype.readIntBE=function readIntBE(e,t,r){e>>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=t,a=1,o=this[e+--n];for(;n>0&&(a*=256);)o+=this[e+--n]*a;return a*=128,o>=a&&(o-=Math.pow(2,8*t)),o},Buffer.prototype.readInt8=function readInt8(e,t){return e>>>=0,t||checkOffset(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Buffer.prototype.readInt16LE=function readInt16LE(e,t){e>>>=0,t||checkOffset(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function readInt16BE(e,t){e>>>=0,t||checkOffset(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function readInt32LE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(e){validateNumber(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||checkOffset(e,4,this.length),a.read(this,e,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),a.read(this,e,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(e,t){return e>>>=0,t||checkOffset(e,8,this.length),a.read(this,e,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(e,t){return e>>>=0,t||checkOffset(e,8,this.length),a.read(this,e,!1,52,8)},Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){checkInt(this,e,t,r,Math.pow(2,8*r)-1,0)}let a=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,!n){checkInt(this,e,t,r,Math.pow(2,8*r)-1,0)}let a=r-1,o=1;for(this[t+a]=255&e;--a>=0&&(o*=256);)this[t+a]=e/o&255;return t+r},Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,255,0),this[t]=255&e,t+1},Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(e,t=0){return wrtBigUInt64LE(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(e,t=0){return wrtBigUInt64BE(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeIntLE=function writeIntLE(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);checkInt(this,e,t,r,n-1,-n)}let a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},Buffer.prototype.writeIntBE=function writeIntBE(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);checkInt(this,e,t,r,n-1,-n)}let a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},Buffer.prototype.writeInt8=function writeInt8(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},Buffer.prototype.writeInt16LE=function writeInt16LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeInt16BE=function writeInt16BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeInt32LE=function writeInt32LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},Buffer.prototype.writeInt32BE=function writeInt32BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(e,t=0){return wrtBigUInt64LE(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(e,t=0){return wrtBigUInt64BE(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeFloatLE=function writeFloatLE(e,t,r){return writeFloat(this,e,t,!0,r)},Buffer.prototype.writeFloatBE=function writeFloatBE(e,t,r){return writeFloat(this,e,t,!1,r)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,t,r){return writeDouble(this,e,t,!0,r)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,t,r){return writeDouble(this,e,t,!1,r)},Buffer.prototype.copy=function copy(e,t,r,n){if(!Buffer.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function checkIntBI(e,t,r,n,a,o){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new i.ERR_OUT_OF_RANGE("value",a,e)}!function checkBounds(e,t,r){validateNumber(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||boundsError(t,e.length-(r+1))}(n,a,o)}function validateNumber(e,t){if("number"!=typeof e)throw new i.ERR_INVALID_ARG_TYPE(t,"number",e)}function boundsError(e,t,r){if(Math.floor(e)!==e)throw validateNumber(e,r),new i.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new i.ERR_BUFFER_OUT_OF_BOUNDS;throw new i.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}E("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),E("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),E("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,a=r;return Number.isInteger(r)&&Math.abs(r)>2**32?a=addNumericalSeparator(String(r)):"bigint"==typeof r&&(a=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(a=addNumericalSeparator(a)),a+="n"),n+=` It must be ${t}. Received ${a}`,n}),RangeError);const c=/[^+/0-9A-Za-z-_]/g;function utf8ToBytes(e,t){let r;t=t||1/0;const n=e.length;let a=null;const o=[];for(let s=0;s55295&&r<57344){if(!a){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}a=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(t-=3)>-1&&o.push(239,191,189);if(a=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function base64ToBytes(e){return n.toByteArray(function base64clean(e){if((e=(e=e.split("=")[0]).trim().replace(c,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,r,n){let a;for(a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function isInstance(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function numberIsNaN(e){return e!=e}const u=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let a=0;a<16;++a)t[n+a]=e[r]+e[a]}return t}();function defineBigIntMethod(e){return"undefined"==typeof BigInt?BufferBigIntNotDefined:e}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}},698:function(e,t,r){var n=r(764).Buffer;function isSpecificValue(e){return e instanceof n||e instanceof Date||e instanceof RegExp}function cloneSpecificValue(e){if(e instanceof n){var t=n.alloc?n.alloc(e.length):new n(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function deepCloneArray(e){var t=[];return e.forEach((function(e,r){"object"==typeof e&&null!==e?Array.isArray(e)?t[r]=deepCloneArray(e):isSpecificValue(e)?t[r]=cloneSpecificValue(e):t[r]=a({},e):t[r]=e})),t}function safeGetProperty(e,t){return"__proto__"===t?void 0:e[t]}var a=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,r=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(n){"object"!=typeof n||null===n||Array.isArray(n)||Object.keys(n).forEach((function(o){return t=safeGetProperty(r,o),(e=safeGetProperty(n,o))===r?void 0:"object"!=typeof e||null===e?void(r[o]=e):Array.isArray(e)?void(r[o]=deepCloneArray(e)):isSpecificValue(e)?void(r[o]=cloneSpecificValue(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(r[o]=a({},e)):void(r[o]=a(t,e))}))})),r}},187:function(e){var t,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function ReflectApply(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function ReflectOwnKeys(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function ReflectOwnKeys(e){return Object.getOwnPropertyNames(e)};var a=Number.isNaN||function NumberIsNaN(e){return e!=e};function EventEmitter(){EventEmitter.init.call(this)}e.exports=EventEmitter,e.exports.once=function once(e,t){return new Promise((function(r,n){function errorListener(r){e.removeListener(t,resolver),n(r)}function resolver(){"function"==typeof e.removeListener&&e.removeListener("error",errorListener),r([].slice.call(arguments))}eventTargetAgnosticAddListener(e,t,resolver,{once:!0}),"error"!==t&&function addErrorHandlerIfEventEmitter(e,t,r){"function"==typeof e.on&&eventTargetAgnosticAddListener(e,"error",t,r)}(e,errorListener,{once:!0})}))},EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._eventsCount=0,EventEmitter.prototype._maxListeners=void 0;var o=10;function checkListener(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function _getMaxListeners(e){return void 0===e._maxListeners?EventEmitter.defaultMaxListeners:e._maxListeners}function _addListener(e,t,r,n){var a,o,s;if(checkListener(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]),void 0===s)s=o[t]=r,++e._eventsCount;else if("function"==typeof s?s=o[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(a=_getMaxListeners(e))>0&&s.length>a&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,function ProcessEmitWarning(e){console&&console.warn&&console.warn(e)}(l)}return e}function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},a=onceWrapper.bind(n);return a.listener=r,n.wrapFn=a,a}function _listeners(e,t,r){var n=e._events;if(void 0===n)return[];var a=n[t];return void 0===a?[]:"function"==typeof a?r?[a.listener||a]:[a]:r?function unwrapListeners(e){for(var t=new Array(e.length),r=0;r0&&(s=t[0]),s instanceof Error)throw s;var l=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw l.context=s,l}var i=o[e];if(void 0===i)return!1;if("function"==typeof i)n(i,this,t);else{var c=i.length,u=arrayClone(i,c);for(r=0;r=0;o--)if(r[o]===t||r[o].listener===t){s=r[o].listener,a=o;break}if(a<0)return this;0===a?r.shift():function spliceOne(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},EventEmitter.prototype.listeners=function listeners(e){return _listeners(this,e,!0)},EventEmitter.prototype.rawListeners=function rawListeners(e){return _listeners(this,e,!1)},EventEmitter.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount.call(e,t)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?t(this._events):[]}},157:function(e){function source(e){return e?"string"==typeof e?e:e.source:null}function lookahead(e){return concat("(?=",e,")")}function concat(...e){return e.map((e=>source(e))).join("")}function either(...e){return"("+e.map((e=>source(e))).join("|")+")"}e.exports=function xml(e){const t=concat(/[A-Z_]/,function optional(e){return concat("(",e,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),r={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},n={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},a=e.inherit(n,{begin:/\(/,end:/\)/}),o=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),l={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[n,s,o,a,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[n,a,s,o]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},r,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{className:"tag",begin:concat(/<\//,lookahead(concat(t,/>/))),contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},717:function(e){"function"==typeof Object.create?e.exports=function inherits(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function inherits(e,t){if(t){e.super_=t;var TempCtor=function(){};TempCtor.prototype=t.prototype,e.prototype=new TempCtor,e.prototype.constructor=e}}},155:function(e){var t,r,n=e.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(t===setTimeout)return setTimeout(e,0);if((t===defaultSetTimout||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){t=defaultSetTimout}try{r="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){r=defaultClearTimeout}}();var a,o=[],s=!1,l=-1;function cleanUpNextTick(){s&&a&&(s=!1,a.length?o=a.concat(o):l=-1,o.length&&drainQueue())}function drainQueue(){if(!s){var e=runTimeout(cleanUpNextTick);s=!0;for(var t=o.length;t;){for(a=o,o=[];++l1)for(var r=1;ro)throw new RangeError("requested too many random bytes");var r=s.allocUnsafe(e);if(e>0)if(e>a)for(var i=0;i2?"one of ".concat(t," ").concat(e.slice(0,r-1).join(", "),", or ")+e[r-1]:2===r?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}createErrorType("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),createErrorType("ERR_INVALID_ARG_TYPE",(function(e,t,r){var n,a;if("string"==typeof t&&function startsWith(e,t,r){return e.substr(!r||r<0?0:+r,t.length)===t}(t,"not ")?(n="must not be",t=t.replace(/^not /,"")):n="must be",function endsWith(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e," argument"))a="The ".concat(e," ").concat(n," ").concat(oneOf(t,"type"));else{var o=function includes(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,".")?"property":"argument";a='The "'.concat(e,'" ').concat(o," ").concat(n," ").concat(oneOf(t,"type"))}return a+=". Received type ".concat(typeof r)}),TypeError),createErrorType("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),createErrorType("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),createErrorType("ERR_STREAM_PREMATURE_CLOSE","Premature close"),createErrorType("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),createErrorType("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),createErrorType("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),createErrorType("ERR_STREAM_WRITE_AFTER_END","write after end"),createErrorType("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),createErrorType("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),e.exports.q=t},753:function(e,t,r){var n=r(155),a=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=Duplex;var o=r(481),s=r(229);r(717)(Duplex,o);for(var l=a(s.prototype),i=0;i0)if("string"==typeof t||s.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=function _uint8ArrayToBuffer(e){return l.from(e)}(t)),n)s.endEmitted?w(e,new b):addChunk(e,s,t,!0);else if(s.ended)w(e,new S);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(t=s.decoder.write(t),s.objectMode||0!==t.length?addChunk(e,s,t,!1):maybeReadMore(e,s)):addChunk(e,s,t,!1)}else n||(s.reading=!1,maybeReadMore(e,s));return!s.ended&&(s.lengtht.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=x?e=x:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function emitReadable(e){var t=e._readableState;c("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c("emitReadable",t.flowing),t.emittedReadable=!0,a.nextTick(emitReadable_,e))}function emitReadable_(e){var t=e._readableState;c("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,flow(e)}function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,a.nextTick(maybeReadMore_,e,t))}function maybeReadMore_(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function nReadingNextTick(e){c("readable nexttick read 0"),e.read(0)}function resume_(e,t){c("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}function flow(e){var t=e._readableState;for(c("flow",t.flowing);t.flowing&&null!==e.read(););}function fromList(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function endReadable(e){var t=e._readableState;c("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,a.nextTick(endReadableNT,t,e))}function endReadableNT(e,t){if(c("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function indexOf(e,t){for(var r=0,n=e.length;r=t.highWaterMark:t.length>0)||t.ended))return c("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?endReadable(this):emitReadable(this),null;if(0===(e=howMuchToRead(e,t))&&t.ended)return 0===t.length&&endReadable(this),null;var n,a=t.needReadable;return c("need readable",a),(0===t.length||t.length-e0?fromList(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&endReadable(this)),null!==n&&this.emit("data",n),n},Readable.prototype._read=function(e){w(this,new _("_read()"))},Readable.prototype.pipe=function(e,t){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,c("pipe count=%d opts=%j",n.pipesCount,t);var s=(!t||!1!==t.end)&&e!==a.stdout&&e!==a.stderr?onend:unpipe;function onunpipe(t,a){c("onunpipe"),t===r&&a&&!1===a.hasUnpiped&&(a.hasUnpiped=!0,function cleanup(){c("cleanup"),e.removeListener("close",onclose),e.removeListener("finish",onfinish),e.removeListener("drain",l),e.removeListener("error",onerror),e.removeListener("unpipe",onunpipe),r.removeListener("end",onend),r.removeListener("end",unpipe),r.removeListener("data",ondata),i=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||l()}())}function onend(){c("onend"),e.end()}n.endEmitted?a.nextTick(s):r.once("end",s),e.on("unpipe",onunpipe);var l=function pipeOnDrain(e){return function pipeOnDrainFunctionResult(){var t=e._readableState;c("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&o(e,"data")&&(t.flowing=!0,flow(e))}}(r);e.on("drain",l);var i=!1;function ondata(t){c("ondata");var a=e.write(t);c("dest.write",a),!1===a&&((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==indexOf(n.pipes,e))&&!i&&(c("false write response, pause",n.awaitDrain),n.awaitDrain++),r.pause())}function onerror(t){c("onerror",t),unpipe(),e.removeListener("error",onerror),0===o(e,"error")&&w(e,t)}function onclose(){e.removeListener("finish",onfinish),unpipe()}function onfinish(){c("onfinish"),e.removeListener("close",onclose),unpipe()}function unpipe(){c("unpipe"),r.unpipe(e)}return r.on("data",ondata),function prependListener(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",onerror),e.once("close",onclose),e.once("finish",onfinish),e.emit("pipe",r),n.flowing||(c("pipe resume"),r.resume()),e},Readable.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,a=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0,!1!==n.flowing&&this.resume()):"readable"===e&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,c("on readable",n.length,n.reading),n.length?emitReadable(this):n.reading||a.nextTick(nReadingNextTick,this))),r},Readable.prototype.addListener=Readable.prototype.on,Readable.prototype.removeListener=function(e,t){var r=s.prototype.removeListener.call(this,e,t);return"readable"===e&&a.nextTick(updateReadableListening,this),r},Readable.prototype.removeAllListeners=function(e){var t=s.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||a.nextTick(updateReadableListening,this),t},Readable.prototype.resume=function(){var e=this._readableState;return e.flowing||(c("resume"),e.flowing=!e.readableListening,function resume(e,t){t.resumeScheduled||(t.resumeScheduled=!0,a.nextTick(resume_,e,t))}(this,e)),e.paused=!1,this},Readable.prototype.pause=function(){return c("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(c("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},Readable.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var a in e.on("end",(function(){if(c("wrapped end"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(a){(c("wrapped data"),r.decoder&&(a=r.decoder.write(a)),r.objectMode&&null==a)||(r.objectMode||a&&a.length)&&(t.push(a)||(n=!0,e.pause()))})),e)void 0===this[a]&&"function"==typeof e[a]&&(this[a]=function methodWrap(t){return function methodWrapReturnFunction(){return e[t].apply(e,arguments)}}(a));for(var o=0;o-1))throw new _(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(Writable.prototype,"writableBuffer",{enumerable:!1,get:function get(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(Writable.prototype,"writableHighWaterMark",{enumerable:!1,get:function get(){return this._writableState.highWaterMark}}),Writable.prototype._write=function(e,t,r){r(new f("_write()"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var n=this._writableState;return"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?a.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r),this},Object.defineProperty(Writable.prototype,"writableLength",{enumerable:!1,get:function get(){return this._writableState.length}}),Object.defineProperty(Writable.prototype,"destroyed",{enumerable:!1,get:function get(){return void 0!==this._writableState&&this._writableState.destroyed},set:function set(e){this._writableState&&(this._writableState.destroyed=e)}}),Writable.prototype.destroy=u.destroy,Writable.prototype._undestroy=u.undestroy,Writable.prototype._destroy=function(e,t){t(e)}},850:function(e,t,r){var n,a=r(155);function _defineProperty(e,t,r){return(t=function _toPropertyKey(e){var t=function _toPrimitive(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o=r(610),s=Symbol("lastResolve"),l=Symbol("lastReject"),i=Symbol("error"),c=Symbol("ended"),u=Symbol("lastPromise"),d=Symbol("handlePromise"),p=Symbol("stream");function createIterResult(e,t){return{value:e,done:t}}function readAndResolve(e){var t=e[s];if(null!==t){var r=e[p].read();null!==r&&(e[u]=null,e[s]=null,e[l]=null,t(createIterResult(r,!1)))}}function onReadable(e){a.nextTick(readAndResolve,e)}var m=Object.getPrototypeOf((function(){})),f=Object.setPrototypeOf((_defineProperty(n={get stream(){return this[p]},next:function next(){var e=this,t=this[i];if(null!==t)return Promise.reject(t);if(this[c])return Promise.resolve(createIterResult(void 0,!0));if(this[p].destroyed)return new Promise((function(t,r){a.nextTick((function(){e[i]?r(e[i]):t(createIterResult(void 0,!0))}))}));var r,n=this[u];if(n)r=new Promise(function wrapForNext(e,t){return function(r,n){e.then((function(){t[c]?r(createIterResult(void 0,!0)):t[d](r,n)}),n)}}(n,this));else{var o=this[p].read();if(null!==o)return Promise.resolve(createIterResult(o,!1));r=new Promise(this[d])}return this[u]=r,r}},Symbol.asyncIterator,(function(){return this})),_defineProperty(n,"return",(function _return(){var e=this;return new Promise((function(t,r){e[p].destroy(null,(function(e){e?r(e):t(createIterResult(void 0,!0))}))}))})),n),m);e.exports=function createReadableStreamAsyncIterator(e){var t,r=Object.create(f,(_defineProperty(t={},p,{value:e,writable:!0}),_defineProperty(t,s,{value:null,writable:!0}),_defineProperty(t,l,{value:null,writable:!0}),_defineProperty(t,i,{value:null,writable:!0}),_defineProperty(t,c,{value:e._readableState.endEmitted,writable:!0}),_defineProperty(t,d,{value:function value(e,t){var n=r[p].read();n?(r[u]=null,r[s]=null,r[l]=null,e(createIterResult(n,!1))):(r[s]=e,r[l]=t)},writable:!0}),t));return r[u]=null,o(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=r[l];return null!==t&&(r[u]=null,r[s]=null,r[l]=null,t(e)),void(r[i]=e)}var n=r[s];null!==n&&(r[u]=null,r[s]=null,r[l]=null,n(createIterResult(void 0,!0))),r[c]=!0})),e.on("readable",onReadable.bind(null,r)),r}},327:function(e,t,r){function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _objectSpread(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function unshift(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function shift(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function clear(){this.head=this.tail=null,this.length=0}},{key:"join",value:function join(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r}},{key:"concat",value:function concat(e){if(0===this.length)return n.alloc(0);for(var t,r,a,o=n.allocUnsafe(e>>>0),s=this.head,l=0;s;)t=s.data,r=o,a=l,n.prototype.copy.call(t,r,a),l+=s.data.length,s=s.next;return o}},{key:"consume",value:function consume(e,t){var r;return ea.length?a.length:e;if(o===a.length?n+=a:n+=a.slice(0,e),0===(e-=o)){o===a.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=a.slice(o));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function _getBuffer(e){var t=n.allocUnsafe(e),r=this.head,a=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var o=r.data,s=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,s),0===(e-=s)){s===o.length?(++a,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(s));break}++a}return this.length-=a,t}},{key:o,value:function value(e,t){return a(this,_objectSpread(_objectSpread({},t),{},{depth:0,customInspect:!1}))}}]),BufferList}()},195:function(e,t,r){var n=r(155);function emitErrorAndCloseNT(e,t){emitErrorNT(e,t),emitCloseNT(e)}function emitCloseNT(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function emitErrorNT(e,t){e.emit("error",t)}e.exports={destroy:function destroy(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(emitErrorNT,this,e)):n.nextTick(emitErrorNT,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?r._writableState?r._writableState.errorEmitted?n.nextTick(emitCloseNT,r):(r._writableState.errorEmitted=!0,n.nextTick(emitErrorAndCloseNT,r,e)):n.nextTick(emitErrorAndCloseNT,r,e):t?(n.nextTick(emitCloseNT,r),t(e)):n.nextTick(emitCloseNT,r)})),this)},undestroy:function undestroy(){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)},errorOrDestroy:function errorOrDestroy(e,t){var r=e._readableState,n=e._writableState;r&&r.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit("error",t)}}},610:function(e,t,r){var n=r(281).q.ERR_STREAM_PREMATURE_CLOSE;function noop(){}e.exports=function eos(e,t,r){if("function"==typeof t)return eos(e,null,t);t||(t={}),r=function once(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,n=new Array(r),a=0;a0,(function(e){l||(l=e),e&&c.forEach(call),o||(c.forEach(call),i(l))}))}));return t.reduce(pipe)}},457:function(e,t,r){var n=r(281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function getHighWaterMark(e,t,r,a){var o=function highWaterMarkFrom(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,a,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new n(a?r:"highWaterMark",o);return Math.floor(o)}return e.objectMode?16:16384}}},503:function(e,t,r){e.exports=r(187).EventEmitter},509:function(e,t,r){var n=r(764),a=n.Buffer;function copyProps(e,t){for(var r in e)t[r]=e[r]}function SafeBuffer(e,t,r){return a(e,t,r)}a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow?e.exports=n:(copyProps(n,t),t.Buffer=SafeBuffer),SafeBuffer.prototype=Object.create(a.prototype),copyProps(a,SafeBuffer),SafeBuffer.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return a(e,t,r)},SafeBuffer.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=a(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},SafeBuffer.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return a(e)},SafeBuffer.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},189:function(e,t,r){var n=r(509).Buffer;function Hash(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}Hash.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=n.from(e,t));for(var r=this._block,a=this._blockSize,o=e.length,s=this._len,l=0;l=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,a=(r-n)/4294967296;this._block.writeUInt32BE(a,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},Hash.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=Hash},72:function(e,t,r){var n=e.exports=function SHA(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};n.sha=r(448),n.sha1=r(336),n.sha224=r(432),n.sha256=r(499),n.sha384=r(686),n.sha512=r(816)},448:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);function Sha(){this.init(),this._w=l,a.call(this,64,56)}function rotl30(e){return e<<30|e>>>2}function ft(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(Sha,a),Sha.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,a=0|this._b,o=0|this._c,l=0|this._d,i=0|this._e,c=0;c<16;++c)r[c]=e.readInt32BE(4*c);for(;c<80;++c)r[c]=r[c-3]^r[c-8]^r[c-14]^r[c-16];for(var u=0;u<80;++u){var d=~~(u/20),p=0|((t=n)<<5|t>>>27)+ft(d,a,o,l)+i+r[u]+s[d];i=l,l=o,o=rotl30(a),a=n,n=p}this._a=n+this._a|0,this._b=a+this._b|0,this._c=o+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0},Sha.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=Sha},336:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);function Sha1(){this.init(),this._w=l,a.call(this,64,56)}function rotl5(e){return e<<5|e>>>27}function rotl30(e){return e<<30|e>>>2}function ft(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(Sha1,a),Sha1.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha1.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,a=0|this._b,o=0|this._c,l=0|this._d,i=0|this._e,c=0;c<16;++c)r[c]=e.readInt32BE(4*c);for(;c<80;++c)r[c]=(t=r[c-3]^r[c-8]^r[c-14]^r[c-16])<<1|t>>>31;for(var u=0;u<80;++u){var d=~~(u/20),p=rotl5(n)+ft(d,a,o,l)+i+r[u]+s[d]|0;i=l,l=o,o=rotl30(a),a=n,n=p}this._a=n+this._a|0,this._b=a+this._b|0,this._c=o+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0},Sha1.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=Sha1},432:function(e,t,r){var n=r(717),a=r(499),o=r(189),s=r(509).Buffer,l=new Array(64);function Sha224(){this.init(),this._w=l,o.call(this,64,56)}n(Sha224,a),Sha224.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},Sha224.prototype._hash=function(){var e=s.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=Sha224},499:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=new Array(64);function Sha256(){this.init(),this._w=l,a.call(this,64,56)}function ch(e,t,r){return r^e&(t^r)}function maj(e,t,r){return e&t|r&(e|t)}function sigma0(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function sigma1(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function gamma0(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(Sha256,a),Sha256.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},Sha256.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,a=0|this._b,o=0|this._c,l=0|this._d,i=0|this._e,c=0|this._f,u=0|this._g,d=0|this._h,p=0;p<16;++p)r[p]=e.readInt32BE(4*p);for(;p<64;++p)r[p]=0|(((t=r[p-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[p-7]+gamma0(r[p-15])+r[p-16];for(var m=0;m<64;++m){var f=d+sigma1(i)+ch(i,c,u)+s[m]+r[m]|0,h=sigma0(n)+maj(n,a,o)|0;d=u,u=c,c=i,i=l+f|0,l=o,o=a,a=n,n=f+h|0}this._a=n+this._a|0,this._b=a+this._b|0,this._c=o+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0,this._f=c+this._f|0,this._g=u+this._g|0,this._h=d+this._h|0},Sha256.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=Sha256},686:function(e,t,r){var n=r(717),a=r(816),o=r(189),s=r(509).Buffer,l=new Array(160);function Sha384(){this.init(),this._w=l,o.call(this,128,112)}n(Sha384,a),Sha384.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},Sha384.prototype._hash=function(){var e=s.allocUnsafe(48);function writeInt64BE(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return writeInt64BE(this._ah,this._al,0),writeInt64BE(this._bh,this._bl,8),writeInt64BE(this._ch,this._cl,16),writeInt64BE(this._dh,this._dl,24),writeInt64BE(this._eh,this._el,32),writeInt64BE(this._fh,this._fl,40),e},e.exports=Sha384},816:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],l=new Array(160);function Sha512(){this.init(),this._w=l,a.call(this,128,112)}function Ch(e,t,r){return r^e&(t^r)}function maj(e,t,r){return e&t|r&(e|t)}function sigma0(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function sigma1(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function Gamma0(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function Gamma0l(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function Gamma1(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function Gamma1l(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function getCarry(e,t){return e>>>0>>0?1:0}n(Sha512,a),Sha512.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},Sha512.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,a=0|this._ch,o=0|this._dh,l=0|this._eh,i=0|this._fh,c=0|this._gh,u=0|this._hh,d=0|this._al,p=0|this._bl,m=0|this._cl,f=0|this._dl,h=0|this._el,g=0|this._fl,y=0|this._gl,v=0|this._hl,S=0;S<32;S+=2)t[S]=e.readInt32BE(4*S),t[S+1]=e.readInt32BE(4*S+4);for(;S<160;S+=2){var _=t[S-30],b=t[S-30+1],w=Gamma0(_,b),C=Gamma0l(b,_),x=Gamma1(_=t[S-4],b=t[S-4+1]),O=Gamma1l(b,_),k=t[S-14],N=t[S-14+1],A=t[S-32],I=t[S-32+1],R=C+N|0,T=w+k+getCarry(R,C)|0;T=(T=T+x+getCarry(R=R+O|0,O)|0)+A+getCarry(R=R+I|0,I)|0,t[S]=T,t[S+1]=R}for(var B=0;B<160;B+=2){T=t[B],R=t[B+1];var j=maj(r,n,a),P=maj(d,p,m),M=sigma0(r,d),q=sigma0(d,r),L=sigma1(l,h),D=sigma1(h,l),U=s[B],$=s[B+1],J=Ch(l,i,c),V=Ch(h,g,y),K=v+D|0,z=u+L+getCarry(K,v)|0;z=(z=(z=z+J+getCarry(K=K+V|0,V)|0)+U+getCarry(K=K+$|0,$)|0)+T+getCarry(K=K+R|0,R)|0;var F=q+P|0,W=M+j+getCarry(F,q)|0;u=c,v=y,c=i,y=g,i=l,g=h,l=o+z+getCarry(h=f+K|0,f)|0,o=a,f=m,a=n,m=p,n=r,p=d,r=z+W+getCarry(d=K+F|0,K)|0}this._al=this._al+d|0,this._bl=this._bl+p|0,this._cl=this._cl+m|0,this._dl=this._dl+f|0,this._el=this._el+h|0,this._fl=this._fl+g|0,this._gl=this._gl+y|0,this._hl=this._hl+v|0,this._ah=this._ah+r+getCarry(this._al,d)|0,this._bh=this._bh+n+getCarry(this._bl,p)|0,this._ch=this._ch+a+getCarry(this._cl,m)|0,this._dh=this._dh+o+getCarry(this._dl,f)|0,this._eh=this._eh+l+getCarry(this._el,h)|0,this._fh=this._fh+i+getCarry(this._fl,g)|0,this._gh=this._gh+c+getCarry(this._gl,y)|0,this._hh=this._hh+u+getCarry(this._hl,v)|0},Sha512.prototype._hash=function(){var e=o.allocUnsafe(64);function writeInt64BE(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return writeInt64BE(this._ah,this._al,0),writeInt64BE(this._bh,this._bl,8),writeInt64BE(this._ch,this._cl,16),writeInt64BE(this._dh,this._dl,24),writeInt64BE(this._eh,this._el,32),writeInt64BE(this._fh,this._fl,40),writeInt64BE(this._gh,this._gl,48),writeInt64BE(this._hh,this._hl,56),e},e.exports=Sha512},830:function(e,t,r){e.exports=Stream;var n=r(187).EventEmitter;function Stream(){n.call(this)}r(717)(Stream,n),Stream.Readable=r(481),Stream.Writable=r(229),Stream.Duplex=r(753),Stream.Transform=r(605),Stream.PassThrough=r(725),Stream.finished=r(610),Stream.pipeline=r(946),Stream.Stream=Stream,Stream.prototype.pipe=function(e,t){var r=this;function ondata(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function ondrain(){r.readable&&r.resume&&r.resume()}r.on("data",ondata),e.on("drain",ondrain),e._isStdio||t&&!1===t.end||(r.on("end",onend),r.on("close",onclose));var a=!1;function onend(){a||(a=!0,e.end())}function onclose(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function onerror(e){if(cleanup(),0===n.listenerCount(this,"error"))throw e}function cleanup(){r.removeListener("data",ondata),e.removeListener("drain",ondrain),r.removeListener("end",onend),r.removeListener("close",onclose),r.removeListener("error",onerror),e.removeListener("error",onerror),r.removeListener("end",cleanup),r.removeListener("close",cleanup),e.removeListener("close",cleanup)}return r.on("error",onerror),e.on("error",onerror),r.on("end",cleanup),r.on("close",cleanup),e.on("close",cleanup),e.emit("pipe",r),e}},553:function(e,t,r){var n=r(509).Buffer,a=n.isEncoding||function(e){switch((e=""+e)&&e.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 StringDecoder(e){var t;switch(this.encoding=function normalizeEncoding(e){var t=function _normalizeEncoding(e){if(!e)return"utf8";for(var t;;)switch(e){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 e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(n.isEncoding===a||!a(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=utf16Text,this.end=utf16End,t=4;break;case"utf8":this.fillLast=utf8FillLast,t=4;break;case"base64":this.text=base64Text,this.end=base64End,t=3;break;default:return this.write=simpleWrite,void(this.end=simpleEnd)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function utf8CheckByte(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function utf8FillLast(e){var t=this.lastTotal-this.lastNeed,r=function utf8CheckExtraBytes(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function utf16Text(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function utf16End(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function base64Text(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function base64End(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function simpleWrite(e){return e.toString(this.encoding)}function simpleEnd(e){return e&&e.length?this.write(e):""}t.s=StringDecoder,StringDecoder.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return a>0&&(e.lastNeed=a-1),a;if(--n=0)return a>0&&(e.lastNeed=a-2),a;if(--n=0)return a>0&&(2===a?a=0:e.lastNeed=a-3),a;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},StringDecoder.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},927:function(e,t,r){function config(e){try{if(!r.g.localStorage)return!1}catch(e){return!1}var t=r.g.localStorage[e];return null!=t&&"true"===String(t).toLowerCase()}e.exports=function deprecate(e,t){if(config("noDeprecation"))return e;var r=!1;return function deprecated(){if(!r){if(config("throwDeprecation"))throw new Error(t);config("traceDeprecation")?console.trace(t):console.warn(t),r=!0}return e.apply(this,arguments)}}},131:function(e,t,r){var n=r(70),a=function isClosingTag(e){return/<\/+[^>]+>/.test(e)},o=function isSelfClosingTag(e){return/<[^>]+\/>/.test(e)},s=function isOpeningTag(e){return function isTag(e){return/<[^>!]+>/.test(e)}(e)&&!a(e)&&!o(e)};function getType(e){return a(e)?"ClosingTag":s(e)?"OpeningTag":o(e)?"SelfClosingTag":"Text"}e.exports=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.indentor,a=t.textNodesOnSameLine,o=0,s=[];r=r||" ";var l=function lexer(e){return function splitOnTags(e){return e.split(/(<\/?[^>]+>)/g).filter((function(e){return""!==e.trim()}))}(e).map((function(e){return{value:e,type:getType(e)}}))}(e).map((function(e,t,l){var i=e.value,c=e.type;"ClosingTag"===c&&o--;var u=n(r,o),d=u+i;if("OpeningTag"===c&&o++,a){var p=l[t-1],m=l[t-2];"ClosingTag"===c&&"Text"===p.type&&"OpeningTag"===m.type&&(d=""+u+m.value+p.value+i,s.push(t-2,t-1))}return d}));return s.forEach((function(e){return l[e]=null})),l.filter((function(e){return!!e})).join("\n")}},255:function(e){var t={"&":"&",'"':""","'":"'","<":"<",">":">"};e.exports=function escapeForXML(e){return e&&e.replace?e.replace(/([&"<>'])/g,(function(e,r){return t[r]})):e}},479:function(e,t,r){var n=r(155),a=r(255),o=r(830).Stream;function resolve(e,t,r){var n,o=function create_indent(e,t){return new Array(t||0).join(e||"")}(t,r=r||0),s=e;if("object"==typeof e&&((s=e[n=Object.keys(e)[0]])&&s._elem))return s._elem.name=n,s._elem.icount=r,s._elem.indent=t,s._elem.indents=o,s._elem.interrupt=s,s._elem;var l,i=[],c=[];function get_attributes(e){Object.keys(e).forEach((function(t){i.push(function attribute(e,t){return e+'="'+a(t)+'"'}(t,e[t]))}))}switch(typeof s){case"object":if(null===s)break;s._attr&&get_attributes(s._attr),s._cdata&&c.push(("/g,"]]]]>")+"]]>"),s.forEach&&(l=!1,c.push(""),s.forEach((function(e){"object"==typeof e?"_attr"==Object.keys(e)[0]?get_attributes(e._attr):c.push(resolve(e,t,r+1)):(c.pop(),l=!0,c.push(a(e)))})),l||c.push(""));break;default:c.push(a(s))}return{name:n,interrupt:!1,attributes:i,content:c,icount:r,indents:o,indent:t}}function format(e,t,r){if("object"!=typeof t)return e(!1,t);var n=t.interrupt?1:t.content.length;function proceed(){for(;t.content.length;){var a=t.content.shift();if(void 0!==a){if(interrupt(a))return;format(e,a)}}e(!1,(n>1?t.indents:"")+(t.name?"":"")+(t.indent&&!r?"\n":"")),r&&r()}function interrupt(t){return!!t.interrupt&&(t.interrupt.append=e,t.interrupt.end=proceed,t.interrupt=!1,e(!0),!0)}if(e(!1,t.indents+(t.name?"<"+t.name:"")+(t.attributes.length?" "+t.attributes.join(" "):"")+(n?t.name?">":"":t.name?"/>":"")+(t.indent&&n>1?"\n":"")),!n)return e(!1,t.indent?"\n":"");interrupt(t)||proceed()}e.exports=function xml(e,t){"object"!=typeof t&&(t={indent:t});var r=t.stream?new o:null,a="",s=!1,l=t.indent?!0===t.indent?" ":t.indent:"",i=!0;function delay(e){i?n.nextTick(e):e()}function append(e,t){if(void 0!==t&&(a+=t),e&&!s&&(r=r||new o,s=!0),e&&s){var n=a;delay((function(){r.emit("data",n)})),a=""}}function add(e,t){format(append,resolve(e,l,l?1:0),t)}function end(){if(r){var e=a;delay((function(){r.emit("data",e),r.emit("end"),r.readable=!1,r.emit("close")}))}}return delay((function(){i=!1})),t.declaration&&function addXmlDeclaration(e){var t={version:"1.0",encoding:e.encoding||"UTF-8"};e.standalone&&(t.standalone=e.standalone),add({"?xml":{_attr:t}}),a=a.replace("/>","?>")}(t.declaration),e&&e.forEach?e.forEach((function(t,r){var n;r+1===e.length&&(n=end),add(t,n)})):add(e,end),r?(r.readable=!0,r):a},e.exports.element=e.exports.Element=function element(){var e={_elem:resolve(Array.prototype.slice.call(arguments)),push:function(e){if(!this.append)throw new Error("not assigned to a parent!");var t=this,r=this._elem.indent;format(this.append,resolve(e,r,this._elem.icount+(r?1:0)),(function(){t.append(!0)}))},close:function(e){void 0!==e&&this.push(e),this.end&&this.end()}};return e}},780:function(t){t.exports=e},294:function(e){e.exports=t},70:function(e){e.exports=r},361:function(){},616:function(){}},_e={};function __webpack_require__(e){var t=_e[e];if(void 0!==t)return t.exports;var r=_e[e]={exports:{}};return Se[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var be={};!function(){__webpack_require__.d(be,{Z:function(){return rl}});var e={};__webpack_require__.r(e),__webpack_require__.d(e,{CLEAR:function(){return Ze},CLEAR_BY:function(){return et},NEW_AUTH_ERR:function(){return Qe},NEW_SPEC_ERR:function(){return Xe},NEW_SPEC_ERR_BATCH:function(){return Ye},NEW_THROWN_ERR:function(){return He},NEW_THROWN_ERR_BATCH:function(){return Ge},clear:function(){return clear},clearBy:function(){return clearBy},newAuthErr:function(){return newAuthErr},newSpecErr:function(){return newSpecErr},newSpecErrBatch:function(){return newSpecErrBatch},newThrownErr:function(){return newThrownErr},newThrownErrBatch:function(){return newThrownErrBatch}});var t={};__webpack_require__.r(t),__webpack_require__.d(t,{AUTHORIZE:function(){return _t},AUTHORIZE_OAUTH2:function(){return Ct},CONFIGURE_AUTH:function(){return Ot},LOGOUT:function(){return bt},PRE_AUTHORIZE_OAUTH2:function(){return wt},RESTORE_AUTHORIZATION:function(){return kt},SHOW_AUTH_POPUP:function(){return St},VALIDATE:function(){return xt},authPopup:function(){return authPopup},authorize:function(){return authorize},authorizeAccessCodeWithBasicAuthentication:function(){return authorizeAccessCodeWithBasicAuthentication},authorizeAccessCodeWithFormParams:function(){return authorizeAccessCodeWithFormParams},authorizeApplication:function(){return authorizeApplication},authorizeOauth2:function(){return authorizeOauth2},authorizeOauth2WithPersistOption:function(){return authorizeOauth2WithPersistOption},authorizePassword:function(){return authorizePassword},authorizeRequest:function(){return authorizeRequest},authorizeWithPersistOption:function(){return authorizeWithPersistOption},configureAuth:function(){return configureAuth},logout:function(){return logout},logoutWithPersistOption:function(){return logoutWithPersistOption},persistAuthorizationIfNeeded:function(){return persistAuthorizationIfNeeded},preAuthorizeImplicit:function(){return preAuthorizeImplicit},restoreAuthorization:function(){return restoreAuthorization},showDefinitions:function(){return showDefinitions}});var r={};__webpack_require__.r(r),__webpack_require__.d(r,{authorized:function(){return Tt},definitionsForRequirements:function(){return definitionsForRequirements},definitionsToAuthorize:function(){return Rt},getConfigs:function(){return Bt},getDefinitionsByNames:function(){return getDefinitionsByNames},isAuthorized:function(){return isAuthorized},shownDefinitions:function(){return It}});var u={};__webpack_require__.r(u),__webpack_require__.d(u,{TOGGLE_CONFIGS:function(){return Ut},UPDATE_CONFIGS:function(){return Dt},loaded:function(){return actions_loaded},toggle:function(){return toggle},update:function(){return update}});var d={};__webpack_require__.r(d),__webpack_require__.d(d,{downloadConfig:function(){return downloadConfig},getConfigByUrl:function(){return getConfigByUrl}});var Se={};__webpack_require__.r(Se),__webpack_require__.d(Se,{get:function(){return get}});var _e={};__webpack_require__.r(_e),__webpack_require__.d(_e,{transform:function(){return transform}});var we={};__webpack_require__.r(we),__webpack_require__.d(we,{transform:function(){return parameter_oneof_transform}});var Ce={};__webpack_require__.r(Ce),__webpack_require__.d(Ce,{allErrors:function(){return Qt},lastError:function(){return Zt}});var xe={};__webpack_require__.r(xe),__webpack_require__.d(xe,{SHOW:function(){return dr},UPDATE_FILTER:function(){return cr},UPDATE_LAYOUT:function(){return ir},UPDATE_MODE:function(){return ur},changeMode:function(){return changeMode},show:function(){return actions_show},updateFilter:function(){return updateFilter},updateLayout:function(){return updateLayout}});var Oe={};__webpack_require__.r(Oe),__webpack_require__.d(Oe,{current:function(){return current},currentFilter:function(){return currentFilter},isShown:function(){return isShown},showSummary:function(){return mr},whatMode:function(){return whatMode}});var ke={};__webpack_require__.r(ke),__webpack_require__.d(ke,{taggedOperations:function(){return taggedOperations}});var Ne={};__webpack_require__.r(Ne),__webpack_require__.d(Ne,{requestSnippetGenerator_curl_bash:function(){return requestSnippetGenerator_curl_bash},requestSnippetGenerator_curl_cmd:function(){return requestSnippetGenerator_curl_cmd},requestSnippetGenerator_curl_powershell:function(){return requestSnippetGenerator_curl_powershell}});var Ae={};__webpack_require__.r(Ae),__webpack_require__.d(Ae,{getActiveLanguage:function(){return gr},getDefaultExpanded:function(){return yr},getGenerators:function(){return hr},getSnippetGenerators:function(){return getSnippetGenerators}});var Ie={};__webpack_require__.r(Ie),__webpack_require__.d(Ie,{allowTryItOutFor:function(){return allowTryItOutFor},basePath:function(){return _n},canExecuteScheme:function(){return canExecuteScheme},consumes:function(){return gn},consumesOptionsFor:function(){return consumesOptionsFor},contentTypeValues:function(){return contentTypeValues},currentProducesFor:function(){return currentProducesFor},definitions:function(){return Sn},externalDocs:function(){return un},findDefinition:function(){return findDefinition},getOAS3RequiredRequestBodyContentType:function(){return getOAS3RequiredRequestBodyContentType},getParameter:function(){return getParameter},hasHost:function(){return In},host:function(){return bn},info:function(){return cn},isMediaTypeSchemaPropertiesEqual:function(){return isMediaTypeSchemaPropertiesEqual},isOAS3:function(){return ln},lastError:function(){return Zr},mutatedRequestFor:function(){return mutatedRequestFor},mutatedRequests:function(){return An},operationScheme:function(){return operationScheme},operationWithMeta:function(){return operationWithMeta},operations:function(){return hn},operationsWithRootInherited:function(){return Cn},operationsWithTags:function(){return On},parameterInclusionSettingFor:function(){return parameterInclusionSettingFor},parameterValues:function(){return parameterValues},parameterWithMeta:function(){return parameterWithMeta},parameterWithMetaByIdentity:function(){return parameterWithMetaByIdentity},parametersIncludeIn:function(){return parametersIncludeIn},parametersIncludeType:function(){return parametersIncludeType},paths:function(){return mn},produces:function(){return yn},producesOptionsFor:function(){return producesOptionsFor},requestFor:function(){return requestFor},requests:function(){return Nn},responseFor:function(){return responseFor},responses:function(){return kn},schemes:function(){return wn},security:function(){return En},securityDefinitions:function(){return vn},semver:function(){return pn},spec:function(){return spec},specJS:function(){return an},specJson:function(){return nn},specJsonWithResolvedSubtrees:function(){return sn},specResolved:function(){return on},specResolvedSubtree:function(){return specResolvedSubtree},specSource:function(){return rn},specStr:function(){return tn},tagDetails:function(){return tagDetails},taggedOperations:function(){return selectors_taggedOperations},tags:function(){return xn},url:function(){return en},validOperationMethods:function(){return fn},validateBeforeExecute:function(){return validateBeforeExecute},validationErrors:function(){return validationErrors},version:function(){return dn}});var Re={};__webpack_require__.r(Re),__webpack_require__.d(Re,{CLEAR_REQUEST:function(){return Wn},CLEAR_RESPONSE:function(){return Fn},CLEAR_VALIDATE_PARAMS:function(){return Hn},LOG_REQUEST:function(){return zn},SET_MUTATED_REQUEST:function(){return Kn},SET_REQUEST:function(){return Vn},SET_RESPONSE:function(){return Jn},SET_SCHEME:function(){return Qn},UPDATE_EMPTY_PARAM_INCLUSION:function(){return Un},UPDATE_JSON:function(){return Ln},UPDATE_OPERATION_META_VALUE:function(){return Gn},UPDATE_PARAM:function(){return Dn},UPDATE_RESOLVED:function(){return Xn},UPDATE_RESOLVED_SUBTREE:function(){return Yn},UPDATE_SPEC:function(){return Mn},UPDATE_URL:function(){return qn},VALIDATE_PARAMS:function(){return $n},changeConsumesValue:function(){return changeConsumesValue},changeParam:function(){return changeParam},changeParamByIdentity:function(){return changeParamByIdentity},changeProducesValue:function(){return changeProducesValue},clearRequest:function(){return clearRequest},clearResponse:function(){return clearResponse},clearValidateParams:function(){return clearValidateParams},execute:function(){return actions_execute},executeRequest:function(){return executeRequest},invalidateResolvedSubtreeCache:function(){return invalidateResolvedSubtreeCache},logRequest:function(){return logRequest},parseToJson:function(){return parseToJson},requestResolvedSubtree:function(){return requestResolvedSubtree},resolveSpec:function(){return resolveSpec},setMutatedRequest:function(){return setMutatedRequest},setRequest:function(){return setRequest},setResponse:function(){return setResponse},setScheme:function(){return setScheme},updateEmptyParamInclusion:function(){return updateEmptyParamInclusion},updateJsonSpec:function(){return updateJsonSpec},updateResolved:function(){return updateResolved},updateResolvedSubtree:function(){return updateResolvedSubtree},updateSpec:function(){return updateSpec},updateUrl:function(){return updateUrl},validateParams:function(){return validateParams}});var Te={};__webpack_require__.r(Te),__webpack_require__.d(Te,{executeRequest:function(){return wrap_actions_executeRequest},updateJsonSpec:function(){return wrap_actions_updateJsonSpec},updateSpec:function(){return wrap_actions_updateSpec},validateParams:function(){return wrap_actions_validateParams}});var Be={};__webpack_require__.r(Be),__webpack_require__.d(Be,{Button:function(){return Button},Col:function(){return Col},Collapse:function(){return Collapse},Container:function(){return Container},Input:function(){return Input},Link:function(){return Link},Row:function(){return Row},Select:function(){return Select},TextArea:function(){return TextArea}});var je={};__webpack_require__.r(je),__webpack_require__.d(je,{JsonSchemaArrayItemFile:function(){return JsonSchemaArrayItemFile},JsonSchemaArrayItemText:function(){return JsonSchemaArrayItemText},JsonSchemaForm:function(){return JsonSchemaForm},JsonSchema_array:function(){return JsonSchema_array},JsonSchema_boolean:function(){return JsonSchema_boolean},JsonSchema_object:function(){return JsonSchema_object},JsonSchema_string:function(){return JsonSchema_string}});var Pe={};__webpack_require__.r(Pe),__webpack_require__.d(Pe,{basePath:function(){return Fa},consumes:function(){return Wa},definitions:function(){return Ja},hasHost:function(){return Va},host:function(){return za},produces:function(){return Ha},schemes:function(){return Ga},securityDefinitions:function(){return Ka},validOperationMethods:function(){return wrap_selectors_validOperationMethods}});var Me={};__webpack_require__.r(Me),__webpack_require__.d(Me,{definitionsToAuthorize:function(){return Xa}});var qe={};__webpack_require__.r(qe),__webpack_require__.d(qe,{callbacksOperations:function(){return Za},isOAS3:function(){return selectors_isOAS3},isOAS30:function(){return selectors_isOAS30},isSwagger2:function(){return selectors_isSwagger2},servers:function(){return Qa}});var Le={};__webpack_require__.r(Le),__webpack_require__.d(Le,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:function(){return So},CLEAR_REQUEST_BODY_VALUE:function(){return _o},SET_REQUEST_BODY_VALIDATE_ERROR:function(){return vo},UPDATE_ACTIVE_EXAMPLES_MEMBER:function(){return ho},UPDATE_REQUEST_BODY_INCLUSION:function(){return fo},UPDATE_REQUEST_BODY_VALUE:function(){return po},UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:function(){return mo},UPDATE_REQUEST_CONTENT_TYPE:function(){return go},UPDATE_RESPONSE_CONTENT_TYPE:function(){return yo},UPDATE_SELECTED_SERVER:function(){return uo},UPDATE_SERVER_VARIABLE_VALUE:function(){return Eo},clearRequestBodyValidateError:function(){return clearRequestBodyValidateError},clearRequestBodyValue:function(){return clearRequestBodyValue},initRequestBodyValidateError:function(){return initRequestBodyValidateError},setActiveExamplesMember:function(){return setActiveExamplesMember},setRequestBodyInclusion:function(){return setRequestBodyInclusion},setRequestBodyValidateError:function(){return setRequestBodyValidateError},setRequestBodyValue:function(){return setRequestBodyValue},setRequestContentType:function(){return setRequestContentType},setResponseContentType:function(){return setResponseContentType},setRetainRequestBodyValueFlag:function(){return setRetainRequestBodyValueFlag},setSelectedServer:function(){return setSelectedServer},setServerVariableValue:function(){return setServerVariableValue}});var De={};__webpack_require__.r(De),__webpack_require__.d(De,{activeExamplesMember:function(){return No},hasUserEditedBody:function(){return xo},requestBodyErrors:function(){return ko},requestBodyInclusionSetting:function(){return Oo},requestBodyValue:function(){return wo},requestContentType:function(){return Ao},responseContentType:function(){return Io},selectDefaultRequestBodyValue:function(){return selectDefaultRequestBodyValue},selectedServer:function(){return bo},serverEffectiveValue:function(){return Bo},serverVariableValue:function(){return Ro},serverVariables:function(){return To},shouldRetainRequestBodyValue:function(){return Co},validOperationMethods:function(){return Po},validateBeforeExecute:function(){return jo},validateShallowRequired:function(){return validateShallowRequired}});var Ue=__webpack_require__(698),$e=__webpack_require__.n(Ue),Je=(e=>{var t={};return __webpack_require__.d(t,e),t})({Component:()=>n.Component,PureComponent:()=>n.PureComponent,createContext:()=>n.createContext,createElement:()=>n.createElement,default:()=>n.default,forwardRef:()=>n.forwardRef,useCallback:()=>n.useCallback,useContext:()=>n.useContext,useEffect:()=>n.useEffect,useRef:()=>n.useRef,useState:()=>n.useState}),Ve=(e=>{var t={};return __webpack_require__.d(t,e),t})({applyMiddleware:()=>a.applyMiddleware,bindActionCreators:()=>a.bindActionCreators,compose:()=>a.compose,createStore:()=>a.createStore}),Ke=(e=>{var t={};return __webpack_require__.d(t,e),t})({List:()=>o.List,Map:()=>o.Map,OrderedMap:()=>o.OrderedMap,Seq:()=>o.Seq,Set:()=>o.Set,default:()=>o.default,fromJS:()=>o.fromJS}),ze=(e=>{var t={};return __webpack_require__.d(t,e),t})({combineReducers:()=>s.combineReducers}),Fe=(e=>{var t={};return __webpack_require__.d(t,e),t})({serializeError:()=>l.serializeError}),We=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>i.default});const He="err_new_thrown_err",Ge="err_new_thrown_err_batch",Xe="err_new_spec_err",Ye="err_new_spec_err_batch",Qe="err_new_auth_err",Ze="err_clear",et="err_clear_by";function newThrownErr(e){return{type:He,payload:(0,Fe.serializeError)(e)}}function newThrownErrBatch(e){return{type:Ge,payload:e}}function newSpecErr(e){return{type:Xe,payload:e}}function newSpecErrBatch(e){return{type:Ye,payload:e}}function newAuthErr(e){return{type:Qe,payload:e}}function clear(){return{type:Ze,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function clearBy(){return{type:et,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}var tt=function makeWindow(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){},FormData:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}(),rt=(e=>{var t={};return __webpack_require__.d(t,e),t})({sanitizeUrl:()=>c.sanitizeUrl}),nt=((e=>{var t={};__webpack_require__.d(t,e)})({}),(e=>{var t={};__webpack_require__.d(t,e)})({}),(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>p.default})),at=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>m.default}),ot=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>f.default}),st=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>h.default}),lt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>g.default}),it=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>y.default}),ct=__webpack_require__(798),ut=__webpack_require__.n(ct),dt=__webpack_require__(72),pt=__webpack_require__.n(dt);const mt=Ke.default.Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function getParameterSchema(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ke.default.Map.isMap(e))return{schema:Ke.default.Map(),parameterContentMediaType:null};if(!t)return"body"===e.get("in")?{schema:e.get("schema",Ke.default.Map()),parameterContentMediaType:null}:{schema:e.filter(((e,t)=>mt.includes(t))),parameterContentMediaType:null};if(e.get("content")){const t=e.get("content",Ke.default.Map({})).keySeq().first();return{schema:e.getIn(["content",t,"schema"],Ke.default.Map()),parameterContentMediaType:t}}return{schema:e.get("schema")?e.get("schema",Ke.default.Map()):Ke.default.Map(),parameterContentMediaType:null}}var ht=__webpack_require__(764).Buffer;const gt="default",isImmutable=e=>Ke.default.Iterable.isIterable(e);function objectify(e){return isObject(e)?isImmutable(e)?e.toJS():e:{}}function fromJSOrdered(e){if(isImmutable(e))return e;if(e instanceof tt.File)return e;if(!isObject(e))return e;if(Array.isArray(e))return Ke.default.Seq(e).map(fromJSOrdered).toList();if((0,lt.default)(e.entries)){const t=function createObjWithHashedKeys(e){if(!(0,lt.default)(e.entries))return e;const t={},r="_**[]",n={};for(let a of e.entries())if(t[a[0]]||n[a[0]]&&n[a[0]].containsMultiple){if(!n[a[0]]){n[a[0]]={containsMultiple:!0,length:1},t[`${a[0]}${r}${n[a[0]].length}`]=t[a[0]],delete t[a[0]]}n[a[0]].length+=1,t[`${a[0]}${r}${n[a[0]].length}`]=a[1]}else t[a[0]]=a[1];return t}(e);return Ke.default.OrderedMap(t).map(fromJSOrdered)}return Ke.default.OrderedMap(e).map(fromJSOrdered)}function normalizeArray(e){return Array.isArray(e)?e:[e]}function isFn(e){return"function"==typeof e}function isObject(e){return!!e&&"object"==typeof e}function isFunc(e){return"function"==typeof e}function isArray(e){return Array.isArray(e)}const yt=nt.default;function objMap(e,t){return Object.keys(e).reduce(((r,n)=>(r[n]=t(e[n],n),r)),{})}function objReduce(e,t){return Object.keys(e).reduce(((r,n)=>{let a=t(e[n],n);return a&&"object"==typeof a&&Object.assign(r,a),r}),{})}function systemThunkMiddleware(e){return t=>{let{dispatch:r,getState:n}=t;return t=>r=>"function"==typeof r?r(e()):t(r)}}function validateValueBySchema(e,t,r,n,a){if(!t)return[];let o=[],s=t.get("nullable"),l=t.get("required"),i=t.get("maximum"),c=t.get("minimum"),u=t.get("type"),d=t.get("format"),p=t.get("maxLength"),m=t.get("minLength"),f=t.get("uniqueItems"),h=t.get("maxItems"),g=t.get("minItems"),y=t.get("pattern");const v=r||!0===l,S=null!=e;if(s&&null===e||!u||!(v||S&&"array"===u||!(!v&&!S)))return[];let _="string"===u&&e,b="array"===u&&Array.isArray(e)&&e.length,w="array"===u&&Ke.default.List.isList(e)&&e.count();const C=[_,b,w,"array"===u&&"string"==typeof e&&e,"file"===u&&e instanceof tt.File,"boolean"===u&&(e||!1===e),"number"===u&&(e||0===e),"integer"===u&&(e||0===e),"object"===u&&"object"==typeof e&&null!==e,"object"===u&&"string"==typeof e&&e].some((e=>!!e));if(v&&!C&&!n)return o.push("Required field is not provided"),o;if("object"===u&&(null===a||"application/json"===a)){let r=e;if("string"==typeof e)try{r=JSON.parse(e)}catch(e){return o.push("Parameter string value must be valid JSON"),o}t&&t.has("required")&&isFunc(l.isList)&&l.isList()&&l.forEach((e=>{void 0===r[e]&&o.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties")&&t.get("properties").forEach(((e,t)=>{const s=validateValueBySchema(r[t],e,!1,n,a);o.push(...s.map((e=>({propKey:t,error:e}))))}))}if(y){let t=((e,t)=>{if(!new RegExp(t).test(e))return"Value must follow pattern "+t})(e,y);t&&o.push(t)}if(g&&"array"===u){let t=((e,t)=>{if(!e&&t>=1||e&&e.length{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?"":"s"}`})(e,h);t&&o.push({needRemove:!0,error:t})}if(f&&"array"===u){let t=((e,t)=>{if(e&&("true"===t||!0===t)){const t=(0,Ke.fromJS)(e),r=t.toSet();if(e.length>r.size){let e=(0,Ke.Set)();if(t.forEach(((r,n)=>{t.filter((e=>isFunc(e.equals)?e.equals(r):e===r)).size>1&&(e=e.add(n))})),0!==e.size)return e.map((e=>({index:e,error:"No duplicates allowed."}))).toArray()}}})(e,f);t&&o.push(...t)}if(p||0===p){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?"s":""}`})(e,p);t&&o.push(t)}if(m){let t=((e,t)=>{if(e.length{if(e>t)return`Value must be less than ${t}`})(e,i);t&&o.push(t)}if(c||0===c){let t=((e,t)=>{if(e{if(isNaN(Date.parse(e)))return"Value must be a DateTime"})(e):"uuid"===d?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return"Value must be a Guid"})(e):(e=>{if(e&&"string"!=typeof e)return"Value must be a string"})(e),!t)return o;o.push(t)}else if("boolean"===u){let t=(e=>{if("true"!==e&&"false"!==e&&!0!==e&&!1!==e)return"Value must be a boolean"})(e);if(!t)return o;o.push(t)}else if("number"===u){let t=(e=>{if(!/^-?\d+(\.?\d+)?$/.test(e))return"Value must be a number"})(e);if(!t)return o;o.push(t)}else if("integer"===u){let t=(e=>{if(!/^-?\d+$/.test(e))return"Value must be an integer"})(e);if(!t)return o;o.push(t)}else if("array"===u){if(!b&&!w)return o;e&&e.forEach(((e,r)=>{const s=validateValueBySchema(e,t.get("items"),!1,n,a);o.push(...s.map((e=>({index:r,error:e}))))}))}else if("file"===u){let t=(e=>{if(e&&!(e instanceof tt.File))return"Value must be a file"})(e);if(!t)return o;o.push(t)}return o}const btoa=e=>{let t;return t=e instanceof ht?e:ht.from(e.toString(),"utf-8"),t.toString("base64")},Et={operationsSorter:{alpha:(e,t)=>e.get("path").localeCompare(t.get("path")),method:(e,t)=>e.get("method").localeCompare(t.get("method"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},buildFormData=e=>{let t=[];for(let r in e){let n=e[r];void 0!==n&&""!==n&&t.push([r,"=",encodeURIComponent(n).replace(/%20/g,"+")].join(""))}return t.join("&")},shallowEqualKeys=(e,t,r)=>!!(0,at.default)(r,(r=>(0,st.default)(e[r],t[r])));function sanitizeUrl(e){return"string"!=typeof e||""===e?"":(0,rt.sanitizeUrl)(e)}function requiresValidationURL(e){return!(!e||e.indexOf("localhost")>=0||e.indexOf("127.0.0.1")>=0||"none"===e)}const createDeepLinkPath=e=>"string"==typeof e||e instanceof String?e.trim().replace(/\s/g,"%20"):"",escapeDeepLinkPath=e=>(0,it.default)(createDeepLinkPath(e).replace(/%20/g,"_")),getExtensions=e=>e.filter(((e,t)=>/^x-/.test(t))),getCommonExtensions=e=>e.filter(((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function deeplyStripKey(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if("object"!=typeof e||Array.isArray(e)||null===e||!t)return e;const n=Object.assign({},e);return Object.keys(n).forEach((e=>{e===t&&r(n[e],e)?delete n[e]:n[e]=deeplyStripKey(n[e],t,r)})),n}function stringify(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"==typeof e&&null!==e)try{return JSON.stringify(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function paramToIdentifier(e){let{returnAll:t=!1,allowHashes:r=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ke.default.Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");const n=e.get("name"),a=e.get("in");let o=[];return e&&e.hashCode&&a&&n&&r&&o.push(`${a}.${n}.hash-${e.hashCode()}`),a&&n&&o.push(`${a}.${n}`),o.push(n),t?o:o[0]||""}function paramToValue(e,t){return paramToIdentifier(e,{returnAll:!0}).map((e=>t[e])).filter((e=>void 0!==e))[0]}function b64toB64UrlEncoded(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}const isEmptyValue=e=>!e||!(!isImmutable(e)||!e.isEmpty()),idFn=e=>e;class Store{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};$e()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},e),this.getSystem=this._getSystem.bind(this),this.store=function configureStore(e,t,r){return function createStoreWithMiddleware(e,t,r){let n=[systemThunkMiddleware(r)];const a=tt.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||Ve.compose;return(0,Ve.createStore)(e,t,a((0,Ve.applyMiddleware)(...n)))}(e,t,r)}(idFn,(0,Ke.fromJS)(this.state),this.getSystem),this.buildSystem(!1),this.register(this.plugins)}getStore(){return this.store}register(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var r=combinePlugins(e,this.getSystem(),this.pluginsOptions);systemExtend(this.system,r),t&&this.buildSystem();callAfterLoad.call(this.system,e,this.getSystem())&&this.buildSystem()}buildSystem(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,r=this.getStore().getState;this.boundSystem=Object.assign({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getWrappedAndBoundSelectors(r,this.getSystem),this.getStateThunks(r),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}_getSystem(){return this.boundSystem}getRootInjects(){return Object.assign({getSystem:this.getSystem,getStore:this.getStore.bind(this),getComponents:this.getComponents.bind(this),getState:this.getStore().getState,getConfigs:this._getConfigs.bind(this),Im:Ke.default,React:Je.default},this.system.rootInjects||{})}_getConfigs(){return this.system.configs}getConfigs(){return{configs:this.system.configs}}setConfigs(e){this.system.configs=e}rebuildReducer(){this.store.replaceReducer(function buildReducer(e){return function allReducers(e){let t=Object.keys(e).reduce(((t,r)=>(t[r]=function makeReducer(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Ke.Map,r=arguments.length>1?arguments[1]:void 0;if(!e)return t;let n=e[r.type];if(n){const e=wrapWithTryCatch(n)(t,r);return null===e?t:e}return t}}(e[r]),t)),{});if(!Object.keys(t).length)return idFn;return(0,ze.combineReducers)(t)}(objMap(e,(e=>e.reducers)))}(this.system.statePlugins))}getType(e){let t=e[0].toUpperCase()+e.slice(1);return objReduce(this.system.statePlugins,((r,n)=>{let a=r[e];if(a)return{[n+t]:a}}))}getSelectors(){return this.getType("selectors")}getActions(){return objMap(this.getType("actions"),(e=>objReduce(e,((e,t)=>{if(isFn(e))return{[t]:e}}))))}getWrappedAndBoundActions(e){var t=this;return objMap(this.getBoundActions(e),((e,r)=>{let n=this.system.statePlugins[r.slice(0,-7)].wrapActions;return n?objMap(e,((e,r)=>{let a=n[r];return a?(Array.isArray(a)||(a=[a]),a.reduce(((e,r)=>{let newAction=function(){return r(e,t.getSystem())(...arguments)};if(!isFn(newAction))throw new TypeError("wrapActions needs to return a function that returns a new function (ie the wrapped action)");return wrapWithTryCatch(newAction)}),e||Function.prototype)):e})):e}))}getWrappedAndBoundSelectors(e,t){var r=this;return objMap(this.getBoundSelectors(e,t),((t,n)=>{let a=[n.slice(0,-9)],o=this.system.statePlugins[a].wrapSelectors;return o?objMap(t,((t,n)=>{let s=o[n];return s?(Array.isArray(s)||(s=[s]),s.reduce(((t,n)=>{let wrappedSelector=function(){for(var o=arguments.length,s=new Array(o),l=0;l(t[r]=e.get(r),t)),{})}getStateThunks(e){return Object.keys(this.system.statePlugins).reduce(((t,r)=>(t[r]=()=>e().get(r),t)),{})}getFn(){return{fn:this.system.fn}}getComponents(e){const t=this.system.components[e];return Array.isArray(t)?t.reduce(((e,t)=>t(e,this.getSystem()))):void 0!==e?this.system.components[e]:this.system.components}getBoundSelectors(e,t){return objMap(this.getSelectors(),((r,n)=>{let a=[n.slice(0,-9)];return objMap(r,(r=>function(){for(var n=arguments.length,o=new Array(n),s=0;s"function"!=typeof e?objMap(e,(e=>process(e))):function(){var t=null;try{t=e(...arguments)}catch(e){t={type:He,error:!0,payload:(0,Fe.serializeError)(e)}}finally{return t}};return objMap(t,(t=>(0,Ve.bindActionCreators)(process(t),e)))}getMapStateToProps(){return()=>Object.assign({},this.getSystem())}getMapDispatchToProps(e){return t=>$e()({},this.getWrappedAndBoundActions(t),this.getFn(),e)}}function combinePlugins(e,t,r){if(isObject(e)&&!isArray(e))return(0,We.default)({},e);if(isFunc(e))return combinePlugins(e(t),t,r);if(isArray(e)){const n="chain"===r.pluginLoadType?t.getComponents():{};return e.map((e=>combinePlugins(e,t,r))).reduce(systemExtend,n)}return{}}function callAfterLoad(e,t){let{hasLoaded:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r;return isObject(e)&&!isArray(e)&&"function"==typeof e.afterLoad&&(n=!0,wrapWithTryCatch(e.afterLoad).call(this,t)),isFunc(e)?callAfterLoad.call(this,e(t),t,{hasLoaded:n}):isArray(e)?e.map((e=>callAfterLoad.call(this,e,t,{hasLoaded:n}))):n}function systemExtend(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!isObject(e))return{};if(!isObject(t))return e;t.wrapComponents&&(objMap(t.wrapComponents,((r,n)=>{const a=e.components&&e.components[n];a&&Array.isArray(a)?(e.components[n]=a.concat([r]),delete t.wrapComponents[n]):a&&(e.components[n]=[a,r],delete t.wrapComponents[n])})),Object.keys(t.wrapComponents).length||delete t.wrapComponents);const{statePlugins:r}=e;if(isObject(r))for(let e in r){const n=r[e];if(!isObject(n))continue;const{wrapActions:a,wrapSelectors:o}=n;if(isObject(a))for(let r in a){let n=a[r];Array.isArray(n)||(n=[n],a[r]=n),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapActions&&t.statePlugins[e].wrapActions[r]&&(t.statePlugins[e].wrapActions[r]=a[r].concat(t.statePlugins[e].wrapActions[r]))}if(isObject(o))for(let r in o){let n=o[r];Array.isArray(n)||(n=[n],o[r]=n),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapSelectors&&t.statePlugins[e].wrapSelectors[r]&&(t.statePlugins[e].wrapSelectors[r]=o[r].concat(t.statePlugins[e].wrapSelectors[r]))}}return $e()(e,t)}function wrapWithTryCatch(e){let{logErrors:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"function"!=typeof e?e:function(){try{for(var r=arguments.length,n=new Array(r),a=0;a{var t={};return __webpack_require__.d(t,e),t})({default:()=>v.default});const St="show_popup",_t="authorize",bt="logout",wt="pre_authorize_oauth2",Ct="authorize_oauth2",xt="validate",Ot="configure_auth",kt="restore_authorization";function showDefinitions(e){return{type:St,payload:e}}function authorize(e){return{type:_t,payload:e}}const authorizeWithPersistOption=e=>t=>{let{authActions:r}=t;r.authorize(e),r.persistAuthorizationIfNeeded()};function logout(e){return{type:bt,payload:e}}const logoutWithPersistOption=e=>t=>{let{authActions:r}=t;r.logout(e),r.persistAuthorizationIfNeeded()},preAuthorizeImplicit=e=>t=>{let{authActions:r,errActions:n}=t,{auth:a,token:o,isValid:s}=e,{schema:l,name:i}=a,c=l.get("flow");delete tt.swaggerUIRedirectOauth2,"accessCode"===c||s||n.newAuthErr({authId:i,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),o.error?n.newAuthErr({authId:i,source:"auth",level:"error",message:JSON.stringify(o)}):r.authorizeOauth2WithPersistOption({auth:a,token:o})};function authorizeOauth2(e){return{type:Ct,payload:e}}const authorizeOauth2WithPersistOption=e=>t=>{let{authActions:r}=t;r.authorizeOauth2(e),r.persistAuthorizationIfNeeded()},authorizePassword=e=>t=>{let{authActions:r}=t,{schema:n,name:a,username:o,password:s,passwordType:l,clientId:i,clientSecret:c}=e,u={grant_type:"password",scope:e.scopes.join(" "),username:o,password:s},d={};switch(l){case"request-body":!function setClientIdAndSecret(e,t,r){t&&Object.assign(e,{client_id:t});r&&Object.assign(e,{client_secret:r})}(u,i,c);break;case"basic":d.Authorization="Basic "+btoa(i+":"+c);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return r.authorizeRequest({body:buildFormData(u),url:n.get("tokenUrl"),name:a,headers:d,query:{},auth:e})};const authorizeApplication=e=>t=>{let{authActions:r}=t,{schema:n,scopes:a,name:o,clientId:s,clientSecret:l}=e,i={Authorization:"Basic "+btoa(s+":"+l)},c={grant_type:"client_credentials",scope:a.join(" ")};return r.authorizeRequest({body:buildFormData(c),name:o,url:n.get("tokenUrl"),auth:e,headers:i})},authorizeAccessCodeWithFormParams=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:a,name:o,clientId:s,clientSecret:l,codeVerifier:i}=t,c={grant_type:"authorization_code",code:t.code,client_id:s,client_secret:l,redirect_uri:r,code_verifier:i};return n.authorizeRequest({body:buildFormData(c),name:o,url:a.get("tokenUrl"),auth:t})}},authorizeAccessCodeWithBasicAuthentication=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:a,name:o,clientId:s,clientSecret:l,codeVerifier:i}=t,c={Authorization:"Basic "+btoa(s+":"+l)},u={grant_type:"authorization_code",code:t.code,client_id:s,redirect_uri:r,code_verifier:i};return n.authorizeRequest({body:buildFormData(u),name:o,url:a.get("tokenUrl"),auth:t,headers:c})}},authorizeRequest=e=>t=>{let r,{fn:n,getConfigs:a,authActions:o,errActions:s,oas3Selectors:l,specSelectors:i,authSelectors:c}=t,{body:u,query:d={},headers:p={},name:m,url:f,auth:h}=e,{additionalQueryStringParams:g}=c.getConfigs()||{};if(i.isOAS3()){let e=l.serverEffectiveValue(l.selectedServer());r=(0,vt.default)(f,e,!0)}else r=(0,vt.default)(f,i.url(),!0);"object"==typeof g&&(r.query=Object.assign({},r.query,g));const y=r.toString();let v=Object.assign({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},p);n.fetch({url:y,method:"post",headers:v,query:d,body:u,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),r=t&&(t.error||""),n=t&&(t.parseError||"");e.ok?r||n?s.newAuthErr({authId:m,level:"error",source:"auth",message:JSON.stringify(t)}):o.authorizeOauth2WithPersistOption({auth:h,token:t}):s.newAuthErr({authId:m,level:"error",source:"auth",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const r=e.response.data;try{const e="string"==typeof r?JSON.parse(r):r;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}s.newAuthErr({authId:m,level:"error",source:"auth",message:t})}))};function configureAuth(e){return{type:Ot,payload:e}}function restoreAuthorization(e){return{type:kt,payload:e}}const persistAuthorizationIfNeeded=()=>e=>{let{authSelectors:t,getConfigs:r}=e;if(!r().persistAuthorization)return;const n=t.authorized().toJS();localStorage.setItem("authorized",JSON.stringify(n))},authPopup=(e,t)=>()=>{tt.swaggerUIRedirectOauth2=t,tt.open(e)};var Nt={[St]:(e,t)=>{let{payload:r}=t;return e.set("showDefinitions",r)},[_t]:(e,t)=>{let{payload:r}=t,n=(0,Ke.fromJS)(r),a=e.get("authorized")||(0,Ke.Map)();return n.entrySeq().forEach((t=>{let[r,n]=t;if(!isFunc(n.getIn))return e.set("authorized",a);let o=n.getIn(["schema","type"]);if("apiKey"===o||"http"===o)a=a.set(r,n);else if("basic"===o){let e=n.getIn(["value","username"]),t=n.getIn(["value","password"]);a=a.setIn([r,"value"],{username:e,header:"Basic "+btoa(e+":"+t)}),a=a.setIn([r,"schema"],n.get("schema"))}})),e.set("authorized",a)},[Ct]:(e,t)=>{let r,{payload:n}=t,{auth:a,token:o}=n;a.token=Object.assign({},o),r=(0,Ke.fromJS)(a);let s=e.get("authorized")||(0,Ke.Map)();return s=s.set(r.get("name"),r),e.set("authorized",s)},[bt]:(e,t)=>{let{payload:r}=t,n=e.get("authorized").withMutations((e=>{r.forEach((t=>{e.delete(t)}))}));return e.set("authorized",n)},[Ot]:(e,t)=>{let{payload:r}=t;return e.set("configs",r)},[kt]:(e,t)=>{let{payload:r}=t;return e.set("authorized",(0,Ke.fromJS)(r.authorized))}},At=(e=>{var t={};return __webpack_require__.d(t,e),t})({createSelector:()=>S.createSelector});const state=e=>e,It=(0,At.createSelector)(state,(e=>e.get("showDefinitions"))),Rt=(0,At.createSelector)(state,(()=>e=>{let{specSelectors:t}=e,r=t.securityDefinitions()||(0,Ke.Map)({}),n=(0,Ke.List)();return r.entrySeq().forEach((e=>{let[t,r]=e,a=(0,Ke.Map)();a=a.set(t,r),n=n.push(a)})),n})),getDefinitionsByNames=(e,t)=>e=>{let{specSelectors:r}=e;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");let n=r.securityDefinitions(),a=(0,Ke.List)();return t.valueSeq().forEach((e=>{let t=(0,Ke.Map)();e.entrySeq().forEach((e=>{let r,[a,o]=e,s=n.get(a);"oauth2"===s.get("type")&&o.size&&(r=s.get("scopes"),r.keySeq().forEach((e=>{o.contains(e)||(r=r.delete(e))})),s=s.set("allowedScopes",r)),t=t.set(a,s)})),a=a.push(t)})),a},definitionsForRequirements=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,Ke.List)();return e=>{let{authSelectors:r}=e;const n=r.definitionsToAuthorize()||(0,Ke.List)();let a=(0,Ke.List)();return n.forEach((e=>{let r=t.find((t=>t.get(e.keySeq().first())));r&&(e.forEach(((t,n)=>{if("oauth2"===t.get("type")){const a=r.get(n);let o=t.get("scopes");Ke.List.isList(a)&&Ke.Map.isMap(o)&&(o.keySeq().forEach((e=>{a.contains(e)||(o=o.delete(e))})),e=e.set(n,t.set("scopes",o)))}})),a=a.push(e))})),a}},Tt=(0,At.createSelector)(state,(e=>e.get("authorized")||(0,Ke.Map)())),isAuthorized=(e,t)=>e=>{let{authSelectors:r}=e,n=r.authorized();return Ke.List.isList(t)?!!t.toJS().filter((e=>-1===Object.keys(e).map((e=>!!n.get(e))).indexOf(!1))).length:null},Bt=(0,At.createSelector)(state,(e=>e.get("configs"))),execute=(e,t)=>{let{authSelectors:r,specSelectors:n}=t;return t=>{let{path:a,method:o,operation:s,extras:l}=t,i={authorized:r.authorized()&&r.authorized().toJS(),definitions:n.securityDefinitions()&&n.securityDefinitions().toJS(),specSecurity:n.security()&&n.security().toJS()};return e({path:a,method:o,operation:s,securities:i,...l})}},loaded=(e,t)=>r=>{const{getConfigs:n,authActions:a}=t,o=n();if(e(r),o.persistAuthorization){const e=localStorage.getItem("authorized");e&&a.restoreAuthorization({authorized:JSON.parse(e)})}},wrap_actions_authorize=(e,t)=>r=>{e(r);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=Object.values(r),n="apiKey"===e.get("type"),a="cookie"===e.get("in");n&&a&&(document.cookie=`${e.get("name")}=${t}; SameSite=None; Secure`)}catch(e){console.error("Error persisting cookie based apiKey in document.cookie.",e)}},wrap_actions_logout=(e,t)=>r=>{const n=t.getConfigs(),a=t.authSelectors.authorized();try{n.persistAuthorization&&Array.isArray(r)&&r.forEach((e=>{const t=a.get(e,{}),r="apiKey"===t.getIn(["schema","type"]),n="cookie"===t.getIn(["schema","in"]);if(r&&n){const e=t.getIn(["schema","name"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error("Error deleting cookie based apiKey from document.cookie.",e)}e(r)};var jt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>_.default}),Pt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>b.default});class LockAuthIcon extends Je.default.Component{mapStateToProps(e,t){return{state:e,ownProps:(0,Pt.default)(t,Object.keys(t.getSystem()))}}render(){const{getComponent:e,ownProps:t}=this.props,r=e("LockIcon");return Je.default.createElement(r,t)}}var Mt=LockAuthIcon;class UnlockAuthIcon extends Je.default.Component{mapStateToProps(e,t){return{state:e,ownProps:(0,Pt.default)(t,Object.keys(t.getSystem()))}}render(){const{getComponent:e,ownProps:t}=this.props,r=e("UnlockIcon");return Je.default.createElement(r,t)}}var qt=UnlockAuthIcon;function auth(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=preauthorizeApiKey.bind(null,e),this.rootInjects.preauthorizeBasic=preauthorizeBasic.bind(null,e)},components:{LockAuthIcon:Mt,UnlockAuthIcon:qt,LockAuthOperationIcon:Mt,UnlockAuthOperationIcon:qt},statePlugins:{auth:{reducers:Nt,actions:t,selectors:r,wrapActions:{authorize:wrap_actions_authorize,logout:wrap_actions_logout}},configs:{wrapActions:{loaded}},spec:{wrapActions:{execute}}}}}function preauthorizeBasic(e,t,r,n){const{authActions:{authorize:a},specSelectors:{specJson:o,isOAS3:s}}=e,l=s()?["components","securitySchemes"]:["securityDefinitions"],i=o().getIn([...l,t]);return i?a({[t]:{value:{username:r,password:n},schema:i.toJS()}}):null}function preauthorizeApiKey(e,t,r){const{authActions:{authorize:n},specSelectors:{specJson:a,isOAS3:o}}=e,s=o()?["components","securitySchemes"]:["securityDefinitions"],l=a().getIn([...s,t]);return l?n({[t]:{value:r,schema:l.toJS()}}):null}var Lt=(e=>{var t={};return __webpack_require__.d(t,e),t})({JSON_SCHEMA:()=>w.JSON_SCHEMA,default:()=>w.default});const parseYamlConfig=(e,t)=>{try{return Lt.default.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}},Dt="configs_update",Ut="configs_toggle";function update(e,t){return{type:Dt,payload:{[e]:t}}}function toggle(e){return{type:Ut,payload:e}}const actions_loaded=()=>()=>{},downloadConfig=e=>t=>{const{fn:{fetch:r}}=t;return r(e)},getConfigByUrl=(e,t)=>r=>{let{specActions:n}=r;if(e)return n.downloadConfig(e).then(next,next);function next(r){r instanceof Error||r.status>=400?(n.updateLoadingStatus("failedConfig"),n.updateLoadingStatus("failedConfig"),n.updateUrl(""),console.error(r.statusText+" "+e.url),t(null)):t(parseYamlConfig(r.text))}},get=(e,t)=>e.getIn(Array.isArray(t)?t:[t]);var $t={[Dt]:(e,t)=>e.merge((0,Ke.fromJS)(t.payload)),[Ut]:(e,t)=>{const r=t.payload,n=e.get(r);return e.set(r,!n)}};const Jt={getLocalConfig:()=>parseYamlConfig('---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n')};function configsPlugin(){return{statePlugins:{spec:{actions:d,selectors:Jt},configs:{reducers:$t,actions:u,selectors:Se}}}}const setHash=e=>e?history.pushState(null,null,`#${e}`):window.location.hash="";var Vt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>C.default});const Kt="layout_scroll_to",zt="layout_clear_scroll";var Ft={fn:{getScrollParent:function getScrollParent(e,t){const r=document.documentElement;let n=getComputedStyle(e);const a="absolute"===n.position,o=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===n.position)return r;for(let t=e;t=t.parentElement;)if(n=getComputedStyle(t),(!a||"static"!==n.position)&&o.test(n.overflow+n.overflowY+n.overflowX))return t;return r}},statePlugins:{layout:{actions:{scrollToElement:(e,t)=>r=>{try{t=t||r.fn.getScrollParent(e),Vt.default.createScroller(t).to(e)}catch(e){console.error(e)}},scrollTo:e=>({type:Kt,payload:Array.isArray(e)?e:[e]}),clearScrollTo:()=>({type:zt}),readyToScroll:(e,t)=>r=>{const n=r.layoutSelectors.getScrollToKey();Ke.default.is(n,(0,Ke.fromJS)(e))&&(r.layoutActions.scrollToElement(t),r.layoutActions.clearScrollTo())},parseDeepLinkHash:e=>t=>{let{layoutActions:r,layoutSelectors:n,getConfigs:a}=t;if(a().deepLinking&&e){let t=e.slice(1);"!"===t[0]&&(t=t.slice(1)),"/"===t[0]&&(t=t.slice(1));const a=t.split("/").map((e=>e||"")),o=n.isShownKeyFromUrlHashArray(a),[s,l="",i=""]=o;if("operations"===s){const e=n.isShownKeyFromUrlHashArray([l]);l.indexOf("_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(e.map((e=>e.replace(/_/g," "))),!0)),r.show(e,!0)}(l.indexOf("_")>-1||i.indexOf("_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(o.map((e=>e.replace(/_/g," "))),!0)),r.show(o,!0),r.scrollTo(o)}}},selectors:{getScrollToKey:e=>e.get("scrollToKey"),isShownKeyFromUrlHashArray(e,t){const[r,n]=t;return n?["operations",r,n]:r?["operations-tag",r]:[]},urlHashArrayFromIsShownKey(e,t){let[r,n,a]=t;return"operations"==r?[n,a]:"operations-tag"==r?[n]:[]}},reducers:{[Kt]:(e,t)=>e.set("scrollToKey",Ke.default.fromJS(t.payload)),[zt]:e=>e.delete("scrollToKey")},wrapActions:{show:(e,t)=>{let{getConfigs:r,layoutSelectors:n}=t;return function(){for(var t=arguments.length,a=new Array(t),o=0;o{var t={};return __webpack_require__.d(t,e),t})({default:()=>x.default});var operation_wrapper=(e,t)=>class OperationWrapper extends Je.default.Component{onLoad=e=>{const{operation:r}=this.props,{tag:n,operationId:a}=r.toObject();let{isShownKey:o}=r.toObject();o=o||["operations",n,a],t.layoutActions.readyToScroll(o,e)};render(){return Je.default.createElement("span",{ref:this.onLoad},Je.default.createElement(e,this.props))}};var operation_tag_wrapper=(e,t)=>class OperationTagWrapper extends Je.default.Component{onLoad=e=>{const{tag:r}=this.props,n=["operations-tag",r];t.layoutActions.readyToScroll(n,e)};render(){return Je.default.createElement("span",{ref:this.onLoad},Je.default.createElement(e,this.props))}};function deep_linking(){return[Ft,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const r=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(r)}}}},wrapComponents:{operation:operation_wrapper,OperationTag:operation_tag_wrapper}}]}var Ht=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>O.default});function transform(e){return e.map((e=>{let t="is not of a type(s)",r=e.get("message").indexOf(t);if(r>-1){let t=e.get("message").slice(r+19).split(",");return e.set("message",e.get("message").slice(0,r)+function makeNewMessage(e){return e.reduce(((e,t,r,n)=>r===n.length-1&&n.length>1?e+"or "+t:n[r+1]&&n.length>2?e+t+", ":n[r+1]?e+t+" ":e+t),"should be a")}(t))}return e}))}var Gt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>k.default});function parameter_oneof_transform(e,t){let{jsSpec:r}=t;return e}const Xt=[_e,we];function transformErrors(e){let t={jsSpec:{}},r=(0,Ht.default)(Xt,((e,r)=>{try{return r.transform(e,t).filter((e=>!!e))}catch(t){return console.error("Transformer error:",t),e}}),e);return r.filter((e=>!!e)).map((e=>(!e.get("line")&&e.get("path"),e)))}let Yt={line:0,level:"error",message:"Unknown error"};const Qt=(0,At.createSelector)((e=>e),(e=>e.get("errors",(0,Ke.List)()))),Zt=(0,At.createSelector)(Qt,(e=>e.last()));function err(t){return{statePlugins:{err:{reducers:{[He]:(e,t)=>{let{payload:r}=t,n=Object.assign(Yt,r,{type:"thrown"});return e.update("errors",(e=>(e||(0,Ke.List)()).push((0,Ke.fromJS)(n)))).update("errors",(e=>transformErrors(e)))},[Ge]:(e,t)=>{let{payload:r}=t;return r=r.map((e=>(0,Ke.fromJS)(Object.assign(Yt,e,{type:"thrown"})))),e.update("errors",(e=>(e||(0,Ke.List)()).concat((0,Ke.fromJS)(r)))).update("errors",(e=>transformErrors(e)))},[Xe]:(e,t)=>{let{payload:r}=t,n=(0,Ke.fromJS)(r);return n=n.set("type","spec"),e.update("errors",(e=>(e||(0,Ke.List)()).push((0,Ke.fromJS)(n)).sortBy((e=>e.get("line"))))).update("errors",(e=>transformErrors(e)))},[Ye]:(e,t)=>{let{payload:r}=t;return r=r.map((e=>(0,Ke.fromJS)(Object.assign(Yt,e,{type:"spec"})))),e.update("errors",(e=>(e||(0,Ke.List)()).concat((0,Ke.fromJS)(r)))).update("errors",(e=>transformErrors(e)))},[Qe]:(e,t)=>{let{payload:r}=t,n=(0,Ke.fromJS)(Object.assign({},r));return n=n.set("type","auth"),e.update("errors",(e=>(e||(0,Ke.List)()).push((0,Ke.fromJS)(n)))).update("errors",(e=>transformErrors(e)))},[Ze]:(e,t)=>{let{payload:r}=t;if(!r||!e.get("errors"))return e;let n=e.get("errors").filter((e=>e.keySeq().every((t=>{const n=e.get(t),a=r[t];return!a||n!==a}))));return e.merge({errors:n})},[et]:(e,t)=>{let{payload:r}=t;if(!r||"function"!=typeof r)return e;let n=e.get("errors").filter((e=>r(e)));return e.merge({errors:n})}},actions:e,selectors:Ce}}}}function opsFilter(e,t){return e.filter(((e,r)=>-1!==r.indexOf(t)))}function filter(){return{fn:{opsFilter}}}var er=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>N.default});const ArrowUp=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z"}))};ArrowUp.defaultProps={className:null,width:20,height:20};var tr=ArrowUp;const ArrowDown=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"}))};ArrowDown.defaultProps={className:null,width:20,height:20};var rr=ArrowDown;const Arrow=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"}))};Arrow.defaultProps={className:null,width:20,height:20};var nr=Arrow;const Close=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"}))};Close.defaultProps={className:null,width:20,height:20};var ar=Close;const Copy=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 15 16",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("g",{transform:"translate(2, -1)"},Je.default.createElement("path",{fill:"#ffffff",fillRule:"evenodd",d:"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"})))};Copy.defaultProps={className:null,width:15,height:16};var or=Copy;const Lock=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"}))};Lock.defaultProps={className:null,width:20,height:20};var sr=Lock;const Unlock=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"}))};Unlock.defaultProps={className:null,width:20,height:20};var lr=Unlock;var icons=()=>({components:{ArrowUpIcon:tr,ArrowDownIcon:rr,ArrowIcon:nr,CloseIcon:ar,CopyIcon:or,LockIcon:sr,UnlockIcon:lr}});const ir="layout_update_layout",cr="layout_update_filter",ur="layout_update_mode",dr="layout_show";function updateLayout(e){return{type:ir,payload:e}}function updateFilter(e){return{type:cr,payload:e}}function actions_show(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=normalizeArray(e),{type:dr,payload:{thing:e,shown:t}}}function changeMode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=normalizeArray(e),{type:ur,payload:{thing:e,mode:t}}}var pr={[ir]:(e,t)=>e.set("layout",t.payload),[cr]:(e,t)=>e.set("filter",t.payload),[dr]:(e,t)=>{const r=t.payload.shown,n=(0,Ke.fromJS)(t.payload.thing);return e.update("shown",(0,Ke.fromJS)({}),(e=>e.set(n,r)))},[ur]:(e,t)=>{let r=t.payload.thing,n=t.payload.mode;return e.setIn(["modes"].concat(r),(n||"")+"")}};const current=e=>e.get("layout"),currentFilter=e=>e.get("filter"),isShown=(e,t,r)=>(t=normalizeArray(t),e.get("shown",(0,Ke.fromJS)({})).get((0,Ke.fromJS)(t),r)),whatMode=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=normalizeArray(t),e.getIn(["modes",...t],r)},mr=(0,At.createSelector)((e=>e),(e=>!isShown(e,"editor"))),taggedOperations=(e,t)=>function(r){for(var n=arguments.length,a=new Array(n>1?n-1:0),o=1;o=0&&(s=s.slice(0,d)),s};function plugins_layout(){return{statePlugins:{layout:{reducers:pr,actions:xe,selectors:Oe},spec:{wrapSelectors:ke}}}}function logs(e){let{configs:t}=e;const r={debug:0,info:1,log:2,warn:3,error:4},getLevel=e=>r[e]||-1;let{logLevel:n}=t,a=getLevel(n);function log(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=a&&console[e](...r)}return log.warn=log.bind(null,"warn"),log.error=log.bind(null,"error"),log.info=log.bind(null,"info"),log.debug=log.bind(null,"debug"),{rootInjects:{log}}}let fr=!1;function on_complete(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return fr=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const r=t.getConfigs().onComplete;return fr&&"function"==typeof r&&(setTimeout(r,0),fr=!1),e(...arguments)}}}}}}const extractKey=e=>{const t="_**[]";return e.indexOf(t)<0?e:e.split(t)[0].trim()},escapeShell=e=>"-d "===e||/^[_\/-]/g.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'",escapeCMD=e=>"-d "===(e=e.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?e.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(e)?e:'"'+e+'"',escapePowershell=e=>"-d "===e?e:/\n/.test(e)?'@"\n'+e.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(e)?e:"'"+e.replace(/"/g,'""').replace(/'/g,"''")+"'";const curlify=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=!1,o="";const addWords=function(){for(var e=arguments.length,r=new Array(e),n=0;no+=` ${r}`,addIndent=function(){return o+=" ".repeat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)};let s=e.get("headers");if(o+="curl"+n,e.has("curlOptions")&&addWords(...e.get("curlOptions")),addWords("-X",e.get("method")),addNewLine(),addIndent(),addWordsWithoutLeadingSpace(`${e.get("url")}`),s&&s.size)for(let t of e.get("headers").entries()){addNewLine(),addIndent();let[e,r]=t;addWordsWithoutLeadingSpace("-H",`${e}: ${r}`),a=a||/^content-type$/i.test(e)&&/^multipart\/form-data$/i.test(r)}const l=e.get("body");if(l)if(a&&["POST","PUT","PATCH"].includes(e.get("method")))for(let[e,t]of l.entrySeq()){let r=extractKey(e);addNewLine(),addIndent(),addWordsWithoutLeadingSpace("-F"),t instanceof tt.File&&"string"==typeof t.valueOf()?addWords(`${r}=${t.data}${t.type?`;type=${t.type}`:""}`):t instanceof tt.File?addWords(`${r}=@${t.name}${t.type?`;type=${t.type}`:""}`):addWords(`${r}=${t}`)}else if(l instanceof tt.File)addNewLine(),addIndent(),addWordsWithoutLeadingSpace(`--data-binary '@${l.name}'`);else{addNewLine(),addIndent(),addWordsWithoutLeadingSpace("-d ");let t=l;Ke.Map.isMap(t)?addWordsWithoutLeadingSpace(function getStringBodyOfMap(e){let t=[];for(let[r,n]of e.get("body").entrySeq()){let e=extractKey(r);n instanceof tt.File?t.push(` "${e}": {\n "name": "${n.name}"${n.type?`,\n "type": "${n.type}"`:""}\n }`):t.push(` "${e}": ${JSON.stringify(n,null,2).replace(/(\r\n|\r|\n)/g,"\n ")}`)}return`{\n${t.join(",\n")}\n}`}(e)):("string"!=typeof t&&(t=JSON.stringify(t)),addWordsWithoutLeadingSpace(t))}else l||"POST"!==e.get("method")||(addNewLine(),addIndent(),addWordsWithoutLeadingSpace("-d ''"));return o},requestSnippetGenerator_curl_powershell=e=>curlify(e,escapePowershell,"`\n",".exe"),requestSnippetGenerator_curl_bash=e=>curlify(e,escapeShell,"\\\n"),requestSnippetGenerator_curl_cmd=e=>curlify(e,escapeCMD,"^\n"),request_snippets_selectors_state=e=>e||(0,Ke.Map)(),hr=(0,At.createSelector)(request_snippets_selectors_state,(e=>{const t=e.get("languages"),r=e.get("generators",(0,Ke.Map)());return!t||t.isEmpty()?r:r.filter(((e,r)=>t.includes(r)))})),getSnippetGenerators=e=>t=>{let{fn:r}=t;return hr(e).map(((e,t)=>{const n=(e=>r[`requestSnippetGenerator_${e}`])(t);return"function"!=typeof n?null:e.set("fn",n)})).filter((e=>e))},gr=(0,At.createSelector)(request_snippets_selectors_state,(e=>e.get("activeLanguage"))),yr=(0,At.createSelector)(request_snippets_selectors_state,(e=>e.get("defaultExpanded")));var Er=(e=>{var t={};return __webpack_require__.d(t,e),t})({CopyToClipboard:()=>A.CopyToClipboard}),vr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>I.default}),Sr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>R.default}),_r=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>T.default}),br=__webpack_require__(157),wr=__webpack_require__.n(br)(),Cr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>B.default}),xr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>j.default}),Or=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>P.default}),kr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>M.default}),Nr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>q.default}),Ar=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>L.default}),Ir=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>D.default}),Rr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>U.default}),Tr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>$.default}),Br=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>J.default}),jr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>V.default});vr.default.registerLanguage("json",_r.default),vr.default.registerLanguage("js",Sr.default),vr.default.registerLanguage("xml",wr),vr.default.registerLanguage("yaml",xr.default),vr.default.registerLanguage("http",Or.default),vr.default.registerLanguage("bash",Cr.default),vr.default.registerLanguage("powershell",kr.default),vr.default.registerLanguage("javascript",Sr.default);const Pr={agate:Nr.default,arta:Ar.default,monokai:Ir.default,nord:Rr.default,obsidian:Tr.default,"tomorrow-night":Br.default,idea:jr.default},Mr=Object.keys(Pr),getStyle=e=>Mr.includes(e)?Pr[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),Nr.default),qr={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},Lr={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"};var request_snippets=e=>{let{request:t,requestSnippetsSelectors:r,getConfigs:n,getComponent:a}=e;const o=(0,lt.default)(n)?n():null,s=!1!==(0,Gt.default)(o,"syntaxHighlight")&&(0,Gt.default)(o,"syntaxHighlight.activated",!0),l=(0,Je.useRef)(null),i=a("ArrowUpIcon"),c=a("ArrowDownIcon"),[u,d]=(0,Je.useState)(r.getSnippetGenerators()?.keySeq().first()),[p,m]=(0,Je.useState)(r?.getDefaultExpanded());(0,Je.useEffect)((()=>{}),[]),(0,Je.useEffect)((()=>{const e=Array.from(l.current.childNodes).filter((e=>!!e.nodeType&&e.classList?.contains("curl-command")));return e.forEach((e=>e.addEventListener("mousewheel",handlePreventYScrollingBeyondElement,{passive:!1}))),()=>{e.forEach((e=>e.removeEventListener("mousewheel",handlePreventYScrollingBeyondElement)))}}),[t]);const f=r.getSnippetGenerators(),h=f.get(u),g=h.get("fn")(t),handleSetIsExpanded=()=>{m(!p)},handleGetBtnStyle=e=>e===u?Lr:qr,handlePreventYScrollingBeyondElement=e=>{const{target:t,deltaY:r}=e,{scrollHeight:n,offsetHeight:a,scrollTop:o}=t;n>a&&(0===o&&r<0||a+o>=n&&r>0)&&e.preventDefault()},y=s?Je.default.createElement(vr.default,{language:h.get("syntax"),className:"curl microlight",style:getStyle((0,Gt.default)(o,"syntaxHighlight.theme"))},g):Je.default.createElement("textarea",{readOnly:!0,className:"curl",value:g});return Je.default.createElement("div",{className:"request-snippets",ref:l},Je.default.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},Je.default.createElement("h4",{onClick:()=>handleSetIsExpanded(),style:{cursor:"pointer"}},"Snippets"),Je.default.createElement("button",{onClick:()=>handleSetIsExpanded(),style:{border:"none",background:"none"},title:p?"Collapse operation":"Expand operation"},p?Je.default.createElement(c,{className:"arrow",width:"10",height:"10"}):Je.default.createElement(i,{className:"arrow",width:"10",height:"10"}))),p&&Je.default.createElement("div",{className:"curl-command"},Je.default.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},f.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement("div",{style:handleGetBtnStyle(t),className:"btn",key:t,onClick:()=>(e=>{u!==e&&d(e)})(t)},Je.default.createElement("h4",{style:t===u?{color:"white"}:{}},r.get("title")))}))),Je.default.createElement("div",{className:"copy-to-clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:g},Je.default.createElement("button",null))),Je.default.createElement("div",null,y)))},plugins_request_snippets=()=>({components:{RequestSnippets:request_snippets},fn:Ne,statePlugins:{requestSnippets:{selectors:Ae}}}),Dr=__webpack_require__(479),Ur=__webpack_require__.n(Dr),$r=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>K.default}),Jr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>z.default});const shallowArrayEquals=e=>t=>Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every(((e,r)=>e===t[r])),list=function(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:list;const{Cache:r}=nt.default;nt.default.Cache=Cache;const n=(0,nt.default)(e,t);return nt.default.Cache=r,n};const Vr={string:e=>e.pattern?(e=>{try{return new $r.default(e).gen()}catch(e){return"string"}})(e.pattern):"string",string_email:()=>"user@example.com","string_date-time":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",string_hostname:()=>"example.com",string_ipv4:()=>"198.51.100.42",string_ipv6:()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>"boolean"!=typeof e.default||e.default},primitive=e=>{e=objectify(e);let{type:t,format:r}=e,n=Vr[`${t}_${r}`]||Vr[t];return isFunc(n)?n(e):"Unknown Type: "+e.type},sanitizeRef=e=>deeplyStripKey(e,"$$ref",(e=>"string"==typeof e&&e.indexOf("#")>-1)),Kr=["maxProperties","minProperties"],zr=["minItems","maxItems"],Fr=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],Wr=["minLength","maxLength"],liftSampleHelper=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(["example","default","enum","xml","type",...Kr,...zr,...Fr,...Wr].forEach((r=>(r=>{void 0===t[r]&&void 0!==e[r]&&(t[r]=e[r])})(r))),void 0!==e.required&&Array.isArray(e.required)&&(void 0!==t.required&&t.required.length||(t.required=[]),e.required.forEach((e=>{t.required.includes(e)||t.required.push(e)}))),e.properties){t.properties||(t.properties={});let n=objectify(e.properties);for(let a in n)Object.prototype.hasOwnProperty.call(n,a)&&(n[a]&&n[a].deprecated||n[a]&&n[a].readOnly&&!r.includeReadOnly||n[a]&&n[a].writeOnly&&!r.includeWriteOnly||t.properties[a]||(t.properties[a]=n[a],!e.required&&Array.isArray(e.required)&&-1!==e.required.indexOf(a)&&(t.required?t.required.push(a):t.required=[a])))}return e.items&&(t.items||(t.items={}),t.items=liftSampleHelper(e.items,t.items,r)),t},sampleFromSchemaGeneric=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&isFunc(e.toJS)&&(e=e.toJS());let a=void 0!==r||e&&void 0!==e.example||e&&void 0!==e.default;const o=!a&&e&&e.oneOf&&e.oneOf.length>0,s=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(o||s)){const r=objectify(o?e.oneOf[0]:e.anyOf[0]);if(liftSampleHelper(r,e,t),!e.xml&&r.xml&&(e.xml=r.xml),void 0!==e.example&&void 0!==r.example)a=!0;else if(r.properties){e.properties||(e.properties={});let n=objectify(r.properties);for(let a in n)Object.prototype.hasOwnProperty.call(n,a)&&(n[a]&&n[a].deprecated||n[a]&&n[a].readOnly&&!t.includeReadOnly||n[a]&&n[a].writeOnly&&!t.includeWriteOnly||e.properties[a]||(e.properties[a]=n[a],!r.required&&Array.isArray(r.required)&&-1!==r.required.indexOf(a)&&(e.required?e.required.push(a):e.required=[a])))}}const l={};let{xml:i,type:c,example:u,properties:d,additionalProperties:p,items:m}=e||{},{includeReadOnly:f,includeWriteOnly:h}=t;i=i||{};let g,{name:y,prefix:v,namespace:S}=i,_={};if(n&&(y=y||"notagname",g=(v?v+":":"")+y,S)){l[v?"xmlns:"+v:"xmlns"]=S}n&&(_[g]=[]);const schemaHasAny=t=>t.some((t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!c&&(d||p||schemaHasAny(Kr)?c="object":m||schemaHasAny(zr)?c="array":schemaHasAny(Fr)?(c="number",e.type="number"):a||e.enum||(c="string",e.type="string"));const handleMinMaxItems=t=>{if(null!=e?.maxItems&&(t=t.slice(0,e?.maxItems)),null!=e?.minItems){let r=0;for(;t.lengthe&&null!==e.maxProperties&&void 0!==e.maxProperties&&C>=e.maxProperties,canAddProperty=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!hasExceededMaxProperties()&&(!(t=>!(e&&e.required&&e.required.length&&e.required.includes(t)))(t)||e.maxProperties-C-(()=>{if(!e||!e.required)return 0;let t=0;return n?e.required.forEach((e=>t+=void 0===_[e]?0:1)):e.required.forEach((e=>t+=void 0===_[g]?.find((t=>void 0!==t[e]))?0:1)),e.required.length-t})()>0);if(w=n?function(r){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&b[r]){if(b[r].xml=b[r].xml||{},b[r].xml.attribute){const e=Array.isArray(b[r].enum)?b[r].enum[0]:void 0,t=b[r].example,n=b[r].default;return void(l[b[r].xml.name||r]=void 0!==t?t:void 0!==n?n:void 0!==e?e:primitive(b[r]))}b[r].xml.name=b[r].xml.name||r}else b[r]||!1===p||(b[r]={xml:{name:r}});let o=sampleFromSchemaGeneric(e&&b[r]||void 0,t,a,n);canAddProperty(r)&&(C++,Array.isArray(o)?_[g]=_[g].concat(o):_[g].push(o))}:(r,a)=>{if(canAddProperty(r)){if(Object.prototype.hasOwnProperty.call(e,"discriminator")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,"mapping")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,"$$ref")&&e.$$ref&&e.discriminator.propertyName===r){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){_[r]=t;break}}else _[r]=sampleFromSchemaGeneric(b[r],t,a,n);C++}},a){let a;if(a=sanitizeRef(void 0!==r?r:void 0!==u?u:e.default),!n){if("number"==typeof a&&"string"===c)return`${a}`;if("string"!=typeof a||"string"===c)return a;try{return JSON.parse(a)}catch(e){return a}}if(e||(c=Array.isArray(a)?"array":typeof a),"array"===c){if(!Array.isArray(a)){if("string"==typeof a)return a;a=[a]}const r=e?e.items:void 0;r&&(r.xml=r.xml||i||{},r.xml.name=r.xml.name||i.name);let o=a.map((e=>sampleFromSchemaGeneric(r,t,e,n)));return o=handleMinMaxItems(o),i.wrapped?(_[g]=o,(0,Jr.default)(l)||_[g].push({_attr:l})):_=o,_}if("object"===c){if("string"==typeof a)return a;for(let t in a)Object.prototype.hasOwnProperty.call(a,t)&&(e&&b[t]&&b[t].readOnly&&!f||e&&b[t]&&b[t].writeOnly&&!h||(e&&b[t]&&b[t].xml&&b[t].xml.attribute?l[b[t].xml.name||t]=a[t]:w(t,a[t])));return(0,Jr.default)(l)||_[g].push({_attr:l}),_}return _[g]=(0,Jr.default)(l)?a:[{_attr:l},a],_}if("object"===c){for(let e in b)Object.prototype.hasOwnProperty.call(b,e)&&(b[e]&&b[e].deprecated||b[e]&&b[e].readOnly&&!f||b[e]&&b[e].writeOnly&&!h||w(e));if(n&&l&&_[g].push({_attr:l}),hasExceededMaxProperties())return _;if(!0===p)n?_[g].push({additionalProp:"Anything can be here"}):_.additionalProp1={},C++;else if(p){const r=objectify(p),a=sampleFromSchemaGeneric(r,t,void 0,n);if(n&&r.xml&&r.xml.name&&"notagname"!==r.xml.name)_[g].push(a);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&CsampleFromSchemaGeneric(liftSampleHelper(m,e,t),t,void 0,n)));else if(Array.isArray(m.oneOf))r=m.oneOf.map((e=>sampleFromSchemaGeneric(liftSampleHelper(m,e,t),t,void 0,n)));else{if(!(!n||n&&i.wrapped))return sampleFromSchemaGeneric(m,t,void 0,n);r=[sampleFromSchemaGeneric(m,t,void 0,n)]}return r=handleMinMaxItems(r),n&&i.wrapped?(_[g]=r,(0,Jr.default)(l)||_[g].push({_attr:l}),_):r}let x;if(e&&Array.isArray(e.enum))x=normalizeArray(e.enum)[0];else{if(!e)return;if(x=primitive(e),"number"==typeof x){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,x=t);let r=e.maximum;null!=r&&(e.exclusiveMaximum&&r--,x=r)}if("string"==typeof x&&(null!==e.maxLength&&void 0!==e.maxLength&&(x=x.slice(0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;x.length(e.schema&&(e=e.schema),e.properties&&(e.type="object"),e),createXMLExample=(e,t,r)=>{const n=sampleFromSchemaGeneric(e,t,r,!0);if(n)return"string"==typeof n?n:Ur()(n,{declaration:!0,indent:"\t"})},sampleFromSchema=(e,t,r)=>sampleFromSchemaGeneric(e,t,r,!1),resolver=(e,t,r)=>[e,JSON.stringify(t),JSON.stringify(r)],Hr=utils_memoizeN(createXMLExample,resolver),Gr=utils_memoizeN(sampleFromSchema,resolver),Xr=[{when:/json/,shouldStringifyTypes:["string"]}],Yr=["object"];var get_json_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.memoizedSampleFromSchema(t,r,a),l=typeof s,i=Xr.reduce(((e,t)=>t.when.test(n)?[...e,...t.shouldStringifyTypes]:e),Yr);return(0,ot.default)(i,(e=>e===l))?JSON.stringify(s,null,2):s};var get_yaml_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.getJsonSampleSchema(t,r,n,a);let l;try{l=Lt.default.dump(Lt.default.load(s),{lineWidth:-1},{schema:Lt.JSON_SCHEMA}),"\n"===l[l.length-1]&&(l=l.slice(0,l.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return l.replace(/\t/g," ")};var get_xml_sample_schema=e=>(t,r,n)=>{const{fn:a}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(t.$$ref){let e=t.$$ref.match(/\S*\/(\S+)$/);t.xml.name=e[1]}}return a.memoizedCreateXMLExample(t,r,n)};var get_sample_schema=e=>function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:o}=e();return"function"==typeof t?.toJS&&(t=t.toJS()),"function"==typeof a?.toJS&&(a=a.toJS()),/xml/.test(r)?o.getXmlSampleSchema(t,n,a):/(yaml|yml)/.test(r)?o.getYamlSampleSchema(t,n,r,a):o.getJsonSampleSchema(t,n,r,a)};var json_schema_5_samples=e=>{let{getSystem:t}=e;const r=get_json_sample_schema(t),n=get_yaml_sample_schema(t),a=get_xml_sample_schema(t),o=get_sample_schema(t);return{fn:{jsonSchema5:{inferSchema,sampleFromSchema,sampleFromSchemaGeneric,createXMLExample,memoizedSampleFromSchema:Gr,memoizedCreateXMLExample:Hr,getJsonSampleSchema:r,getYamlSampleSchema:n,getXmlSampleSchema:a,getSampleSchema:o},inferSchema,sampleFromSchema,sampleFromSchemaGeneric,createXMLExample,memoizedSampleFromSchema:Gr,memoizedCreateXMLExample:Hr,getJsonSampleSchema:r,getYamlSampleSchema:n,getXmlSampleSchema:a,getSampleSchema:o}}};const Qr=["get","put","post","delete","options","head","patch","trace"],spec_selectors_state=e=>e||(0,Ke.Map)(),Zr=(0,At.createSelector)(spec_selectors_state,(e=>e.get("lastError"))),en=(0,At.createSelector)(spec_selectors_state,(e=>e.get("url"))),tn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("spec")||"")),rn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("specSource")||"not-editor")),nn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("json",(0,Ke.Map)()))),an=(0,At.createSelector)(nn,(e=>e.toJS())),on=(0,At.createSelector)(spec_selectors_state,(e=>e.get("resolved",(0,Ke.Map)()))),specResolvedSubtree=(e,t)=>e.getIn(["resolvedSubtrees",...t],void 0),mergerFn=(e,t)=>Ke.Map.isMap(e)&&Ke.Map.isMap(t)?t.get("$$ref")?t:(0,Ke.OrderedMap)().mergeWith(mergerFn,e,t):t,sn=(0,At.createSelector)(spec_selectors_state,(e=>(0,Ke.OrderedMap)().mergeWith(mergerFn,e.get("json"),e.get("resolvedSubtrees")))),spec=e=>nn(e),ln=(0,At.createSelector)(spec,(()=>!1)),cn=(0,At.createSelector)(spec,(e=>returnSelfOrNewMap(e&&e.get("info")))),un=(0,At.createSelector)(spec,(e=>returnSelfOrNewMap(e&&e.get("externalDocs")))),dn=(0,At.createSelector)(cn,(e=>e&&e.get("version"))),pn=(0,At.createSelector)(dn,(e=>/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e).slice(1))),mn=(0,At.createSelector)(sn,(e=>e.get("paths"))),fn=(0,At.createSelector)((()=>["get","put","post","delete","options","head","patch"])),hn=(0,At.createSelector)(mn,(e=>{if(!e||e.size<1)return(0,Ke.List)();let t=(0,Ke.List)();return e&&e.forEach?(e.forEach(((e,r)=>{if(!e||!e.forEach)return{};e.forEach(((e,n)=>{Qr.indexOf(n)<0||(t=t.push((0,Ke.fromJS)({path:r,method:n,operation:e,id:`${n}-${r}`})))}))})),t):(0,Ke.List)()})),gn=(0,At.createSelector)(spec,(e=>(0,Ke.Set)(e.get("consumes")))),yn=(0,At.createSelector)(spec,(e=>(0,Ke.Set)(e.get("produces")))),En=(0,At.createSelector)(spec,(e=>e.get("security",(0,Ke.List)()))),vn=(0,At.createSelector)(spec,(e=>e.get("securityDefinitions"))),findDefinition=(e,t)=>{const r=e.getIn(["resolvedSubtrees","definitions",t],null),n=e.getIn(["json","definitions",t],null);return r||n||null},Sn=(0,At.createSelector)(spec,(e=>{const t=e.get("definitions");return Ke.Map.isMap(t)?t:(0,Ke.Map)()})),_n=(0,At.createSelector)(spec,(e=>e.get("basePath"))),bn=(0,At.createSelector)(spec,(e=>e.get("host"))),wn=(0,At.createSelector)(spec,(e=>e.get("schemes",(0,Ke.Map)()))),Cn=(0,At.createSelector)(hn,gn,yn,((e,t,r)=>e.map((e=>e.update("operation",(e=>{if(e){if(!Ke.Map.isMap(e))return;return e.withMutations((e=>(e.get("consumes")||e.update("consumes",(e=>(0,Ke.Set)(e).merge(t))),e.get("produces")||e.update("produces",(e=>(0,Ke.Set)(e).merge(r))),e)))}return(0,Ke.Map)()})))))),xn=(0,At.createSelector)(spec,(e=>{const t=e.get("tags",(0,Ke.List)());return Ke.List.isList(t)?t.filter((e=>Ke.Map.isMap(e))):(0,Ke.List)()})),tagDetails=(e,t)=>(xn(e)||(0,Ke.List)()).filter(Ke.Map.isMap).find((e=>e.get("name")===t),(0,Ke.Map)()),On=(0,At.createSelector)(Cn,xn,((e,t)=>e.reduce(((e,t)=>{let r=(0,Ke.Set)(t.getIn(["operation","tags"]));return r.count()<1?e.update("default",(0,Ke.List)(),(e=>e.push(t))):r.reduce(((e,r)=>e.update(r,(0,Ke.List)(),(e=>e.push(t)))),e)}),t.reduce(((e,t)=>e.set(t.get("name"),(0,Ke.List)())),(0,Ke.OrderedMap)())))),selectors_taggedOperations=e=>t=>{let{getConfigs:r}=t,{tagsSorter:n,operationsSorter:a}=r();return On(e).sortBy(((e,t)=>t),((e,t)=>{let r="function"==typeof n?n:Et.tagsSorter[n];return r?r(e,t):null})).map(((t,r)=>{let n="function"==typeof a?a:Et.operationsSorter[a],o=n?t.sort(n):t;return(0,Ke.Map)({tagDetails:tagDetails(e,r),operations:o})}))},kn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("responses",(0,Ke.Map)()))),Nn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("requests",(0,Ke.Map)()))),An=(0,At.createSelector)(spec_selectors_state,(e=>e.get("mutatedRequests",(0,Ke.Map)()))),responseFor=(e,t,r)=>kn(e).getIn([t,r],null),requestFor=(e,t,r)=>Nn(e).getIn([t,r],null),mutatedRequestFor=(e,t,r)=>An(e).getIn([t,r],null),allowTryItOutFor=()=>!0,parameterWithMetaByIdentity=(e,t,r)=>{const n=sn(e).getIn(["paths",...t,"parameters"],(0,Ke.OrderedMap)()),a=e.getIn(["meta","paths",...t,"parameters"],(0,Ke.OrderedMap)());return n.map((e=>{const t=a.get(`${r.get("in")}.${r.get("name")}`),n=a.get(`${r.get("in")}.${r.get("name")}.hash-${r.hashCode()}`);return(0,Ke.OrderedMap)().merge(e,t,n)})).find((e=>e.get("in")===r.get("in")&&e.get("name")===r.get("name")),(0,Ke.OrderedMap)())},parameterInclusionSettingFor=(e,t,r,n)=>{const a=`${n}.${r}`;return e.getIn(["meta","paths",...t,"parameter_inclusions",a],!1)},parameterWithMeta=(e,t,r,n)=>{const a=sn(e).getIn(["paths",...t,"parameters"],(0,Ke.OrderedMap)()).find((e=>e.get("in")===n&&e.get("name")===r),(0,Ke.OrderedMap)());return parameterWithMetaByIdentity(e,t,a)},operationWithMeta=(e,t,r)=>{const n=sn(e).getIn(["paths",t,r],(0,Ke.OrderedMap)()),a=e.getIn(["meta","paths",t,r],(0,Ke.OrderedMap)()),o=n.get("parameters",(0,Ke.List)()).map((n=>parameterWithMetaByIdentity(e,[t,r],n)));return(0,Ke.OrderedMap)().merge(n,a).set("parameters",o)};function getParameter(e,t,r,n){return t=t||[],e.getIn(["meta","paths",...t,"parameters"],(0,Ke.fromJS)([])).find((e=>Ke.Map.isMap(e)&&e.get("name")===r&&e.get("in")===n))||(0,Ke.Map)()}const In=(0,At.createSelector)(spec,(e=>{const t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function parameterValues(e,t,r){return t=t||[],operationWithMeta(e,...t).get("parameters",(0,Ke.List)()).reduce(((e,t)=>{let n=r&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set(paramToIdentifier(t,{allowHashes:!1}),n)}),(0,Ke.fromJS)({}))}function parametersIncludeIn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(Ke.List.isList(e))return e.some((e=>Ke.Map.isMap(e)&&e.get("in")===t))}function parametersIncludeType(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(Ke.List.isList(e))return e.some((e=>Ke.Map.isMap(e)&&e.get("type")===t))}function contentTypeValues(e,t){t=t||[];let r=sn(e).getIn(["paths",...t],(0,Ke.fromJS)({})),n=e.getIn(["meta","paths",...t],(0,Ke.fromJS)({})),a=currentProducesFor(e,t);const o=r.get("parameters")||new Ke.List,s=n.get("consumes_value")?n.get("consumes_value"):parametersIncludeType(o,"file")?"multipart/form-data":parametersIncludeType(o,"formData")?"application/x-www-form-urlencoded":void 0;return(0,Ke.fromJS)({requestContentType:s,responseContentType:a})}function currentProducesFor(e,t){t=t||[];const r=sn(e).getIn(["paths",...t],null);if(null===r)return;const n=e.getIn(["meta","paths",...t,"produces_value"],null),a=r.getIn(["produces",0],null);return n||a||"application/json"}function producesOptionsFor(e,t){t=t||[];const r=sn(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[a]=t,o=n.get("produces",null),s=r.getIn(["paths",a,"produces"],null),l=r.getIn(["produces"],null);return o||s||l}function consumesOptionsFor(e,t){t=t||[];const r=sn(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[a]=t,o=n.get("consumes",null),s=r.getIn(["paths",a,"consumes"],null),l=r.getIn(["consumes"],null);return o||s||l}const operationScheme=(e,t,r)=>{let n=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),a=Array.isArray(n)?n[1]:null;return e.getIn(["scheme",t,r])||e.getIn(["scheme","_defaultScheme"])||a||""},canExecuteScheme=(e,t,r)=>["http","https"].indexOf(operationScheme(e,t,r))>-1,validationErrors=(e,t)=>{t=t||[];let r=e.getIn(["meta","paths",...t,"parameters"],(0,Ke.fromJS)([]));const n=[];return r.forEach((e=>{let t=e.get("errors");t&&t.count()&&t.forEach((e=>n.push(e)))})),n},validateBeforeExecute=(e,t)=>0===validationErrors(e,t).length,getOAS3RequiredRequestBodyContentType=(e,t)=>{let r={requestBody:!1,requestContentType:{}},n=e.getIn(["resolvedSubtrees","paths",...t,"requestBody"],(0,Ke.fromJS)([]));return n.size<1||(n.getIn(["required"])&&(r.requestBody=n.getIn(["required"])),n.getIn(["content"]).entrySeq().forEach((e=>{const t=e[0];if(e[1].getIn(["schema","required"])){const n=e[1].getIn(["schema","required"]).toJS();r.requestContentType[t]=n}}))),r},isMediaTypeSchemaPropertiesEqual=(e,t,r,n)=>{if((r||n)&&r===n)return!0;let a=e.getIn(["resolvedSubtrees","paths",...t,"requestBody","content"],(0,Ke.fromJS)([]));if(a.size<2||!r||!n)return!1;let o=a.getIn([r,"schema","properties"],(0,Ke.fromJS)([])),s=a.getIn([n,"schema","properties"],(0,Ke.fromJS)([]));return!!o.equals(s)};function returnSelfOrNewMap(e){return Ke.Map.isMap(e)?e:new Ke.Map}var Rn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>F.default}),Tn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>W.default}),Bn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>H.default}),jn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>G.default}),Pn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>X.default});const Mn="spec_update_spec",qn="spec_update_url",Ln="spec_update_json",Dn="spec_update_param",Un="spec_update_empty_param_inclusion",$n="spec_validate_param",Jn="spec_set_response",Vn="spec_set_request",Kn="spec_set_mutated_request",zn="spec_log_request",Fn="spec_clear_response",Wn="spec_clear_request",Hn="spec_clear_validate_param",Gn="spec_update_operation_meta_value",Xn="spec_update_resolved",Yn="spec_update_resolved_subtree",Qn="set_scheme",toStr=e=>(0,Rn.default)(e)?e:"";function updateSpec(e){const t=toStr(e).replace(/\t/g," ");if("string"==typeof e)return{type:Mn,payload:t}}function updateResolved(e){return{type:Xn,payload:e}}function updateUrl(e){return{type:qn,payload:e}}function updateJsonSpec(e){return{type:Ln,payload:e}}const parseToJson=e=>t=>{let{specActions:r,specSelectors:n,errActions:a}=t,{specStr:o}=n,s=null;try{e=e||o(),a.clear({source:"parser"}),s=Lt.default.load(e,{schema:Lt.JSON_SCHEMA})}catch(e){return console.error(e),a.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return s&&"object"==typeof s?r.updateJsonSpec(s):{}};let Zn=!1;const resolveSpec=(e,t)=>r=>{let{specActions:n,specSelectors:a,errActions:o,fn:{fetch:s,resolve:l,AST:i={}},getConfigs:c}=r;Zn||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),Zn=!0);const{modelPropertyMacro:u,parameterMacro:d,requestInterceptor:p,responseInterceptor:m}=c();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let f=i.getLineNumberForPath?i.getLineNumberForPath:()=>{},h=a.specStr();return l({fetch:s,spec:e,baseDoc:String(new URL(t,document.baseURI)),modelPropertyMacro:u,parameterMacro:d,requestInterceptor:p,responseInterceptor:m}).then((e=>{let{spec:t,errors:r}=e;if(o.clear({type:"thrown"}),Array.isArray(r)&&r.length>0){let e=r.map((e=>(console.error(e),e.line=e.fullPath?f(h,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",Object.defineProperty(e,"message",{enumerable:!0,value:e.message}),e)));o.newThrownErrBatch(e)}return n.updateResolved(t)}))};let ea=[];const ta=(0,Tn.default)((()=>{const e=ea.reduce(((e,t)=>{let{path:r,system:n}=t;return e.has(n)||e.set(n,[]),e.get(n).push(r),e}),new Map);ea=[],e.forEach((async(e,t)=>{if(!t)return void console.error("debResolveSubtrees: don't have a system to operate on, aborting.");if(!t.fn.resolveSubtree)return void console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.");const{errActions:r,errSelectors:n,fn:{resolveSubtree:a,fetch:o,AST:s={}},specSelectors:l,specActions:i}=t,c=s.getLineNumberForPath??(0,Pn.default)(void 0),u=l.specStr(),{modelPropertyMacro:d,parameterMacro:p,requestInterceptor:m,responseInterceptor:f}=t.getConfigs();try{const t=await e.reduce((async(e,t)=>{let{resultMap:s,specWithCurrentSubtrees:i}=await e;const{errors:h,spec:g}=await a(i,t,{baseDoc:String(new URL(l.url(),document.baseURI)),modelPropertyMacro:d,parameterMacro:p,requestInterceptor:m,responseInterceptor:f});if(n.allErrors().size&&r.clearBy((e=>"thrown"!==e.get("type")||"resolver"!==e.get("source")||!e.get("fullPath").every(((e,r)=>e===t[r]||void 0===t[r])))),Array.isArray(h)&&h.length>0){let e=h.map((e=>(e.line=e.fullPath?c(u,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",Object.defineProperty(e,"message",{enumerable:!0,value:e.message}),e)));r.newThrownErrBatch(e)}return g&&l.isOAS3()&&"components"===t[0]&&"securitySchemes"===t[1]&&await Promise.all(Object.values(g).filter((e=>"openIdConnect"===e.type)).map((async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:m,responseInterceptor:f};try{const r=await o(t);r instanceof Error||r.status>=400?console.error(r.statusText+" "+t.url):e.openIdConnectData=JSON.parse(r.text)}catch(e){console.error(e)}}))),(0,Bn.default)(s,t,g),i=(0,jn.default)(t,g,i),{resultMap:s,specWithCurrentSubtrees:i}}),Promise.resolve({resultMap:(l.specResolvedSubtree([])||(0,Ke.Map)()).toJS(),specWithCurrentSubtrees:l.specJS()}));i.updateResolvedSubtree([],t.resultMap)}catch(e){console.error(e)}}))}),35),requestResolvedSubtree=e=>t=>{ea.find((r=>{let{path:n,system:a}=r;return a===t&&n.toString()===e.toString()}))||(ea.push({path:e,system:t}),ta())};function changeParam(e,t,r,n,a){return{type:Dn,payload:{path:e,value:n,paramName:t,paramIn:r,isXml:a}}}function changeParamByIdentity(e,t,r,n){return{type:Dn,payload:{path:e,param:t,value:r,isXml:n}}}const updateResolvedSubtree=(e,t)=>({type:Yn,payload:{path:e,value:t}}),invalidateResolvedSubtreeCache=()=>({type:Yn,payload:{path:[],value:(0,Ke.Map)()}}),validateParams=(e,t)=>({type:$n,payload:{pathMethod:e,isOAS3:t}}),updateEmptyParamInclusion=(e,t,r,n)=>({type:Un,payload:{pathMethod:e,paramName:t,paramIn:r,includeEmptyValue:n}});function clearValidateParams(e){return{type:Hn,payload:{pathMethod:e}}}function changeConsumesValue(e,t){return{type:Gn,payload:{path:e,value:t,key:"consumes_value"}}}function changeProducesValue(e,t){return{type:Gn,payload:{path:e,value:t,key:"produces_value"}}}const setResponse=(e,t,r)=>({payload:{path:e,method:t,res:r},type:Jn}),setRequest=(e,t,r)=>({payload:{path:e,method:t,req:r},type:Vn}),setMutatedRequest=(e,t,r)=>({payload:{path:e,method:t,req:r},type:Kn}),logRequest=e=>({payload:e,type:zn}),executeRequest=e=>t=>{let{fn:r,specActions:n,specSelectors:a,getConfigs:o,oas3Selectors:s}=t,{pathName:l,method:i,operation:c}=e,{requestInterceptor:u,responseInterceptor:d}=o(),p=c.toJS();if(c&&c.get("parameters")&&c.get("parameters").filter((e=>e&&!0===e.get("allowEmptyValue"))).forEach((t=>{if(a.parameterInclusionSettingFor([l,i],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};const r=paramToValue(t,e.parameters);(!r||r&&0===r.size)&&(e.parameters[t.get("name")]="")}})),e.contextUrl=(0,vt.default)(a.url()).toString(),p&&p.operationId?e.operationId=p.operationId:p&&l&&i&&(e.operationId=r.opId(p,l,i)),a.isOAS3()){const t=`${l}:${i}`;e.server=s.selectedServer(t)||s.selectedServer();const r=s.serverVariables({server:e.server,namespace:t}).toJS(),n=s.serverVariables({server:e.server}).toJS();e.serverVariables=Object.keys(r).length?r:n,e.requestContentType=s.requestContentType(l,i),e.responseContentType=s.responseContentType(l,i)||"*/*";const a=s.requestBodyValue(l,i),o=s.requestBodyInclusionSetting(l,i);a&&a.toJS?e.requestBody=a.map((e=>Ke.Map.isMap(e)?e.get("value"):e)).filter(((e,t)=>(Array.isArray(e)?0!==e.length:!isEmptyValue(e))||o.get(t))).toJS():e.requestBody=a}let m=Object.assign({},e);m=r.buildRequest(m),n.setRequest(e.pathName,e.method,m);e.requestInterceptor=async t=>{let r=await u.apply(void 0,[t]),a=Object.assign({},r);return n.setMutatedRequest(e.pathName,e.method,a),r},e.responseInterceptor=d;const f=Date.now();return r.execute(e).then((t=>{t.duration=Date.now()-f,n.setResponse(e.pathName,e.method,t)})).catch((t=>{"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),n.setResponse(e.pathName,e.method,{error:!0,err:(0,Fe.serializeError)(t)})}))},actions_execute=function(){let{path:e,method:t,...r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{let{fn:{fetch:a},specSelectors:o,specActions:s}=n,l=o.specJsonWithResolvedSubtrees().toJS(),i=o.operationScheme(e,t),{requestContentType:c,responseContentType:u}=o.contentTypeValues([e,t]).toJS(),d=/xml/i.test(c),p=o.parameterValues([e,t],d).toJS();return s.executeRequest({...r,fetch:a,spec:l,pathName:e,method:t,parameters:p,requestContentType:c,scheme:i,responseContentType:u})}};function clearResponse(e,t){return{type:Fn,payload:{path:e,method:t}}}function clearRequest(e,t){return{type:Wn,payload:{path:e,method:t}}}function setScheme(e,t,r){return{type:Qn,payload:{scheme:e,path:t,method:r}}}var ra={[Mn]:(e,t)=>"string"==typeof t.payload?e.set("spec",t.payload):e,[qn]:(e,t)=>e.set("url",t.payload+""),[Ln]:(e,t)=>e.set("json",fromJSOrdered(t.payload)),[Xn]:(e,t)=>e.setIn(["resolved"],fromJSOrdered(t.payload)),[Yn]:(e,t)=>{const{value:r,path:n}=t.payload;return e.setIn(["resolvedSubtrees",...n],fromJSOrdered(r))},[Dn]:(e,t)=>{let{payload:r}=t,{path:n,paramName:a,paramIn:o,param:s,value:l,isXml:i}=r,c=s?paramToIdentifier(s):`${o}.${a}`;const u=i?"value_xml":"value";return e.setIn(["meta","paths",...n,"parameters",c,u],l)},[Un]:(e,t)=>{let{payload:r}=t,{pathMethod:n,paramName:a,paramIn:o,includeEmptyValue:s}=r;if(!a||!o)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),e;const l=`${o}.${a}`;return e.setIn(["meta","paths",...n,"parameter_inclusions",l],s)},[$n]:(e,t)=>{let{payload:{pathMethod:r,isOAS3:n}}=t;const a=sn(e).getIn(["paths",...r]),o=parameterValues(e,r).toJS();return e.updateIn(["meta","paths",...r,"parameters"],(0,Ke.fromJS)({}),(t=>a.get("parameters",(0,Ke.List)()).reduce(((t,a)=>{const s=paramToValue(a,o),l=parameterInclusionSettingFor(e,r,a.get("name"),a.get("in")),i=function(e,t){let{isOAS3:r=!1,bypassRequiredCheck:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=e.get("required"),{schema:o,parameterContentMediaType:s}=getParameterSchema(e,{isOAS3:r});return validateValueBySchema(t,o,a,n,s)}(a,s,{bypassRequiredCheck:l,isOAS3:n});return t.setIn([paramToIdentifier(a),"errors"],(0,Ke.fromJS)(i))}),t)))},[Hn]:(e,t)=>{let{payload:{pathMethod:r}}=t;return e.updateIn(["meta","paths",...r,"parameters"],(0,Ke.fromJS)([]),(e=>e.map((e=>e.set("errors",(0,Ke.fromJS)([]))))))},[Jn]:(e,t)=>{let r,{payload:{res:n,path:a,method:o}}=t;r=n.error?Object.assign({error:!0,name:n.err.name,message:n.err.message,statusCode:n.err.statusCode},n.err.response):n,r.headers=r.headers||{};let s=e.setIn(["responses",a,o],fromJSOrdered(r));return tt.Blob&&n.data instanceof tt.Blob&&(s=s.setIn(["responses",a,o,"text"],n.data)),s},[Vn]:(e,t)=>{let{payload:{req:r,path:n,method:a}}=t;return e.setIn(["requests",n,a],fromJSOrdered(r))},[Kn]:(e,t)=>{let{payload:{req:r,path:n,method:a}}=t;return e.setIn(["mutatedRequests",n,a],fromJSOrdered(r))},[Gn]:(e,t)=>{let{payload:{path:r,value:n,key:a}}=t,o=["paths",...r],s=["meta","paths",...r];return e.getIn(["json",...o])||e.getIn(["resolved",...o])||e.getIn(["resolvedSubtrees",...o])?e.setIn([...s,a],(0,Ke.fromJS)(n)):e},[Fn]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["responses",r,n])},[Wn]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["requests",r,n])},[Qn]:(e,t)=>{let{payload:{scheme:r,path:n,method:a}}=t;return n&&a?e.setIn(["scheme",n,a],r):n||a?void 0:e.setIn(["scheme","_defaultScheme"],r)}};const wrap_actions_updateSpec=(e,t)=>{let{specActions:r}=t;return function(){e(...arguments),r.parseToJson(...arguments)}},wrap_actions_updateJsonSpec=(e,t)=>{let{specActions:r}=t;return function(){for(var t=arguments.length,n=new Array(t),a=0;a{(0,Gt.default)(s,[e]).$ref&&r.requestResolvedSubtree(["paths",e])})),r.requestResolvedSubtree(["components","securitySchemes"])}},wrap_actions_executeRequest=(e,t)=>{let{specActions:r}=t;return t=>(r.logRequest(t),e(t))},wrap_actions_validateParams=(e,t)=>{let{specSelectors:r}=t;return t=>e(t,r.isOAS3())};var plugins_spec=()=>({statePlugins:{spec:{wrapActions:{...Te},reducers:{...ra},actions:{...Re},selectors:{...Ie}}}}),na=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Y.default}),aa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Q.default}),oa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Z.default}),sa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ee.default}),la=(e=>{var t={};return __webpack_require__.d(t,e),t})({makeResolve:()=>te.makeResolve}),ia=(e=>{var t={};return __webpack_require__.d(t,e),t})({buildRequest:()=>re.buildRequest,execute:()=>re.execute}),ca=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ne.default,makeHttp:()=>ne.makeHttp,serializeRes:()=>ne.serializeRes}),ua=(e=>{var t={};return __webpack_require__.d(t,e),t})({makeResolveSubtree:()=>ae.makeResolveSubtree}),da=(e=>{var t={};return __webpack_require__.d(t,e),t})({opId:()=>oe.opId});const configs_wrap_actions_loaded=(e,t)=>function(){e(...arguments);const r=t.getConfigs().withCredentials;void 0!==r&&(t.fn.fetch.withCredentials="string"==typeof r?"true"===r:!!r)};function swagger_client(e){let{configs:t,getConfigs:r}=e;return{fn:{fetch:(0,ca.makeHttp)(ca.default,t.preFetch,t.postFetch),buildRequest:ia.buildRequest,execute:ia.execute,resolve:(0,la.makeResolve)({strategies:[sa.default,oa.default,aa.default,na.default]}),resolveSubtree:async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=r(),o={modelPropertyMacro:a.modelPropertyMacro,parameterMacro:a.parameterMacro,requestInterceptor:a.requestInterceptor,responseInterceptor:a.responseInterceptor,strategies:[sa.default,oa.default,aa.default,na.default]};return(0,ua.makeResolveSubtree)(o)(e,t,n)},serializeRes:ca.serializeRes,opId:da.opId},statePlugins:{configs:{wrapActions:{loaded:configs_wrap_actions_loaded}}}}}function util(){return{fn:{shallowEqualKeys}}}var pa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>se.default}),ma=(e=>{var t={};return __webpack_require__.d(t,e),t})({Provider:()=>le.Provider,connect:()=>le.connect}),fa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ie.default});const withSystem=e=>t=>{const{fn:r}=e();class WithSystem extends Je.Component{render(){return Je.default.createElement(t,(0,er.default)({},e(),this.props,this.context))}}return WithSystem.displayName=`WithSystem(${r.getDisplayName(t)})`,WithSystem},withRoot=(e,t)=>r=>{const{fn:n}=e();class WithRoot extends Je.Component{render(){return Je.default.createElement(ma.Provider,{store:t},Je.default.createElement(r,(0,er.default)({},this.props,this.context)))}}return WithRoot.displayName=`WithRoot(${n.getDisplayName(r)})`,WithRoot},withConnect=(e,t,r)=>(0,Ve.compose)(r?withRoot(e,r):fa.default,(0,ma.connect)(((r,n)=>{const a={...n,...e()},o=t.prototype?.mapStateToProps||(e=>({state:e}));return o(r,a)})),withSystem(e))(t),handleProps=(e,t,r,n)=>{for(const a in t){const o=t[a];"function"==typeof o&&o(r[a],n[a],e())}},withMappedContainer=(e,t,r)=>(t,n)=>{const{fn:a}=e(),o=r(t,"root");class WithMappedContainer extends Je.Component{constructor(t,r){super(t,r),handleProps(e,n,t,{})}UNSAFE_componentWillReceiveProps(t){handleProps(e,n,t,this.props)}render(){const e=(0,Pt.default)(this.props,n?Object.keys(n):[]);return Je.default.createElement(o,e)}}return WithMappedContainer.displayName=`WithMappedContainer(${a.getDisplayName(o)})`,WithMappedContainer},render=(e,t,r,n)=>a=>{const o=r(e,t,n)("App","root");pa.default.render(Je.default.createElement(o,null),a)},getComponent=(e,t,r)=>function(n,a){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof n)throw new TypeError("Need a string, to fetch a component. Was given a "+typeof n);const s=r(n);return s?a?"root"===a?withConnect(e,s,t()):withConnect(e,s):s:(o.failSilently||e().log.warn("Could not find component:",n),null)},getDisplayName=e=>e.displayName||e.name||"Component";var view=e=>{let{getComponents:t,getStore:r,getSystem:n}=e;const a=(o=getComponent(n,r,t),yt(o,(function(){for(var e=arguments.length,t=new Array(e),r=0;rutils_memoizeN(e,(function(){for(var e=arguments.length,t=new Array(e),r=0;rr=>{let{errActions:n,specSelectors:a,specActions:o,getConfigs:s}=r,{fetch:l}=t;const i=s();function next(t){if(t instanceof Error||t.status>=400)return o.updateLoadingStatus("failed"),n.newThrownErr(Object.assign(new Error((t.message||t.statusText)+" "+e),{source:"fetch"})),void(!t.status&&t instanceof Error&&function checkPossibleFailReasons(){try{let t;if("URL"in tt?t=new URL(e):(t=document.createElement("a"),t.href=e),"https:"!==t.protocol&&"https:"===tt.location.protocol){const e=Object.assign(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:"fetch"});return void n.newThrownErr(e)}if(t.origin!==tt.location.origin){const e=Object.assign(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${tt.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:"fetch"});n.newThrownErr(e)}}catch(e){return}}());o.updateLoadingStatus("success"),o.updateSpec(t.text),a.url()!==e&&o.updateUrl(e)}e=e||a.url(),o.updateLoadingStatus("loading"),n.clear({source:"fetch"}),l({url:e,loadSpec:!0,requestInterceptor:i.requestInterceptor||(e=>e),responseInterceptor:i.responseInterceptor||(e=>e),credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(next,next)},updateLoadingStatus:e=>{let t=[null,"loading","failed","success","failedConfig"];return-1===t.indexOf(e)&&console.error(`Error: ${e} is not one of ${JSON.stringify(t)}`),{type:"spec_update_loading_status",payload:e}}};let n={loadingStatus:(0,At.createSelector)((e=>e||(0,Ke.Map)()),(e=>e.get("loadingStatus")||null))};return{statePlugins:{spec:{actions:r,reducers:{spec_update_loading_status:(e,t)=>"string"==typeof t.payload?e.set("loadingStatus",t.payload):e},selectors:n}}}}var ha=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ce.default});const ga=console.error,withErrorBoundary=e=>t=>{const{getComponent:r,fn:n}=e(),a=r("ErrorBoundary"),o=n.getDisplayName(t);class WithErrorBoundary extends Je.Component{render(){return Je.default.createElement(a,{targetName:o,getComponent:r,fn:n},Je.default.createElement(t,(0,er.default)({},this.props,this.context)))}}var s;return WithErrorBoundary.displayName=`WithErrorBoundary(${o})`,(s=t).prototype&&s.prototype.isReactComponent&&(WithErrorBoundary.prototype.mapStateToProps=t.prototype.mapStateToProps),WithErrorBoundary};var fallback=e=>{let{name:t}=e;return Je.default.createElement("div",{className:"fallback"},"😱 ",Je.default.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))};class ErrorBoundary extends Je.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:r}=this.props;if(this.state.hasError){const r=e("Fallback");return Je.default.createElement(r,{name:t})}return r}}ErrorBoundary.defaultProps={targetName:"this component",getComponent:()=>fallback,fn:{componentDidCatch:ga},children:null};var ya=ErrorBoundary;var safe_render=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{getSystem:n}=r;const a=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],o=(0,ha.default)(a,Array(a.length).fill(((e,t)=>{let{fn:r}=t;return r.withErrorBoundary(e)})));return{fn:{componentDidCatch:ga,withErrorBoundary:withErrorBoundary(n)},components:{ErrorBoundary:ya,Fallback:fallback},wrapComponents:o}}};class App extends Je.default.Component{getLayout(){let{getComponent:e,layoutSelectors:t}=this.props;const r=t.current(),n=e(r,!0);return n||(()=>Je.default.createElement("h1",null,' No layout defined for "',r,'" '))}render(){const e=this.getLayout();return Je.default.createElement(e,null)}}App.defaultProps={};class AuthorizationPopup extends Je.default.Component{close=()=>{let{authActions:e}=this.props;e.showDefinitions(!1)};render(){let{authSelectors:e,authActions:t,getComponent:r,errSelectors:n,specSelectors:a,fn:{AST:o={}}}=this.props,s=e.shownDefinitions();const l=r("auths"),i=r("CloseIcon");return Je.default.createElement("div",{className:"dialog-ux"},Je.default.createElement("div",{className:"backdrop-ux"}),Je.default.createElement("div",{className:"modal-ux"},Je.default.createElement("div",{className:"modal-dialog-ux"},Je.default.createElement("div",{className:"modal-ux-inner"},Je.default.createElement("div",{className:"modal-ux-header"},Je.default.createElement("h3",null,"Available authorizations"),Je.default.createElement("button",{type:"button",className:"close-modal",onClick:this.close},Je.default.createElement(i,null))),Je.default.createElement("div",{className:"modal-ux-content"},s.valueSeq().map(((s,i)=>Je.default.createElement(l,{key:i,AST:o,definitions:s,getComponent:r,errSelectors:n,authSelectors:e,authActions:t,specSelectors:a}))))))))}}class AuthorizeBtn extends Je.default.Component{render(){let{isAuthorized:e,showPopup:t,onClick:r,getComponent:n}=this.props;const a=n("authorizationPopup",!0),o=n("LockAuthIcon",!0),s=n("UnlockAuthIcon",!0);return Je.default.createElement("div",{className:"auth-wrapper"},Je.default.createElement("button",{className:e?"btn authorize locked":"btn authorize unlocked",onClick:r},Je.default.createElement("span",null,"Authorize"),e?Je.default.createElement(o,null):Je.default.createElement(s,null)),t&&Je.default.createElement(a,null))}}class AuthorizeBtnContainer extends Je.default.Component{render(){const{authActions:e,authSelectors:t,specSelectors:r,getComponent:n}=this.props,a=r.securityDefinitions(),o=t.definitionsToAuthorize(),s=n("authorizeBtn");return a?Je.default.createElement(s,{onClick:()=>e.showDefinitions(o),isAuthorized:!!t.authorized().size,showPopup:!!t.shownDefinitions(),getComponent:n}):null}}class AuthorizeOperationBtn extends Je.default.Component{onClick=e=>{e.stopPropagation();let{onClick:t}=this.props;t&&t()};render(){let{isAuthorized:e,getComponent:t}=this.props;const r=t("LockAuthOperationIcon",!0),n=t("UnlockAuthOperationIcon",!0);return Je.default.createElement("button",{className:"authorization__btn","aria-label":e?"authorization button locked":"authorization button unlocked",onClick:this.onClick},e?Je.default.createElement(r,{className:"locked"}):Je.default.createElement(n,{className:"unlocked"}))}}class Auths extends Je.default.Component{constructor(e,t){super(e,t),this.state={}}onAuthChange=e=>{let{name:t}=e;this.setState({[t]:e})};submitAuth=e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)};logoutClick=e=>{e.preventDefault();let{authActions:t,definitions:r}=this.props,n=r.map(((e,t)=>t)).toArray();this.setState(n.reduce(((e,t)=>(e[t]="",e)),{})),t.logoutWithPersistOption(n)};close=e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)};render(){let{definitions:e,getComponent:t,authSelectors:r,errSelectors:n}=this.props;const a=t("AuthItem"),o=t("oauth2",!0),s=t("Button");let l=r.authorized(),i=e.filter(((e,t)=>!!l.get(t))),c=e.filter((e=>"oauth2"!==e.get("type"))),u=e.filter((e=>"oauth2"===e.get("type")));return Je.default.createElement("div",{className:"auth-container"},!!c.size&&Je.default.createElement("form",{onSubmit:this.submitAuth},c.map(((e,r)=>Je.default.createElement(a,{key:r,schema:e,name:r,getComponent:t,onAuthChange:this.onAuthChange,authorized:l,errSelectors:n}))).toArray(),Je.default.createElement("div",{className:"auth-btn-wrapper"},c.size===i.size?Je.default.createElement(s,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):Je.default.createElement(s,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),Je.default.createElement(s,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),u&&u.size?Je.default.createElement("div",null,Je.default.createElement("div",{className:"scope-def"},Je.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),Je.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),e.filter((e=>"oauth2"===e.get("type"))).map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(o,{authorized:l,schema:e,name:t})))).toArray()):null)}}class auth_item_Auths extends Je.default.Component{render(){let{schema:e,name:t,getComponent:r,onAuthChange:n,authorized:a,errSelectors:o}=this.props;const s=r("apiKeyAuth"),l=r("basicAuth");let i;const c=e.get("type");switch(c){case"apiKey":i=Je.default.createElement(s,{key:t,schema:e,name:t,errSelectors:o,authorized:a,getComponent:r,onChange:n});break;case"basic":i=Je.default.createElement(l,{key:t,schema:e,name:t,errSelectors:o,authorized:a,getComponent:r,onChange:n});break;default:i=Je.default.createElement("div",{key:t},"Unknown security definition type ",c)}return Je.default.createElement("div",{key:`${t}-jump`},i)}}class AuthError extends Je.default.Component{render(){let{error:e}=this.props,t=e.get("level"),r=e.get("message"),n=e.get("source");return Je.default.createElement("div",{className:"errors"},Je.default.createElement("b",null,n," ",t),Je.default.createElement("span",null,r))}}class ApiKeyAuth extends Je.default.Component{constructor(e,t){super(e,t);let{name:r,schema:n}=this.props,a=this.getValue();this.state={name:r,schema:n,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}onChange=e=>{let{onChange:t}=this.props,r=e.target.value,n=Object.assign({},this.state,{value:r});this.setState(n),t(n)};render(){let{schema:e,getComponent:t,errSelectors:r,name:n}=this.props;const a=t("Input"),o=t("Row"),s=t("Col"),l=t("authError"),i=t("Markdown",!0),c=t("JumpToPath",!0);let u=this.getValue(),d=r.allErrors().filter((e=>e.get("authId")===n));return Je.default.createElement("div",null,Je.default.createElement("h4",null,Je.default.createElement("code",null,n||e.get("name"))," (apiKey)",Je.default.createElement(c,{path:["securityDefinitions",n]})),u&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(i,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("p",null,"Name: ",Je.default.createElement("code",null,e.get("name")))),Je.default.createElement(o,null,Je.default.createElement("p",null,"In: ",Je.default.createElement("code",null,e.get("in")))),Je.default.createElement(o,null,Je.default.createElement("label",null,"Value:"),u?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text",onChange:this.onChange,autoFocus:!0}))),d.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t}))))}}class BasicAuth extends Je.default.Component{constructor(e,t){super(e,t);let{schema:r,name:n}=this.props,a=this.getValue().username;this.state={name:n,schema:r,value:a?{username:a}:{}}}getValue(){let{authorized:e,name:t}=this.props;return e&&e.getIn([t,"value"])||{}}onChange=e=>{let{onChange:t}=this.props,{value:r,name:n}=e.target,a=this.state.value;a[n]=r,this.setState({value:a}),t(this.state)};render(){let{schema:e,getComponent:t,name:r,errSelectors:n}=this.props;const a=t("Input"),o=t("Row"),s=t("Col"),l=t("authError"),i=t("JumpToPath",!0),c=t("Markdown",!0);let u=this.getValue().username,d=n.allErrors().filter((e=>e.get("authId")===r));return Je.default.createElement("div",null,Je.default.createElement("h4",null,"Basic authorization",Je.default.createElement(i,{path:["securityDefinitions",r]})),u&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(c,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("label",null,"Username:"),u?Je.default.createElement("code",null," ",u," "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text",required:"required",name:"username",onChange:this.onChange,autoFocus:!0}))),Je.default.createElement(o,null,Je.default.createElement("label",null,"Password:"),u?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{autoComplete:"new-password",name:"password",type:"password",onChange:this.onChange}))),d.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t}))))}}function Example(e){const{example:t,showValue:r,getComponent:n,getConfigs:a}=e,o=n("Markdown",!0),s=n("highlightCode");return t?Je.default.createElement("div",{className:"example"},t.get("description")?Je.default.createElement("section",{className:"example__section"},Je.default.createElement("div",{className:"example__section-header"},"Example Description"),Je.default.createElement("p",null,Je.default.createElement(o,{source:t.get("description")}))):null,r&&t.has("value")?Je.default.createElement("section",{className:"example__section"},Je.default.createElement("div",{className:"example__section-header"},"Example Value"),Je.default.createElement(s,{getConfigs:a,value:stringify(t.get("value"))})):null):null}class ExamplesSelect extends Je.default.PureComponent{static defaultProps={examples:Ke.default.Map({}),onSelect:function(){for(var e=arguments.length,t=new Array(e),r=0;r{var e=this;return function(t){let{isSyntheticChange:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"function"==typeof e.props.onSelect&&e.props.onSelect(t,{isSyntheticChange:r})}})();_onDomSelect=e=>{if("function"==typeof this.props.onSelect){const t=e.target.selectedOptions[0].getAttribute("value");this._onSelect(t,{isSyntheticChange:!1})}};getCurrentExample=()=>{const{examples:e,currentExampleKey:t}=this.props,r=e.get(t),n=e.keySeq().first(),a=e.get(n);return r||a||Map({})};componentDidMount(){const{onSelect:e,examples:t}=this.props;if("function"==typeof e){const e=t.first(),r=t.keyOf(e);this._onSelect(r,{isSyntheticChange:!0})}}UNSAFE_componentWillReceiveProps(e){const{currentExampleKey:t,examples:r}=e;if(r!==this.props.examples&&!r.has(t)){const e=r.first(),t=r.keyOf(e);this._onSelect(t,{isSyntheticChange:!0})}}render(){const{examples:e,currentExampleKey:t,isValueModified:r,isModifiedValueAvailable:n,showLabels:a}=this.props;return Je.default.createElement("div",{className:"examples-select"},a?Je.default.createElement("span",{className:"examples-select__section-label"},"Examples: "):null,Je.default.createElement("select",{className:"examples-select-element",onChange:this._onDomSelect,value:n&&r?"__MODIFIED__VALUE__":t||""},n?Je.default.createElement("option",{value:"__MODIFIED__VALUE__"},"[Modified value]"):null,e.map(((e,t)=>Je.default.createElement("option",{key:t,value:t},e.get("summary")||t))).valueSeq()))}}const stringifyUnlessList=e=>Ke.List.isList(e)?e:stringify(e);class ExamplesSelectValueRetainer extends Je.default.PureComponent{static defaultProps={userHasEditedBody:!1,examples:(0,Ke.Map)({}),currentNamespace:"__DEFAULT__NAMESPACE__",setRetainRequestBodyValueFlag:()=>{},onSelect:function(){for(var e=arguments.length,t=new Array(e),r=0;r{const{currentNamespace:e}=this.props;return(this.state[e]||(0,Ke.Map)()).toObject()};_setStateForCurrentNamespace=e=>{const{currentNamespace:t}=this.props;return this._setStateForNamespace(t,e)};_setStateForNamespace=(e,t)=>{const r=(this.state[e]||(0,Ke.Map)()).mergeDeep(t);return this.setState({[e]:r})};_isCurrentUserInputSameAsExampleValue=()=>{const{currentUserInputValue:e}=this.props;return this._getCurrentExampleValue()===e};_getValueForExample=(e,t)=>{const{examples:r}=t||this.props;return stringifyUnlessList((r||(0,Ke.Map)({})).getIn([e,"value"]))};_getCurrentExampleValue=e=>{const{currentKey:t}=e||this.props;return this._getValueForExample(t,e||this.props)};_onExamplesSelect=(()=>{var e=this;return function(t){let{isSyntheticChange:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{onSelect:n,updateValue:a,currentUserInputValue:o,userHasEditedBody:s}=e.props,{lastUserEditedValue:l}=e._getStateForCurrentNamespace(),i=e._getValueForExample(t);if("__MODIFIED__VALUE__"===t)return a(stringifyUnlessList(l)),e._setStateForCurrentNamespace({isModifiedValueSelected:!0});if("function"==typeof n){for(var c=arguments.length,u=new Array(c>2?c-2:0),d=2;de.get("value")===t||stringify(e.get("value"))===t));if(i.size){let t;t=i.has(e.currentKey)?e.currentKey:i.keySeq().first(),n(t,{isSyntheticChange:!0})}else t!==this.props.currentUserInputValue&&t!==o&&t!==s&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(e.currentNamespace,{lastUserEditedValue:e.currentUserInputValue,isModifiedValueSelected:a||t!==l}))}render(){const{currentUserInputValue:e,examples:t,currentKey:r,getComponent:n,userHasEditedBody:a}=this.props,{lastDownstreamValue:o,lastUserEditedValue:s,isModifiedValueSelected:l}=this._getStateForCurrentNamespace(),i=n("ExamplesSelect");return Je.default.createElement(i,{examples:t,currentExampleKey:r,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!s&&s!==o,isValueModified:void 0!==e&&l&&e!==this._getCurrentExampleValue()||a})}}function oauth2_authorize_authorize(e){let{auth:t,authActions:r,errActions:n,configs:a,authConfigs:o={},currentServer:s}=e,{schema:l,scopes:i,name:c,clientId:u}=t,d=l.get("flow"),p=[];switch(d){case"password":return void r.authorizePassword(t);case"application":case"clientCredentials":case"client_credentials":return void r.authorizeApplication(t);case"accessCode":case"authorizationCode":case"authorization_code":p.push("response_type=code");break;case"implicit":p.push("response_type=token")}"string"==typeof u&&p.push("client_id="+encodeURIComponent(u));let m=a.oauth2RedirectUrl;if(void 0===m)return void n.newAuthErr({authId:c,source:"validation",level:"error",message:"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed."});p.push("redirect_uri="+encodeURIComponent(m));let f=[];if(Array.isArray(i)?f=i:Ke.default.List.isList(i)&&(f=i.toArray()),f.length>0){let e=o.scopeSeparator||" ";p.push("scope="+encodeURIComponent(f.join(e)))}let h=btoa(new Date);if(p.push("state="+encodeURIComponent(h)),void 0!==o.realm&&p.push("realm="+encodeURIComponent(o.realm)),("authorizationCode"===d||"authorization_code"===d||"accessCode"===d)&&o.usePkceWithAuthorizationCodeGrant){const e=function generateCodeVerifier(){return b64toB64UrlEncoded(ut()(32).toString("base64"))}(),r=function createCodeChallenge(e){return b64toB64UrlEncoded(pt()("sha256").update(e).digest("base64"))}(e);p.push("code_challenge="+r),p.push("code_challenge_method=S256"),t.codeVerifier=e}let{additionalQueryStringParams:g}=o;for(let e in g)void 0!==g[e]&&p.push([e,g[e]].map(encodeURIComponent).join("="));const y=l.get("authorizationUrl");let v;v=s?(0,vt.default)(sanitizeUrl(y),s,!0).toString():sanitizeUrl(y);let S,_=[v,p.join("&")].join(-1===y.indexOf("?")?"?":"&");S="implicit"===d?r.preAuthorizeImplicit:o.useBasicAuthenticationWithAccessCodeGrant?r.authorizeAccessCodeWithBasicAuthentication:r.authorizeAccessCodeWithFormParams,r.authPopup(_,{auth:t,state:h,redirectUrl:m,callback:S,errCb:n.newAuthErr})}class Oauth2 extends Je.default.Component{constructor(e,t){super(e,t);let{name:r,schema:n,authorized:a,authSelectors:o}=this.props,s=a&&a.get(r),l=o.getConfigs()||{},i=s&&s.get("username")||"",c=s&&s.get("clientId")||l.clientId||"",u=s&&s.get("clientSecret")||l.clientSecret||"",d=s&&s.get("passwordType")||"basic",p=s&&s.get("scopes")||l.scopes||[];"string"==typeof p&&(p=p.split(l.scopeSeparator||" ")),this.state={appName:l.appName,name:r,schema:n,scopes:p,clientId:c,clientSecret:u,username:i,password:"",passwordType:d}}close=e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)};authorize=()=>{let{authActions:e,errActions:t,getConfigs:r,authSelectors:n,oas3Selectors:a}=this.props,o=r(),s=n.getConfigs();t.clear({authId:name,type:"auth",source:"auth"}),oauth2_authorize_authorize({auth:this.state,currentServer:a.serverEffectiveValue(a.selectedServer()),authActions:e,errActions:t,configs:o,authConfigs:s})};onScopeChange=e=>{let{target:t}=e,{checked:r}=t,n=t.dataset.value;if(r&&-1===this.state.scopes.indexOf(n)){let e=this.state.scopes.concat([n]);this.setState({scopes:e})}else!r&&this.state.scopes.indexOf(n)>-1&&this.setState({scopes:this.state.scopes.filter((e=>e!==n))})};onInputChange=e=>{let{target:{dataset:{name:t},value:r}}=e,n={[t]:r};this.setState(n)};selectScopes=e=>{e.target.dataset.all?this.setState({scopes:Array.from((this.props.schema.get("allowedScopes")||this.props.schema.get("scopes")).keys())}):this.setState({scopes:[]})};logout=e=>{e.preventDefault();let{authActions:t,errActions:r,name:n}=this.props;r.clear({authId:n,type:"auth",source:"auth"}),t.logoutWithPersistOption([n])};render(){let{schema:e,getComponent:t,authSelectors:r,errSelectors:n,name:a,specSelectors:o}=this.props;const s=t("Input"),l=t("Row"),i=t("Col"),c=t("Button"),u=t("authError"),d=t("JumpToPath",!0),p=t("Markdown",!0),m=t("InitializedInput"),{isOAS3:f}=o;let h=f()?e.get("openIdConnectUrl"):null;const g="implicit",y="password",v=f()?h?"authorization_code":"authorizationCode":"accessCode",S=f()?h?"client_credentials":"clientCredentials":"application";let _=!!(r.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,b=e.get("flow"),w=b===v&&_?b+" with PKCE":b,C=e.get("allowedScopes")||e.get("scopes"),x=!!r.authorized().get(a),O=n.allErrors().filter((e=>e.get("authId")===a)),k=!O.filter((e=>"validation"===e.get("source"))).size,N=e.get("description");return Je.default.createElement("div",null,Je.default.createElement("h4",null,a," (OAuth2, ",w,") ",Je.default.createElement(d,{path:["securityDefinitions",a]})),this.state.appName?Je.default.createElement("h5",null,"Application: ",this.state.appName," "):null,N&&Je.default.createElement(p,{source:e.get("description")}),x&&Je.default.createElement("h6",null,"Authorized"),h&&Je.default.createElement("p",null,"OpenID Connect URL: ",Je.default.createElement("code",null,h)),(b===g||b===v)&&Je.default.createElement("p",null,"Authorization URL: ",Je.default.createElement("code",null,e.get("authorizationUrl"))),(b===y||b===v||b===S)&&Je.default.createElement("p",null,"Token URL:",Je.default.createElement("code",null," ",e.get("tokenUrl"))),Je.default.createElement("p",{className:"flow"},"Flow: ",Je.default.createElement("code",null,w)),b!==y?null:Je.default.createElement(l,null,Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"oauth_username"},"username:"),x?Je.default.createElement("code",null," ",this.state.username," "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement("input",{id:"oauth_username",type:"text","data-name":"username",onChange:this.onInputChange,autoFocus:!0}))),Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"oauth_password"},"password:"),x?Je.default.createElement("code",null," ****** "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement("input",{id:"oauth_password",type:"password","data-name":"password",onChange:this.onInputChange}))),Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"password_type"},"Client credentials location:"),x?Je.default.createElement("code",null," ",this.state.passwordType," "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement("select",{id:"password_type","data-name":"passwordType",onChange:this.onInputChange},Je.default.createElement("option",{value:"basic"},"Authorization header"),Je.default.createElement("option",{value:"request-body"},"Request body"))))),(b===S||b===g||b===v||b===y)&&(!x||x&&this.state.clientId)&&Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"client_id"},"client_id:"),x?Je.default.createElement("code",null," ****** "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement(m,{id:"client_id",type:"text",required:b===y,initialValue:this.state.clientId,"data-name":"clientId",onChange:this.onInputChange}))),(b===S||b===v||b===y)&&Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"client_secret"},"client_secret:"),x?Je.default.createElement("code",null," ****** "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement(m,{id:"client_secret",initialValue:this.state.clientSecret,type:"password","data-name":"clientSecret",onChange:this.onInputChange}))),!x&&C&&C.size?Je.default.createElement("div",{className:"scopes"},Je.default.createElement("h2",null,"Scopes:",Je.default.createElement("a",{onClick:this.selectScopes,"data-all":!0},"select all"),Je.default.createElement("a",{onClick:this.selectScopes},"select none")),C.map(((e,t)=>Je.default.createElement(l,{key:t},Je.default.createElement("div",{className:"checkbox"},Je.default.createElement(s,{"data-value":t,id:`${t}-${b}-checkbox-${this.state.name}`,disabled:x,checked:this.state.scopes.includes(t),type:"checkbox",onChange:this.onScopeChange}),Je.default.createElement("label",{htmlFor:`${t}-${b}-checkbox-${this.state.name}`},Je.default.createElement("span",{className:"item"}),Je.default.createElement("div",{className:"text"},Je.default.createElement("p",{className:"name"},t),Je.default.createElement("p",{className:"description"},e))))))).toArray()):null,O.valueSeq().map(((e,t)=>Je.default.createElement(u,{error:e,key:t}))),Je.default.createElement("div",{className:"auth-btn-wrapper"},k&&(x?Je.default.createElement(c,{className:"btn modal-btn auth authorize",onClick:this.logout,"aria-label":"Remove authorization"},"Logout"):Je.default.createElement(c,{className:"btn modal-btn auth authorize",onClick:this.authorize,"aria-label":"Apply given OAuth2 credentials"},"Authorize")),Je.default.createElement(c,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close")))}}class Clear extends Je.Component{onClick=()=>{let{specActions:e,path:t,method:r}=this.props;e.clearResponse(t,r),e.clearRequest(t,r)};render(){return Je.default.createElement("button",{className:"btn btn-clear opblock-control__btn",onClick:this.onClick},"Clear")}}const Headers=e=>{let{headers:t}=e;return Je.default.createElement("div",null,Je.default.createElement("h5",null,"Response headers"),Je.default.createElement("pre",{className:"microlight"},t))},Duration=e=>{let{duration:t}=e;return Je.default.createElement("div",null,Je.default.createElement("h5",null,"Request duration"),Je.default.createElement("pre",{className:"microlight"},t," ms"))};class LiveResponse extends Je.default.Component{shouldComponentUpdate(e){return this.props.response!==e.response||this.props.path!==e.path||this.props.method!==e.method||this.props.displayRequestDuration!==e.displayRequestDuration}render(){const{response:e,getComponent:t,getConfigs:r,displayRequestDuration:n,specSelectors:a,path:o,method:s}=this.props,{showMutatedRequest:l,requestSnippetsEnabled:i}=r(),c=l?a.mutatedRequestFor(o,s):a.requestFor(o,s),u=e.get("status"),d=c.get("url"),p=e.get("headers").toJS(),m=e.get("notDocumented"),f=e.get("error"),h=e.get("text"),g=e.get("duration"),y=Object.keys(p),v=p["content-type"]||p["Content-Type"],S=t("responseBody"),_=y.map((e=>{var t=Array.isArray(p[e])?p[e].join():p[e];return Je.default.createElement("span",{className:"headerline",key:e}," ",e,": ",t," ")})),b=0!==_.length,w=t("Markdown",!0),C=t("RequestSnippets",!0),x=t("curl");return Je.default.createElement("div",null,c&&(!0===i||"true"===i?Je.default.createElement(C,{request:c}):Je.default.createElement(x,{request:c,getConfigs:r})),d&&Je.default.createElement("div",null,Je.default.createElement("div",{className:"request-url"},Je.default.createElement("h4",null,"Request URL"),Je.default.createElement("pre",{className:"microlight"},d))),Je.default.createElement("h4",null,"Server response"),Je.default.createElement("table",{className:"responses-table live-responses-table"},Je.default.createElement("thead",null,Je.default.createElement("tr",{className:"responses-header"},Je.default.createElement("td",{className:"col_header response-col_status"},"Code"),Je.default.createElement("td",{className:"col_header response-col_description"},"Details"))),Je.default.createElement("tbody",null,Je.default.createElement("tr",{className:"response"},Je.default.createElement("td",{className:"response-col_status"},u,m?Je.default.createElement("div",{className:"response-undocumented"},Je.default.createElement("i",null," Undocumented ")):null),Je.default.createElement("td",{className:"response-col_description"},f?Je.default.createElement(w,{source:`${""!==e.get("name")?`${e.get("name")}: `:""}${e.get("message")}`}):null,h?Je.default.createElement(S,{content:h,contentType:v,url:d,headers:p,getConfigs:r,getComponent:t}):null,b?Je.default.createElement(Headers,{headers:_}):null,n&&g?Je.default.createElement(Duration,{duration:g}):null)))))}}class OnlineValidatorBadge extends Je.default.Component{constructor(e,t){super(e,t);let{getConfigs:r}=e,{validatorUrl:n}=r();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===n?"https://validator.swagger.io/validator":n}}getDefinitionUrl=()=>{let{specSelectors:e}=this.props;return new vt.default(e.url(),tt.location).toString()};UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:r}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===r?"https://validator.swagger.io/validator":r})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),r=sanitizeUrl(this.state.validatorUrl);return"object"==typeof t&&Object.keys(t).length?null:this.state.url&&requiresValidationURL(this.state.validatorUrl)&&requiresValidationURL(this.state.url)?Je.default.createElement("span",{className:"float-right"},Je.default.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:`${r}/debug?url=${encodeURIComponent(this.state.url)}`},Je.default.createElement(ValidatorImage,{src:`${r}?url=${encodeURIComponent(this.state.url)}`,alt:"Online validator badge"}))):null}}class ValidatorImage extends Je.default.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?Je.default.createElement("img",{alt:"Error"}):this.state.loaded?Je.default.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}class Operations extends Je.default.Component{render(){let{specSelectors:e}=this.props;const t=e.taggedOperations();return 0===t.size?Je.default.createElement("h3",null," No operations defined in spec!"):Je.default.createElement("div",null,t.map(this.renderOperationTag).toArray(),t.size<1?Je.default.createElement("h3",null," No operations defined in spec! "):null)}renderOperationTag=(e,t)=>{const{specSelectors:r,getComponent:n,oas3Selectors:a,layoutSelectors:o,layoutActions:s,getConfigs:l}=this.props,i=r.validOperationMethods(),c=n("OperationContainer",!0),u=n("OperationTag"),d=e.get("operations");return Je.default.createElement(u,{key:"operation-"+t,tagObj:e,tag:t,oas3Selectors:a,layoutSelectors:o,layoutActions:s,getConfigs:l,getComponent:n,specUrl:r.url()},Je.default.createElement("div",{className:"operation-tag-content"},d.map((e=>{const r=e.get("path"),n=e.get("method"),a=Ke.default.List(["paths",r,n]);return-1===i.indexOf(n)?null:Je.default.createElement(c,{key:`${r}-${n}`,specPath:a,op:e,path:r,method:n,tag:t})})).toArray()))}}function isAbsoluteUrl(e){return e.match(/^(?:[a-z]+:)?\/\//i)}function buildBaseUrl(e,t){return e?isAbsoluteUrl(e)?function addProtocol(e){return e.match(/^\/\//i)?`${window.location.protocol}${e}`:e}(e):new URL(e,t).href:t}function safeBuildUrl(e,t){let{selectedServer:r=""}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{return function buildUrl(e,t){let{selectedServer:r=""}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return;if(isAbsoluteUrl(e))return e;const n=buildBaseUrl(r,t);return isAbsoluteUrl(n)?new URL(e,n).href:new URL(e,window.location.href).href}(e,t,{selectedServer:r})}catch{return}}class OperationTag extends Je.default.Component{static defaultProps={tagObj:Ke.default.fromJS({}),tag:""};render(){const{tagObj:e,tag:t,children:r,oas3Selectors:n,layoutSelectors:a,layoutActions:o,getConfigs:s,getComponent:l,specUrl:i}=this.props;let{docExpansion:c,deepLinking:u}=s();const d=u&&"false"!==u,p=l("Collapse"),m=l("Markdown",!0),f=l("DeepLink"),h=l("Link"),g=l("ArrowUpIcon"),y=l("ArrowDownIcon");let v,S=e.getIn(["tagDetails","description"],null),_=e.getIn(["tagDetails","externalDocs","description"]),b=e.getIn(["tagDetails","externalDocs","url"]);v=isFunc(n)&&isFunc(n.selectedServer)?safeBuildUrl(b,i,{selectedServer:n.selectedServer()}):b;let w=["operations-tag",t],C=a.isShown(w,"full"===c||"list"===c);return Je.default.createElement("div",{className:C?"opblock-tag-section is-open":"opblock-tag-section"},Je.default.createElement("h3",{onClick:()=>o.show(w,!C),className:S?"opblock-tag":"opblock-tag no-desc",id:w.map((e=>escapeDeepLinkPath(e))).join("-"),"data-tag":t,"data-is-open":C},Je.default.createElement(f,{enabled:d,isShown:C,path:createDeepLinkPath(t),text:t}),S?Je.default.createElement("small",null,Je.default.createElement(m,{source:S})):Je.default.createElement("small",null),v?Je.default.createElement("div",{className:"info__externaldocs"},Je.default.createElement("small",null,Je.default.createElement(h,{href:sanitizeUrl(v),onClick:e=>e.stopPropagation(),target:"_blank"},_||v))):null,Je.default.createElement("button",{"aria-expanded":C,className:"expand-operation",title:C?"Collapse operation":"Expand operation",onClick:()=>o.show(w,!C)},C?Je.default.createElement(g,{className:"arrow"}):Je.default.createElement(y,{className:"arrow"}))),Je.default.createElement(p,{isOpened:C},r))}}var Ea;function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;tJe.createElement("svg",_extends({xmlns:"http://www.w3.org/2000/svg",width:200,height:200,className:"rolling-load_svg__lds-rolling",preserveAspectRatio:"xMidYMid",style:{backgroundImage:"none",backgroundPosition:"initial initial",backgroundRepeat:"initial initial"},viewBox:"0 0 100 100"},e),Ea||(Ea=Je.createElement("circle",{cx:50,cy:50,r:35,fill:"none",stroke:"#555",strokeDasharray:"164.93361431346415 56.97787143782138",strokeWidth:10},Je.createElement("animateTransform",{attributeName:"transform",begin:"0s",calcMode:"linear",dur:"1s",keyTimes:"0;1",repeatCount:"indefinite",type:"rotate",values:"0 50 50;360 50 50"}))));class Operation extends Je.PureComponent{static defaultProps={operation:null,response:null,request:null,specPath:(0,Ke.List)(),summary:""};render(){let{specPath:e,response:t,request:r,toggleShown:n,onTryoutClick:a,onResetClick:o,onCancelClick:s,onExecute:l,fn:i,getComponent:c,getConfigs:u,specActions:d,specSelectors:p,authActions:m,authSelectors:f,oas3Actions:h,oas3Selectors:g}=this.props,y=this.props.operation,{deprecated:v,isShown:S,path:_,method:b,op:w,tag:C,operationId:x,allowTryItOut:O,displayRequestDuration:k,tryItOutEnabled:N,executeInProgress:A}=y.toJS(),{description:I,externalDocs:R,schemes:T}=w;const B=R?safeBuildUrl(R.url,p.url(),{selectedServer:g.selectedServer()}):"";let j=y.getIn(["op"]),P=j.get("responses"),M=function getList(e,t){if(!Ke.default.Iterable.isIterable(e))return Ke.default.List();let r=e.getIn(Array.isArray(t)?t:[t]);return Ke.default.List.isList(r)?r:Ke.default.List()}(j,["parameters"]),q=p.operationScheme(_,b),L=["operations",C,x],D=getExtensions(j);const U=c("responses"),$=c("parameters"),J=c("execute"),V=c("clear"),K=c("Collapse"),z=c("Markdown",!0),F=c("schemes"),W=c("OperationServers"),H=c("OperationExt"),G=c("OperationSummary"),X=c("Link"),{showExtensions:Y}=u();if(P&&t&&t.size>0){let e=!P.get(String(t.get("status")))&&!P.get("default");t=t.set("notDocumented",e)}let Q=[_,b];const Z=p.validationErrors([_,b]);return Je.default.createElement("div",{className:v?"opblock opblock-deprecated":S?`opblock opblock-${b} is-open`:`opblock opblock-${b}`,id:escapeDeepLinkPath(L.join("-"))},Je.default.createElement(G,{operationProps:y,isShown:S,toggleShown:n,getComponent:c,authActions:m,authSelectors:f,specPath:e}),Je.default.createElement(K,{isOpened:S},Je.default.createElement("div",{className:"opblock-body"},j&&j.size||null===j?null:Je.default.createElement(rolling_load,{height:"32px",width:"32px",className:"opblock-loading-animation"}),v&&Je.default.createElement("h4",{className:"opblock-title_normal"}," Warning: Deprecated"),I&&Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement("div",{className:"opblock-description"},Je.default.createElement(z,{source:I}))),B?Je.default.createElement("div",{className:"opblock-external-docs-wrapper"},Je.default.createElement("h4",{className:"opblock-title_normal"},"Find more details"),Je.default.createElement("div",{className:"opblock-external-docs"},R.description&&Je.default.createElement("span",{className:"opblock-external-docs__description"},Je.default.createElement(z,{source:R.description})),Je.default.createElement(X,{target:"_blank",className:"opblock-external-docs__link",href:sanitizeUrl(B)},B))):null,j&&j.size?Je.default.createElement($,{parameters:M,specPath:e.push("parameters"),operation:j,onChangeKey:Q,onTryoutClick:a,onResetClick:o,onCancelClick:s,tryItOutEnabled:N,allowTryItOut:O,fn:i,getComponent:c,specActions:d,specSelectors:p,pathMethod:[_,b],getConfigs:u,oas3Actions:h,oas3Selectors:g}):null,N?Je.default.createElement(W,{getComponent:c,path:_,method:b,operationServers:j.get("servers"),pathServers:p.paths().getIn([_,"servers"]),getSelectedServer:g.selectedServer,setSelectedServer:h.setSelectedServer,setServerVariableValue:h.setServerVariableValue,getServerVariable:g.serverVariableValue,getEffectiveServerValue:g.serverEffectiveValue}):null,N&&O&&T&&T.size?Je.default.createElement("div",{className:"opblock-schemes"},Je.default.createElement(F,{schemes:T,path:_,method:b,specActions:d,currentScheme:q})):null,!N||!O||Z.length<=0?null:Je.default.createElement("div",{className:"validation-errors errors-wrapper"},"Please correct the following validation errors and try again.",Je.default.createElement("ul",null,Z.map(((e,t)=>Je.default.createElement("li",{key:t}," ",e," "))))),Je.default.createElement("div",{className:N&&t&&O?"btn-group":"execute-wrapper"},N&&O?Je.default.createElement(J,{operation:j,specActions:d,specSelectors:p,oas3Selectors:g,oas3Actions:h,path:_,method:b,onExecute:l,disabled:A}):null,N&&t&&O?Je.default.createElement(V,{specActions:d,path:_,method:b}):null),A?Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("div",{className:"loading"})):null,P?Je.default.createElement(U,{responses:P,request:r,tryItOutResponse:t,getComponent:c,getConfigs:u,specSelectors:p,oas3Actions:h,oas3Selectors:g,specActions:d,produces:p.producesOptionsFor([_,b]),producesValue:p.currentProducesFor([_,b]),specPath:e.push("responses"),path:_,method:b,displayRequestDuration:k,fn:i}):null,Y&&D.size?Je.default.createElement(H,{extensions:D,getComponent:c}):null)))}}class OperationContainer extends Je.PureComponent{constructor(e,t){super(e,t);const{tryItOutEnabled:r}=e.getConfigs();this.state={tryItOutEnabled:!0===r||"true"===r,executeInProgress:!1}}static defaultProps={showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1};mapStateToProps(e,t){const{op:r,layoutSelectors:n,getConfigs:a}=t,{docExpansion:o,deepLinking:s,displayOperationId:l,displayRequestDuration:i,supportedSubmitMethods:c}=a(),u=n.showSummary(),d=r.getIn(["operation","__originalOperationId"])||r.getIn(["operation","operationId"])||(0,da.opId)(r.get("operation"),t.path,t.method)||r.get("id"),p=["operations",t.tag,d],m=s&&"false"!==s,f=c.indexOf(t.method)>=0&&(void 0===t.allowTryItOut?t.specSelectors.allowTryItOutFor(t.path,t.method):t.allowTryItOut),h=r.getIn(["operation","security"])||t.specSelectors.security();return{operationId:d,isDeepLinkingEnabled:m,showSummary:u,displayOperationId:l,displayRequestDuration:i,allowTryItOut:f,security:h,isAuthorized:t.authSelectors.isAuthorized(h),isShown:n.isShown(p,"full"===o),jumpToKey:`paths.${t.path}.${t.method}`,response:t.specSelectors.responseFor(t.path,t.method),request:t.specSelectors.requestFor(t.path,t.method)}}componentDidMount(){const{isShown:e}=this.props,t=this.getResolvedSubtree();e&&void 0===t&&this.requestResolvedSubtree()}UNSAFE_componentWillReceiveProps(e){const{response:t,isShown:r}=e,n=this.getResolvedSubtree();t!==this.props.response&&this.setState({executeInProgress:!1}),r&&void 0===n&&this.requestResolvedSubtree()}toggleShown=()=>{let{layoutActions:e,tag:t,operationId:r,isShown:n}=this.props;const a=this.getResolvedSubtree();n||void 0!==a||this.requestResolvedSubtree(),e.show(["operations",t,r],!n)};onCancelClick=()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})};onTryoutClick=()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})};onResetClick=e=>{const t=this.props.oas3Selectors.selectDefaultRequestBodyValue(...e);this.props.oas3Actions.setRequestBodyValue({value:t,pathMethod:e})};onExecute=()=>{this.setState({executeInProgress:!0})};getResolvedSubtree=()=>{const{specSelectors:e,path:t,method:r,specPath:n}=this.props;return n?e.specResolvedSubtree(n.toJS()):e.specResolvedSubtree(["paths",t,r])};requestResolvedSubtree=()=>{const{specActions:e,path:t,method:r,specPath:n}=this.props;return n?e.requestResolvedSubtree(n.toJS()):e.requestResolvedSubtree(["paths",t,r])};render(){let{op:e,tag:t,path:r,method:n,security:a,isAuthorized:o,operationId:s,showSummary:l,isShown:i,jumpToKey:c,allowTryItOut:u,response:d,request:p,displayOperationId:m,displayRequestDuration:f,isDeepLinkingEnabled:h,specPath:g,specSelectors:y,specActions:v,getComponent:S,getConfigs:_,layoutSelectors:b,layoutActions:w,authActions:C,authSelectors:x,oas3Actions:O,oas3Selectors:k,fn:N}=this.props;const A=S("operation"),I=this.getResolvedSubtree()||(0,Ke.Map)(),R=(0,Ke.fromJS)({op:I,tag:t,path:r,summary:e.getIn(["operation","summary"])||"",deprecated:I.get("deprecated")||e.getIn(["operation","deprecated"])||!1,method:n,security:a,isAuthorized:o,operationId:s,originalOperationId:I.getIn(["operation","__originalOperationId"]),showSummary:l,isShown:i,jumpToKey:c,allowTryItOut:u,request:p,displayOperationId:m,displayRequestDuration:f,isDeepLinkingEnabled:h,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return Je.default.createElement(A,{operation:R,response:d,request:p,isShown:i,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onResetClick:this.onResetClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:g,specActions:v,specSelectors:y,oas3Actions:O,oas3Selectors:k,layoutActions:w,layoutSelectors:b,authActions:C,authSelectors:x,getComponent:S,getConfigs:_,fn:N})}}var va=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ue.default});class OperationSummary extends Je.PureComponent{static defaultProps={operationProps:null,specPath:(0,Ke.List)(),summary:""};render(){let{isShown:e,toggleShown:t,getComponent:r,authActions:n,authSelectors:a,operationProps:o,specPath:s}=this.props,{summary:l,isAuthorized:i,method:c,op:u,showSummary:d,path:p,operationId:m,originalOperationId:f,displayOperationId:h}=o.toJS(),{summary:g}=u,y=o.get("security");const v=r("authorizeOperationBtn",!0),S=r("OperationSummaryMethod"),_=r("OperationSummaryPath"),b=r("JumpToPath",!0),w=r("CopyToClipboardBtn",!0),C=r("ArrowUpIcon"),x=r("ArrowDownIcon"),O=y&&!!y.count(),k=O&&1===y.size&&y.first().isEmpty(),N=!O||k;return Je.default.createElement("div",{className:`opblock-summary opblock-summary-${c}`},Je.default.createElement("button",{"aria-label":`${c} ${p.replace(/\//g,"​/")}`,"aria-expanded":e,className:"opblock-summary-control",onClick:t},Je.default.createElement(S,{method:c}),Je.default.createElement(_,{getComponent:r,operationProps:o,specPath:s}),d?Je.default.createElement("div",{className:"opblock-summary-description"},(0,va.default)(g||l)):null,h&&(f||m)?Je.default.createElement("span",{className:"opblock-summary-operation-id"},f||m):null),Je.default.createElement(w,{textToCopy:`${s.get(1)}`}),N?null:Je.default.createElement(v,{isAuthorized:i,onClick:()=>{const e=a.definitionsForRequirements(y);n.showDefinitions(e)}}),Je.default.createElement(b,{path:s}),Je.default.createElement("button",{"aria-label":`${c} ${p.replace(/\//g,"​/")}`,className:"opblock-control-arrow","aria-expanded":e,tabIndex:"-1",onClick:t},e?Je.default.createElement(C,{className:"arrow"}):Je.default.createElement(x,{className:"arrow"})))}}class OperationSummaryMethod extends Je.PureComponent{static defaultProps={operationProps:null};render(){let{method:e}=this.props;return Je.default.createElement("span",{className:"opblock-summary-method"},e.toUpperCase())}}class OperationSummaryPath extends Je.PureComponent{render(){let{getComponent:e,operationProps:t}=this.props,{deprecated:r,isShown:n,path:a,tag:o,operationId:s,isDeepLinkingEnabled:l}=t.toJS();const i=a.split(/(?=\/)/g);for(let e=1;e{let{extensions:t,getComponent:r}=e,n=r("OperationExtRow");return Je.default.createElement("div",{className:"opblock-section"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("h4",null,"Extensions")),Je.default.createElement("div",{className:"table-container"},Je.default.createElement("table",null,Je.default.createElement("thead",null,Je.default.createElement("tr",null,Je.default.createElement("td",{className:"col_header"},"Field"),Je.default.createElement("td",{className:"col_header"},"Value"))),Je.default.createElement("tbody",null,t.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(n,{key:`${t}-${r}`,xKey:t,xVal:r})}))))))};var operation_extension_row=e=>{let{xKey:t,xVal:r}=e;const n=r?r.toJS?r.toJS():r:null;return Je.default.createElement("tr",null,Je.default.createElement("td",null,t),Je.default.createElement("td",null,JSON.stringify(n)))},Sa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>de.default}),_a=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>pe.default});const HighlightCode=e=>{let{value:t,fileName:r,className:n,downloadable:a,getConfigs:o,canCopy:s,language:l}=e;const i=(0,lt.default)(o)?o():null,c=!1!==(0,Gt.default)(i,"syntaxHighlight")&&(0,Gt.default)(i,"syntaxHighlight.activated",!0),u=(0,Je.useRef)(null);(0,Je.useEffect)((()=>{const e=Array.from(u.current.childNodes).filter((e=>!!e.nodeType&&e.classList.contains("microlight")));return e.forEach((e=>e.addEventListener("mousewheel",handlePreventYScrollingBeyondElement,{passive:!1}))),()=>{e.forEach((e=>e.removeEventListener("mousewheel",handlePreventYScrollingBeyondElement)))}}),[t,n,l]);const handlePreventYScrollingBeyondElement=e=>{const{target:t,deltaY:r}=e,{scrollHeight:n,offsetHeight:a,scrollTop:o}=t;n>a&&(0===o&&r<0||a+o>=n&&r>0)&&e.preventDefault()};return Je.default.createElement("div",{className:"highlight-code",ref:u},s&&Je.default.createElement("div",{className:"copy-to-clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:t},Je.default.createElement("button",null))),a?Je.default.createElement("button",{className:"download-contents",onClick:()=>{(0,_a.default)(t,r)}},"Download"):null,c?Je.default.createElement(vr.default,{language:l,className:(0,Sa.default)(n,"microlight"),style:getStyle((0,Gt.default)(i,"syntaxHighlight.theme","agate"))},t):Je.default.createElement("pre",{className:(0,Sa.default)(n,"microlight")},t))};HighlightCode.defaultProps={fileName:"response.txt"};var ba=HighlightCode;class Responses extends Je.default.Component{static defaultProps={tryItOutResponse:null,produces:(0,Ke.fromJS)(["application/json"]),displayRequestDuration:!1};onChangeProducesWrapper=e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e);onResponseContentTypeChange=e=>{let{controlsAcceptHeader:t,value:r}=e;const{oas3Actions:n,path:a,method:o}=this.props;t&&n.setResponseContentType({value:r,path:a,method:o})};render(){let{responses:e,tryItOutResponse:t,getComponent:r,getConfigs:n,specSelectors:a,fn:o,producesValue:s,displayRequestDuration:l,specPath:i,path:c,method:u,oas3Selectors:d,oas3Actions:p}=this.props,m=function defaultStatusCode(e){let t=e.keySeq();return t.contains(gt)?gt:t.filter((e=>"2"===(e+"")[0])).sort().first()}(e);const f=r("contentType"),h=r("liveResponse"),g=r("response");let y=this.props.produces&&this.props.produces.size?this.props.produces:Responses.defaultProps.produces;const v=a.isOAS3()?function getAcceptControllingResponse(e){if(!Ke.default.OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=e.find(((e,t)=>t.startsWith("2")&&Object.keys(e.get("content")||{}).length>0)),r=e.get("default")||Ke.default.OrderedMap(),n=(r.get("content")||Ke.default.OrderedMap()).keySeq().toJS().length?r:null;return t||n}(e):null,S=function createHtmlReadyId(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"_";return e.replace(/[^\w-]/g,t)}(`${u}${c}_responses`),_=`${S}_select`;return Je.default.createElement("div",{className:"responses-wrapper"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("h4",null,"Responses"),a.isOAS3()?null:Je.default.createElement("label",{htmlFor:_},Je.default.createElement("span",null,"Response content type"),Je.default.createElement(f,{value:s,ariaControls:S,ariaLabel:"Response content type",className:"execute-content-type",contentTypes:y,controlId:_,onChange:this.onChangeProducesWrapper}))),Je.default.createElement("div",{className:"responses-inner"},t?Je.default.createElement("div",null,Je.default.createElement(h,{response:t,getComponent:r,getConfigs:n,specSelectors:a,path:this.props.path,method:this.props.method,displayRequestDuration:l}),Je.default.createElement("h4",null,"Responses")):null,Je.default.createElement("table",{"aria-live":"polite",className:"responses-table",id:S,role:"region"},Je.default.createElement("thead",null,Je.default.createElement("tr",{className:"responses-header"},Je.default.createElement("td",{className:"col_header response-col_status"},"Code"),Je.default.createElement("td",{className:"col_header response-col_description"},"Description"),a.isOAS3()?Je.default.createElement("td",{className:"col col_header response-col_links"},"Links"):null)),Je.default.createElement("tbody",null,e.entrySeq().map((e=>{let[l,f]=e,h=t&&t.get("status")==l?"response_current":"";return Je.default.createElement(g,{key:l,path:c,method:u,specPath:i.push(l),isDefault:m===l,fn:o,className:h,code:l,response:f,specSelectors:a,controlsAcceptHeader:f===v,onContentTypeChange:this.onResponseContentTypeChange,contentType:s,getConfigs:n,activeExamplesKey:d.activeExamplesMember(c,u,"responses",l),oas3Actions:p,getComponent:r})})).toArray()))))}}function getKnownSyntaxHighlighterLanguage(e){return function canJsonParse(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?"json":null}class Response extends Je.default.Component{constructor(e,t){super(e,t),this.state={responseContentType:""}}static defaultProps={response:(0,Ke.fromJS)({}),onContentTypeChange:()=>{}};_onContentTypeChange=e=>{const{onContentTypeChange:t,controlsAcceptHeader:r}=this.props;this.setState({responseContentType:e}),t({value:e,controlsAcceptHeader:r})};getTargetExamplesKey=()=>{const{response:e,contentType:t,activeExamplesKey:r}=this.props,n=this.state.responseContentType||t,a=e.getIn(["content",n],(0,Ke.Map)({})).get("examples",null).keySeq().first();return r||a};render(){let{path:e,method:t,code:r,response:n,className:a,specPath:o,fn:s,getComponent:l,getConfigs:i,specSelectors:c,contentType:u,controlsAcceptHeader:d,oas3Actions:p}=this.props,{inferSchema:m,getSampleSchema:f}=s,h=c.isOAS3();const{showExtensions:g}=i();let y=g?getExtensions(n):null,v=n.get("headers"),S=n.get("links");const _=l("ResponseExtension"),b=l("headers"),w=l("highlightCode"),C=l("modelExample"),x=l("Markdown",!0),O=l("operationLink"),k=l("contentType"),N=l("ExamplesSelect"),A=l("Example");var I,R;const T=this.state.responseContentType||u,B=n.getIn(["content",T],(0,Ke.Map)({})),j=B.get("examples",null);if(h){const e=B.get("schema");I=e?m(e.toJS()):null,R=e?(0,Ke.List)(["content",this.state.responseContentType,"schema"]):o}else I=n.get("schema"),R=n.has("schema")?o.push("schema"):o;let P,M,q=!1,L={includeReadOnly:!0};if(h)if(M=B.get("schema")?.toJS(),j){const e=this.getTargetExamplesKey(),getMediaTypeExample=e=>e.get("value");P=getMediaTypeExample(j.get(e,(0,Ke.Map)({}))),void 0===P&&(P=getMediaTypeExample(j.values().next().value)),q=!0}else void 0!==B.get("example")&&(P=B.get("example"),q=!0);else{M=I,L={...L,includeWriteOnly:!0};const e=n.getIn(["examples",T]);e&&(P=e,q=!0)}let D=((e,t,r)=>{if(null!=e){let n=null;return getKnownSyntaxHighlighterLanguage(e)&&(n="json"),Je.default.createElement("div",null,Je.default.createElement(t,{className:"example",getConfigs:r,language:n,value:stringify(e)}))}return null})(f(M,T,L,q?P:void 0),w,i);return Je.default.createElement("tr",{className:"response "+(a||""),"data-code":r},Je.default.createElement("td",{className:"response-col_status"},r),Je.default.createElement("td",{className:"response-col_description"},Je.default.createElement("div",{className:"response-col_description__inner"},Je.default.createElement(x,{source:n.get("description")})),g&&y.size?y.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,xKey:t,xVal:r})})):null,h&&n.get("content")?Je.default.createElement("section",{className:"response-controls"},Je.default.createElement("div",{className:(0,Sa.default)("response-control-media-type",{"response-control-media-type--accept-controller":d})},Je.default.createElement("small",{className:"response-control-media-type__title"},"Media type"),Je.default.createElement(k,{value:this.state.responseContentType,contentTypes:n.get("content")?n.get("content").keySeq():(0,Ke.Seq)(),onChange:this._onContentTypeChange,ariaLabel:"Media Type"}),d?Je.default.createElement("small",{className:"response-control-media-type__accept-message"},"Controls ",Je.default.createElement("code",null,"Accept")," header."):null),j?Je.default.createElement("div",{className:"response-control-examples"},Je.default.createElement("small",{className:"response-control-examples__title"},"Examples"),Je.default.createElement(N,{examples:j,currentExampleKey:this.getTargetExamplesKey(),onSelect:n=>p.setActiveExamplesMember({name:n,pathMethod:[e,t],contextType:"responses",contextName:r}),showLabels:!1})):null):null,D||I?Je.default.createElement(C,{specPath:R,getComponent:l,getConfigs:i,specSelectors:c,schema:fromJSOrdered(I),example:D,includeReadOnly:!0}):null,h&&j?Je.default.createElement(A,{example:j.get(this.getTargetExamplesKey(),(0,Ke.Map)({})),getComponent:l,getConfigs:i,omitValue:!0}):null,v?Je.default.createElement(b,{headers:v,getComponent:l}):null),h?Je.default.createElement("td",{className:"response-col_links"},S?S.toSeq().entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(O,{key:t,name:t,link:r,getComponent:l})})):Je.default.createElement("i",null,"No links")):null)}}var response_extension=e=>{let{xKey:t,xVal:r}=e;return Je.default.createElement("div",{className:"response__extension"},t,": ",String(r))},wa=__webpack_require__(131),Ca=__webpack_require__.n(wa),xa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>me.default});class ResponseBody extends Je.default.PureComponent{state={parsedContent:null};updateParsedContent=e=>{const{content:t}=this.props;if(e!==t)if(t&&t instanceof Blob){var r=new FileReader;r.onload=()=>{this.setState({parsedContent:r.result})},r.readAsText(t)}else this.setState({parsedContent:t.toString()})};componentDidMount(){this.updateParsedContent(null)}componentDidUpdate(e){this.updateParsedContent(e.content)}render(){let{content:e,contentType:t,url:r,headers:n={},getConfigs:a,getComponent:o}=this.props;const{parsedContent:s}=this.state,l=o("highlightCode"),i="response_"+(new Date).getTime();let c,u;if(r=r||"",(/^application\/octet-stream/i.test(t)||n["Content-Disposition"]&&/attachment/i.test(n["Content-Disposition"])||n["content-disposition"]&&/attachment/i.test(n["content-disposition"])||n["Content-Description"]&&/File Transfer/i.test(n["Content-Description"])||n["content-description"]&&/File Transfer/i.test(n["content-description"]))&&e.size>0)if("Blob"in window){let a=t||"text/html",o=e instanceof Blob?e:new Blob([e],{type:a}),s=window.URL.createObjectURL(o),l=[a,r.substr(r.lastIndexOf("/")+1),s].join(":"),i=n["content-disposition"]||n["Content-Disposition"];if(void 0!==i){let e=function extractFileNameFromContentDispositionHeader(e){let t;if([/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i].some((r=>(t=r.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}(i);null!==e&&(l=e)}u=tt.navigator&&tt.navigator.msSaveOrOpenBlob?Je.default.createElement("div",null,Je.default.createElement("a",{href:s,onClick:()=>tt.navigator.msSaveOrOpenBlob(o,l)},"Download file")):Je.default.createElement("div",null,Je.default.createElement("a",{href:s,download:l},"Download file"))}else u=Je.default.createElement("pre",{className:"microlight"},"Download headers detected but your browser does not support downloading binary via XHR (Blob).");else if(/json/i.test(t)){let t=null;getKnownSyntaxHighlighterLanguage(e)&&(t="json");try{c=JSON.stringify(JSON.parse(e),null," ")}catch(t){c="can't parse JSON. Raw result:\n\n"+e}u=Je.default.createElement(l,{language:t,downloadable:!0,fileName:`${i}.json`,value:c,getConfigs:a,canCopy:!0})}else/xml/i.test(t)?(c=Ca()(e,{textNodesOnSameLine:!0,indentor:" "}),u=Je.default.createElement(l,{downloadable:!0,fileName:`${i}.xml`,value:c,getConfigs:a,canCopy:!0})):u="text/html"===(0,xa.default)(t)||/text\/plain/.test(t)?Je.default.createElement(l,{downloadable:!0,fileName:`${i}.html`,value:e,getConfigs:a,canCopy:!0}):"text/csv"===(0,xa.default)(t)||/text\/csv/.test(t)?Je.default.createElement(l,{downloadable:!0,fileName:`${i}.csv`,value:e,getConfigs:a,canCopy:!0}):/^image\//i.test(t)?t.includes("svg")?Je.default.createElement("div",null," ",e," "):Je.default.createElement("img",{src:window.URL.createObjectURL(e)}):/^audio\//i.test(t)?Je.default.createElement("pre",{className:"microlight"},Je.default.createElement("audio",{controls:!0,key:r},Je.default.createElement("source",{src:r,type:t}))):"string"==typeof e?Je.default.createElement(l,{downloadable:!0,fileName:`${i}.txt`,value:e,getConfigs:a,canCopy:!0}):e.size>0?s?Je.default.createElement("div",null,Je.default.createElement("p",{className:"i"},"Unrecognized response type; displaying content as text."),Je.default.createElement(l,{downloadable:!0,fileName:`${i}.txt`,value:s,getConfigs:a,canCopy:!0})):Je.default.createElement("p",{className:"i"},"Unrecognized response type; unable to display."):null;return u?Je.default.createElement("div",null,Je.default.createElement("h5",null,"Response body"),u):null}}class Parameters extends Je.Component{constructor(e){super(e),this.state={callbackVisible:!1,parametersVisible:!0}}static defaultProps={onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]};onChange=(e,t,r)=>{let{specActions:{changeParamByIdentity:n},onChangeKey:a}=this.props;n(a,e,t,r)};onChangeConsumesWrapper=e=>{let{specActions:{changeConsumesValue:t},onChangeKey:r}=this.props;t(r,e)};toggleTab=e=>"parameters"===e?this.setState({parametersVisible:!0,callbackVisible:!1}):"callbacks"===e?this.setState({callbackVisible:!0,parametersVisible:!1}):void 0;onChangeMediaType=e=>{let{value:t,pathMethod:r}=e,{specActions:n,oas3Selectors:a,oas3Actions:o}=this.props;const s=a.hasUserEditedBody(...r),l=a.shouldRetainRequestBodyValue(...r);o.setRequestContentType({value:t,pathMethod:r}),o.initRequestBodyValidateError({pathMethod:r}),s||(l||o.setRequestBodyValue({value:void 0,pathMethod:r}),n.clearResponse(...r),n.clearRequest(...r),n.clearValidateParams(r))};render(){let{onTryoutClick:e,onResetClick:t,parameters:r,allowTryItOut:n,tryItOutEnabled:a,specPath:o,fn:s,getComponent:l,getConfigs:i,specSelectors:c,specActions:u,pathMethod:d,oas3Actions:p,oas3Selectors:m,operation:f}=this.props;const h=l("parameterRow"),g=l("TryItOutButton"),y=l("contentType"),v=l("Callbacks",!0),S=l("RequestBody",!0),_=a&&n,b=c.isOAS3(),w=f.get("requestBody"),C=Object.values(r.reduce(((e,t)=>{const r=t.get("in");return e[r]??=[],e[r].push(t),e}),{})).reduce(((e,t)=>e.concat(t)),[]);return Je.default.createElement("div",{className:"opblock-section"},Je.default.createElement("div",{className:"opblock-section-header"},b?Je.default.createElement("div",{className:"tab-header"},Je.default.createElement("div",{onClick:()=>this.toggleTab("parameters"),className:`tab-item ${this.state.parametersVisible&&"active"}`},Je.default.createElement("h4",{className:"opblock-title"},Je.default.createElement("span",null,"Parameters"))),f.get("callbacks")?Je.default.createElement("div",{onClick:()=>this.toggleTab("callbacks"),className:`tab-item ${this.state.callbackVisible&&"active"}`},Je.default.createElement("h4",{className:"opblock-title"},Je.default.createElement("span",null,"Callbacks"))):null):Je.default.createElement("div",{className:"tab-header"},Je.default.createElement("h4",{className:"opblock-title"},"Parameters")),n?Je.default.createElement(g,{isOAS3:c.isOAS3(),hasUserEditedBody:m.hasUserEditedBody(...d),enabled:a,onCancelClick:this.props.onCancelClick,onTryoutClick:e,onResetClick:()=>t(d)}):null),this.state.parametersVisible?Je.default.createElement("div",{className:"parameters-container"},C.length?Je.default.createElement("div",{className:"table-container"},Je.default.createElement("table",{className:"parameters"},Je.default.createElement("thead",null,Je.default.createElement("tr",null,Je.default.createElement("th",{className:"col_header parameters-col_name"},"Name"),Je.default.createElement("th",{className:"col_header parameters-col_description"},"Description"))),Je.default.createElement("tbody",null,C.map(((e,t)=>Je.default.createElement(h,{fn:s,specPath:o.push(t.toString()),getComponent:l,getConfigs:i,rawParam:e,param:c.parameterWithMetaByIdentity(d,e),key:`${e.get("in")}.${e.get("name")}`,onChange:this.onChange,onChangeConsumes:this.onChangeConsumesWrapper,specSelectors:c,specActions:u,oas3Actions:p,oas3Selectors:m,pathMethod:d,isExecute:_})))))):Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement("p",null,"No parameters"))):null,this.state.callbackVisible?Je.default.createElement("div",{className:"callbacks-container opblock-description-wrapper"},Je.default.createElement(v,{callbacks:(0,Ke.Map)(f.get("callbacks")),specPath:o.slice(0,-1).push("callbacks")})):null,b&&w&&this.state.parametersVisible&&Je.default.createElement("div",{className:"opblock-section opblock-section-request-body"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("h4",{className:`opblock-title parameter__name ${w.get("required")&&"required"}`},"Request body"),Je.default.createElement("label",null,Je.default.createElement(y,{value:m.requestContentType(...d),contentTypes:w.get("content",(0,Ke.List)()).keySeq(),onChange:e=>{this.onChangeMediaType({value:e,pathMethod:d})},className:"body-param-content-type",ariaLabel:"Request content type"}))),Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement(S,{setRetainRequestBodyValueFlag:e=>p.setRetainRequestBodyValueFlag({value:e,pathMethod:d}),userHasEditedBody:m.hasUserEditedBody(...d),specPath:o.slice(0,-1).push("requestBody"),requestBody:w,requestBodyValue:m.requestBodyValue(...d),requestBodyInclusionSetting:m.requestBodyInclusionSetting(...d),requestBodyErrors:m.requestBodyErrors(...d),isExecute:_,getConfigs:i,activeExamplesKey:m.activeExamplesMember(...d,"requestBody","requestBody"),updateActiveExamplesKey:e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:"requestBody",contextName:"requestBody"})},onChange:(e,t)=>{if(t){const r=m.requestBodyValue(...d),n=Ke.Map.isMap(r)?r:(0,Ke.Map)();return p.setRequestBodyValue({pathMethod:d,value:n.setIn(t,e)})}p.setRequestBodyValue({value:e,pathMethod:d})},onChangeIncludeEmpty:(e,t)=>{p.setRequestBodyInclusion({pathMethod:d,value:t,name:e})},contentType:m.requestContentType(...d)}))))}}var parameter_extension=e=>{let{xKey:t,xVal:r}=e;return Je.default.createElement("div",{className:"parameter__extension"},t,": ",String(r))};const Oa={onChange:()=>{},isIncludedOptions:{}};class ParameterIncludeEmpty extends Je.Component{static defaultProps=Oa;componentDidMount(){const{isIncludedOptions:e,onChange:t}=this.props,{shouldDispatchInit:r,defaultValue:n}=e;r&&t(n)}onCheckboxChange=e=>{const{onChange:t}=this.props;t(e.target.checked)};render(){let{isIncluded:e,isDisabled:t}=this.props;return Je.default.createElement("div",null,Je.default.createElement("label",{className:(0,Sa.default)("parameter__empty_value_toggle",{disabled:t})},Je.default.createElement("input",{type:"checkbox",disabled:t,checked:!t&&e,onChange:this.onCheckboxChange}),"Send empty value"))}}class ParameterRow extends Je.Component{constructor(e,t){super(e,t),this.setDefaultValue()}UNSAFE_componentWillReceiveProps(e){let t,{specSelectors:r,pathMethod:n,rawParam:a}=e,o=r.isOAS3(),s=r.parameterWithMetaByIdentity(n,a)||new Ke.Map;if(s=s.isEmpty()?a:s,o){let{schema:e}=getParameterSchema(s,{isOAS3:o});t=e?e.get("enum"):void 0}else t=s?s.get("enum"):void 0;let l,i=s?s.get("value"):void 0;void 0!==i?l=i:a.get("required")&&t&&t.size&&(l=t.first()),void 0!==l&&l!==i&&this.onChangeWrapper(function numberToString(e){return"number"==typeof e?e.toString():e}(l)),this.setDefaultValue()}onChangeWrapper=(()=>{var e=this;return function(t){let r,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{onChange:a,rawParam:o}=e.props;return r=""===t||t&&0===t.size?null:t,a(o,r,n)}})();_onExampleSelect=e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:"parameters",contextName:this.getParamKey()})};onChangeIncludeEmpty=e=>{let{specActions:t,param:r,pathMethod:n}=this.props;const a=r.get("name"),o=r.get("in");return t.updateEmptyParamInclusion(n,a,o,e)};setDefaultValue=()=>{let{specSelectors:e,pathMethod:t,rawParam:r,oas3Selectors:n,fn:a}=this.props;const o=e.parameterWithMetaByIdentity(t,r)||(0,Ke.Map)(),{schema:s}=getParameterSchema(o,{isOAS3:e.isOAS3()}),l=o.get("content",(0,Ke.Map)()).keySeq().first(),i=s?a.getSampleSchema(s.toJS(),l,{includeWriteOnly:!0}):null;if(o&&void 0===o.get("value")&&"body"!==o.get("in")){let r;if(e.isSwagger2())r=void 0!==o.get("x-example")?o.get("x-example"):void 0!==o.getIn(["schema","example"])?o.getIn(["schema","example"]):s&&s.getIn(["default"]);else if(e.isOAS3()){const e=n.activeExamplesMember(...t,"parameters",this.getParamKey());r=void 0!==o.getIn(["examples",e,"value"])?o.getIn(["examples",e,"value"]):void 0!==o.getIn(["content",l,"example"])?o.getIn(["content",l,"example"]):void 0!==o.get("example")?o.get("example"):void 0!==(s&&s.get("example"))?s&&s.get("example"):void 0!==(s&&s.get("default"))?s&&s.get("default"):o.get("default")}void 0===r||Ke.List.isList(r)||(r=stringify(r)),void 0!==r?this.onChangeWrapper(r):s&&"object"===s.get("type")&&i&&!o.get("examples")&&this.onChangeWrapper(Ke.List.isList(i)?i:stringify(i))}};getParamKey(){const{param:e}=this.props;return e?`${e.get("name")}-${e.get("in")}`:null}render(){let{param:e,rawParam:t,getComponent:r,getConfigs:n,isExecute:a,fn:o,onChangeConsumes:s,specSelectors:l,pathMethod:i,specPath:c,oas3Selectors:u}=this.props,d=l.isOAS3();const{showExtensions:p,showCommonExtensions:m}=n();if(e||(e=t),!t)return null;const f=r("JsonSchemaForm"),h=r("ParamBody");let g=e.get("in"),y="body"!==g?null:Je.default.createElement(h,{getComponent:r,getConfigs:n,fn:o,param:e,consumes:l.consumesOptionsFor(i),consumesValue:l.contentTypeValues(i).get("requestContentType"),onChange:this.onChangeWrapper,onChangeConsumes:s,isExecute:a,specSelectors:l,pathMethod:i});const v=r("modelExample"),S=r("Markdown",!0),_=r("ParameterExt"),b=r("ParameterIncludeEmpty"),w=r("ExamplesSelectValueRetainer"),C=r("Example");let x,O,k,N,{schema:A}=getParameterSchema(e,{isOAS3:d}),I=l.parameterWithMetaByIdentity(i,t)||(0,Ke.Map)(),R=A?A.get("format"):null,T=A?A.get("type"):null,B=A?A.getIn(["items","type"]):null,j="formData"===g,P="FormData"in tt,M=e.get("required"),q=I?I.get("value"):"",L=m?getCommonExtensions(A):null,D=p?getExtensions(e):null,U=!1;return void 0!==e&&A&&(x=A.get("items")),void 0!==x?(O=x.get("enum"),k=x.get("default")):A&&(O=A.get("enum")),O&&O.size&&O.size>0&&(U=!0),void 0!==e&&(A&&(k=A.get("default")),void 0===k&&(k=e.get("default")),N=e.get("example"),void 0===N&&(N=e.get("x-example"))),Je.default.createElement("tr",{"data-param-name":e.get("name"),"data-param-in":e.get("in")},Je.default.createElement("td",{className:"parameters-col_name"},Je.default.createElement("div",{className:M?"parameter__name required":"parameter__name"},e.get("name"),M?Je.default.createElement("span",null," *"):null),Je.default.createElement("div",{className:"parameter__type"},T,B&&`[${B}]`,R&&Je.default.createElement("span",{className:"prop-format"},"($",R,")")),Je.default.createElement("div",{className:"parameter__deprecated"},d&&e.get("deprecated")?"deprecated":null),Je.default.createElement("div",{className:"parameter__in"},"(",e.get("in"),")"),m&&L.size?L.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,xKey:t,xVal:r})})):null,p&&D.size?D.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,xKey:t,xVal:r})})):null),Je.default.createElement("td",{className:"parameters-col_description"},e.get("description")?Je.default.createElement(S,{source:e.get("description")}):null,!y&&a||!U?null:Je.default.createElement(S,{className:"parameter__enum",source:"Available values : "+O.map((function(e){return e})).toArray().join(", ")}),!y&&a||void 0===k?null:Je.default.createElement(S,{className:"parameter__default",source:"Default value : "+k}),!y&&a||void 0===N?null:Je.default.createElement(S,{source:"Example : "+N}),j&&!P&&Je.default.createElement("div",null,"Error: your browser does not support FormData"),d&&e.get("examples")?Je.default.createElement("section",{className:"parameter-controls"},Je.default.createElement(w,{examples:e.get("examples"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:r,defaultToFirstExample:!0,currentKey:u.activeExamplesMember(...i,"parameters",this.getParamKey()),currentUserInputValue:q})):null,y?null:Je.default.createElement(f,{fn:o,getComponent:r,value:q,required:M,disabled:!a,description:e.get("name"),onChange:this.onChangeWrapper,errors:I.get("errors"),schema:A}),y&&A?Je.default.createElement(v,{getComponent:r,specPath:c.push("schema"),getConfigs:n,isExecute:a,specSelectors:l,schema:A,example:y,includeWriteOnly:!0}):null,!y&&a&&e.get("allowEmptyValue")?Je.default.createElement(b,{onChange:this.onChangeIncludeEmpty,isIncluded:l.parameterInclusionSettingFor(i,e.get("name"),e.get("in")),isDisabled:!isEmptyValue(q)}):null,d&&e.get("examples")?Je.default.createElement(C,{example:e.getIn(["examples",u.activeExamplesMember(...i,"parameters",this.getParamKey())]),getComponent:r,getConfigs:n}):null))}}class Execute extends Je.Component{handleValidateParameters=()=>{let{specSelectors:e,specActions:t,path:r,method:n}=this.props;return t.validateParams([r,n]),e.validateBeforeExecute([r,n])};handleValidateRequestBody=()=>{let{path:e,method:t,specSelectors:r,oas3Selectors:n,oas3Actions:a}=this.props,o={missingBodyValue:!1,missingRequiredKeys:[]};a.clearRequestBodyValidateError({path:e,method:t});let s=r.getOAS3RequiredRequestBodyContentType([e,t]),l=n.requestBodyValue(e,t),i=n.validateBeforeExecute([e,t]),c=n.requestContentType(e,t);if(!i)return o.missingBodyValue=!0,a.setRequestBodyValidateError({path:e,method:t,validationErrors:o}),!1;if(!s)return!0;let u=n.validateShallowRequired({oas3RequiredRequestBodyContentType:s,oas3RequestContentType:c,oas3RequestBodyValue:l});return!u||u.length<1||(u.forEach((e=>{o.missingRequiredKeys.push(e)})),a.setRequestBodyValidateError({path:e,method:t,validationErrors:o}),!1)};handleValidationResultPass=()=>{let{specActions:e,operation:t,path:r,method:n}=this.props;this.props.onExecute&&this.props.onExecute(),e.execute({operation:t,path:r,method:n})};handleValidationResultFail=()=>{let{specActions:e,path:t,method:r}=this.props;e.clearValidateParams([t,r]),setTimeout((()=>{e.validateParams([t,r])}),40)};handleValidationResult=e=>{e?this.handleValidationResultPass():this.handleValidationResultFail()};onClick=()=>{let e=this.handleValidateParameters(),t=this.handleValidateRequestBody(),r=e&&t;this.handleValidationResult(r)};onChangeProducesWrapper=e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e);render(){const{disabled:e}=this.props;return Je.default.createElement("button",{className:"btn execute opblock-control__btn",onClick:this.onClick,disabled:e},"Execute")}}class headers_Headers extends Je.default.Component{render(){let{headers:e,getComponent:t}=this.props;const r=t("Property"),n=t("Markdown",!0);return e&&e.size?Je.default.createElement("div",{className:"headers-wrapper"},Je.default.createElement("h4",{className:"headers__title"},"Headers:"),Je.default.createElement("table",{className:"headers"},Je.default.createElement("thead",null,Je.default.createElement("tr",{className:"header-row"},Je.default.createElement("th",{className:"header-col"},"Name"),Je.default.createElement("th",{className:"header-col"},"Description"),Je.default.createElement("th",{className:"header-col"},"Type"))),Je.default.createElement("tbody",null,e.entrySeq().map((e=>{let[t,a]=e;if(!Ke.default.Map.isMap(a))return null;const o=a.get("description"),s=a.getIn(["schema"])?a.getIn(["schema","type"]):a.getIn(["type"]),l=a.getIn(["schema","example"]);return Je.default.createElement("tr",{key:t},Je.default.createElement("td",{className:"header-col"},t),Je.default.createElement("td",{className:"header-col"},o?Je.default.createElement(n,{source:o}):null),Je.default.createElement("td",{className:"header-col"},s," ",l?Je.default.createElement(r,{propKey:"Example",propVal:l,propClass:"header-example"}):null))})).toArray()))):null}}class Errors extends Je.default.Component{render(){let{editorActions:e,errSelectors:t,layoutSelectors:r,layoutActions:n,getComponent:a}=this.props;const o=a("Collapse");if(e&&e.jumpToLine)var s=e.jumpToLine;let l=t.allErrors().filter((e=>"thrown"===e.get("type")||"error"===e.get("level")));if(!l||l.count()<1)return null;let i=r.isShown(["errorPane"],!0),c=l.sortBy((e=>e.get("line")));return Je.default.createElement("pre",{className:"errors-wrapper"},Je.default.createElement("hgroup",{className:"error"},Je.default.createElement("h4",{className:"errors__title"},"Errors"),Je.default.createElement("button",{className:"btn errors__clear-btn",onClick:()=>n.show(["errorPane"],!i)},i?"Hide":"Show")),Je.default.createElement(o,{isOpened:i,animated:!0},Je.default.createElement("div",{className:"errors"},c.map(((e,t)=>{let r=e.get("type");return"thrown"===r||"auth"===r?Je.default.createElement(ThrownErrorItem,{key:t,error:e.get("error")||e,jumpToLine:s}):"spec"===r?Je.default.createElement(SpecErrorItem,{key:t,error:e,jumpToLine:s}):void 0})))))}}const ThrownErrorItem=e=>{let{error:t,jumpToLine:r}=e;if(!t)return null;let n=t.get("line");return Je.default.createElement("div",{className:"error-wrapper"},t?Je.default.createElement("div",null,Je.default.createElement("h4",null,t.get("source")&&t.get("level")?toTitleCase(t.get("source"))+" "+t.get("level"):"",t.get("path")?Je.default.createElement("small",null," at ",t.get("path")):null),Je.default.createElement("span",{className:"message thrown"},t.get("message")),Je.default.createElement("div",{className:"error-line"},n&&r?Je.default.createElement("a",{onClick:r.bind(null,n)},"Jump to line ",n):null)):null)},SpecErrorItem=e=>{let{error:t,jumpToLine:r}=e,n=null;return t.get("path")?n=Ke.List.isList(t.get("path"))?Je.default.createElement("small",null,"at ",t.get("path").join(".")):Je.default.createElement("small",null,"at ",t.get("path")):t.get("line")&&!r&&(n=Je.default.createElement("small",null,"on line ",t.get("line"))),Je.default.createElement("div",{className:"error-wrapper"},t?Je.default.createElement("div",null,Je.default.createElement("h4",null,toTitleCase(t.get("source"))+" "+t.get("level")," ",n),Je.default.createElement("span",{className:"message"},t.get("message")),Je.default.createElement("div",{className:"error-line"},r?Je.default.createElement("a",{onClick:r.bind(null,t.get("line"))},"Jump to line ",t.get("line")):null)):null)};function toTitleCase(e){return(e||"").split(" ").map((e=>e[0].toUpperCase()+e.slice(1))).join(" ")}ThrownErrorItem.defaultProps={jumpToLine:null};const content_type_noop=()=>{};class ContentType extends Je.default.Component{static defaultProps={onChange:content_type_noop,value:null,contentTypes:(0,Ke.fromJS)(["application/json"])};componentDidMount(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}UNSAFE_componentWillReceiveProps(e){e.contentTypes&&e.contentTypes.size&&(e.contentTypes.includes(e.value)||e.onChange(e.contentTypes.first()))}onChangeWrapper=e=>this.props.onChange(e.target.value);render(){let{ariaControls:e,ariaLabel:t,className:r,contentTypes:n,controlId:a,value:o}=this.props;return n&&n.size?Je.default.createElement("div",{className:"content-type-wrapper "+(r||"")},Je.default.createElement("select",{"aria-controls":e,"aria-label":t,className:"content-type",id:a,onChange:this.onChangeWrapper,value:o||""},n.map((e=>Je.default.createElement("option",{key:e,value:e},e))).toArray())):null}}function xclass(){for(var e=arguments.length,t=new Array(e),r=0;r!!e)).join(" ").trim()}class Container extends Je.default.Component{render(){let{fullscreen:e,full:t,...r}=this.props;if(e)return Je.default.createElement("section",r);let n="swagger-container"+(t?"-full":"");return Je.default.createElement("section",(0,er.default)({},r,{className:xclass(r.className,n)}))}}const ka={mobile:"",tablet:"-tablet",desktop:"-desktop",large:"-hd"};class Col extends Je.default.Component{render(){const{hide:e,keepContents:t,mobile:r,tablet:n,desktop:a,large:o,...s}=this.props;if(e&&!t)return Je.default.createElement("span",null);let l=[];for(let e in ka){if(!Object.prototype.hasOwnProperty.call(ka,e))continue;let t=ka[e];if(e in this.props){let r=this.props[e];if(r<1){l.push("none"+t);continue}l.push("block"+t),l.push("col-"+r+t)}}e&&l.push("hidden");let i=xclass(s.className,...l);return Je.default.createElement("section",(0,er.default)({},s,{className:i}))}}class Row extends Je.default.Component{render(){return Je.default.createElement("div",(0,er.default)({},this.props,{className:xclass(this.props.className,"wrapper")}))}}class Button extends Je.default.Component{static defaultProps={className:""};render(){return Je.default.createElement("button",(0,er.default)({},this.props,{className:xclass(this.props.className,"button")}))}}const TextArea=e=>Je.default.createElement("textarea",e),Input=e=>Je.default.createElement("input",e);class Select extends Je.default.Component{static defaultProps={multiple:!1,allowEmptyValue:!0};constructor(e,t){let r;super(e,t),r=e.value?e.value:e.multiple?[""]:"",this.state={value:r}}onChange=e=>{let t,{onChange:r,multiple:n}=this.props,a=[].slice.call(e.target.options);t=n?a.filter((function(e){return e.selected})).map((function(e){return e.value})):e.target.value,this.setState({value:t}),r&&r(t)};UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){let{allowedValues:e,multiple:t,allowEmptyValue:r,disabled:n}=this.props,a=this.state.value?.toJS?.()||this.state.value;return Je.default.createElement("select",{className:this.props.className,multiple:t,value:a,onChange:this.onChange,disabled:n},r?Je.default.createElement("option",{value:""},"--"):null,e.map((function(e,t){return Je.default.createElement("option",{key:t,value:String(e)},String(e))})))}}class Link extends Je.default.Component{render(){return Je.default.createElement("a",(0,er.default)({},this.props,{rel:"noopener noreferrer",className:xclass(this.props.className,"link")}))}}const NoMargin=e=>{let{children:t}=e;return Je.default.createElement("div",{className:"no-margin"}," ",t," ")};class Collapse extends Je.default.Component{static defaultProps={isOpened:!1,animated:!1};renderNotAnimated(){return this.props.isOpened?Je.default.createElement(NoMargin,null,this.props.children):Je.default.createElement("noscript",null)}render(){let{animated:e,isOpened:t,children:r}=this.props;return e?(r=t?r:null,Je.default.createElement(NoMargin,null,r)):this.renderNotAnimated()}}class Overview extends Je.default.Component{constructor(){super(...arguments),this.setTagShown=this._setTagShown.bind(this)}_setTagShown(e,t){this.props.layoutActions.show(e,t)}showOp(e,t){let{layoutActions:r}=this.props;r.show(e,t)}render(){let{specSelectors:e,layoutSelectors:t,layoutActions:r,getComponent:n}=this.props,a=e.taggedOperations();const o=n("Collapse");return Je.default.createElement("div",null,Je.default.createElement("h4",{className:"overview-title"},"Overview"),a.map(((e,n)=>{let a=e.get("operations"),s=["overview-tags",n],l=t.isShown(s,!0);return Je.default.createElement("div",{key:"overview-"+n},Je.default.createElement("h4",{onClick:()=>r.show(s,!l),className:"link overview-tag"}," ",l?"-":"+",n),Je.default.createElement(o,{isOpened:l,animated:!0},a.map((e=>{let{path:n,method:a,id:o}=e.toObject(),s="operations",l=o,i=t.isShown([s,l]);return Je.default.createElement(OperationLink,{key:o,path:n,method:a,id:n+"-"+a,shown:i,showOpId:l,showOpIdPrefix:s,href:`#operation-${l}`,onClick:r.show})})).toArray()))})).toArray(),a.size<1&&Je.default.createElement("h3",null," No operations defined in spec! "))}}class OperationLink extends Je.default.Component{constructor(e){super(e),this.onClick=this._onClick.bind(this)}_onClick(){let{showOpId:e,showOpIdPrefix:t,onClick:r,shown:n}=this.props;r([t,e],!n)}render(){let{id:e,method:t,shown:r,href:n}=this.props;return Je.default.createElement(Link,{href:n,onClick:this.onClick,className:"block opblock-link "+(r?"shown":"")},Je.default.createElement("div",null,Je.default.createElement("small",{className:`bold-label-${t}`},t.toUpperCase()),Je.default.createElement("span",{className:"bold-label"},e)))}}class InitializedInput extends Je.default.Component{componentDidMount(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}render(){const{value:e,defaultValue:t,initialValue:r,...n}=this.props;return Je.default.createElement("input",(0,er.default)({},n,{ref:e=>this.inputRef=e}))}}class InfoBasePath extends Je.default.Component{render(){const{host:e,basePath:t}=this.props;return Je.default.createElement("pre",{className:"base-url"},"[ Base URL: ",e,t," ]")}}class InfoUrl extends Je.default.PureComponent{render(){const{url:e,getComponent:t}=this.props,r=t("Link");return Je.default.createElement(r,{target:"_blank",href:sanitizeUrl(e)},Je.default.createElement("span",{className:"url"}," ",e))}}class Info extends Je.default.Component{render(){const{info:e,url:t,host:r,basePath:n,getComponent:a,externalDocs:o,selectedServer:s,url:l}=this.props,i=e.get("version"),c=e.get("description"),u=e.get("title"),d=safeBuildUrl(e.get("termsOfService"),l,{selectedServer:s}),p=e.get("contact"),m=e.get("license"),f=safeBuildUrl(o&&o.get("url"),l,{selectedServer:s}),h=o&&o.get("description"),g=a("Markdown",!0),y=a("Link"),v=a("VersionStamp"),S=a("OpenAPIVersion"),_=a("InfoUrl"),b=a("InfoBasePath"),w=a("License"),C=a("Contact");return Je.default.createElement("div",{className:"info"},Je.default.createElement("hgroup",{className:"main"},Je.default.createElement("h2",{className:"title"},u,Je.default.createElement("span",null,i&&Je.default.createElement(v,{version:i}),Je.default.createElement(S,{oasVersion:"2.0"}))),r||n?Je.default.createElement(b,{host:r,basePath:n}):null,t&&Je.default.createElement(_,{getComponent:a,url:t})),Je.default.createElement("div",{className:"description"},Je.default.createElement(g,{source:c})),d&&Je.default.createElement("div",{className:"info__tos"},Je.default.createElement(y,{target:"_blank",href:sanitizeUrl(d)},"Terms of service")),p?.size>0&&Je.default.createElement(C,{getComponent:a,data:p,selectedServer:s,url:t}),m?.size>0&&Je.default.createElement(w,{getComponent:a,license:m,selectedServer:s,url:t}),f?Je.default.createElement(y,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(f)},h||f):null)}}var Na=Info;class InfoContainer extends Je.default.Component{render(){const{specSelectors:e,getComponent:t,oas3Selectors:r}=this.props,n=e.info(),a=e.url(),o=e.basePath(),s=e.host(),l=e.externalDocs(),i=r.selectedServer(),c=t("info");return Je.default.createElement("div",null,n&&n.count()?Je.default.createElement(c,{info:n,url:a,host:s,basePath:o,externalDocs:l,getComponent:t,selectedServer:i}):null)}}class Contact extends Je.default.Component{render(){const{data:e,getComponent:t,selectedServer:r,url:n}=this.props,a=e.get("name","the developer"),o=safeBuildUrl(e.get("url"),n,{selectedServer:r}),s=e.get("email"),l=t("Link");return Je.default.createElement("div",{className:"info__contact"},o&&Je.default.createElement("div",null,Je.default.createElement(l,{href:sanitizeUrl(o),target:"_blank"},a," - Website")),s&&Je.default.createElement(l,{href:sanitizeUrl(`mailto:${s}`)},o?`Send email to ${a}`:`Contact ${a}`))}}var Aa=Contact;class License extends Je.default.Component{render(){const{license:e,getComponent:t,selectedServer:r,url:n}=this.props,a=e.get("name","License"),o=safeBuildUrl(e.get("url"),n,{selectedServer:r}),s=t("Link");return Je.default.createElement("div",{className:"info__license"},o?Je.default.createElement("div",{className:"info__license__url"},Je.default.createElement(s,{target:"_blank",href:sanitizeUrl(o)},a)):Je.default.createElement("span",null,a))}}var Ia=License;class JumpToPath extends Je.default.Component{render(){return null}}class CopyToClipboardBtn extends Je.default.Component{render(){let{getComponent:e}=this.props;const t=e("CopyIcon");return Je.default.createElement("div",{className:"view-line-link copy-to-clipboard",title:"Copy to clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:this.props.textToCopy},Je.default.createElement(t,null)))}}class Footer extends Je.default.Component{render(){return Je.default.createElement("div",{className:"footer"})}}class FilterContainer extends Je.default.Component{onFilterChange=e=>{const{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)};render(){const{specSelectors:e,layoutSelectors:t,getComponent:r}=this.props,n=r("Col"),a="loading"===e.loadingStatus(),o="failed"===e.loadingStatus(),s=t.currentFilter(),l=["operation-filter-input"];return o&&l.push("failed"),a&&l.push("loading"),Je.default.createElement("div",null,null===s||!1===s||"false"===s?null:Je.default.createElement("div",{className:"filter-container"},Je.default.createElement(n,{className:"filter wrapper",mobile:12},Je.default.createElement("input",{className:l.join(" "),placeholder:"Filter by tag",type:"text",onChange:this.onFilterChange,value:!0===s||"true"===s?"":s,disabled:a}))))}}const Ra=Function.prototype;class ParamBody extends Je.PureComponent{static defaultProp={consumes:(0,Ke.fromJS)(["application/json"]),param:(0,Ke.fromJS)({}),onChange:Ra,onChangeConsumes:Ra};constructor(e,t){super(e,t),this.state={isEditBox:!1,value:""}}componentDidMount(){this.updateValues.call(this,this.props)}UNSAFE_componentWillReceiveProps(e){this.updateValues.call(this,e)}updateValues=e=>{let{param:t,isExecute:r,consumesValue:n=""}=e,a=/xml/i.test(n),o=/json/i.test(n),s=a?t.get("value_xml"):t.get("value");if(void 0!==s){let e=!s&&o?"{}":s;this.setState({value:e}),this.onChange(e,{isXml:a,isEditBox:r})}else a?this.onChange(this.sample("xml"),{isXml:a,isEditBox:r}):this.onChange(this.sample(),{isEditBox:r})};sample=e=>{let{param:t,fn:r}=this.props,n=r.inferSchema(t.toJS());return r.getSampleSchema(n,e,{includeWriteOnly:!0})};onChange=(e,t)=>{let{isEditBox:r,isXml:n}=t;this.setState({value:e,isEditBox:r}),this._onChange(e,n)};_onChange=(e,t)=>{(this.props.onChange||Ra)(e,t)};handleOnChange=e=>{const{consumesValue:t}=this.props,r=/xml/i.test(t),n=e.target.value;this.onChange(n,{isXml:r,isEditBox:this.state.isEditBox})};toggleIsEditBox=()=>this.setState((e=>({isEditBox:!e.isEditBox})));render(){let{onChangeConsumes:e,param:t,isExecute:r,specSelectors:n,pathMethod:a,getConfigs:o,getComponent:s}=this.props;const l=s("Button"),i=s("TextArea"),c=s("highlightCode"),u=s("contentType");let d=(n?n.parameterWithMetaByIdentity(a,t):t).get("errors",(0,Ke.List)()),p=n.contentTypeValues(a).get("requestContentType"),m=this.props.consumes&&this.props.consumes.size?this.props.consumes:ParamBody.defaultProp.consumes,{value:f,isEditBox:h}=this.state,g=null;return getKnownSyntaxHighlighterLanguage(f)&&(g="json"),Je.default.createElement("div",{className:"body-param","data-param-name":t.get("name"),"data-param-in":t.get("in")},h&&r?Je.default.createElement(i,{className:"body-param__text"+(d.count()?" invalid":""),value:f,onChange:this.handleOnChange}):f&&Je.default.createElement(c,{className:"body-param__example",language:g,getConfigs:o,value:f}),Je.default.createElement("div",{className:"body-param-options"},r?Je.default.createElement("div",{className:"body-param-edit"},Je.default.createElement(l,{className:h?"btn cancel body-param__example-edit":"btn edit body-param__example-edit",onClick:this.toggleIsEditBox},h?"Cancel":"Edit")):null,Je.default.createElement("label",{htmlFor:""},Je.default.createElement("span",null,"Parameter content type"),Je.default.createElement(u,{value:p,contentTypes:m,onChange:e,className:"body-param-content-type",ariaLabel:"Parameter content type"}))))}}class Curl extends Je.default.Component{render(){let{request:e,getConfigs:t}=this.props,r=requestSnippetGenerator_curl_bash(e);const n=t(),a=(0,Gt.default)(n,"syntaxHighlight.activated")?Je.default.createElement(vr.default,{language:"bash",className:"curl microlight",style:getStyle((0,Gt.default)(n,"syntaxHighlight.theme"))},r):Je.default.createElement("textarea",{readOnly:!0,className:"curl",value:r});return Je.default.createElement("div",{className:"curl-command"},Je.default.createElement("h4",null,"Curl"),Je.default.createElement("div",{className:"copy-to-clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:r},Je.default.createElement("button",null))),Je.default.createElement("div",null,a))}}class Schemes extends Je.default.Component{UNSAFE_componentWillMount(){let{schemes:e}=this.props;this.setScheme(e.first())}UNSAFE_componentWillReceiveProps(e){this.props.currentScheme&&e.schemes.includes(this.props.currentScheme)||this.setScheme(e.schemes.first())}onChange=e=>{this.setScheme(e.target.value)};setScheme=e=>{let{path:t,method:r,specActions:n}=this.props;n.setScheme(e,t,r)};render(){let{schemes:e,currentScheme:t}=this.props;return Je.default.createElement("label",{htmlFor:"schemes"},Je.default.createElement("span",{className:"schemes-title"},"Schemes"),Je.default.createElement("select",{onChange:this.onChange,value:t},e.valueSeq().map((e=>Je.default.createElement("option",{value:e,key:e},e))).toArray()))}}class SchemesContainer extends Je.default.Component{render(){const{specActions:e,specSelectors:t,getComponent:r}=this.props,n=t.operationScheme(),a=t.schemes(),o=r("schemes");return a&&a.size?Je.default.createElement(o,{currentScheme:n,schemes:a,specActions:e}):null}}class ModelCollapse extends Je.Component{static defaultProps={collapsedContent:"{...}",expanded:!1,title:null,onToggle:()=>{},hideSelfOnExpand:!1,specPath:Ke.default.List([])};constructor(e,t){super(e,t);let{expanded:r,collapsedContent:n}=this.props;this.state={expanded:r,collapsedContent:n||ModelCollapse.defaultProps.collapsedContent}}componentDidMount(){const{hideSelfOnExpand:e,expanded:t,modelName:r}=this.props;e&&t&&this.props.onToggle(r,t)}UNSAFE_componentWillReceiveProps(e){this.props.expanded!==e.expanded&&this.setState({expanded:e.expanded})}toggleCollapsed=()=>{this.props.onToggle&&this.props.onToggle(this.props.modelName,!this.state.expanded),this.setState({expanded:!this.state.expanded})};onLoad=e=>{if(e&&this.props.layoutSelectors){const t=this.props.layoutSelectors.getScrollToKey();Ke.default.is(t,this.props.specPath)&&this.toggleCollapsed(),this.props.layoutActions.readyToScroll(this.props.specPath,e.parentElement)}};render(){const{title:e,classes:t}=this.props;return this.state.expanded&&this.props.hideSelfOnExpand?Je.default.createElement("span",{className:t||""},this.props.children):Je.default.createElement("span",{className:t||"",ref:this.onLoad},Je.default.createElement("button",{"aria-expanded":this.state.expanded,className:"model-box-control",onClick:this.toggleCollapsed},e&&Je.default.createElement("span",{className:"pointer"},e),Je.default.createElement("span",{className:"model-toggle"+(this.state.expanded?"":" collapsed")}),!this.state.expanded&&Je.default.createElement("span",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}class ModelExample extends Je.default.Component{constructor(e,t){super(e,t);let{getConfigs:r,isExecute:n}=this.props,{defaultModelRendering:a}=r(),o=a;"example"!==a&&"model"!==a&&(o="example"),n&&(o="example"),this.state={activeTab:o}}activeTab=e=>{let{target:{dataset:{name:t}}}=e;this.setState({activeTab:t})};UNSAFE_componentWillReceiveProps(e){e.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:"example"})}render(){let{getComponent:e,specSelectors:t,schema:r,example:n,isExecute:a,getConfigs:o,specPath:s,includeReadOnly:l,includeWriteOnly:i}=this.props,{defaultModelExpandDepth:c}=o();const u=e("ModelWrapper"),d=e("highlightCode"),p=ut()(5).toString("base64"),m=ut()(5).toString("base64"),f=ut()(5).toString("base64"),h=ut()(5).toString("base64");let g=t.isOAS3();return Je.default.createElement("div",{className:"model-example"},Je.default.createElement("ul",{className:"tab",role:"tablist"},Je.default.createElement("li",{className:(0,Sa.default)("tabitem",{active:"example"===this.state.activeTab}),role:"presentation"},Je.default.createElement("button",{"aria-controls":m,"aria-selected":"example"===this.state.activeTab,className:"tablinks","data-name":"example",id:p,onClick:this.activeTab,role:"tab"},a?"Edit Value":"Example Value")),r&&Je.default.createElement("li",{className:(0,Sa.default)("tabitem",{active:"model"===this.state.activeTab}),role:"presentation"},Je.default.createElement("button",{"aria-controls":h,"aria-selected":"model"===this.state.activeTab,className:(0,Sa.default)("tablinks",{inactive:a}),"data-name":"model",id:f,onClick:this.activeTab,role:"tab"},g?"Schema":"Model"))),"example"===this.state.activeTab&&Je.default.createElement("div",{"aria-hidden":"example"!==this.state.activeTab,"aria-labelledby":p,"data-name":"examplePanel",id:m,role:"tabpanel",tabIndex:"0"},n||Je.default.createElement(d,{value:"(no example available)",getConfigs:o})),"model"===this.state.activeTab&&Je.default.createElement("div",{"aria-hidden":"example"===this.state.activeTab,"aria-labelledby":f,"data-name":"modelPanel",id:h,role:"tabpanel",tabIndex:"0"},Je.default.createElement(u,{schema:r,getComponent:e,getConfigs:o,specSelectors:t,expandDepth:c,specPath:s,includeReadOnly:l,includeWriteOnly:i})))}}class ModelWrapper extends Je.Component{onToggle=(e,t)=>{this.props.layoutActions&&this.props.layoutActions.show(this.props.fullPath,t)};render(){let{getComponent:e,getConfigs:t}=this.props;const r=e("Model");let n;return this.props.layoutSelectors&&(n=this.props.layoutSelectors.isShown(this.props.fullPath)),Je.default.createElement("div",{className:"model-box"},Je.default.createElement(r,(0,er.default)({},this.props,{getConfigs:t,expanded:n,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}var Ta=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>fe.default});const decodeRefName=e=>{const t=e.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(t)}catch{return t}};class Model extends Ta.default{static propTypes={schema:Wt.default.map.isRequired,getComponent:jt.default.func.isRequired,getConfigs:jt.default.func.isRequired,specSelectors:jt.default.object.isRequired,name:jt.default.string,displayName:jt.default.string,isRef:jt.default.bool,required:jt.default.bool,expandDepth:jt.default.number,depth:jt.default.number,specPath:Wt.default.list.isRequired,includeReadOnly:jt.default.bool,includeWriteOnly:jt.default.bool};getModelName=e=>-1!==e.indexOf("#/definitions/")?decodeRefName(e.replace(/^.*#\/definitions\//,"")):-1!==e.indexOf("#/components/schemas/")?decodeRefName(e.replace(/^.*#\/components\/schemas\//,"")):void 0;getRefSchema=e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)};render(){let{getComponent:e,getConfigs:t,specSelectors:r,schema:n,required:a,name:o,isRef:s,specPath:l,displayName:i,includeReadOnly:c,includeWriteOnly:u}=this.props;const d=e("ObjectModel"),p=e("ArrayModel"),m=e("PrimitiveModel");let f="object",h=n&&n.get("$$ref");if(!o&&h&&(o=this.getModelName(h)),!n&&h&&(n=this.getRefSchema(o)),!n)return Je.default.createElement("span",{className:"model model-title"},Je.default.createElement("span",{className:"model-title__text"},i||o),Je.default.createElement(rolling_load,{height:"20px",width:"20px"}));const g=r.isOAS3()&&n.get("deprecated");switch(s=void 0!==s?s:!!h,f=n&&n.get("type")||f,f){case"object":return Je.default.createElement(d,(0,er.default)({className:"object"},this.props,{specPath:l,getConfigs:t,schema:n,name:o,deprecated:g,isRef:s,includeReadOnly:c,includeWriteOnly:u}));case"array":return Je.default.createElement(p,(0,er.default)({className:"array"},this.props,{getConfigs:t,schema:n,name:o,deprecated:g,required:a,includeReadOnly:c,includeWriteOnly:u}));default:return Je.default.createElement(m,(0,er.default)({},this.props,{getComponent:e,getConfigs:t,schema:n,name:o,deprecated:g,required:a}))}}}class Models extends Je.Component{getSchemaBasePath=()=>this.props.specSelectors.isOAS3()?["components","schemas"]:["definitions"];getCollapsedContent=()=>" ";handleToggle=(e,t)=>{const{layoutActions:r}=this.props;r.show([...this.getSchemaBasePath(),e],t),t&&this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(),e])};onLoadModels=e=>{e&&this.props.layoutActions.readyToScroll(this.getSchemaBasePath(),e)};onLoadModel=e=>{if(e){const t=e.getAttribute("data-name");this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(),t],e)}};render(){let{specSelectors:e,getComponent:t,layoutSelectors:r,layoutActions:n,getConfigs:a}=this.props,o=e.definitions(),{docExpansion:s,defaultModelsExpandDepth:l}=a();if(!o.size||l<0)return null;const i=this.getSchemaBasePath();let c=r.isShown(i,l>0&&"none"!==s);const u=e.isOAS3(),d=t("ModelWrapper"),p=t("Collapse"),m=t("ModelCollapse"),f=t("JumpToPath",!0),h=t("ArrowUpIcon"),g=t("ArrowDownIcon");return Je.default.createElement("section",{className:c?"models is-open":"models",ref:this.onLoadModels},Je.default.createElement("h4",null,Je.default.createElement("button",{"aria-expanded":c,className:"models-control",onClick:()=>n.show(i,!c)},Je.default.createElement("span",null,u?"Schemas":"Models"),c?Je.default.createElement(h,null):Je.default.createElement(g,null))),Je.default.createElement(p,{isOpened:c},o.entrySeq().map((o=>{let[s]=o;const c=[...i,s],u=Ke.default.List(c),p=e.specResolvedSubtree(c),h=e.specJson().getIn(c),g=Ke.Map.isMap(p)?p:Ke.default.Map(),y=Ke.Map.isMap(h)?h:Ke.default.Map(),v=g.get("title")||y.get("title")||s,S=r.isShown(c,!1);S&&0===g.size&&y.size>0&&this.props.specActions.requestResolvedSubtree(c);const _=Je.default.createElement(d,{name:s,expandDepth:l,schema:g||Ke.default.Map(),displayName:v,fullPath:c,specPath:u,getComponent:t,specSelectors:e,getConfigs:a,layoutSelectors:r,layoutActions:n,includeReadOnly:!0,includeWriteOnly:!0}),b=Je.default.createElement("span",{className:"model-box"},Je.default.createElement("span",{className:"model model-title"},v));return Je.default.createElement("div",{id:`model-${s}`,className:"model-container",key:`models-section-${s}`,"data-name":s,ref:this.onLoadModel},Je.default.createElement("span",{className:"models-jump-to-path"},Je.default.createElement(f,{specPath:u})),Je.default.createElement(m,{classes:"model-box",collapsedContent:this.getCollapsedContent(s),onToggle:this.handleToggle,title:b,displayName:v,modelName:s,specPath:u,layoutSelectors:r,layoutActions:n,hideSelfOnExpand:!0,expanded:l>0&&S},_))})).toArray()))}}var enum_model=e=>{let{value:t,getComponent:r}=e,n=r("ModelCollapse"),a=Je.default.createElement("span",null,"Array [ ",t.count()," ]");return Je.default.createElement("span",{className:"prop-enum"},"Enum:",Je.default.createElement("br",null),Je.default.createElement(n,{collapsedContent:a},"[ ",t.join(", ")," ]"))};class ObjectModel extends Je.Component{render(){let{schema:e,name:t,displayName:r,isRef:n,getComponent:a,getConfigs:o,depth:s,onToggle:l,expanded:i,specPath:c,...u}=this.props,{specSelectors:d,expandDepth:p,includeReadOnly:m,includeWriteOnly:f}=u;const{isOAS3:h}=d;if(!e)return null;const{showExtensions:g}=o();let y=e.get("description"),v=e.get("properties"),S=e.get("additionalProperties"),_=e.get("title")||r||t,b=e.get("required"),w=e.filter(((e,t)=>-1!==["maxProperties","minProperties","nullable","example"].indexOf(t))),C=e.get("deprecated"),x=e.getIn(["externalDocs","url"]),O=e.getIn(["externalDocs","description"]);const k=a("JumpToPath",!0),N=a("Markdown",!0),A=a("Model"),I=a("ModelCollapse"),R=a("Property"),T=a("Link"),JumpToPathSection=()=>Je.default.createElement("span",{className:"model-jump-to-path"},Je.default.createElement(k,{specPath:c})),B=Je.default.createElement("span",null,Je.default.createElement("span",null,"{"),"...",Je.default.createElement("span",null,"}"),n?Je.default.createElement(JumpToPathSection,null):""),j=d.isOAS3()?e.get("anyOf"):null,P=d.isOAS3()?e.get("oneOf"):null,M=d.isOAS3()?e.get("not"):null,q=_&&Je.default.createElement("span",{className:"model-title"},n&&e.get("$$ref")&&Je.default.createElement("span",{className:"model-hint"},e.get("$$ref")),Je.default.createElement("span",{className:"model-title__text"},_));return Je.default.createElement("span",{className:"model"},Je.default.createElement(I,{modelName:t,title:q,onToggle:l,expanded:!!i||s<=p,collapsedContent:B},Je.default.createElement("span",{className:"brace-open object"},"{"),n?Je.default.createElement(JumpToPathSection,null):null,Je.default.createElement("span",{className:"inner-object"},Je.default.createElement("table",{className:"model"},Je.default.createElement("tbody",null,y?Je.default.createElement("tr",{className:"description"},Je.default.createElement("td",null,"description:"),Je.default.createElement("td",null,Je.default.createElement(N,{source:y}))):null,x&&Je.default.createElement("tr",{className:"external-docs"},Je.default.createElement("td",null,"externalDocs:"),Je.default.createElement("td",null,Je.default.createElement(T,{target:"_blank",href:sanitizeUrl(x)},O||x))),C?Je.default.createElement("tr",{className:"property"},Je.default.createElement("td",null,"deprecated:"),Je.default.createElement("td",null,"true")):null,v&&v.size?v.entrySeq().filter((e=>{let[,t]=e;return(!t.get("readOnly")||m)&&(!t.get("writeOnly")||f)})).map((e=>{let[r,n]=e,l=h()&&n.get("deprecated"),i=Ke.List.isList(b)&&b.contains(r),d=["property-row"];return l&&d.push("deprecated"),i&&d.push("required"),Je.default.createElement("tr",{key:r,className:d.join(" ")},Je.default.createElement("td",null,r,i&&Je.default.createElement("span",{className:"star"},"*")),Je.default.createElement("td",null,Je.default.createElement(A,(0,er.default)({key:`object-${t}-${r}_${n}`},u,{required:i,getComponent:a,specPath:c.push("properties",r),getConfigs:o,schema:n,depth:s+1}))))})).toArray():null,g?Je.default.createElement("tr",null,Je.default.createElement("td",null," ")):null,g?e.entrySeq().map((e=>{let[t,r]=e;if("x-"!==t.slice(0,2))return;const n=r?r.toJS?r.toJS():r:null;return Je.default.createElement("tr",{key:t,className:"extension"},Je.default.createElement("td",null,t),Je.default.createElement("td",null,JSON.stringify(n)))})).toArray():null,S&&S.size?Je.default.createElement("tr",null,Je.default.createElement("td",null,"< * >:"),Je.default.createElement("td",null,Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("additionalProperties"),getConfigs:o,schema:S,depth:s+1})))):null,j?Je.default.createElement("tr",null,Je.default.createElement("td",null,"anyOf ->"),Je.default.createElement("td",null,j.map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("anyOf",t),getConfigs:o,schema:e,depth:s+1}))))))):null,P?Je.default.createElement("tr",null,Je.default.createElement("td",null,"oneOf ->"),Je.default.createElement("td",null,P.map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("oneOf",t),getConfigs:o,schema:e,depth:s+1}))))))):null,M?Je.default.createElement("tr",null,Je.default.createElement("td",null,"not ->"),Je.default.createElement("td",null,Je.default.createElement("div",null,Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("not"),getConfigs:o,schema:M,depth:s+1}))))):null))),Je.default.createElement("span",{className:"brace-close"},"}")),w.size?w.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(R,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:"property"})})):null)}}class ArrayModel extends Je.Component{render(){let{getComponent:e,getConfigs:t,schema:r,depth:n,expandDepth:a,name:o,displayName:s,specPath:l}=this.props,i=r.get("description"),c=r.get("items"),u=r.get("title")||s||o,d=r.filter(((e,t)=>-1===["type","items","description","$$ref","externalDocs"].indexOf(t))),p=r.getIn(["externalDocs","url"]),m=r.getIn(["externalDocs","description"]);const f=e("Markdown",!0),h=e("ModelCollapse"),g=e("Model"),y=e("Property"),v=e("Link"),S=u&&Je.default.createElement("span",{className:"model-title"},Je.default.createElement("span",{className:"model-title__text"},u));return Je.default.createElement("span",{className:"model"},Je.default.createElement(h,{title:S,expanded:n<=a,collapsedContent:"[...]"},"[",d.size?d.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(y,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:"property"})})):null,i?Je.default.createElement(f,{source:i}):d.size?Je.default.createElement("div",{className:"markdown"}):null,p&&Je.default.createElement("div",{className:"external-docs"},Je.default.createElement(v,{target:"_blank",href:sanitizeUrl(p)},m||p)),Je.default.createElement("span",null,Je.default.createElement(g,(0,er.default)({},this.props,{getConfigs:t,specPath:l.push("items"),name:null,schema:c,required:!1,depth:n+1}))),"]"))}}const Ba="property primitive";class Primitive extends Je.Component{render(){let{schema:e,getComponent:t,getConfigs:r,name:n,displayName:a,depth:o,expandDepth:s}=this.props;const{showExtensions:l}=r();if(!e||!e.get)return Je.default.createElement("div",null);let i=e.get("type"),c=e.get("format"),u=e.get("xml"),d=e.get("enum"),p=e.get("title")||a||n,m=e.get("description"),f=getExtensions(e),h=e.filter(((e,t)=>-1===["enum","type","format","description","$$ref","externalDocs"].indexOf(t))).filterNot(((e,t)=>f.has(t))),g=e.getIn(["externalDocs","url"]),y=e.getIn(["externalDocs","description"]);const v=t("Markdown",!0),S=t("EnumModel"),_=t("Property"),b=t("ModelCollapse"),w=t("Link"),C=p&&Je.default.createElement("span",{className:"model-title"},Je.default.createElement("span",{className:"model-title__text"},p));return Je.default.createElement("span",{className:"model"},Je.default.createElement(b,{title:C,expanded:o<=s,collapsedContent:"[...]",hideSelfOnExpand:s!==o},Je.default.createElement("span",{className:"prop"},n&&o>1&&Je.default.createElement("span",{className:"prop-name"},p),Je.default.createElement("span",{className:"prop-type"},i),c&&Je.default.createElement("span",{className:"prop-format"},"($",c,")"),h.size?h.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:Ba})})):null,l&&f.size?f.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:Ba})})):null,m?Je.default.createElement(v,{source:m}):null,g&&Je.default.createElement("div",{className:"external-docs"},Je.default.createElement(w,{target:"_blank",href:sanitizeUrl(g)},y||g)),u&&u.size?Je.default.createElement("span",null,Je.default.createElement("br",null),Je.default.createElement("span",{className:Ba},"xml:"),u.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement("span",{key:`${t}-${r}`,className:Ba},Je.default.createElement("br",null),"   ",t,": ",String(r))})).toArray()):null,d&&Je.default.createElement(S,{value:d,getComponent:t}))))}}var property=e=>{let{propKey:t,propVal:r,propClass:n}=e;return Je.default.createElement("span",{className:n},Je.default.createElement("br",null),t,": ",String(r))};class TryItOutButton extends Je.default.Component{static defaultProps={onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1};render(){const{onTryoutClick:e,onCancelClick:t,onResetClick:r,enabled:n,hasUserEditedBody:a,isOAS3:o}=this.props,s=o&&a;return Je.default.createElement("div",{className:s?"try-out btn-group":"try-out"},n?Je.default.createElement("button",{className:"btn try-out__btn cancel",onClick:t},"Cancel"):Je.default.createElement("button",{className:"btn try-out__btn",onClick:e},"Try it out "),s&&Je.default.createElement("button",{className:"btn try-out__btn reset",onClick:r},"Reset"))}}class VersionPragmaFilter extends Je.default.PureComponent{static defaultProps={alsoShow:null,children:null,bypass:!1};render(){const{bypass:e,isSwagger2:t,isOAS3:r,alsoShow:n}=this.props;return e?Je.default.createElement("div",null,this.props.children):t&&r?Je.default.createElement("div",{className:"version-pragma"},n,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,Je.default.createElement("code",null,"swagger")," and ",Je.default.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),Je.default.createElement("p",null,"Supported version fields are ",Je.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",Je.default.createElement("code",null,"openapi: 3.0.0"),").")))):t||r?Je.default.createElement("div",null,this.props.children):Je.default.createElement("div",{className:"version-pragma"},n,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,"The provided definition does not specify a valid version field."),Je.default.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",Je.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",Je.default.createElement("code",null,"openapi: 3.0.0"),")."))))}}var version_stamp=e=>{let{version:t}=e;return Je.default.createElement("small",null,Je.default.createElement("pre",{className:"version"}," ",t," "))};var openapi_version=e=>{let{oasVersion:t}=e;return Je.default.createElement("small",{className:"version-stamp"},Je.default.createElement("pre",{className:"version"},"OAS ",t))};var deep_link=e=>{let{enabled:t,path:r,text:n}=e;return Je.default.createElement("a",{className:"nostyle",onClick:t?e=>e.preventDefault():null,href:t?`#/${r}`:null},Je.default.createElement("span",null,n))};var svg_assets=()=>Je.default.createElement("div",null,Je.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",className:"svg-assets"},Je.default.createElement("defs",null,Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"unlocked"},Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"locked"},Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"close"},Je.default.createElement("path",{d:"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow"},Je.default.createElement("path",{d:"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-down"},Je.default.createElement("path",{d:"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-up"},Je.default.createElement("path",{d:"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z"})),Je.default.createElement("symbol",{viewBox:"0 0 24 24",id:"jump-to"},Je.default.createElement("path",{d:"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"})),Je.default.createElement("symbol",{viewBox:"0 0 24 24",id:"expand"},Je.default.createElement("path",{d:"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"})),Je.default.createElement("symbol",{viewBox:"0 0 15 16",id:"copy"},Je.default.createElement("g",{transform:"translate(2, -1)"},Je.default.createElement("path",{fill:"#ffffff",fillRule:"evenodd",d:"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"})))))),ja=(e=>{var t={};return __webpack_require__.d(t,e),t})({Remarkable:()=>he.Remarkable}),Pa=(e=>{var t={};return __webpack_require__.d(t,e),t})({linkify:()=>ge.linkify}),Ma=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ye.default});function Markdown(e){let{source:t,className:r="",getConfigs:n}=e;if("string"!=typeof t)return null;const a=new ja.Remarkable({html:!0,typographer:!0,breaks:!0,linkTarget:"_blank"}).use(Pa.linkify);a.core.ruler.disable(["replacements","smartquotes"]);const{useUnsafeMarkdown:o}=n(),s=a.render(t),l=sanitizer(s,{useUnsafeMarkdown:o});return t&&s&&l?Je.default.createElement("div",{className:(0,Sa.default)(r,"markdown"),dangerouslySetInnerHTML:{__html:l}}):null}Ma.default.addHook&&Ma.default.addHook("beforeSanitizeElements",(function(e){return e.href&&e.setAttribute("rel","noopener noreferrer"),e})),Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};var qa=Markdown;function sanitizer(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=t,n=t?[]:["style","class"];return t&&!sanitizer.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),sanitizer.hasWarnedAboutDeprecation=!0),Ma.default.sanitize(e,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:r,FORBID_ATTR:n})}sanitizer.hasWarnedAboutDeprecation=!1;class BaseLayout extends Je.default.Component{render(){const{errSelectors:e,specSelectors:t,getComponent:r}=this.props,n=r("SvgAssets"),a=r("InfoContainer",!0),o=r("VersionPragmaFilter"),s=r("operations",!0),l=r("Models",!0),i=r("Webhooks",!0),c=r("Row"),u=r("Col"),d=r("errors",!0),p=r("ServersContainer",!0),m=r("SchemesContainer",!0),f=r("AuthorizeBtnContainer",!0),h=r("FilterContainer",!0),g=t.isSwagger2(),y=t.isOAS3(),v=t.isOAS31(),S=!t.specStr(),_=t.loadingStatus();let b=null;if("loading"===_&&(b=Je.default.createElement("div",{className:"info"},Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("div",{className:"loading"})))),"failed"===_&&(b=Je.default.createElement("div",{className:"info"},Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("h4",{className:"title"},"Failed to load API definition."),Je.default.createElement(d,null)))),"failedConfig"===_){const t=e.lastError(),r=t?t.get("message"):"";b=Je.default.createElement("div",{className:"info failed-config"},Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("h4",{className:"title"},"Failed to load remote configuration."),Je.default.createElement("p",null,r)))}if(!b&&S&&(b=Je.default.createElement("h4",null,"No API definition provided.")),b)return Je.default.createElement("div",{className:"swagger-ui"},Je.default.createElement("div",{className:"loading-container"},b));const w=t.servers(),C=t.schemes(),x=w&&w.size,O=C&&C.size,k=!!t.securityDefinitions();return Je.default.createElement("div",{className:"swagger-ui"},Je.default.createElement(n,null),Je.default.createElement(o,{isSwagger2:g,isOAS3:y,alsoShow:Je.default.createElement(d,null)},Je.default.createElement(d,null),Je.default.createElement(c,{className:"information-container"},Je.default.createElement(u,{mobile:12},Je.default.createElement(a,null))),x||O||k?Je.default.createElement("div",{className:"scheme-container"},Je.default.createElement(u,{className:"schemes wrapper",mobile:12},x?Je.default.createElement(p,null):null,O?Je.default.createElement(m,null):null,k?Je.default.createElement(f,null):null)):null,Je.default.createElement(h,null),Je.default.createElement(c,null,Je.default.createElement(u,{mobile:12,desktop:12},Je.default.createElement(s,null))),v&&Je.default.createElement(c,{className:"webhooks-container"},Je.default.createElement(u,{mobile:12,desktop:12},Je.default.createElement(i,null))),Je.default.createElement(c,null,Je.default.createElement(u,{mobile:12,desktop:12},Je.default.createElement(l,null)))))}}var core_components=()=>({components:{App,authorizationPopup:AuthorizationPopup,authorizeBtn:AuthorizeBtn,AuthorizeBtnContainer,authorizeOperationBtn:AuthorizeOperationBtn,auths:Auths,AuthItem:auth_item_Auths,authError:AuthError,oauth2:Oauth2,apiKeyAuth:ApiKeyAuth,basicAuth:BasicAuth,clear:Clear,liveResponse:LiveResponse,InitializedInput,info:Na,InfoContainer,InfoUrl,InfoBasePath,Contact:Aa,License:Ia,JumpToPath,CopyToClipboardBtn,onlineValidatorBadge:OnlineValidatorBadge,operations:Operations,operation:Operation,OperationSummary,OperationSummaryMethod,OperationSummaryPath,highlightCode:ba,responses:Responses,response:Response,ResponseExtension:response_extension,responseBody:ResponseBody,parameters:Parameters,parameterRow:ParameterRow,execute:Execute,headers:headers_Headers,errors:Errors,contentType:ContentType,overview:Overview,footer:Footer,FilterContainer,ParamBody,curl:Curl,schemes:Schemes,SchemesContainer,modelExample:ModelExample,ModelWrapper,ModelCollapse,Model,Models,EnumModel:enum_model,ObjectModel,ArrayModel,PrimitiveModel:Primitive,Property:property,TryItOutButton,Markdown:qa,BaseLayout,VersionPragmaFilter,VersionStamp:version_stamp,OperationExt:operation_extensions,OperationExtRow:operation_extension_row,ParameterExt:parameter_extension,ParameterIncludeEmpty,OperationTag,OperationContainer,OpenAPIVersion:openapi_version,DeepLink:deep_link,SvgAssets:svg_assets,Example,ExamplesSelect,ExamplesSelectValueRetainer}});var form_components=()=>({components:{...Be}}),La=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Ee.default});const Da={value:"",onChange:()=>{},schema:{},keyName:"",required:!1,errors:(0,Ke.List)()};class JsonSchemaForm extends Je.Component{static defaultProps=Da;componentDidMount(){const{dispatchInitialValue:e,value:t,onChange:r}=this.props;e?r(t):!1===e&&r("")}render(){let{schema:e,errors:t,value:r,onChange:n,getComponent:a,fn:o,disabled:s}=this.props;const l=e&&e.get?e.get("format"):null,i=e&&e.get?e.get("type"):null;let getComponentSilently=e=>a(e,!1,{failSilently:!0}),c=i?getComponentSilently(l?`JsonSchema_${i}_${l}`:`JsonSchema_${i}`):a("JsonSchema_string");return c||(c=a("JsonSchema_string")),Je.default.createElement(c,(0,er.default)({},this.props,{errors:t,fn:o,getComponent:a,value:r,onChange:n,schema:e,disabled:s}))}}class JsonSchema_string extends Je.Component{static defaultProps=Da;onChange=e=>{const t=this.props.schema&&"file"===this.props.schema.get("type")?e.target.files[0]:e.target.value;this.props.onChange(t,this.props.keyName)};onEnumChange=e=>this.props.onChange(e);render(){let{getComponent:e,value:t,schema:r,errors:n,required:a,description:o,disabled:s}=this.props;const l=r&&r.get?r.get("enum"):null,i=r&&r.get?r.get("format"):null,c=r&&r.get?r.get("type"):null,u=r&&r.get?r.get("in"):null;if(t||(t=""),n=n.toJS?n.toJS():[],l){const r=e("Select");return Je.default.createElement(r,{className:n.length?"invalid":"",title:n.length?n:"",allowedValues:[...l],value:t,allowEmptyValue:!a,disabled:s,onChange:this.onEnumChange})}const d=s||u&&"formData"===u&&!("FormData"in window),p=e("Input");return c&&"file"===c?Je.default.createElement(p,{type:"file",className:n.length?"invalid":"",title:n.length?n:"",onChange:this.onChange,disabled:d}):Je.default.createElement(La.default,{type:i&&"password"===i?"password":"text",className:n.length?"invalid":"",title:n.length?n:"",value:t,minLength:0,debounceTimeout:350,placeholder:o,onChange:this.onChange,disabled:d})}}class JsonSchema_array extends Je.PureComponent{static defaultProps=Da;constructor(e,t){super(e,t),this.state={value:valueOrEmptyList(e.value),schema:e.schema}}UNSAFE_componentWillReceiveProps(e){const t=valueOrEmptyList(e.value);t!==this.state.value&&this.setState({value:t}),e.schema!==this.state.schema&&this.setState({schema:e.schema})}onChange=()=>{this.props.onChange(this.state.value)};onItemChange=(e,t)=>{this.setState((r=>{let{value:n}=r;return{value:n.set(t,e)}}),this.onChange)};removeItem=e=>{this.setState((t=>{let{value:r}=t;return{value:r.delete(e)}}),this.onChange)};addItem=()=>{const{fn:e}=this.props;let t=valueOrEmptyList(this.state.value);this.setState((()=>({value:t.push(e.getSampleSchema(this.state.schema.get("items"),!1,{includeWriteOnly:!0}))})),this.onChange)};onEnumChange=e=>{this.setState((()=>({value:e})),this.onChange)};render(){let{getComponent:e,required:t,schema:r,errors:n,fn:a,disabled:o}=this.props;n=n.toJS?n.toJS():Array.isArray(n)?n:[];const s=n.filter((e=>"string"==typeof e)),l=n.filter((e=>void 0!==e.needRemove)).map((e=>e.error)),i=this.state.value,c=!!(i&&i.count&&i.count()>0),u=r.getIn(["items","enum"]),d=r.getIn(["items","type"]),p=r.getIn(["items","format"]),m=r.get("items");let f,h=!1,g="file"===d||"string"===d&&"binary"===p;if(d&&p?f=e(`JsonSchema_${d}_${p}`):"boolean"!==d&&"array"!==d&&"object"!==d||(f=e(`JsonSchema_${d}`)),f||g||(h=!0),u){const r=e("Select");return Je.default.createElement(r,{className:n.length?"invalid":"",title:n.length?n:"",multiple:!0,value:i,disabled:o,allowedValues:u,allowEmptyValue:!t,onChange:this.onEnumChange})}const y=e("Button");return Je.default.createElement("div",{className:"json-schema-array"},c?i.map(((t,r)=>{const s=(0,Ke.fromJS)([...n.filter((e=>e.index===r)).map((e=>e.error))]);return Je.default.createElement("div",{key:r,className:"json-schema-form-item"},g?Je.default.createElement(JsonSchemaArrayItemFile,{value:t,onChange:e=>this.onItemChange(e,r),disabled:o,errors:s,getComponent:e}):h?Je.default.createElement(JsonSchemaArrayItemText,{value:t,onChange:e=>this.onItemChange(e,r),disabled:o,errors:s}):Je.default.createElement(f,(0,er.default)({},this.props,{value:t,onChange:e=>this.onItemChange(e,r),disabled:o,errors:s,schema:m,getComponent:e,fn:a})),o?null:Je.default.createElement(y,{className:`btn btn-sm json-schema-form-item-remove ${l.length?"invalid":null}`,title:l.length?l:"",onClick:()=>this.removeItem(r)}," - "))})):null,o?null:Je.default.createElement(y,{className:`btn btn-sm json-schema-form-item-add ${s.length?"invalid":null}`,title:s.length?s:"",onClick:this.addItem},"Add ",d?`${d} `:"","item"))}}class JsonSchemaArrayItemText extends Je.Component{static defaultProps=Da;onChange=e=>{const t=e.target.value;this.props.onChange(t,this.props.keyName)};render(){let{value:e,errors:t,description:r,disabled:n}=this.props;return e||(e=""),t=t.toJS?t.toJS():[],Je.default.createElement(La.default,{type:"text",className:t.length?"invalid":"",title:t.length?t:"",value:e,minLength:0,debounceTimeout:350,placeholder:r,onChange:this.onChange,disabled:n})}}class JsonSchemaArrayItemFile extends Je.Component{static defaultProps=Da;onFileChange=e=>{const t=e.target.files[0];this.props.onChange(t,this.props.keyName)};render(){let{getComponent:e,errors:t,disabled:r}=this.props;const n=e("Input"),a=r||!("FormData"in window);return Je.default.createElement(n,{type:"file",className:t.length?"invalid":"",title:t.length?t:"",onChange:this.onFileChange,disabled:a})}}class JsonSchema_boolean extends Je.Component{static defaultProps=Da;onEnumChange=e=>this.props.onChange(e);render(){let{getComponent:e,value:t,errors:r,schema:n,required:a,disabled:o}=this.props;r=r.toJS?r.toJS():[];let s=n&&n.get?n.get("enum"):null,l=!s||!a,i=!s&&["true","false"];const c=e("Select");return Je.default.createElement(c,{className:r.length?"invalid":"",title:r.length?r:"",value:String(t),disabled:o,allowedValues:s?[...s]:i,allowEmptyValue:l,onChange:this.onEnumChange})}}const stringifyObjectErrors=e=>e.map((e=>{const t=void 0!==e.propKey?e.propKey:e.index;let r="string"==typeof e?e:"string"==typeof e.error?e.error:null;if(!t&&r)return r;let n=e.error,a=`/${e.propKey}`;for(;"object"==typeof n;){const e=void 0!==n.propKey?n.propKey:n.index;if(void 0===e)break;if(a+=`/${e}`,!n.error)break;n=n.error}return`${a}: ${n}`}));class JsonSchema_object extends Je.PureComponent{constructor(){super()}static defaultProps=Da;onChange=e=>{this.props.onChange(e)};handleOnChange=e=>{const t=e.target.value;this.onChange(t)};render(){let{getComponent:e,value:t,errors:r,disabled:n}=this.props;const a=e("TextArea");return r=r.toJS?r.toJS():Array.isArray(r)?r:[],Je.default.createElement("div",null,Je.default.createElement(a,{className:(0,Sa.default)({invalid:r.length}),title:r.length?stringifyObjectErrors(r).join(", "):"",value:stringify(t),disabled:n,onChange:this.handleOnChange}))}}function valueOrEmptyList(e){return Ke.List.isList(e)?e:Array.isArray(e)?(0,Ke.fromJS)(e):(0,Ke.List)()}var json_schema_components=()=>({components:{...je}});var base=()=>[configsPlugin,util,logs,view,plugins_spec,err,icons,plugins_layout,json_schema_5_samples,core_components,form_components,swagger_client,json_schema_components,auth,downloadUrlPlugin,deep_linking,filter,on_complete,plugins_request_snippets,safe_render()];const Ua=(0,Ke.Map)();function onlyOAS3(e){return(t,r)=>function(){if(r.getSystem().specSelectors.isOAS3()){const t=e(...arguments);return"function"==typeof t?t(r):t}return t(...arguments)}}const $a=onlyOAS3((0,At.createSelector)((()=>null))),Ja=onlyOAS3((()=>e=>{const t=e.getSystem().specSelectors.specJson().getIn(["components","schemas"]);return Ke.Map.isMap(t)?t:Ua})),Va=onlyOAS3((()=>e=>e.getSystem().specSelectors.specJson().hasIn(["servers",0]))),Ka=onlyOAS3((0,At.createSelector)(sn,(e=>e.getIn(["components","securitySchemes"])||null))),wrap_selectors_validOperationMethods=(e,t)=>function(r){if(t.specSelectors.isOAS3())return t.oas3Selectors.validOperationMethods();for(var n=arguments.length,a=new Array(n>1?n-1:0),o=1;ofunction(){for(var n=arguments.length,a=new Array(n),o=0;oe),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{let r=(0,Ke.List)();return t?(t.entrySeq().forEach((e=>{let[t,n]=e;const a=n.get("type");if("oauth2"===a&&n.get("flows").entrySeq().forEach((e=>{let[a,o]=e,s=(0,Ke.fromJS)({flow:a,authorizationUrl:o.get("authorizationUrl"),tokenUrl:o.get("tokenUrl"),scopes:o.get("scopes"),type:n.get("type"),description:n.get("description")});r=r.push(new Ke.Map({[t]:s.filter((e=>void 0!==e))}))})),"http"!==a&&"apiKey"!==a||(r=r.push(new Ke.Map({[t]:n}))),"openIdConnect"===a&&n.get("openIdConnectData")){let e=n.get("openIdConnectData");(e.get("grant_types_supported")||["authorization_code","implicit"]).forEach((a=>{let o=e.get("scopes_supported")&&e.get("scopes_supported").reduce(((e,t)=>e.set(t,"")),new Ke.Map),s=(0,Ke.fromJS)({flow:a,authorizationUrl:e.get("authorization_endpoint"),tokenUrl:e.get("token_endpoint"),scopes:o,type:"oauth2",openIdConnectUrl:n.get("openIdConnectUrl")});r=r.push(new Ke.Map({[t]:s.filter((e=>void 0!==e))}))}))}})),r):r})));function OAS3ComponentWrapFactory(e){return(t,r)=>n=>"function"==typeof r.specSelectors?.isOAS3?r.specSelectors.isOAS3()?Je.default.createElement(e,(0,er.default)({},n,r,{Ori:t})):Je.default.createElement(t,n):(console.warn("OAS3 wrapper: couldn't get spec"),null)}const Ya=(0,Ke.Map)(),selectors_isSwagger2=()=>e=>function isSwagger2(e){const t=e.get("swagger");return"string"==typeof t&&"2.0"===t}(e.getSystem().specSelectors.specJson()),selectors_isOAS30=()=>e=>function isOAS30(e){const t=e.get("openapi");return"string"==typeof t&&/^3\.0\.([0123])(?:-rc[012])?$/.test(t)}(e.getSystem().specSelectors.specJson()),selectors_isOAS3=()=>e=>e.getSystem().specSelectors.isOAS30();function selectors_onlyOAS3(e){return function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{if(r.specSelectors.isOAS3()){const a=e(t,...n);return"function"==typeof a?a(r):a}return null}}}const Qa=selectors_onlyOAS3((()=>e=>e.specSelectors.specJson().get("servers",Ya))),Za=selectors_onlyOAS3(((e,t)=>{let{callbacks:r,specPath:n}=t;return e=>{const t=e.specSelectors.validOperationMethods();return Ke.Map.isMap(r)?r.reduce(((e,r,a)=>{if(!Ke.Map.isMap(r))return e;const o=r.reduce(((e,r,o)=>{if(!Ke.Map.isMap(r))return e;const s=r.entrySeq().filter((e=>{let[r]=e;return t.includes(r)})).map((e=>{let[t,r]=e;return{operation:(0,Ke.Map)({operation:r}),method:t,path:o,callbackName:a,specPath:n.concat([a,o,t])}}));return e.concat(s)}),(0,Ke.List)());return e.concat(o)}),(0,Ke.List)()).groupBy((e=>e.callbackName)).map((e=>e.toArray())).toObject():{}}}));var callbacks=e=>{let{callbacks:t,specPath:r,specSelectors:n,getComponent:a}=e;const o=n.callbacksOperations({callbacks:t,specPath:r}),s=Object.keys(o),l=a("OperationContainer",!0);return 0===s.length?Je.default.createElement("span",null,"No callbacks"):Je.default.createElement("div",null,s.map((e=>Je.default.createElement("div",{key:`${e}`},Je.default.createElement("h2",null,e),o[e].map((t=>Je.default.createElement(l,{key:`${e}-${t.path}-${t.method}`,op:t.operation,tag:"callbacks",method:t.method,path:t.path,specPath:t.specPath,allowTryItOut:!1})))))))};const getDefaultRequestBodyValue=(e,t,r,n)=>{const a=e.getIn(["content",t])??(0,Ke.OrderedMap)(),o=a.get("schema",(0,Ke.OrderedMap)()).toJS(),s=void 0!==a.get("examples"),l=a.get("example"),i=s?a.getIn(["examples",r,"value"]):l;return stringify(n.getSampleSchema(o,t,{includeWriteOnly:!0},i))};var request_body=e=>{let{userHasEditedBody:t,requestBody:r,requestBodyValue:n,requestBodyInclusionSetting:a,requestBodyErrors:o,getComponent:s,getConfigs:l,specSelectors:i,fn:c,contentType:u,isExecute:d,specPath:p,onChange:m,onChangeIncludeEmpty:f,activeExamplesKey:h,updateActiveExamplesKey:g,setRetainRequestBodyValueFlag:y}=e;const handleFile=e=>{m(e.target.files[0])},setIsIncludedOptions=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return"no value"===a.get(e,"no value")&&(t.shouldDispatchInit=!0),t},v=s("Markdown",!0),S=s("modelExample"),_=s("RequestBodyEditor"),b=s("highlightCode"),w=s("ExamplesSelectValueRetainer"),C=s("Example"),x=s("ParameterIncludeEmpty"),{showCommonExtensions:O}=l(),k=r?.get("description")??null,N=r?.get("content")??new Ke.OrderedMap;u=u||N.keySeq().first()||"";const A=N.get(u)??(0,Ke.OrderedMap)(),I=A.get("schema",(0,Ke.OrderedMap)()),R=A.get("examples",null),T=R?.map(((e,t)=>{const n=e?.get("value",null);return n&&(e=e.set("value",getDefaultRequestBodyValue(r,u,t,c),n)),e}));if(o=Ke.List.isList(o)?o:(0,Ke.List)(),!A.size)return null;const B="object"===A.getIn(["schema","type"]),j="binary"===A.getIn(["schema","format"]),P="base64"===A.getIn(["schema","format"]);if("application/octet-stream"===u||0===u.indexOf("image/")||0===u.indexOf("audio/")||0===u.indexOf("video/")||j||P){const e=s("Input");return d?Je.default.createElement(e,{type:"file",onChange:handleFile}):Je.default.createElement("i",null,"Example values are not available for ",Je.default.createElement("code",null,u)," media types.")}if(B&&("application/x-www-form-urlencoded"===u||0===u.indexOf("multipart/"))&&I.get("properties",(0,Ke.OrderedMap)()).size>0){const e=s("JsonSchemaForm"),t=s("ParameterExt"),r=I.get("properties",(0,Ke.OrderedMap)());return n=Ke.Map.isMap(n)?n:(0,Ke.OrderedMap)(),Je.default.createElement("div",{className:"table-container"},k&&Je.default.createElement(v,{source:k}),Je.default.createElement("table",null,Je.default.createElement("tbody",null,Ke.Map.isMap(r)&&r.entrySeq().map((r=>{let[l,i]=r;if(i.get("readOnly"))return;let u=O?getCommonExtensions(i):null;const p=I.get("required",(0,Ke.List)()).includes(l),h=i.get("type"),g=i.get("format"),y=i.get("description"),S=n.getIn([l,"value"]),_=n.getIn([l,"errors"])||o,b=a.get(l)||!1,w=i.has("default")||i.has("example")||i.hasIn(["items","example"])||i.hasIn(["items","default"]),C=i.has("enum")&&(1===i.get("enum").size||p),k=w||C;let N="";"array"!==h||k||(N=[]),("object"===h||k)&&(N=c.getSampleSchema(i,!1,{includeWriteOnly:!0})),"string"!=typeof N&&"object"===h&&(N=stringify(N)),"string"==typeof N&&"array"===h&&(N=JSON.parse(N));const A="string"===h&&("binary"===g||"base64"===g);return Je.default.createElement("tr",{key:l,className:"parameters","data-property-name":l},Je.default.createElement("td",{className:"parameters-col_name"},Je.default.createElement("div",{className:p?"parameter__name required":"parameter__name"},l,p?Je.default.createElement("span",null," *"):null),Je.default.createElement("div",{className:"parameter__type"},h,g&&Je.default.createElement("span",{className:"prop-format"},"($",g,")"),O&&u.size?u.entrySeq().map((e=>{let[r,n]=e;return Je.default.createElement(t,{key:`${r}-${n}`,xKey:r,xVal:n})})):null),Je.default.createElement("div",{className:"parameter__deprecated"},i.get("deprecated")?"deprecated":null)),Je.default.createElement("td",{className:"parameters-col_description"},Je.default.createElement(v,{source:y}),d?Je.default.createElement("div",null,Je.default.createElement(e,{fn:c,dispatchInitialValue:!A,schema:i,description:l,getComponent:s,value:void 0===S?N:S,required:p,errors:_,onChange:e=>{m(e,[l])}}),p?null:Je.default.createElement(x,{onChange:e=>f(l,e),isIncluded:b,isIncludedOptions:setIsIncludedOptions(l),isDisabled:Array.isArray(S)?0!==S.length:!isEmptyValue(S)})):null))})))))}const M=getDefaultRequestBodyValue(r,u,h,c);let q=null;return getKnownSyntaxHighlighterLanguage(M)&&(q="json"),Je.default.createElement("div",null,k&&Je.default.createElement(v,{source:k}),T?Je.default.createElement(w,{userHasEditedBody:t,examples:T,currentKey:h,currentUserInputValue:n,onSelect:e=>{g(e)},updateValue:m,defaultToFirstExample:!0,getComponent:s,setRetainRequestBodyValueFlag:y}):null,d?Je.default.createElement("div",null,Je.default.createElement(_,{value:n,errors:o,defaultValue:M,onChange:m,getComponent:s})):Je.default.createElement(S,{getComponent:s,getConfigs:l,specSelectors:i,expandDepth:1,isExecute:d,schema:A.get("schema"),specPath:p.push("content",u),example:Je.default.createElement(b,{className:"body-param__example",getConfigs:l,language:q,value:stringify(n)||M}),includeWriteOnly:!0}),T?Je.default.createElement(C,{example:T.get(h),getComponent:s,getConfigs:l}):null)};class operation_link_OperationLink extends Je.Component{render(){const{link:e,name:t,getComponent:r}=this.props,n=r("Markdown",!0);let a=e.get("operationId")||e.get("operationRef"),o=e.get("parameters")&&e.get("parameters").toJS(),s=e.get("description");return Je.default.createElement("div",{className:"operation-link"},Je.default.createElement("div",{className:"description"},Je.default.createElement("b",null,Je.default.createElement("code",null,t)),s?Je.default.createElement(n,{source:s}):null),Je.default.createElement("pre",null,"Operation `",a,"`",Je.default.createElement("br",null),Je.default.createElement("br",null),"Parameters ",function padString(e,t){if("string"!=typeof t)return"";return t.split("\n").map(((t,r)=>r>0?Array(e+1).join(" ")+t:t)).join("\n")}(0,JSON.stringify(o,null,2))||"{}",Je.default.createElement("br",null)))}}var eo=operation_link_OperationLink;class Servers extends Je.default.Component{componentDidMount(){let{servers:e,currentServer:t}=this.props;t||this.setServer(e.first()?.get("url"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:r,getServerVariable:n}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){let a=t.find((t=>t.get("url")===e.currentServer)),o=this.props.servers.find((e=>e.get("url")===this.props.currentServer))||(0,Ke.OrderedMap)();if(!a)return this.setServer(t.first().get("url"));let s=((o.get("variables")||(0,Ke.OrderedMap)()).find((e=>e.get("default")))||(0,Ke.OrderedMap)()).get("default"),l=a.get("variables")||(0,Ke.OrderedMap)(),i=(l.find((e=>e.get("default")))||(0,Ke.OrderedMap)()).get("default");l.map(((t,a)=>{n(e.currentServer,a)&&s===i||r({server:e.currentServer,key:a,val:t.get("default")||""})}))}}onServerChange=e=>{this.setServer(e.target.value)};onServerVariableValueChange=e=>{let{setServerVariableValue:t,currentServer:r}=this.props,n=e.target.getAttribute("data-variable"),a=e.target.value;"function"==typeof t&&t({server:r,key:n,val:a})};setServer=e=>{let{setSelectedServer:t}=this.props;t(e)};render(){let{servers:e,currentServer:t,getServerVariable:r,getEffectiveServerValue:n}=this.props,a=(e.find((e=>e.get("url")===t))||(0,Ke.OrderedMap)()).get("variables")||(0,Ke.OrderedMap)(),o=0!==a.size;return Je.default.createElement("div",{className:"servers"},Je.default.createElement("label",{htmlFor:"servers"},Je.default.createElement("select",{onChange:this.onServerChange,value:t},e.valueSeq().map((e=>Je.default.createElement("option",{value:e.get("url"),key:e.get("url")},e.get("url"),e.get("description")&&` - ${e.get("description")}`))).toArray())),o?Je.default.createElement("div",null,Je.default.createElement("div",{className:"computed-url"},"Computed URL:",Je.default.createElement("code",null,n(t))),Je.default.createElement("h4",null,"Server variables"),Je.default.createElement("table",null,Je.default.createElement("tbody",null,a.entrySeq().map((e=>{let[n,a]=e;return Je.default.createElement("tr",{key:n},Je.default.createElement("td",null,n),Je.default.createElement("td",null,a.get("enum")?Je.default.createElement("select",{"data-variable":n,onChange:this.onServerVariableValueChange},a.get("enum").map((e=>Je.default.createElement("option",{selected:e===r(t,n),key:e,value:e},e)))):Je.default.createElement("input",{type:"text",value:r(t,n)||"",onChange:this.onServerVariableValueChange,"data-variable":n})))}))))):null)}}class ServersContainer extends Je.default.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:r,getComponent:n}=this.props,a=e.servers(),o=n("Servers");return a&&a.size?Je.default.createElement("div",null,Je.default.createElement("span",{className:"servers-title"},"Servers"),Je.default.createElement(o,{servers:a,currentServer:t.selectedServer(),setSelectedServer:r.setSelectedServer,setServerVariableValue:r.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}const to=Function.prototype;class RequestBodyEditor extends Je.PureComponent{static defaultProps={onChange:to,userHasEditedBody:!1};constructor(e,t){super(e,t),this.state={value:stringify(e.value)||e.defaultValue},e.onChange(e.value)}applyDefaultValue=e=>{const{onChange:t,defaultValue:r}=e||this.props;return this.setState({value:r}),t(r)};onChange=e=>{this.props.onChange(stringify(e))};onDomChange=e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))};UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:stringify(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:r}=this.state,n=t.size>0;const a=e("TextArea");return Je.default.createElement("div",{className:"body-param"},Je.default.createElement(a,{className:(0,Sa.default)("body-param__text",{invalid:n}),title:t.size?t.join(", "):"",value:r,onChange:this.onDomChange}))}}class HttpAuth extends Je.default.Component{constructor(e,t){super(e,t);let{name:r,schema:n}=this.props,a=this.getValue();this.state={name:r,schema:n,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}onChange=e=>{let{onChange:t}=this.props,{value:r,name:n}=e.target,a=Object.assign({},this.state.value);n?a[n]=r:a=r,this.setState({value:a},(()=>t(this.state)))};render(){let{schema:e,getComponent:t,errSelectors:r,name:n}=this.props;const a=t("Input"),o=t("Row"),s=t("Col"),l=t("authError"),i=t("Markdown",!0),c=t("JumpToPath",!0),u=(e.get("scheme")||"").toLowerCase();let d=this.getValue(),p=r.allErrors().filter((e=>e.get("authId")===n));if("basic"===u){let t=d?d.get("username"):null;return Je.default.createElement("div",null,Je.default.createElement("h4",null,Je.default.createElement("code",null,n||e.get("name")),"  (http, Basic)",Je.default.createElement(c,{path:["securityDefinitions",n]})),t&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(i,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("label",null,"Username:"),t?Je.default.createElement("code",null," ",t," "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),Je.default.createElement(o,null,Je.default.createElement("label",null,"Password:"),t?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),p.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t}))))}return"bearer"===u?Je.default.createElement("div",null,Je.default.createElement("h4",null,Je.default.createElement("code",null,n||e.get("name")),"  (http, Bearer)",Je.default.createElement(c,{path:["securityDefinitions",n]})),d&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(i,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("label",null,"Value:"),d?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),p.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t})))):Je.default.createElement("div",null,Je.default.createElement("em",null,Je.default.createElement("b",null,n)," HTTP authentication: unsupported scheme ",`'${u}'`))}}class OperationServers extends Je.default.Component{setSelectedServer=e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${r}`)};setServerVariableValue=e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${r}`})};getSelectedServer=()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)};getServerVariable=(e,t)=>{const{path:r,method:n}=this.props;return this.props.getServerVariable({namespace:`${r}:${n}`,server:e},t)};getEffectiveServerValue=e=>{const{path:t,method:r}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${r}`})};render(){const{operationServers:e,pathServers:t,getComponent:r}=this.props;if(!e&&!t)return null;const n=r("Servers"),a=e||t,o=e?"operation":"path";return Je.default.createElement("div",{className:"opblock-section operation-servers"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("div",{className:"tab-header"},Je.default.createElement("h4",{className:"opblock-title"},"Servers"))),Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement("h4",{className:"message"},"These ",o,"-level options override the global server options."),Je.default.createElement(n,{servers:a,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}var ro={Callbacks:callbacks,HttpAuth,RequestBody:request_body,Servers,ServersContainer,RequestBodyEditor,OperationServers,operationLink:eo};const no=new ja.Remarkable("commonmark");no.block.ruler.enable(["table"]),no.set({linkTarget:"_blank"});const markdown_Markdown=e=>{let{source:t,className:r="",getConfigs:n}=e;if("string"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=n(),a=sanitizer(no.render(t),{useUnsafeMarkdown:e});let o;return"string"==typeof a&&(o=a.trim()),Je.default.createElement("div",{dangerouslySetInnerHTML:{__html:o},className:(0,Sa.default)(r,"renderedMarkdown")})}return null};markdown_Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};var ao=OAS3ComponentWrapFactory(markdown_Markdown),oo=OAS3ComponentWrapFactory((e=>{let{Ori:t,...r}=e;const{schema:n,getComponent:a,errSelectors:o,authorized:s,onAuthChange:l,name:i}=r,c=a("HttpAuth");return"http"===n.get("type")?Je.default.createElement(c,{key:i,schema:n,name:i,errSelectors:o,authorized:s,getComponent:a,onChange:l}):Je.default.createElement(t,r)})),so=OAS3ComponentWrapFactory(OnlineValidatorBadge);class ModelComponent extends Je.Component{render(){let{getConfigs:e,schema:t}=this.props,r=["model-box"],n=null;return!0===t.get("deprecated")&&(r.push("deprecated"),n=Je.default.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),Je.default.createElement("div",{className:r.join(" ")},n,Je.default.createElement(Model,(0,er.default)({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}var lo=OAS3ComponentWrapFactory(ModelComponent),io=OAS3ComponentWrapFactory((e=>{let{Ori:t,...r}=e;const{schema:n,getComponent:a,errors:o,onChange:s}=r,l=n&&n.get?n.get("format"):null,i=n&&n.get?n.get("type"):null,c=a("Input");return i&&"string"===i&&l&&("binary"===l||"base64"===l)?Je.default.createElement(c,{type:"file",className:o.length?"invalid":"",title:o.length?o:"",onChange:e=>{s(e.target.files[0])},disabled:t.isDisabled}):Je.default.createElement(t,r)})),co={Markdown:ao,AuthItem:oo,OpenAPIVersion:function OAS30ComponentWrapFactory(e){return(t,r)=>n=>"function"==typeof r.specSelectors?.isOAS30?r.specSelectors.isOAS30()?Je.default.createElement(e,(0,er.default)({},n,r,{Ori:t})):Je.default.createElement(t,n):(console.warn("OAS30 wrapper: couldn't get spec"),null)}((e=>{const{Ori:t}=e;return Je.default.createElement(t,{oasVersion:"3.0"})})),JsonSchema_string:io,model:lo,onlineValidatorBadge:so};const uo="oas3_set_servers",po="oas3_set_request_body_value",mo="oas3_set_request_body_retain_flag",fo="oas3_set_request_body_inclusion",ho="oas3_set_active_examples_member",go="oas3_set_request_content_type",yo="oas3_set_response_content_type",Eo="oas3_set_server_variable_value",vo="oas3_set_request_body_validate_error",So="oas3_clear_request_body_validate_error",_o="oas3_clear_request_body_value";function setSelectedServer(e,t){return{type:uo,payload:{selectedServerUrl:e,namespace:t}}}function setRequestBodyValue(e){let{value:t,pathMethod:r}=e;return{type:po,payload:{value:t,pathMethod:r}}}const setRetainRequestBodyValueFlag=e=>{let{value:t,pathMethod:r}=e;return{type:mo,payload:{value:t,pathMethod:r}}};function setRequestBodyInclusion(e){let{value:t,pathMethod:r,name:n}=e;return{type:fo,payload:{value:t,pathMethod:r,name:n}}}function setActiveExamplesMember(e){let{name:t,pathMethod:r,contextType:n,contextName:a}=e;return{type:ho,payload:{name:t,pathMethod:r,contextType:n,contextName:a}}}function setRequestContentType(e){let{value:t,pathMethod:r}=e;return{type:go,payload:{value:t,pathMethod:r}}}function setResponseContentType(e){let{value:t,path:r,method:n}=e;return{type:yo,payload:{value:t,path:r,method:n}}}function setServerVariableValue(e){let{server:t,namespace:r,key:n,val:a}=e;return{type:Eo,payload:{server:t,namespace:r,key:n,val:a}}}const setRequestBodyValidateError=e=>{let{path:t,method:r,validationErrors:n}=e;return{type:vo,payload:{path:t,method:r,validationErrors:n}}},clearRequestBodyValidateError=e=>{let{path:t,method:r}=e;return{type:So,payload:{path:t,method:r}}},initRequestBodyValidateError=e=>{let{pathMethod:t}=e;return{type:So,payload:{path:t[0],method:t[1]}}},clearRequestBodyValue=e=>{let{pathMethod:t}=e;return{type:_o,payload:{pathMethod:t}}},oas3_selectors_onlyOAS3=e=>function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{if(r.getSystem().specSelectors.isOAS3()){const a=e(t,...n);return"function"==typeof a?a(r):a}return null}};const bo=oas3_selectors_onlyOAS3(((e,t)=>{const r=t?[t,"selectedServer"]:["selectedServer"];return e.getIn(r)||""})),wo=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"bodyValue"])||null)),Co=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"retainBodyValue"])||!1)),selectDefaultRequestBodyValue=(e,t,r)=>e=>{const{oas3Selectors:n,specSelectors:a,fn:o}=e.getSystem();if(a.isOAS3()){const e=n.requestContentType(t,r);if(e)return getDefaultRequestBodyValue(a.specResolvedSubtree(["paths",t,r,"requestBody"]),e,n.activeExamplesMember(t,r,"requestBody","requestBody"),o)}return null},xo=oas3_selectors_onlyOAS3(((e,t,r)=>e=>{const{oas3Selectors:n,specSelectors:a,fn:o}=e;let s=!1;const l=n.requestContentType(t,r);let i=n.requestBodyValue(t,r);const c=a.specResolvedSubtree(["paths",t,r,"requestBody"]);if(!c)return!1;if(Ke.Map.isMap(i)&&(i=stringify(i.mapEntries((e=>Ke.Map.isMap(e[1])?[e[0],e[1].get("value")]:e)).toJS())),Ke.List.isList(i)&&(i=stringify(i)),l){const e=getDefaultRequestBodyValue(c,l,n.activeExamplesMember(t,r,"requestBody","requestBody"),o);s=!!i&&i!==e}return s})),Oo=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"bodyInclusion"])||(0,Ke.Map)())),ko=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"errors"])||null)),No=oas3_selectors_onlyOAS3(((e,t,r,n,a)=>e.getIn(["examples",t,r,n,a,"activeExample"])||null)),Ao=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"requestContentType"])||null)),Io=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"responseContentType"])||null)),Ro=oas3_selectors_onlyOAS3(((e,t,r)=>{let n;if("string"!=typeof t){const{server:e,namespace:a}=t;n=a?[a,"serverVariableValues",e,r]:["serverVariableValues",e,r]}else{n=["serverVariableValues",t,r]}return e.getIn(n)||null})),To=oas3_selectors_onlyOAS3(((e,t)=>{let r;if("string"!=typeof t){const{server:e,namespace:n}=t;r=n?[n,"serverVariableValues",e]:["serverVariableValues",e]}else{r=["serverVariableValues",t]}return e.getIn(r)||(0,Ke.OrderedMap)()})),Bo=oas3_selectors_onlyOAS3(((e,t)=>{var r,n;if("string"!=typeof t){const{server:a,namespace:o}=t;n=a,r=o?e.getIn([o,"serverVariableValues",n]):e.getIn(["serverVariableValues",n])}else n=t,r=e.getIn(["serverVariableValues",n]);r=r||(0,Ke.OrderedMap)();let a=n;return r.map(((e,t)=>{a=a.replace(new RegExp(`{${t}}`,"g"),e)})),a})),jo=function validateRequestBodyIsRequired(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n{const n=t.getSystem().specSelectors.specJson();let a=[...r][1]||[];return!n.getIn(["paths",...a,"requestBody","required"])||e(...r)}}}(((e,t)=>((e,t)=>(t=t||[],!!e.getIn(["requestData",...t,"bodyValue"])))(e,t))),validateShallowRequired=(e,t)=>{let{oas3RequiredRequestBodyContentType:r,oas3RequestContentType:n,oas3RequestBodyValue:a}=t,o=[];if(!Ke.Map.isMap(a))return o;let s=[];return Object.keys(r.requestContentType).forEach((e=>{if(e===n){r.requestContentType[e].forEach((e=>{s.indexOf(e)<0&&s.push(e)}))}})),s.forEach((e=>{a.getIn([e,"value"])||o.push(e)})),o},Po=(0,At.createSelector)((()=>["get","put","post","delete","options","head","patch","trace"]));var Mo={[uo]:(e,t)=>{let{payload:{selectedServerUrl:r,namespace:n}}=t;const a=n?[n,"selectedServer"]:["selectedServer"];return e.setIn(a,r)},[po]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,o]=n;if(!Ke.Map.isMap(r))return e.setIn(["requestData",a,o,"bodyValue"],r);let s,l=e.getIn(["requestData",a,o,"bodyValue"])||(0,Ke.Map)();Ke.Map.isMap(l)||(l=(0,Ke.Map)());const[...i]=r.keys();return i.forEach((e=>{let t=r.getIn([e]);l.has(e)&&Ke.Map.isMap(t)||(s=l.setIn([e,"value"],t))})),e.setIn(["requestData",a,o,"bodyValue"],s)},[mo]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,o]=n;return e.setIn(["requestData",a,o,"retainBodyValue"],r)},[fo]:(e,t)=>{let{payload:{value:r,pathMethod:n,name:a}}=t,[o,s]=n;return e.setIn(["requestData",o,s,"bodyInclusion",a],r)},[ho]:(e,t)=>{let{payload:{name:r,pathMethod:n,contextType:a,contextName:o}}=t,[s,l]=n;return e.setIn(["examples",s,l,a,o,"activeExample"],r)},[go]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,o]=n;return e.setIn(["requestData",a,o,"requestContentType"],r)},[yo]:(e,t)=>{let{payload:{value:r,path:n,method:a}}=t;return e.setIn(["requestData",n,a,"responseContentType"],r)},[Eo]:(e,t)=>{let{payload:{server:r,namespace:n,key:a,val:o}}=t;const s=n?[n,"serverVariableValues",r,a]:["serverVariableValues",r,a];return e.setIn(s,o)},[vo]:(e,t)=>{let{payload:{path:r,method:n,validationErrors:a}}=t,o=[];if(o.push("Required field is not provided"),a.missingBodyValue)return e.setIn(["requestData",r,n,"errors"],(0,Ke.fromJS)(o));if(a.missingRequiredKeys&&a.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=a;return e.updateIn(["requestData",r,n,"bodyValue"],(0,Ke.fromJS)({}),(e=>t.reduce(((e,t)=>e.setIn([t,"errors"],(0,Ke.fromJS)(o))),e)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),e},[So]:(e,t)=>{let{payload:{path:r,method:n}}=t;const a=e.getIn(["requestData",r,n,"bodyValue"]);if(!Ke.Map.isMap(a))return e.setIn(["requestData",r,n,"errors"],(0,Ke.fromJS)([]));const[...o]=a.keys();return o?e.updateIn(["requestData",r,n,"bodyValue"],(0,Ke.fromJS)({}),(e=>o.reduce(((e,t)=>e.setIn([t,"errors"],(0,Ke.fromJS)([]))),e))):e},[_o]:(e,t)=>{let{payload:{pathMethod:r}}=t,[n,a]=r;const o=e.getIn(["requestData",n,a,"bodyValue"]);return o?Ke.Map.isMap(o)?e.setIn(["requestData",n,a,"bodyValue"],(0,Ke.Map)()):e.setIn(["requestData",n,a,"bodyValue"],""):e}};function oas3(){return{components:ro,wrapComponents:co,statePlugins:{spec:{wrapSelectors:Pe,selectors:qe},auth:{wrapSelectors:Me},oas3:{actions:{...Le},reducers:Mo,selectors:{...De}}}}}var webhooks=e=>{let{specSelectors:t,getComponent:r}=e;const n=t.selectWebhooksOperations(),a=Object.keys(n),o=r("OperationContainer",!0);return 0===a.length?null:Je.default.createElement("div",{className:"webhooks"},Je.default.createElement("h2",null,"Webhooks"),a.map((e=>Je.default.createElement("div",{key:`${e}-webhook`},n[e].map((t=>Je.default.createElement(o,{key:`${e}-${t.method}-webhook`,op:t.operation,tag:"webhooks",method:t.method,path:e,specPath:t.specPath,allowTryItOut:!1})))))))};var components_license=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.selectLicenseNameField(),a=r.selectLicenseUrl(),o=t("Link");return Je.default.createElement("div",{className:"info__license"},a?Je.default.createElement("div",{className:"info__license__url"},Je.default.createElement(o,{target:"_blank",href:sanitizeUrl(a)},n)):Je.default.createElement("span",null,n))};var components_contact=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.selectContactNameField(),a=r.selectContactUrl(),o=r.selectContactEmailField(),s=t("Link");return Je.default.createElement("div",{className:"info__contact"},a&&Je.default.createElement("div",null,Je.default.createElement(s,{href:sanitizeUrl(a),target:"_blank"},n," - Website")),o&&Je.default.createElement(s,{href:sanitizeUrl(`mailto:${o}`)},a?`Send email to ${n}`:`Contact ${n}`))};var oas31_components_info=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.version(),a=r.url(),o=r.basePath(),s=r.host(),l=r.selectInfoSummaryField(),i=r.selectInfoDescriptionField(),c=r.selectInfoTitleField(),u=r.selectInfoTermsOfServiceUrl(),d=r.selectExternalDocsUrl(),p=r.selectExternalDocsDescriptionField(),m=r.contact(),f=r.license(),h=t("Markdown",!0),g=t("Link"),y=t("VersionStamp"),v=t("OpenAPIVersion"),S=t("InfoUrl"),_=t("InfoBasePath"),b=t("License",!0),w=t("Contact",!0),C=t("JsonSchemaDialect",!0);return Je.default.createElement("div",{className:"info"},Je.default.createElement("hgroup",{className:"main"},Je.default.createElement("h2",{className:"title"},c,Je.default.createElement("span",null,n&&Je.default.createElement(y,{version:n}),Je.default.createElement(v,{oasVersion:"3.1"}))),(s||o)&&Je.default.createElement(_,{host:s,basePath:o}),a&&Je.default.createElement(S,{getComponent:t,url:a})),l&&Je.default.createElement("p",{className:"info__summary"},l),Je.default.createElement("div",{className:"info__description description"},Je.default.createElement(h,{source:i})),u&&Je.default.createElement("div",{className:"info__tos"},Je.default.createElement(g,{target:"_blank",href:sanitizeUrl(u)},"Terms of service")),m.size>0&&Je.default.createElement(w,null),f.size>0&&Je.default.createElement(b,null),d&&Je.default.createElement(g,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(d)},p||d),Je.default.createElement(C,null))};var json_schema_dialect=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.selectJsonSchemaDialectField(),a=r.selectJsonSchemaDialectDefault(),o=t("Link");return Je.default.createElement(Je.default.Fragment,null,n&&n===a&&Je.default.createElement("p",{className:"info__jsonschemadialect"},"JSON Schema dialect:"," ",Je.default.createElement(o,{target:"_blank",href:sanitizeUrl(n)},n)),n&&n!==a&&Je.default.createElement("div",{className:"error-wrapper"},Je.default.createElement("div",{className:"no-margin"},Je.default.createElement("div",{className:"errors"},Je.default.createElement("div",{className:"errors-wrapper"},Je.default.createElement("h4",{className:"center"},"Warning"),Je.default.createElement("p",{className:"message"},Je.default.createElement("strong",null,"OpenAPI.jsonSchemaDialect")," field contains a value different from the default value of"," ",Je.default.createElement(o,{target:"_blank",href:a},a),". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value."))))))};var version_pragma_filter=e=>{let{bypass:t,isSwagger2:r,isOAS3:n,isOAS31:a,alsoShow:o,children:s}=e;return t?Je.default.createElement("div",null,s):r&&(n||a)?Je.default.createElement("div",{className:"version-pragma"},o,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,Je.default.createElement("code",null,"swagger")," and ",Je.default.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),Je.default.createElement("p",null,"Supported version fields are ",Je.default.createElement("code",null,'swagger: "2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",Je.default.createElement("code",null,"openapi: 3.1.0"),").")))):r||n||a?Je.default.createElement("div",null,s):Je.default.createElement("div",{className:"version-pragma"},o,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,"The provided definition does not specify a valid version field."),Je.default.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",Je.default.createElement("code",null,'swagger: "2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",Je.default.createElement("code",null,"openapi: 3.1.0"),")."))))};const getModelName=e=>"string"==typeof e&&e.includes("#/components/schemas/")?(e=>{const t=e.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(t)}catch{return t}})(e.replace(/^.*#\/components\/schemas\//,"")):null,qo=(0,Je.forwardRef)(((e,t)=>{let{schema:r,getComponent:n,onToggle:a}=e;const o=n("JSONSchema202012"),s=getModelName(r.get("$$ref")),l=(0,Je.useCallback)(((e,t)=>{a(s,t)}),[s,a]);return Je.default.createElement(o,{name:s,schema:r.toJS(),ref:t,onExpand:l})}));qo.defaultProps={name:"",displayName:"",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};var Lo=qo;var models=e=>{let{specActions:t,specSelectors:r,layoutSelectors:n,layoutActions:a,getComponent:o,getConfigs:s}=e;const l=r.selectSchemas(),i=Object.keys(l).length>0,c=["components","schemas"],{docExpansion:u,defaultModelsExpandDepth:d}=s(),p=d>0&&"none"!==u,m=n.isShown(c,p),f=o("Collapse"),h=o("JSONSchema202012"),g=o("ArrowUpIcon"),y=o("ArrowDownIcon");(0,Je.useEffect)((()=>{const e=m&&d>1,n=null!=r.specResolvedSubtree(c);e&&!n&&t.requestResolvedSubtree(c)}),[m,d]);const v=(0,Je.useCallback)((()=>{a.show(c,!m)}),[m]),S=(0,Je.useCallback)((e=>{null!==e&&a.readyToScroll(c,e)}),[]),handleJSONSchema202012Ref=e=>t=>{null!==t&&a.readyToScroll([...c,e],t)},handleJSONSchema202012Expand=e=>(n,a)=>{if(a){const n=[...c,e];null!=r.specResolvedSubtree(n)||t.requestResolvedSubtree([...c,e])}};return!i||d<0?null:Je.default.createElement("section",{className:(0,Sa.default)("models",{"is-open":m}),ref:S},Je.default.createElement("h4",null,Je.default.createElement("button",{"aria-expanded":m,className:"models-control",onClick:v},Je.default.createElement("span",null,"Schemas"),m?Je.default.createElement(g,null):Je.default.createElement(y,null))),Je.default.createElement(f,{isOpened:m},Object.entries(l).map((e=>{let[t,r]=e;return Je.default.createElement(h,{key:t,ref:handleJSONSchema202012Ref(t),schema:r,name:t,onExpand:handleJSONSchema202012Expand(t)})}))))};var mutual_tls_auth=e=>{let{schema:t,getComponent:r}=e;const n=r("JumpToPath",!0);return Je.default.createElement("div",null,Je.default.createElement("h4",null,t.get("name")," (mutualTLS)"," ",Je.default.createElement(n,{path:["securityDefinitions",t.get("name")]})),Je.default.createElement("p",null,"Mutual TLS is required by this API/Operation. Certificates are managed via your Operating System and/or your browser."),Je.default.createElement("p",null,t.get("description")))};class auths_Auths extends Je.default.Component{constructor(e,t){super(e,t),this.state={}}onAuthChange=e=>{let{name:t}=e;this.setState({[t]:e})};submitAuth=e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)};logoutClick=e=>{e.preventDefault();let{authActions:t,definitions:r}=this.props,n=r.map(((e,t)=>t)).toArray();this.setState(n.reduce(((e,t)=>(e[t]="",e)),{})),t.logoutWithPersistOption(n)};close=e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)};render(){let{definitions:e,getComponent:t,authSelectors:r,errSelectors:n}=this.props;const a=t("AuthItem"),o=t("oauth2",!0),s=t("Button"),l=r.authorized(),i=e.filter(((e,t)=>!!l.get(t))),c=e.filter((e=>"oauth2"!==e.get("type")&&"mutualTLS"!==e.get("type"))),u=e.filter((e=>"oauth2"===e.get("type"))),d=e.filter((e=>"mutualTLS"===e.get("type")));return Je.default.createElement("div",{className:"auth-container"},c.size>0&&Je.default.createElement("form",{onSubmit:this.submitAuth},c.map(((e,r)=>Je.default.createElement(a,{key:r,schema:e,name:r,getComponent:t,onAuthChange:this.onAuthChange,authorized:l,errSelectors:n}))).toArray(),Je.default.createElement("div",{className:"auth-btn-wrapper"},c.size===i.size?Je.default.createElement(s,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):Je.default.createElement(s,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),Je.default.createElement(s,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),u.size>0?Je.default.createElement("div",null,Je.default.createElement("div",{className:"scope-def"},Je.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),Je.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),e.filter((e=>"oauth2"===e.get("type"))).map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(o,{authorized:l,schema:e,name:t})))).toArray()):null,d.size>0&&Je.default.createElement("div",null,d.map(((e,r)=>Je.default.createElement(a,{key:r,schema:e,name:r,getComponent:t,onAuthChange:this.onAuthChange,authorized:l,errSelectors:n}))).toArray()))}}var Do=auths_Auths;const isOAS31=e=>{const t=e.get("openapi");return"string"==typeof t&&/^3\.1\.(?:[1-9]\d*|0)$/.test(t)},fn_createOnlyOAS31Selector=e=>function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{if(r.getSystem().specSelectors.isOAS31()){const a=e(t,...n);return"function"==typeof a?a(r):a}return null}},createOnlyOAS31SelectorWrapper=e=>(t,r)=>function(n){for(var a=arguments.length,o=new Array(a>1?a-1:0),s=1;sfunction(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{const a=e(t,r,...n);return"function"==typeof a?a(r):a}},createOnlyOAS31ComponentWrapper=e=>(t,r)=>n=>r.specSelectors.isOAS31()?Je.default.createElement(e,(0,er.default)({},n,{originalComponent:t,getSystem:r.getSystem})):Je.default.createElement(t,n);var Uo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const r=t().getComponent("OAS31License",!0);return Je.default.createElement(r,null)}));var $o=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const r=t().getComponent("OAS31Contact",!0);return Je.default.createElement(r,null)}));var Jo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const r=t().getComponent("OAS31Info",!0);return Je.default.createElement(r,null)}));const makeIsExpandable=(e,t)=>{const{fn:r}=t();if("function"!=typeof e)return null;const{hasKeyword:n}=r.jsonSchema202012;return t=>e(t)||n(t,"example")||t?.xml||t?.discriminator||t?.externalDocs},getProperties=(e,t)=>{let{includeReadOnly:r,includeWriteOnly:n}=t;if(!e?.properties)return{};const a=Object.entries(e.properties).filter((e=>{let[,t]=e;return(!(!0===t?.readOnly)||r)&&(!(!0===t?.writeOnly)||n)}));return Object.fromEntries(a)},Vo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t,...r}=e;const n=t(),{getComponent:a,fn:o,getConfigs:s}=n,l=s(),i=a("OAS31Model"),c=a("JSONSchema202012"),u=a("JSONSchema202012Keyword$schema"),d=a("JSONSchema202012Keyword$vocabulary"),p=a("JSONSchema202012Keyword$id"),m=a("JSONSchema202012Keyword$anchor"),f=a("JSONSchema202012Keyword$dynamicAnchor"),h=a("JSONSchema202012Keyword$ref"),g=a("JSONSchema202012Keyword$dynamicRef"),y=a("JSONSchema202012Keyword$defs"),v=a("JSONSchema202012Keyword$comment"),S=a("JSONSchema202012KeywordAllOf"),_=a("JSONSchema202012KeywordAnyOf"),b=a("JSONSchema202012KeywordOneOf"),w=a("JSONSchema202012KeywordNot"),C=a("JSONSchema202012KeywordIf"),x=a("JSONSchema202012KeywordThen"),O=a("JSONSchema202012KeywordElse"),k=a("JSONSchema202012KeywordDependentSchemas"),N=a("JSONSchema202012KeywordPrefixItems"),A=a("JSONSchema202012KeywordItems"),I=a("JSONSchema202012KeywordContains"),R=a("JSONSchema202012KeywordProperties"),T=a("JSONSchema202012KeywordPatternProperties"),B=a("JSONSchema202012KeywordAdditionalProperties"),j=a("JSONSchema202012KeywordPropertyNames"),P=a("JSONSchema202012KeywordUnevaluatedItems"),M=a("JSONSchema202012KeywordUnevaluatedProperties"),q=a("JSONSchema202012KeywordType"),L=a("JSONSchema202012KeywordEnum"),D=a("JSONSchema202012KeywordConst"),U=a("JSONSchema202012KeywordConstraint"),$=a("JSONSchema202012KeywordDependentRequired"),J=a("JSONSchema202012KeywordContentSchema"),V=a("JSONSchema202012KeywordTitle"),K=a("JSONSchema202012KeywordDescription"),z=a("JSONSchema202012KeywordDefault"),F=a("JSONSchema202012KeywordDeprecated"),W=a("JSONSchema202012KeywordReadOnly"),H=a("JSONSchema202012KeywordWriteOnly"),G=a("JSONSchema202012Accordion"),X=a("JSONSchema202012ExpandDeepButton"),Y=a("JSONSchema202012ChevronRightIcon"),Q=a("withJSONSchema202012Context")(i,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:l.defaultModelExpandDepth,includeReadOnly:Boolean(r.includeReadOnly),includeWriteOnly:Boolean(r.includeWriteOnly)},components:{JSONSchema:c,Keyword$schema:u,Keyword$vocabulary:d,Keyword$id:p,Keyword$anchor:m,Keyword$dynamicAnchor:f,Keyword$ref:h,Keyword$dynamicRef:g,Keyword$defs:y,Keyword$comment:v,KeywordAllOf:S,KeywordAnyOf:_,KeywordOneOf:b,KeywordNot:w,KeywordIf:C,KeywordThen:x,KeywordElse:O,KeywordDependentSchemas:k,KeywordPrefixItems:N,KeywordItems:A,KeywordContains:I,KeywordProperties:R,KeywordPatternProperties:T,KeywordAdditionalProperties:B,KeywordPropertyNames:j,KeywordUnevaluatedItems:P,KeywordUnevaluatedProperties:M,KeywordType:q,KeywordEnum:L,KeywordConst:D,KeywordConstraint:U,KeywordDependentRequired:$,KeywordContentSchema:J,KeywordTitle:V,KeywordDescription:K,KeywordDefault:z,KeywordDeprecated:F,KeywordReadOnly:W,KeywordWriteOnly:H,Accordion:G,ExpandDeepButton:X,ChevronRightIcon:Y},fn:{upperFirst:o.upperFirst,isExpandable:makeIsExpandable(o.jsonSchema202012.isExpandable,t),getProperties}});return Je.default.createElement(Q,r)}));var Ko=Vo;const zo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const{getComponent:r,fn:n,getConfigs:a}=t(),o=a();if(zo.ModelsWithJSONSchemaContext)return Je.default.createElement(zo.ModelsWithJSONSchemaContext,null);const s=r("OAS31Models",!0),l=r("JSONSchema202012"),i=r("JSONSchema202012Keyword$schema"),c=r("JSONSchema202012Keyword$vocabulary"),u=r("JSONSchema202012Keyword$id"),d=r("JSONSchema202012Keyword$anchor"),p=r("JSONSchema202012Keyword$dynamicAnchor"),m=r("JSONSchema202012Keyword$ref"),f=r("JSONSchema202012Keyword$dynamicRef"),h=r("JSONSchema202012Keyword$defs"),g=r("JSONSchema202012Keyword$comment"),y=r("JSONSchema202012KeywordAllOf"),v=r("JSONSchema202012KeywordAnyOf"),S=r("JSONSchema202012KeywordOneOf"),_=r("JSONSchema202012KeywordNot"),b=r("JSONSchema202012KeywordIf"),w=r("JSONSchema202012KeywordThen"),C=r("JSONSchema202012KeywordElse"),x=r("JSONSchema202012KeywordDependentSchemas"),O=r("JSONSchema202012KeywordPrefixItems"),k=r("JSONSchema202012KeywordItems"),N=r("JSONSchema202012KeywordContains"),A=r("JSONSchema202012KeywordProperties"),I=r("JSONSchema202012KeywordPatternProperties"),R=r("JSONSchema202012KeywordAdditionalProperties"),T=r("JSONSchema202012KeywordPropertyNames"),B=r("JSONSchema202012KeywordUnevaluatedItems"),j=r("JSONSchema202012KeywordUnevaluatedProperties"),P=r("JSONSchema202012KeywordType"),M=r("JSONSchema202012KeywordEnum"),q=r("JSONSchema202012KeywordConst"),L=r("JSONSchema202012KeywordConstraint"),D=r("JSONSchema202012KeywordDependentRequired"),U=r("JSONSchema202012KeywordContentSchema"),$=r("JSONSchema202012KeywordTitle"),J=r("JSONSchema202012KeywordDescription"),V=r("JSONSchema202012KeywordDefault"),K=r("JSONSchema202012KeywordDeprecated"),z=r("JSONSchema202012KeywordReadOnly"),F=r("JSONSchema202012KeywordWriteOnly"),W=r("JSONSchema202012Accordion"),H=r("JSONSchema202012ExpandDeepButton"),G=r("JSONSchema202012ChevronRightIcon"),X=r("withJSONSchema202012Context");return zo.ModelsWithJSONSchemaContext=X(s,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:o.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:l,Keyword$schema:i,Keyword$vocabulary:c,Keyword$id:u,Keyword$anchor:d,Keyword$dynamicAnchor:p,Keyword$ref:m,Keyword$dynamicRef:f,Keyword$defs:h,Keyword$comment:g,KeywordAllOf:y,KeywordAnyOf:v,KeywordOneOf:S,KeywordNot:_,KeywordIf:b,KeywordThen:w,KeywordElse:C,KeywordDependentSchemas:x,KeywordPrefixItems:O,KeywordItems:k,KeywordContains:N,KeywordProperties:A,KeywordPatternProperties:I,KeywordAdditionalProperties:R,KeywordPropertyNames:T,KeywordUnevaluatedItems:B,KeywordUnevaluatedProperties:j,KeywordType:P,KeywordEnum:M,KeywordConst:q,KeywordConstraint:L,KeywordDependentRequired:D,KeywordContentSchema:U,KeywordTitle:$,KeywordDescription:J,KeywordDefault:V,KeywordDeprecated:K,KeywordReadOnly:z,KeywordWriteOnly:F,Accordion:W,ExpandDeepButton:H,ChevronRightIcon:G},fn:{upperFirst:n.upperFirst,isExpandable:n.jsonSchema202012.isExpandable,getProperties:n.jsonSchema202012.getProperties}}),Je.default.createElement(zo.ModelsWithJSONSchemaContext,null)}));zo.ModelsWithJSONSchemaContext=null;var Fo=zo;var wrap_components_version_pragma_filter=(e,t)=>e=>{const r=t.specSelectors.isOAS31(),n=t.getComponent("OAS31VersionPragmaFilter");return Je.default.createElement(n,(0,er.default)({isOAS31:r},e))};const Wo=createOnlyOAS31ComponentWrapper((e=>{let{originalComponent:t,...r}=e;const{getComponent:n,schema:a}=r,o=n("MutualTLSAuth",!0);return"mutualTLS"===a.get("type")?Je.default.createElement(o,{schema:a}):Je.default.createElement(t,r)}));var Ho=Wo;var Go=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t,...r}=e;const n=t().getComponent("OAS31Auths",!0);return Je.default.createElement(n,r)}));const Xo=(0,Ke.Map)(),Yo=(0,At.createSelector)(((e,t)=>t.specSelectors.specJson()),isOAS31),selectors_webhooks=()=>e=>e.specSelectors.specJson().get("webhooks",Xo),Qo=(0,At.createSelector)(((e,t)=>t.specSelectors.webhooks()),((e,t)=>t.specSelectors.validOperationMethods()),((e,t)=>t.specSelectors.specResolvedSubtree(["webhooks"])),((e,t)=>Ke.Map.isMap(e)?e.reduce(((e,r,n)=>{if(!Ke.Map.isMap(r))return e;const a=r.entrySeq().filter((e=>{let[r]=e;return t.includes(r)})).map((e=>{let[t,r]=e;return{operation:(0,Ke.Map)({operation:r}),method:t,path:n,specPath:(0,Ke.List)(["webhooks",n,t])}}));return e.concat(a)}),(0,Ke.List)()).groupBy((e=>e.path)).map((e=>e.toArray())).toObject():{})),selectors_license=()=>e=>e.specSelectors.info().get("license",Xo),selectLicenseNameField=()=>e=>e.specSelectors.license().get("name","License"),selectLicenseUrlField=()=>e=>e.specSelectors.license().get("url"),Zo=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectLicenseIdentifierField=()=>e=>e.specSelectors.license().get("identifier"),selectors_contact=()=>e=>e.specSelectors.info().get("contact",Xo),selectContactNameField=()=>e=>e.specSelectors.contact().get("name","the developer"),selectContactEmailField=()=>e=>e.specSelectors.contact().get("email"),selectContactUrlField=()=>e=>e.specSelectors.contact().get("url"),es=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectContactUrlField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectInfoTitleField=()=>e=>e.specSelectors.info().get("title"),selectInfoSummaryField=()=>e=>e.specSelectors.info().get("summary"),selectInfoDescriptionField=()=>e=>e.specSelectors.info().get("description"),selectInfoTermsOfServiceField=()=>e=>e.specSelectors.info().get("termsOfService"),ts=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectInfoTermsOfServiceField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectExternalDocsDescriptionField=()=>e=>e.specSelectors.externalDocs().get("description"),selectExternalDocsUrlField=()=>e=>e.specSelectors.externalDocs().get("url"),rs=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectExternalDocsUrlField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectJsonSchemaDialectField=()=>e=>e.specSelectors.specJson().get("jsonSchemaDialect"),selectJsonSchemaDialectDefault=()=>"https://spec.openapis.org/oas/3.1/dialect/base",ns=(0,At.createSelector)(((e,t)=>t.specSelectors.definitions()),((e,t)=>t.specSelectors.specResolvedSubtree(["components","schemas"])),((e,t)=>Ke.Map.isMap(e)?Ke.Map.isMap(t)?Object.entries(e.toJS()).reduce(((e,r)=>{let[n,a]=r;const o=t.get(n);return e[n]=o?.toJS()||a,e}),{}):e.toJS():{})),wrap_selectors_isOAS3=(e,t)=>function(r){const n=t.specSelectors.isOAS31();for(var a=arguments.length,o=new Array(a>1?a-1:0),s=1;s(e,t)=>t.oas31Selectors.selectLicenseUrl())),os=createOnlyOAS31SelectorWrapper((()=>(e,t)=>{const r=t.specSelectors.securityDefinitions();let n=e();return r?(r.entrySeq().forEach((e=>{let[t,r]=e;"mutualTLS"===r.get("type")&&(n=n.push(new Ke.Map({[t]:r})))})),n):n})),ss=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t)=>t.specSelectors.selectLicenseIdentifierField()),((e,t,r,n)=>r?safeBuildUrl(r,e,{selectedServer:t}):n?`https://spdx.org/licenses/${n}.html`:void 0));var keywords_Example=e=>{let{schema:t,getSystem:r}=e;const{fn:n}=r(),{hasKeyword:a,stringify:o}=n.jsonSchema202012.useFn();return a(t,"example")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--example"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Example"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},o(t.example))):null};var keywords_Xml=e=>{let{schema:t,getSystem:r}=e;const n=t?.xml||{},{fn:a,getComponent:o}=r(),{useIsExpandedDeeply:s,useComponent:l}=a.jsonSchema202012,i=s(),c=!!(n.name||n.namespace||n.prefix),[u,d]=(0,Je.useState)(i),[p,m]=(0,Je.useState)(!1),f=l("Accordion"),h=l("ExpandDeepButton"),g=o("JSONSchema202012DeepExpansionContext")(),y=(0,Je.useCallback)((()=>{d((e=>!e))}),[]),v=(0,Je.useCallback)(((e,t)=>{d(t),m(t)}),[]);return 0===Object.keys(n).length?null:Je.default.createElement(g.Provider,{value:p},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml"},c?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(f,{expanded:u,onChange:y},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML")),Je.default.createElement(h,{expanded:u,onClick:v})):Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML"),!0===n.attribute&&Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"attribute"),!0===n.wrapped&&Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"wrapped"),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!u})},u&&Je.default.createElement(Je.default.Fragment,null,n.name&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"name"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},n.name))),n.namespace&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"namespace"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},n.namespace))),n.prefix&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"prefix"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},n.prefix)))))))};const DiscriminatorMapping=e=>{let{discriminator:t}=e;const r=t?.mapping||{};return 0===Object.keys(r).length?null:Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("div",{key:`${t}-${r}`,className:"json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},t),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},r))}))};DiscriminatorMapping.defaultProps={mapping:void 0};var ls=DiscriminatorMapping;var Discriminator_Discriminator=e=>{let{schema:t,getSystem:r}=e;const n=t?.discriminator||{},{fn:a,getComponent:o}=r(),{useIsExpandedDeeply:s,useComponent:l}=a.jsonSchema202012,i=s(),c=!!n.mapping,[u,d]=(0,Je.useState)(i),[p,m]=(0,Je.useState)(!1),f=l("Accordion"),h=l("ExpandDeepButton"),g=o("JSONSchema202012DeepExpansionContext")(),y=(0,Je.useCallback)((()=>{d((e=>!e))}),[]),v=(0,Je.useCallback)(((e,t)=>{d(t),m(t)}),[]);return 0===Object.keys(n).length?null:Je.default.createElement(g.Provider,{value:p},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator"},c?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(f,{expanded:u,onChange:y},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator")),Je.default.createElement(h,{expanded:u,onClick:v})):Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator"),n.propertyName&&Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},n.propertyName),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!u})},u&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement(ls,{discriminator:n})))))};var keywords_ExternalDocs=e=>{let{schema:t,getSystem:r}=e;const n=t?.externalDocs||{},{fn:a,getComponent:o}=r(),{useIsExpandedDeeply:s,useComponent:l}=a.jsonSchema202012,i=s(),c=!(!n.description&&!n.url),[u,d]=(0,Je.useState)(i),[p,m]=(0,Je.useState)(!1),f=l("Accordion"),h=l("ExpandDeepButton"),g=o("JSONSchema202012KeywordDescription"),y=o("Link"),v=o("JSONSchema202012DeepExpansionContext")(),S=(0,Je.useCallback)((()=>{d((e=>!e))}),[]),_=(0,Je.useCallback)(((e,t)=>{d(t),m(t)}),[]);return 0===Object.keys(n).length?null:Je.default.createElement(v.Provider,{value:p},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs"},c?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(f,{expanded:u,onChange:S},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation")),Je.default.createElement(h,{expanded:u,onClick:_})):Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation"),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!u})},u&&Je.default.createElement(Je.default.Fragment,null,n.description&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement(g,{schema:n,getSystem:r})),n.url&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"url"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},Je.default.createElement(y,{target:"_blank",href:sanitizeUrl(n.url)},n.url))))))))};var keywords_Description=e=>{let{schema:t,getSystem:r}=e;if(!t?.description)return null;const{getComponent:n}=r(),a=n("Markdown");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},Je.default.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},Je.default.createElement(a,{source:t.description})))};var is=createOnlyOAS31ComponentWrapper(keywords_Description);const cs=createOnlyOAS31ComponentWrapper((e=>{let{schema:t,getSystem:r,originalComponent:n}=e;const{getComponent:a}=r(),o=a("JSONSchema202012KeywordDiscriminator"),s=a("JSONSchema202012KeywordXml"),l=a("JSONSchema202012KeywordExample"),i=a("JSONSchema202012KeywordExternalDocs");return Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(n,{schema:t}),Je.default.createElement(o,{schema:t,getSystem:r}),Je.default.createElement(s,{schema:t,getSystem:r}),Je.default.createElement(i,{schema:t,getSystem:r}),Je.default.createElement(l,{schema:t,getSystem:r}))}));var us=cs;var keywords_Properties=e=>{let{schema:t,getSystem:r}=e;const{fn:n}=r(),{useComponent:a}=n.jsonSchema202012,{getDependentRequired:o,getProperties:s}=n.jsonSchema202012.useFn(),l=n.jsonSchema202012.useConfig(),i=Array.isArray(t?.required)?t.required:[],c=a("JSONSchema"),u=s(t,l);return 0===Object.keys(u).length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},Je.default.createElement("ul",null,Object.entries(u).map((e=>{let[r,n]=e;const a=i.includes(r),s=o(r,t);return Je.default.createElement("li",{key:r,className:(0,Sa.default)("json-schema-2020-12-property",{"json-schema-2020-12-property--required":a})},Je.default.createElement(c,{name:r,schema:n,dependentRequired:s}))}))))};var ds=createOnlyOAS31ComponentWrapper(keywords_Properties);var ps=function afterLoad(e){let{fn:t,getSystem:r}=e;if(t.jsonSchema202012){const e=makeIsExpandable(t.jsonSchema202012.isExpandable,r);Object.assign(this.fn.jsonSchema202012,{isExpandable:e,getProperties})}if("function"==typeof t.sampleFromSchema&&t.jsonSchema202012){const e=((e,t)=>{const{fn:r,specSelectors:n}=t;return Object.fromEntries(Object.entries(e).map((e=>{let[t,a]=e;const o=r[t];return[t,function(){return n.isOAS31()?a(...arguments):"function"==typeof o?o(...arguments):void 0}]})))})({sampleFromSchema:t.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:t.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:t.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:t.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:t.jsonSchema202012.memoizedCreateXMLExample},r());Object.assign(this.fn,e)}};var oas31=e=>{let{fn:t}=e;const r=t.createSystemSelector||fn_createSystemSelector,n=t.createOnlyOAS31Selector||fn_createOnlyOAS31Selector;return{afterLoad:ps,fn:{isOAS31,createSystemSelector:fn_createSystemSelector,createOnlyOAS31Selector:fn_createOnlyOAS31Selector},components:{Webhooks:webhooks,JsonSchemaDialect:json_schema_dialect,MutualTLSAuth:mutual_tls_auth,OAS31Info:oas31_components_info,OAS31License:components_license,OAS31Contact:components_contact,OAS31VersionPragmaFilter:version_pragma_filter,OAS31Model:Lo,OAS31Models:models,OAS31Auths:Do,JSONSchema202012KeywordExample:keywords_Example,JSONSchema202012KeywordXml:keywords_Xml,JSONSchema202012KeywordDiscriminator:Discriminator_Discriminator,JSONSchema202012KeywordExternalDocs:keywords_ExternalDocs},wrapComponents:{InfoContainer:Jo,License:Uo,Contact:$o,VersionPragmaFilter:wrap_components_version_pragma_filter,Model:Ko,Models:Fo,AuthItem:Ho,auths:Go,JSONSchema202012KeywordDescription:is,JSONSchema202012KeywordDefault:us,JSONSchema202012KeywordProperties:ds},statePlugins:{auth:{wrapSelectors:{definitionsToAuthorize:os}},spec:{selectors:{isOAS31:r(Yo),license:selectors_license,selectLicenseNameField,selectLicenseUrlField,selectLicenseIdentifierField:n(selectLicenseIdentifierField),selectLicenseUrl:r(Zo),contact:selectors_contact,selectContactNameField,selectContactEmailField,selectContactUrlField,selectContactUrl:r(es),selectInfoTitleField,selectInfoSummaryField:n(selectInfoSummaryField),selectInfoDescriptionField,selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:r(ts),selectExternalDocsDescriptionField,selectExternalDocsUrlField,selectExternalDocsUrl:r(rs),webhooks:n(selectors_webhooks),selectWebhooksOperations:n(r(Qo)),selectJsonSchemaDialectField,selectJsonSchemaDialectDefault,selectSchemas:r(ns)},wrapSelectors:{isOAS3:wrap_selectors_isOAS3,selectLicenseUrl:as}},oas31:{selectors:{selectLicenseUrl:n(r(ss))}}}}};const ms=jt.default.object,fs=jt.default.bool,hs=(jt.default.oneOfType([ms,fs]),(0,Je.createContext)(null));hs.displayName="JSONSchemaContext";const gs=(0,Je.createContext)(0);gs.displayName="JSONSchemaLevelContext";const ys=(0,Je.createContext)(!1);ys.displayName="JSONSchemaDeepExpansionContext";const Es=(0,Je.createContext)(new Set),useConfig=()=>{const{config:e}=(0,Je.useContext)(hs);return e},useComponent=e=>{const{components:t}=(0,Je.useContext)(hs);return t[e]||null},useFn=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:t}=(0,Je.useContext)(hs);return void 0!==e?t[e]:t},useLevel=()=>{const e=(0,Je.useContext)(gs);return[e,e+1]},useIsExpandedDeeply=()=>(0,Je.useContext)(ys),useRenderedSchemas=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e)return(0,Je.useContext)(Es);const t=(0,Je.useContext)(Es);return new Set([...t,e])},vs=(0,Je.forwardRef)(((e,t)=>{let{schema:r,name:n,dependentRequired:a,onExpand:o}=e;const s=useFn(),l=(()=>{const[e]=useLevel(),{defaultExpandedLevels:t}=useConfig();return t-e>0})(),i=useIsExpandedDeeply(),[c,u]=(0,Je.useState)(l||i),[d,p]=(0,Je.useState)(i),[m,f]=useLevel(),h=(()=>{const[e]=useLevel();return e>0})(),g=s.isExpandable(r)||a.length>0,y=(e=>useRenderedSchemas().has(e))(r),v=useRenderedSchemas(r),S=s.stringifyConstraints(r),_=useComponent("Accordion"),b=useComponent("Keyword$schema"),w=useComponent("Keyword$vocabulary"),C=useComponent("Keyword$id"),x=useComponent("Keyword$anchor"),O=useComponent("Keyword$dynamicAnchor"),k=useComponent("Keyword$ref"),N=useComponent("Keyword$dynamicRef"),A=useComponent("Keyword$defs"),I=useComponent("Keyword$comment"),R=useComponent("KeywordAllOf"),T=useComponent("KeywordAnyOf"),B=useComponent("KeywordOneOf"),j=useComponent("KeywordNot"),P=useComponent("KeywordIf"),M=useComponent("KeywordThen"),q=useComponent("KeywordElse"),L=useComponent("KeywordDependentSchemas"),D=useComponent("KeywordPrefixItems"),U=useComponent("KeywordItems"),$=useComponent("KeywordContains"),J=useComponent("KeywordProperties"),V=useComponent("KeywordPatternProperties"),K=useComponent("KeywordAdditionalProperties"),z=useComponent("KeywordPropertyNames"),F=useComponent("KeywordUnevaluatedItems"),W=useComponent("KeywordUnevaluatedProperties"),H=useComponent("KeywordType"),G=useComponent("KeywordEnum"),X=useComponent("KeywordConst"),Y=useComponent("KeywordConstraint"),Q=useComponent("KeywordDependentRequired"),Z=useComponent("KeywordContentSchema"),ee=useComponent("KeywordTitle"),te=useComponent("KeywordDescription"),re=useComponent("KeywordDefault"),ne=useComponent("KeywordDeprecated"),ae=useComponent("KeywordReadOnly"),oe=useComponent("KeywordWriteOnly"),se=useComponent("ExpandDeepButton");(0,Je.useEffect)((()=>{p(i)}),[i]),(0,Je.useEffect)((()=>{p(d)}),[d]);const le=(0,Je.useCallback)(((e,t)=>{u(t),!t&&p(!1),o(e,t,!1)}),[o]),ie=(0,Je.useCallback)(((e,t)=>{u(t),p(t),o(e,t,!0)}),[o]);return Je.default.createElement(gs.Provider,{value:f},Je.default.createElement(ys.Provider,{value:d},Je.default.createElement(Es.Provider,{value:v},Je.default.createElement("article",{ref:t,"data-json-schema-level":m,className:(0,Sa.default)("json-schema-2020-12",{"json-schema-2020-12--embedded":h,"json-schema-2020-12--circular":y})},Je.default.createElement("div",{className:"json-schema-2020-12-head"},g&&!y?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(_,{expanded:c,onChange:le},Je.default.createElement(ee,{title:n,schema:r})),Je.default.createElement(se,{expanded:c,onClick:ie})):Je.default.createElement(ee,{title:n,schema:r}),Je.default.createElement(ne,{schema:r}),Je.default.createElement(ae,{schema:r}),Je.default.createElement(oe,{schema:r}),Je.default.createElement(H,{schema:r,isCircular:y}),S.length>0&&S.map((e=>Je.default.createElement(Y,{key:`${e.scope}-${e.value}`,constraint:e})))),Je.default.createElement("div",{className:(0,Sa.default)("json-schema-2020-12-body",{"json-schema-2020-12-body--collapsed":!c})},c&&Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(te,{schema:r}),!y&&g&&Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(J,{schema:r}),Je.default.createElement(V,{schema:r}),Je.default.createElement(K,{schema:r}),Je.default.createElement(W,{schema:r}),Je.default.createElement(z,{schema:r}),Je.default.createElement(R,{schema:r}),Je.default.createElement(T,{schema:r}),Je.default.createElement(B,{schema:r}),Je.default.createElement(j,{schema:r}),Je.default.createElement(P,{schema:r}),Je.default.createElement(M,{schema:r}),Je.default.createElement(q,{schema:r}),Je.default.createElement(L,{schema:r}),Je.default.createElement(D,{schema:r}),Je.default.createElement(U,{schema:r}),Je.default.createElement(F,{schema:r}),Je.default.createElement($,{schema:r}),Je.default.createElement(Z,{schema:r})),Je.default.createElement(G,{schema:r}),Je.default.createElement(X,{schema:r}),Je.default.createElement(Q,{schema:r,dependentRequired:a}),Je.default.createElement(re,{schema:r}),Je.default.createElement(b,{schema:r}),Je.default.createElement(w,{schema:r}),Je.default.createElement(C,{schema:r}),Je.default.createElement(x,{schema:r}),Je.default.createElement(O,{schema:r}),Je.default.createElement(k,{schema:r}),!y&&g&&Je.default.createElement(A,{schema:r}),Je.default.createElement(N,{schema:r}),Je.default.createElement(I,{schema:r})))))))}));vs.defaultProps={name:"",dependentRequired:[],onExpand:()=>{}};var Ss=vs;var keywords_$schema=e=>{let{schema:t}=e;return t?.$schema?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$schema"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$schema)):null};var $vocabulary_$vocabulary=e=>{let{schema:t}=e;const r=useIsExpandedDeeply(),[n,a]=(0,Je.useState)(r),o=useComponent("Accordion"),s=(0,Je.useCallback)((()=>{a((e=>!e))}),[]);return t?.$vocabulary?"object"!=typeof t.$vocabulary?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary"},Je.default.createElement(o,{expanded:n,onChange:s},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$vocabulary")),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",null,n&&Object.entries(t.$vocabulary).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:(0,Sa.default)("json-schema-2020-12-$vocabulary-uri",{"json-schema-2020-12-$vocabulary-uri--disabled":!r})},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t))})))):null};var keywords_$id=e=>{let{schema:t}=e;return t?.$id?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$id"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$id)):null};var keywords_$anchor=e=>{let{schema:t}=e;return t?.$anchor?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$anchor"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$anchor)):null};var keywords_$dynamicAnchor=e=>{let{schema:t}=e;return t?.$dynamicAnchor?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicAnchor"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$dynamicAnchor)):null};var keywords_$ref=e=>{let{schema:t}=e;return t?.$ref?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$ref"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$ref)):null};var keywords_$dynamicRef=e=>{let{schema:t}=e;return t?.$dynamicRef?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicRef"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$dynamicRef)):null};var keywords_$defs=e=>{let{schema:t}=e;const r=t?.$defs||{},n=useIsExpandedDeeply(),[a,o]=(0,Je.useState)(n),[s,l]=(0,Je.useState)(!1),i=useComponent("Accordion"),c=useComponent("ExpandDeepButton"),u=useComponent("JSONSchema"),d=(0,Je.useCallback)((()=>{o((e=>!e))}),[]),p=(0,Je.useCallback)(((e,t)=>{o(t),l(t)}),[]);return 0===Object.keys(r).length?null:Je.default.createElement(ys.Provider,{value:s},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs"},Je.default.createElement(i,{expanded:a,onChange:d},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$defs")),Je.default.createElement(c,{expanded:a,onClick:p}),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!a})},a&&Je.default.createElement(Je.default.Fragment,null,Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:"json-schema-2020-12-property"},Je.default.createElement(u,{name:t,schema:r}))}))))))};var keywords_$comment=e=>{let{schema:t}=e;return t?.$comment?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$comment"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$comment)):null};var keywords_AllOf=e=>{let{schema:t}=e;const r=t?.allOf||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"All of")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{allOf:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_AnyOf=e=>{let{schema:t}=e;const r=t?.anyOf||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Any of")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{anyOf:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_OneOf=e=>{let{schema:t}=e;const r=t?.oneOf||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"One of")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{oneOf:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_Not=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"not"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Not");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--not"},Je.default.createElement(n,{name:a,schema:t.not}))};var keywords_If=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"if"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"If");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},Je.default.createElement(n,{name:a,schema:t.if}))};var keywords_Then=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"then"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Then");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--then"},Je.default.createElement(n,{name:a,schema:t.then}))};var keywords_Else=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"else"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Else");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},Je.default.createElement(n,{name:a,schema:t.else}))};var keywords_DependentSchemas=e=>{let{schema:t}=e;const r=t?.dependentSchemas||[],n=useIsExpandedDeeply(),[a,o]=(0,Je.useState)(n),[s,l]=(0,Je.useState)(!1),i=useComponent("Accordion"),c=useComponent("ExpandDeepButton"),u=useComponent("JSONSchema"),d=(0,Je.useCallback)((()=>{o((e=>!e))}),[]),p=(0,Je.useCallback)(((e,t)=>{o(t),l(t)}),[]);return"object"!=typeof r||0===Object.keys(r).length?null:Je.default.createElement(ys.Provider,{value:s},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas"},Je.default.createElement(i,{expanded:a,onChange:d},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Dependent schemas")),Je.default.createElement(c,{expanded:a,onClick:p}),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!a})},a&&Je.default.createElement(Je.default.Fragment,null,Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:"json-schema-2020-12-property"},Je.default.createElement(u,{name:t,schema:r}))}))))))};var keywords_PrefixItems=e=>{let{schema:t}=e;const r=t?.prefixItems||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Prefix items")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{prefixItems:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_Items=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"items"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Items");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--items"},Je.default.createElement(n,{name:a,schema:t.items}))};var keywords_Contains=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"contains"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Contains");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains"},Je.default.createElement(n,{name:a,schema:t.contains}))};var keywords_Properties_Properties=e=>{let{schema:t}=e;const r=useFn(),n=t?.properties||{},a=Array.isArray(t?.required)?t.required:[],o=useComponent("JSONSchema");return 0===Object.keys(n).length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},Je.default.createElement("ul",null,Object.entries(n).map((e=>{let[n,s]=e;const l=a.includes(n),i=r.getDependentRequired(n,t);return Je.default.createElement("li",{key:n,className:(0,Sa.default)("json-schema-2020-12-property",{"json-schema-2020-12-property--required":l})},Je.default.createElement(o,{name:n,schema:s,dependentRequired:i}))}))))};var PatternProperties_PatternProperties=e=>{let{schema:t}=e;const r=t?.patternProperties||{},n=useComponent("JSONSchema");return 0===Object.keys(r).length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties"},Je.default.createElement("ul",null,Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:"json-schema-2020-12-property"},Je.default.createElement(n,{name:t,schema:r}))}))))};var keywords_AdditionalProperties=e=>{let{schema:t}=e;const r=useFn(),{additionalProperties:n}=t,a=useComponent("JSONSchema");if(!r.hasKeyword(t,"additionalProperties"))return null;const o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Additional properties");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties"},!0===n?Je.default.createElement(Je.default.Fragment,null,o,Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"allowed")):!1===n?Je.default.createElement(Je.default.Fragment,null,o,Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"forbidden")):Je.default.createElement(a,{name:o,schema:n}))};var keywords_PropertyNames=e=>{let{schema:t}=e;const r=useFn(),{propertyNames:n}=t,a=useComponent("JSONSchema"),o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Property names");return r.hasKeyword(t,"propertyNames")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames"},Je.default.createElement(a,{name:o,schema:n})):null};var keywords_UnevaluatedItems=e=>{let{schema:t}=e;const r=useFn(),{unevaluatedItems:n}=t,a=useComponent("JSONSchema");if(!r.hasKeyword(t,"unevaluatedItems"))return null;const o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated items");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems"},Je.default.createElement(a,{name:o,schema:n}))};var keywords_UnevaluatedProperties=e=>{let{schema:t}=e;const r=useFn(),{unevaluatedProperties:n}=t,a=useComponent("JSONSchema");if(!r.hasKeyword(t,"unevaluatedProperties"))return null;const o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated properties");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties"},Je.default.createElement(a,{name:o,schema:n}))};const Type=e=>{let{schema:t,isCircular:r}=e;const n=useFn().getType(t),a=r?" [circular]":"";return Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},`${n}${a}`)};Type.defaultProps={isCircular:!1};var _s=Type;var Enum_Enum=e=>{let{schema:t}=e;const r=useFn();return Array.isArray(t?.enum)?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Allowed values"),Je.default.createElement("ul",null,t.enum.map((e=>{const t=r.stringify(e);return Je.default.createElement("li",{key:t},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},t))})))):null};var keywords_Const=e=>{let{schema:t}=e;const r=useFn();return r.hasKeyword(t,"const")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--const"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Const"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},r.stringify(t.const))):null};const Constraint=e=>{let{constraint:t}=e;return Je.default.createElement("span",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${t.scope}`},t.value)};var bs=Je.default.memo(Constraint);var DependentRequired_DependentRequired=e=>{let{dependentRequired:t}=e;return 0===t.length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Required when defined"),Je.default.createElement("ul",null,t.map((e=>Je.default.createElement("li",{key:e},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning"},e))))))};var keywords_ContentSchema=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"contentSchema"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Content schema");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema"},Je.default.createElement(n,{name:a,schema:t.contentSchema}))};const Title=e=>{let{title:t,schema:r}=e;const n=useFn();return t||n.getTitle(r)?Je.default.createElement("div",{className:"json-schema-2020-12__title"},t||n.getTitle(r)):null};Title.defaultProps={title:""};var ws=Title;var keywords_Description_Description=e=>{let{schema:t}=e;return t?.description?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},Je.default.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},t.description)):null};var keywords_Default=e=>{let{schema:t}=e;const r=useFn();return r.hasKeyword(t,"default")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--default"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Default"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},r.stringify(t.default))):null};var keywords_Deprecated=e=>{let{schema:t}=e;return!0!==t?.deprecated?null:Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning"},"deprecated")};var keywords_ReadOnly=e=>{let{schema:t}=e;return!0!==t?.readOnly?null:Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"read-only")};var keywords_WriteOnly=e=>{let{schema:t}=e;return!0!==t?.writeOnly?null:Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"write-only")};const Accordion=e=>{let{expanded:t,children:r,onChange:n}=e;const a=useComponent("ChevronRightIcon"),o=(0,Je.useCallback)((e=>{n(e,!t)}),[t,n]);return Je.default.createElement("button",{type:"button",className:"json-schema-2020-12-accordion",onClick:o},Je.default.createElement("div",{className:"json-schema-2020-12-accordion__children"},r),Je.default.createElement("span",{className:(0,Sa.default)("json-schema-2020-12-accordion__icon",{"json-schema-2020-12-accordion__icon--expanded":t,"json-schema-2020-12-accordion__icon--collapsed":!t})},Je.default.createElement(a,null)))};Accordion.defaultProps={expanded:!1};var Cs=Accordion;var ExpandDeepButton_ExpandDeepButton=e=>{let{expanded:t,onClick:r}=e;const n=(0,Je.useCallback)((e=>{r(e,!t)}),[t,r]);return Je.default.createElement("button",{type:"button",className:"json-schema-2020-12-expand-deep-button",onClick:n},t?"Collapse all":"Expand all")};var icons_ChevronRight=()=>Je.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Je.default.createElement("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}));const fn_upperFirst=e=>"string"==typeof e?`${e.charAt(0).toUpperCase()}${e.slice(1)}`:e,getTitle=e=>{const t=useFn();return e?.title?t.upperFirst(e.title):e?.$anchor?t.upperFirst(e.$anchor):e?.$id?e.$id:""},getType=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;const r=useFn();if(null==e)return"any";if(r.isBooleanJSONSchema(e))return e?"any":"never";if("object"!=typeof e)return"any";if(t.has(e))return"any";t.add(e);const{type:n,prefixItems:a,items:o}=e,getArrayType=()=>{if(Array.isArray(a)){const e=a.map((e=>getType(e,t))),r=o?getType(o,t):"any";return`array<[${e.join(", ")}], ${r}>`}if(o){return`array<${getType(o,t)}>`}return"array"};if(e.not&&"any"===getType(e.not))return"never";const handleCombiningKeywords=(r,n)=>{if(Array.isArray(e[r])){return`(${e[r].map((e=>getType(e,t))).join(n)})`}return null},s=[Array.isArray(n)?n.map((e=>"array"===e?getArrayType():e)).join(" | "):"array"===n?getArrayType():["null","boolean","object","array","number","integer","string"].includes(n)?n:(()=>{if(Object.hasOwn(e,"prefixItems")||Object.hasOwn(e,"items")||Object.hasOwn(e,"contains"))return getArrayType();if(Object.hasOwn(e,"properties")||Object.hasOwn(e,"additionalProperties")||Object.hasOwn(e,"patternProperties"))return"object";if(["int32","int64"].includes(e.format))return"integer";if(["float","double"].includes(e.format))return"number";if(Object.hasOwn(e,"minimum")||Object.hasOwn(e,"maximum")||Object.hasOwn(e,"exclusiveMinimum")||Object.hasOwn(e,"exclusiveMaximum")||Object.hasOwn(e,"multipleOf"))return"number | integer";if(Object.hasOwn(e,"pattern")||Object.hasOwn(e,"format")||Object.hasOwn(e,"minLength")||Object.hasOwn(e,"maxLength"))return"string";if(void 0!==e.const){if(null===e.const)return"null";if("boolean"==typeof e.const)return"boolean";if("number"==typeof e.const)return Number.isInteger(e.const)?"integer":"number";if("string"==typeof e.const)return"string";if(Array.isArray(e.const))return"array";if("object"==typeof e.const)return"object"}return null})(),handleCombiningKeywords("oneOf"," | "),handleCombiningKeywords("anyOf"," | "),handleCombiningKeywords("allOf"," & ")].filter(Boolean).join(" | ");return t.delete(e),s||"any"},isBooleanJSONSchema=e=>"boolean"==typeof e,hasKeyword=(e,t)=>null!==e&&"object"==typeof e&&Object.hasOwn(e,t),isExpandable=e=>{const t=useFn();return e?.$schema||e?.$vocabulary||e?.$id||e?.$anchor||e?.$dynamicAnchor||e?.$ref||e?.$dynamicRef||e?.$defs||e?.$comment||e?.allOf||e?.anyOf||e?.oneOf||t.hasKeyword(e,"not")||t.hasKeyword(e,"if")||t.hasKeyword(e,"then")||t.hasKeyword(e,"else")||e?.dependentSchemas||e?.prefixItems||t.hasKeyword(e,"items")||t.hasKeyword(e,"contains")||e?.properties||e?.patternProperties||t.hasKeyword(e,"additionalProperties")||t.hasKeyword(e,"propertyNames")||t.hasKeyword(e,"unevaluatedItems")||t.hasKeyword(e,"unevaluatedProperties")||e?.description||e?.enum||t.hasKeyword(e,"const")||t.hasKeyword(e,"contentSchema")||t.hasKeyword(e,"default")},fn_stringify=e=>null===e||["number","bigint","boolean"].includes(typeof e)?String(e):Array.isArray(e)?`[${e.map(fn_stringify).join(", ")}]`:JSON.stringify(e),stringifyConstraintRange=(e,t,r)=>{const n="number"==typeof t,a="number"==typeof r;return n&&a?t===r?`${t} ${e}`:`[${t}, ${r}] ${e}`:n?`>= ${t} ${e}`:a?`<= ${r} ${e}`:null},stringifyConstraints=e=>{const t=[],r=(e=>{if("number"!=typeof e?.multipleOf)return null;if(e.multipleOf<=0)return null;if(1===e.multipleOf)return null;const{multipleOf:t}=e;if(Number.isInteger(t))return`multiple of ${t}`;const r=10**t.toString().split(".")[1].length;return`multiple of ${t*r}/${r}`})(e);null!==r&&t.push({scope:"number",value:r});const n=(e=>{const t=e?.minimum,r=e?.maximum,n=e?.exclusiveMinimum,a=e?.exclusiveMaximum,o="number"==typeof t,s="number"==typeof r,l="number"==typeof n,i="number"==typeof a,c=l&&(!o||ta);if((o||l)&&(s||i))return`${c?"(":"["}${c?n:t}, ${u?a:r}${u?")":"]"}`;if(o||l)return`${c?">":"≥"} ${c?n:t}`;if(s||i)return`${u?"<":"≤"} ${u?a:r}`;return null})(e);null!==n&&t.push({scope:"number",value:n}),e?.format&&t.push({scope:"string",value:e.format});const a=stringifyConstraintRange("characters",e?.minLength,e?.maxLength);null!==a&&t.push({scope:"string",value:a}),e?.pattern&&t.push({scope:"string",value:`matches ${e?.pattern}`}),e?.contentMediaType&&t.push({scope:"string",value:`media type: ${e.contentMediaType}`}),e?.contentEncoding&&t.push({scope:"string",value:`encoding: ${e.contentEncoding}`});const o=stringifyConstraintRange(e?.hasUniqueItems?"unique items":"items",e?.minItems,e?.maxItems);null!==o&&t.push({scope:"array",value:o});const s=stringifyConstraintRange("contained items",e?.minContains,e?.maxContains);null!==s&&t.push({scope:"array",value:s});const l=stringifyConstraintRange("properties",e?.minProperties,e?.maxProperties);return null!==l&&t.push({scope:"object",value:l}),t},getDependentRequired=(e,t)=>t?.dependentRequired?Array.from(Object.entries(t.dependentRequired).reduce(((t,r)=>{let[n,a]=r;return Array.isArray(a)&&a.includes(e)?(t.add(n),t):t}),new Set)):[],withJSONSchemaContext=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={components:{JSONSchema:Ss,Keyword$schema:keywords_$schema,Keyword$vocabulary:$vocabulary_$vocabulary,Keyword$id:keywords_$id,Keyword$anchor:keywords_$anchor,Keyword$dynamicAnchor:keywords_$dynamicAnchor,Keyword$ref:keywords_$ref,Keyword$dynamicRef:keywords_$dynamicRef,Keyword$defs:keywords_$defs,Keyword$comment:keywords_$comment,KeywordAllOf:keywords_AllOf,KeywordAnyOf:keywords_AnyOf,KeywordOneOf:keywords_OneOf,KeywordNot:keywords_Not,KeywordIf:keywords_If,KeywordThen:keywords_Then,KeywordElse:keywords_Else,KeywordDependentSchemas:keywords_DependentSchemas,KeywordPrefixItems:keywords_PrefixItems,KeywordItems:keywords_Items,KeywordContains:keywords_Contains,KeywordProperties:keywords_Properties_Properties,KeywordPatternProperties:PatternProperties_PatternProperties,KeywordAdditionalProperties:keywords_AdditionalProperties,KeywordPropertyNames:keywords_PropertyNames,KeywordUnevaluatedItems:keywords_UnevaluatedItems,KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,KeywordType:_s,KeywordEnum:Enum_Enum,KeywordConst:keywords_Const,KeywordConstraint:bs,KeywordDependentRequired:DependentRequired_DependentRequired,KeywordContentSchema:keywords_ContentSchema,KeywordTitle:ws,KeywordDescription:keywords_Description_Description,KeywordDefault:keywords_Default,KeywordDeprecated:keywords_Deprecated,KeywordReadOnly:keywords_ReadOnly,KeywordWriteOnly:keywords_WriteOnly,Accordion:Cs,ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,ChevronRightIcon:icons_ChevronRight,...t.components},config:{default$schema:"https://json-schema.org/draft/2020-12/schema",defaultExpandedLevels:0,...t.config},fn:{upperFirst:fn_upperFirst,getTitle,getType,isBooleanJSONSchema,hasKeyword,isExpandable,stringify:fn_stringify,stringifyConstraints,getDependentRequired,...t.fn}},HOC=t=>Je.default.createElement(hs.Provider,{value:r},Je.default.createElement(e,t));return HOC.contexts={JSONSchemaContext:hs},HOC.displayName=e.displayName,HOC};var json_schema_2020_12=()=>({components:{JSONSchema202012:Ss,JSONSchema202012Keyword$schema:keywords_$schema,JSONSchema202012Keyword$vocabulary:$vocabulary_$vocabulary,JSONSchema202012Keyword$id:keywords_$id,JSONSchema202012Keyword$anchor:keywords_$anchor,JSONSchema202012Keyword$dynamicAnchor:keywords_$dynamicAnchor,JSONSchema202012Keyword$ref:keywords_$ref,JSONSchema202012Keyword$dynamicRef:keywords_$dynamicRef,JSONSchema202012Keyword$defs:keywords_$defs,JSONSchema202012Keyword$comment:keywords_$comment,JSONSchema202012KeywordAllOf:keywords_AllOf,JSONSchema202012KeywordAnyOf:keywords_AnyOf,JSONSchema202012KeywordOneOf:keywords_OneOf,JSONSchema202012KeywordNot:keywords_Not,JSONSchema202012KeywordIf:keywords_If,JSONSchema202012KeywordThen:keywords_Then,JSONSchema202012KeywordElse:keywords_Else,JSONSchema202012KeywordDependentSchemas:keywords_DependentSchemas,JSONSchema202012KeywordPrefixItems:keywords_PrefixItems,JSONSchema202012KeywordItems:keywords_Items,JSONSchema202012KeywordContains:keywords_Contains,JSONSchema202012KeywordProperties:keywords_Properties_Properties,JSONSchema202012KeywordPatternProperties:PatternProperties_PatternProperties,JSONSchema202012KeywordAdditionalProperties:keywords_AdditionalProperties,JSONSchema202012KeywordPropertyNames:keywords_PropertyNames,JSONSchema202012KeywordUnevaluatedItems:keywords_UnevaluatedItems,JSONSchema202012KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,JSONSchema202012KeywordType:_s,JSONSchema202012KeywordEnum:Enum_Enum,JSONSchema202012KeywordConst:keywords_Const,JSONSchema202012KeywordConstraint:bs,JSONSchema202012KeywordDependentRequired:DependentRequired_DependentRequired,JSONSchema202012KeywordContentSchema:keywords_ContentSchema,JSONSchema202012KeywordTitle:ws,JSONSchema202012KeywordDescription:keywords_Description_Description,JSONSchema202012KeywordDefault:keywords_Default,JSONSchema202012KeywordDeprecated:keywords_Deprecated,JSONSchema202012KeywordReadOnly:keywords_ReadOnly,JSONSchema202012KeywordWriteOnly:keywords_WriteOnly,JSONSchema202012Accordion:Cs,JSONSchema202012ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,JSONSchema202012ChevronRightIcon:icons_ChevronRight,withJSONSchema202012Context:withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>ys},fn:{upperFirst:fn_upperFirst,jsonSchema202012:{isExpandable,hasKeyword,useFn,useConfig,useComponent,useIsExpandedDeeply}}}),xs=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ve.default});var array=(e,t)=>{let{sample:r}=t;return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:r,maxItems:n,uniqueItems:a}=t,{contains:o,minContains:s,maxContains:l}=t;let i=[...e];if(null!=o&&"object"==typeof o){if(Number.isInteger(s)&&s>1){const e=i.at(0);for(let t=1;t0&&(i=e.slice(0,n)),Number.isInteger(r)&&r>0)for(let e=0;i.length{throw new Error("Not implemented")};const bytes=e=>ut()(e),pick=e=>e.at(0),predicates_isBooleanJSONSchema=e=>"boolean"==typeof e,isJSONSchemaObject=e=>(0,xs.default)(e),isJSONSchema=e=>predicates_isBooleanJSONSchema(e)||isJSONSchemaObject(e);var email=()=>"user@example.com";var idn_email=()=>"실례@example.com";var hostname=()=>"example.com";var idn_hostname=()=>"실례.com";var ipv4=()=>"198.51.100.42";var ipv6=()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a";var uri=()=>"https://example.com/";var uri_reference=()=>"path/index.html";var iri=()=>"https://실례.com/";var iri_reference=()=>"path/실례.html";var uuid=()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6";var uri_template=()=>"https://example.com/dictionary/{term:1}/{term}";var json_pointer=()=>"/a/b/c";var relative_json_pointer=()=>"1/0";var date_time=()=>(new Date).toISOString();var date=()=>(new Date).toISOString().substring(0,10);var time=()=>(new Date).toISOString().substring(11);var duration=()=>"P3D";var generators_password=()=>"********";var regex=()=>"^[a-z]+$";var Os=class Registry{data={};register(e,t){this.data[e]=t}unregister(e){void 0===e?this.data={}:delete this.data[e]}get(e){return this.data[e]}};const ks=new Os;var api_formatAPI=(e,t)=>"function"==typeof t?ks.register(e,t):null===t?ks.unregister(e):ks.get(e),Ns=__webpack_require__(764).Buffer;var _7bit=e=>Ns.from(e).toString("ascii"),As=__webpack_require__(764).Buffer;var _8bit=e=>As.from(e).toString("utf8"),Is=__webpack_require__(764).Buffer;var binary=e=>Is.from(e).toString("binary");var quoted_printable=e=>{let t="";for(let r=0;r=33&&n<=60||n>=62&&n<=126||9===n||32===n)t+=e.charAt(r);else if(13===n||10===n)t+="\r\n";else if(n>126){const n=unescape(encodeURIComponent(e.charAt(r)));for(let e=0;eRs.from(e).toString("hex"),Ts=__webpack_require__(764).Buffer;var base32=e=>{const t=Ts.from(e).toString("utf8"),r="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=0,a="",o=0,s=0;for(let e=0;e=5;)a+=r.charAt(o>>>s-5&31),s-=5;s>0&&(a+=r.charAt(o<<5-s&31),n=(8-8*t.length%5)%5);for(let e=0;eBs.from(e).toString("base64");const js=new class EncoderRegistry extends Os{#e={"7bit":_7bit,"8bit":_8bit,binary,"quoted-printable":quoted_printable,base16,base32,base64};data={...this.#e};get defaults(){return{...this.#e}}},encoderAPI=(e,t)=>"function"==typeof t?js.register(e,t):null===t?js.unregister(e):js.get(e);encoderAPI.getDefaults=()=>js.defaults;var Ps=encoderAPI;var Ms={"text/plain":()=>"string","text/css":()=>".selector { border: 1px solid red }","text/csv":()=>"value1,value2,value3","text/html":()=>"

    content

    ","text/calendar":()=>"BEGIN:VCALENDAR","text/javascript":()=>"console.dir('Hello world!');","text/xml":()=>'John Doe',"text/*":()=>"string"};var qs={"image/*":()=>bytes(25).toString("binary")};var Ls={"audio/*":()=>bytes(25).toString("binary")};var Ds={"video/*":()=>bytes(25).toString("binary")};var Us={"application/json":()=>'{"key":"value"}',"application/ld+json":()=>'{"name": "John Doe"}',"application/x-httpd-php":()=>"Hello World!

    '; ?>","application/rtf":()=>String.raw`{\rtf1\adeflang1025\ansi\ansicpg1252\uc1`,"application/x-sh":()=>'echo "Hello World!"',"application/xhtml+xml":()=>"

    content

    ","application/*":()=>bytes(25).toString("binary")};const $s=new class MediaTypeRegistry extends Os{#e={...Ms,...qs,...Ls,...Ds,...Us};data={...this.#e};get defaults(){return{...this.#e}}},mediaTypeAPI=(e,t)=>{if("function"==typeof t)return $s.register(e,t);if(null===t)return $s.unregister(e);const r=e.split(";").at(0),n=`${r.split("/").at(0)}/*`;return $s.get(e)||$s.get(r)||$s.get(n)};mediaTypeAPI.getDefaults=()=>$s.defaults;var Js=mediaTypeAPI;var types_string=function(e){let{sample:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:r,contentMediaType:n,contentSchema:a}=e,{pattern:o,format:s}=e,l=Ps(r)||fa.default;let i;if("string"==typeof o)i=(e=>{try{return new $r.default(e).gen()}catch{return"string"}})(o);else if("string"==typeof s)i=(e=>{const{format:t}=e,r=api_formatAPI(t);if("function"==typeof r)return r(e);switch(t){case"email":return email();case"idn-email":return idn_email();case"hostname":return hostname();case"idn-hostname":return idn_hostname();case"ipv4":return ipv4();case"ipv6":return ipv6();case"uri":return uri();case"uri-reference":return uri_reference();case"iri":return iri();case"iri-reference":return iri_reference();case"uuid":return uuid();case"uri-template":return uri_template();case"json-pointer":return json_pointer();case"relative-json-pointer":return relative_json_pointer();case"date-time":return date_time();case"date":return date();case"time":return time();case"duration":return duration();case"password":return generators_password();case"regex":return regex()}return"string"})(e);else if(isJSONSchema(a)&&"string"==typeof n&&void 0!==t)i=Array.isArray(t)||"object"==typeof t?JSON.stringify(t):String(t);else if("string"==typeof n){const t=Js(n);"function"==typeof t&&(i=t(e))}else i="string";return l(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:r,minLength:n}=t;let a=e;if(Number.isInteger(r)&&r>0&&(a=a.slice(0,r)),Number.isInteger(n)&&n>0){let e=0;for(;a.length.1;var generators_double=()=>.1;var types_number=e=>{const{format:t}=e;let r;return r="string"==typeof t?(e=>{const{format:t}=e,r=api_formatAPI(t);if("function"==typeof r)return r(e);switch(t){case"float":return generators_float();case"double":return generators_double()}return 0})(e):0,function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:r,maximum:n,exclusiveMinimum:a,exclusiveMaximum:o}=t,{multipleOf:s}=t,l=Number.isInteger(e)?1:Number.EPSILON;let i="number"==typeof r?r:null,c="number"==typeof n?n:null,u=e;if("number"==typeof a&&(i=null!==i?Math.max(i,a+l):a+l),"number"==typeof o&&(c=null!==c?Math.min(c,o-l):o-l),u=i>c&&e||i||c||u,"number"==typeof s&&s>0){const e=u%s;u=0===e?u:u+s-e}return u}(r,e)};var int32=()=>2**30>>>0;var int64=()=>2**53-1;var types_integer=e=>{const{format:t}=e;return"string"==typeof t?(e=>{const{format:t}=e,r=api_formatAPI(t);if("function"==typeof r)return r(e);switch(t){case"int32":return int32();case"int64":return int64()}return 0})(e):0};var types_boolean=e=>"boolean"!=typeof e.default||e.default;var Vs=new Proxy({array,object,string:types_string,number:types_number,integer:types_integer,boolean:types_boolean,null:()=>null},{get:(e,t)=>"string"==typeof t&&Object.hasOwn(e,t)?e[t]:()=>`Unknown Type: ${t}`});const Ks=["array","object","number","integer","string","boolean","null"],hasExample=e=>{if(!isJSONSchemaObject(e))return!1;const{examples:t,example:r,default:n}=e;return!!(Array.isArray(t)&&t.length>=1)||(void 0!==n||void 0!==r)},extractExample=e=>{if(!isJSONSchemaObject(e))return null;const{examples:t,example:r,default:n}=e;return Array.isArray(t)&&t.length>=1?t.at(0):void 0!==n?n:void 0!==r?r:void 0},zs={array:["items","prefixItems","contains","maxContains","minContains","maxItems","minItems","uniqueItems","unevaluatedItems"],object:["properties","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","required","dependentSchemas","dependentRequired","unevaluatedProperties"],string:["pattern","format","minLength","maxLength","contentEncoding","contentMediaType","contentSchema"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"]};zs.number=zs.integer;const Fs="string",inferTypeFromValue=e=>void 0===e?null:null===e?"null":Array.isArray(e)?"array":Number.isInteger(e)?"integer":typeof e,foldType=e=>{if(Array.isArray(e)&&e.length>=1){if(e.includes("array"))return"array";if(e.includes("object"))return"object";{const t=pick(e);if(Ks.includes(t))return t}}return Ks.includes(e)?e:null},inferType=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;if(!isJSONSchemaObject(e))return Fs;if(t.has(e))return Fs;t.add(e);let{type:r,const:n}=e;if(r=foldType(r),"string"!=typeof r){const t=Object.keys(zs);e:for(let n=0;n{if(Array.isArray(e[r])){const n=e[r].map((e=>inferType(e,t)));return foldType(n)}return null},n=combineTypes("allOf"),a=combineTypes("anyOf"),o=combineTypes("oneOf"),s=e.not?inferType(e.not,t):null;(n||a||o||s)&&(r=foldType([n,a,o,s].filter(Boolean)))}if("string"!=typeof r&&hasExample(e)){const t=extractExample(e),n=inferTypeFromValue(t);r="string"==typeof n?n:r}return t.delete(e),r||Fs},type_getType=e=>inferType(e),typeCast=e=>predicates_isBooleanJSONSchema(e)?(e=>!1===e?{not:{}}:{})(e):isJSONSchemaObject(e)?e:{},merge=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(predicates_isBooleanJSONSchema(e)&&!0===e)return!0;if(predicates_isBooleanJSONSchema(e)&&!1===e)return!1;if(predicates_isBooleanJSONSchema(t)&&!0===t)return!0;if(predicates_isBooleanJSONSchema(t)&&!1===t)return!1;if(!isJSONSchema(e))return t;if(!isJSONSchema(t))return e;const n={...t,...e};if(t.type&&e.type&&Array.isArray(t.type)&&"string"==typeof t.type){const r=normalizeArray(t.type).concat(e.type);n.type=Array.from(new Set(r))}if(Array.isArray(t.required)&&Array.isArray(e.required)&&(n.required=[...new Set([...e.required,...t.required])]),t.properties&&e.properties){const a=new Set([...Object.keys(t.properties),...Object.keys(e.properties)]);n.properties={};for(const o of a){const a=t.properties[o]||{},s=e.properties[o]||{};a.readOnly&&!r.includeReadOnly||a.writeOnly&&!r.includeWriteOnly?n.required=(n.required||[]).filter((e=>e!==o)):n.properties[o]=merge(s,a,r)}}return isJSONSchema(t.items)&&isJSONSchema(e.items)&&(n.items=merge(e.items,t.items,r)),isJSONSchema(t.contains)&&isJSONSchema(e.contains)&&(n.contains=merge(e.contains,t.contains,r)),isJSONSchema(t.contentSchema)&&isJSONSchema(e.contentSchema)&&(n.contentSchema=merge(e.contentSchema,t.contentSchema,r)),n};var Ws=merge;const main_sampleFromSchemaGeneric=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];"function"==typeof e?.toJS&&(e=e.toJS()),e=typeCast(e);let a=void 0!==r||hasExample(e);const o=!a&&Array.isArray(e.oneOf)&&e.oneOf.length>0,s=!a&&Array.isArray(e.anyOf)&&e.anyOf.length>0;if(!a&&(o||s)){const r=typeCast(pick(o?e.oneOf:e.anyOf));!(e=Ws(e,r,t)).xml&&r.xml&&(e.xml=r.xml),hasExample(e)&&hasExample(r)&&(a=!0)}const l={};let{xml:i,properties:c,additionalProperties:u,items:d,contains:p}=e||{},m=type_getType(e),{includeReadOnly:f,includeWriteOnly:h}=t;i=i||{};let g,{name:y,prefix:v,namespace:S}=i,_={};if(Object.hasOwn(e,"type")||(e.type=m),n&&(y=y||"notagname",g=(v?`${v}:`:"")+y,S)){l[v?`xmlns:${v}`:"xmlns"]=S}n&&(_[g]=[]);const b=objectify(c);let w,C=0;const hasExceededMaxProperties=()=>Number.isInteger(e.maxProperties)&&e.maxProperties>0&&C>=e.maxProperties,canAddProperty=t=>!(Number.isInteger(e.maxProperties)&&e.maxProperties>0)||!hasExceededMaxProperties()&&(!(t=>!Array.isArray(e.required)||0===e.required.length||!e.required.includes(t))(t)||e.maxProperties-C-(()=>{if(!Array.isArray(e.required)||0===e.required.length)return 0;let t=0;return n?e.required.forEach((e=>t+=void 0===_[e]?0:1)):e.required.forEach((e=>{t+=void 0===_[g]?.find((t=>void 0!==t[e]))?0:1})),e.required.length-t})()>0);if(w=n?function(r){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&b[r]){if(b[r].xml=b[r].xml||{},b[r].xml.attribute){const e=Array.isArray(b[r].enum)?pick(b[r].enum):void 0;if(hasExample(b[r]))l[b[r].xml.name||r]=extractExample(b[r]);else if(void 0!==e)l[b[r].xml.name||r]=e;else{const e=typeCast(b[r]),t=type_getType(e),n=b[r].xml.name||r;l[n]=Vs[t](e)}return}b[r].xml.name=b[r].xml.name||r}else b[r]||!1===u||(b[r]={xml:{name:r}});let o=main_sampleFromSchemaGeneric(b[r],t,a,n);canAddProperty(r)&&(C++,Array.isArray(o)?_[g]=_[g].concat(o):_[g].push(o))}:(r,a)=>{if(canAddProperty(r)){if((0,xs.default)(e.discriminator?.mapping)&&e.discriminator.propertyName===r&&"string"==typeof e.$$ref){for(const t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){_[r]=t;break}}else _[r]=main_sampleFromSchemaGeneric(b[r],t,a,n);C++}},a){let a;if(a=void 0!==r?r:extractExample(e),!n){if("number"==typeof a&&"string"===m)return`${a}`;if("string"!=typeof a||"string"===m)return a;try{return JSON.parse(a)}catch{return a}}if("array"===m){if(!Array.isArray(a)){if("string"==typeof a)return a;a=[a]}let r=[];return isJSONSchemaObject(d)&&(d.xml=d.xml||i||{},d.xml.name=d.xml.name||i.name,r=a.map((e=>main_sampleFromSchemaGeneric(d,t,e,n)))),isJSONSchemaObject(p)&&(p.xml=p.xml||i||{},p.xml.name=p.xml.name||i.name,r=[main_sampleFromSchemaGeneric(p,t,void 0,n),...r]),r=Vs.array(e,{sample:r}),i.wrapped?(_[g]=r,(0,Jr.default)(l)||_[g].push({_attr:l})):_=r,_}if("object"===m){if("string"==typeof a)return a;for(const e in a)Object.hasOwn(a,e)&&(b[e]?.readOnly&&!f||b[e]?.writeOnly&&!h||(b[e]?.xml?.attribute?l[b[e].xml.name||e]=a[e]:w(e,a[e])));return(0,Jr.default)(l)||_[g].push({_attr:l}),_}return _[g]=(0,Jr.default)(l)?a:[{_attr:l},a],_}if("array"===m){let r=[];if(isJSONSchemaObject(p))if(n&&(p.xml=p.xml||e.xml||{},p.xml.name=p.xml.name||i.name),Array.isArray(p.anyOf))r.push(...p.anyOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,p,t),t,void 0,n))));else if(Array.isArray(p.oneOf))r.push(...p.oneOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,p,t),t,void 0,n))));else{if(!(!n||n&&i.wrapped))return main_sampleFromSchemaGeneric(p,t,void 0,n);r.push(main_sampleFromSchemaGeneric(p,t,void 0,n))}if(isJSONSchemaObject(d))if(n&&(d.xml=d.xml||e.xml||{},d.xml.name=d.xml.name||i.name),Array.isArray(d.anyOf))r.push(...d.anyOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,d,t),t,void 0,n))));else if(Array.isArray(d.oneOf))r.push(...d.oneOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,d,t),t,void 0,n))));else{if(!(!n||n&&i.wrapped))return main_sampleFromSchemaGeneric(d,t,void 0,n);r.push(main_sampleFromSchemaGeneric(d,t,void 0,n))}return r=Vs.array(e,{sample:r}),n&&i.wrapped?(_[g]=r,(0,Jr.default)(l)||_[g].push({_attr:l}),_):r}if("object"===m){for(let e in b)Object.hasOwn(b,e)&&(b[e]?.deprecated||b[e]?.readOnly&&!f||b[e]?.writeOnly&&!h||w(e));if(n&&l&&_[g].push({_attr:l}),hasExceededMaxProperties())return _;if(predicates_isBooleanJSONSchema(u)&&u)n?_[g].push({additionalProp:"Anything can be here"}):_.additionalProp1={},C++;else if(isJSONSchemaObject(u)){const r=u,a=main_sampleFromSchemaGeneric(r,t,void 0,n);if(n&&"string"==typeof r?.xml?.name&&"notagname"!==r?.xml?.name)_[g].push(a);else{const t=Number.isInteger(e.minProperties)&&e.minProperties>0&&C{const n=main_sampleFromSchemaGeneric(e,t,r,!0);if(n)return"string"==typeof n?n:Ur()(n,{declaration:!0,indent:"\t"})},main_sampleFromSchema=(e,t,r)=>main_sampleFromSchemaGeneric(e,t,r,!1),main_resolver=(e,t,r)=>[e,JSON.stringify(t),JSON.stringify(r)],Hs=utils_memoizeN(main_createXMLExample,main_resolver),Gs=utils_memoizeN(main_sampleFromSchema,main_resolver),Xs=[{when:/json/,shouldStringifyTypes:["string"]}],Ys=["object"];var fn_get_json_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.jsonSchema202012.memoizedSampleFromSchema(t,r,a),l=typeof s,i=Xs.reduce(((e,t)=>t.when.test(n)?[...e,...t.shouldStringifyTypes]:e),Ys);return(0,ot.default)(i,(e=>e===l))?JSON.stringify(s,null,2):s};var fn_get_yaml_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.jsonSchema202012.getJsonSampleSchema(t,r,n,a);let l;try{l=Lt.default.dump(Lt.default.load(s),{lineWidth:-1},{schema:Lt.JSON_SCHEMA}),"\n"===l[l.length-1]&&(l=l.slice(0,l.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return l.replace(/\t/g," ")};var fn_get_xml_sample_schema=e=>(t,r,n)=>{const{fn:a}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(t.$$ref){let e=t.$$ref.match(/\S*\/(\S+)$/);t.xml.name=e[1]}}return a.jsonSchema202012.memoizedCreateXMLExample(t,r,n)};var fn_get_sample_schema=e=>function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:o}=e();return"function"==typeof t?.toJS&&(t=t.toJS()),"function"==typeof a?.toJS&&(a=a.toJS()),/xml/.test(r)?o.jsonSchema202012.getXmlSampleSchema(t,n,a):/(yaml|yml)/.test(r)?o.jsonSchema202012.getYamlSampleSchema(t,n,r,a):o.jsonSchema202012.getJsonSampleSchema(t,n,r,a)};var json_schema_2020_12_samples=e=>{let{getSystem:t}=e;const r=fn_get_json_sample_schema(t),n=fn_get_yaml_sample_schema(t),a=fn_get_xml_sample_schema(t),o=fn_get_sample_schema(t);return{fn:{jsonSchema202012:{sampleFromSchema:main_sampleFromSchema,sampleFromSchemaGeneric:main_sampleFromSchemaGeneric,sampleEncoderAPI:Ps,sampleFormatAPI:api_formatAPI,sampleMediaTypeAPI:Js,createXMLExample:main_createXMLExample,memoizedSampleFromSchema:Gs,memoizedCreateXMLExample:Hs,getJsonSampleSchema:r,getYamlSampleSchema:n,getXmlSampleSchema:a,getSampleSchema:o}}}};function PresetApis(){return[base,oas3,json_schema_2020_12,json_schema_2020_12_samples,oas31]}const{GIT_DIRTY:Qs,GIT_COMMIT:Zs,PACKAGE_VERSION:el,BUILD_TIME:tl}={PACKAGE_VERSION:"5.9.0",GIT_COMMIT:"gaa9cf563",GIT_DIRTY:!0,BUILD_TIME:"Fri, 29 Sep 2023 12:26:06 GMT"};function SwaggerUI(e){tt.versions=tt.versions||{},tt.versions.swaggerUi={version:el,gitRevision:Zs,gitDirty:Qs,buildTimestamp:tl};const t={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:e=>e,responseInterceptor:e=>e,showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[PresetApis],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}};let r=e.queryConfigEnabled?(()=>{let e={},t=tt.location.search;if(!t)return{};if(""!=t){let r=t.substr(1).split("&");for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(t=r[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e})():{};const n=e.domNode;delete e.domNode;const a=$e()({},t,e,r),o={system:{configs:a.configs},plugins:a.presets,pluginsOptions:a.pluginsOptions,state:$e()({layout:{layout:a.layout,filter:a.filter},spec:{spec:"",url:a.url},requestSnippets:a.requestSnippets},a.initialState)};if(a.initialState)for(var s in a.initialState)Object.prototype.hasOwnProperty.call(a.initialState,s)&&void 0===a.initialState[s]&&delete o.state[s];var l=new Store(o);l.register([a.plugins,()=>({fn:a.fn,components:a.components,state:a.state})]);var i=l.getSystem();const downloadSpec=e=>{let t=i.specSelectors.getLocalConfig?i.specSelectors.getLocalConfig():{},o=$e()({},t,a,e||{},r);if(n&&(o.domNode=n),l.setConfigs(o),i.configsActions.loaded(),null!==e&&(!r.url&&"object"==typeof o.spec&&Object.keys(o.spec).length?(i.specActions.updateUrl(""),i.specActions.updateLoadingStatus("success"),i.specActions.updateSpec(JSON.stringify(o.spec))):i.specActions.download&&o.url&&!o.urls&&(i.specActions.updateUrl(o.url),i.specActions.download(o.url))),o.domNode)i.render(o.domNode,"App");else if(o.dom_id){let e=document.querySelector(o.dom_id);i.render(e,"App")}else null===o.dom_id||null===o.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return i},c=r.config||a.configUrl;return c&&i.specActions&&i.specActions.getConfigByUrl?(i.specActions.getConfigByUrl({url:c,loadRemoteConfig:!0,requestInterceptor:a.requestInterceptor,responseInterceptor:a.responseInterceptor},downloadSpec),i):downloadSpec()}SwaggerUI.System=Store,SwaggerUI.presets={base,apis:PresetApis},SwaggerUI.plugins={Auth:auth,Configs:configsPlugin,DeepLining:deep_linking,Err:err,Filter:filter,Icons:icons,JSONSchema5Samples:json_schema_5_samples,JSONSchema202012:json_schema_2020_12,JSONSchema202012Samples:json_schema_2020_12_samples,Layout:plugins_layout,Logs:logs,OpenAPI30:oas3,OpenAPI31:oas3,OnComplete:on_complete,RequestSnippets:plugins_request_snippets,Spec:plugins_spec,SwaggerClient:swagger_client,Util:util,View:view,DownloadUrl:downloadUrlPlugin,SafeRender:safe_render};var rl=SwaggerUI}();var we=be.Z;export{we as default}; +//# sourceMappingURL=swagger-ui-es-bundle-core.js.map \ No newline at end of file diff --git a/app/static/swagger/swagger-ui-es-bundle-core.js.map b/app/static/swagger/swagger-ui-es-bundle-core.js.map new file mode 100644 index 0000000..55a1673 --- /dev/null +++ b/app/static/swagger/swagger-ui-es-bundle-core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui-es-bundle-core.js","mappings":"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","sources":["webpack://swagger-ui/./node_modules/buffer/index.js","webpack://swagger-ui/./node_modules/deep-extend/lib/deep-extend.js","webpack://swagger-ui/./node_modules/events/events.js","webpack://swagger-ui/./node_modules/highlight.js/lib/languages/xml.js","webpack://swagger-ui/./node_modules/inherits/inherits_browser.js","webpack://swagger-ui/./node_modules/process/browser.js","webpack://swagger-ui/./node_modules/randombytes/browser.js","webpack://swagger-ui/./node_modules/readable-stream/errors-browser.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_readable.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_transform.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_writable.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://swagger-ui/./node_modules/safe-buffer/index.js","webpack://swagger-ui/./node_modules/sha.js/hash.js","webpack://swagger-ui/./node_modules/sha.js/index.js","webpack://swagger-ui/./node_modules/sha.js/sha.js","webpack://swagger-ui/./node_modules/sha.js/sha1.js","webpack://swagger-ui/./node_modules/sha.js/sha224.js","webpack://swagger-ui/./node_modules/sha.js/sha256.js","webpack://swagger-ui/./node_modules/sha.js/sha384.js","webpack://swagger-ui/./node_modules/sha.js/sha512.js","webpack://swagger-ui/./node_modules/stream-browserify/index.js","webpack://swagger-ui/./node_modules/string_decoder/lib/string_decoder.js","webpack://swagger-ui/./node_modules/util-deprecate/browser.js","webpack://swagger-ui/./node_modules/xml-but-prettier/dist/index.js","webpack://swagger-ui/./node_modules/xml/lib/escapeForXML.js","webpack://swagger-ui/./node_modules/xml/lib/xml.js","webpack://swagger-ui/external module \"base64-js\"","webpack://swagger-ui/external module \"ieee754\"","webpack://swagger-ui/external module \"repeat-string\"","webpack://swagger-ui/webpack/bootstrap","webpack://swagger-ui/webpack/runtime/compat get default export","webpack://swagger-ui/webpack/runtime/define property getters","webpack://swagger-ui/webpack/runtime/global","webpack://swagger-ui/webpack/runtime/hasOwnProperty shorthand","webpack://swagger-ui/webpack/runtime/make namespace object","webpack://swagger-ui/external module \"react\"","webpack://swagger-ui/external module \"redux\"","webpack://swagger-ui/external module \"immutable\"","webpack://swagger-ui/external module \"redux-immutable\"","webpack://swagger-ui/external module \"serialize-error\"","webpack://swagger-ui/external module \"lodash/merge\"","webpack://swagger-ui/./src/core/plugins/err/actions.js","webpack://swagger-ui/./src/core/window.js","webpack://swagger-ui/external module \"@braintree/sanitize-url\"","webpack://swagger-ui/external module \"lodash/memoize\"","webpack://swagger-ui/external module \"lodash/camelCase\"","webpack://swagger-ui/external module \"lodash/upperFirst\"","webpack://swagger-ui/external module \"lodash/find\"","webpack://swagger-ui/external module \"lodash/some\"","webpack://swagger-ui/external module \"lodash/eq\"","webpack://swagger-ui/external module \"lodash/isFunction\"","webpack://swagger-ui/external module \"css.escape\"","webpack://swagger-ui/./src/core/utils/get-parameter-schema.js","webpack://swagger-ui/./src/core/utils/index.js","webpack://swagger-ui/./src/core/system.js","webpack://swagger-ui/external module \"url-parse\"","webpack://swagger-ui/./src/core/plugins/auth/actions.js","webpack://swagger-ui/./src/core/plugins/auth/reducers.js","webpack://swagger-ui/external module \"reselect\"","webpack://swagger-ui/./src/core/plugins/auth/selectors.js","webpack://swagger-ui/./src/core/plugins/auth/spec-extensions/wrap-actions.js","webpack://swagger-ui/./src/core/plugins/auth/configs-extensions/wrap-actions.js","webpack://swagger-ui/./src/core/plugins/auth/wrap-actions.js","webpack://swagger-ui/external module \"prop-types\"","webpack://swagger-ui/external module \"lodash/omit\"","webpack://swagger-ui/./src/core/plugins/auth/components/lock-auth-icon.jsx","webpack://swagger-ui/./src/core/plugins/auth/components/unlock-auth-icon.jsx","webpack://swagger-ui/./src/core/plugins/auth/index.js","webpack://swagger-ui/external module \"js-yaml\"","webpack://swagger-ui/./src/core/plugins/configs/helpers.js","webpack://swagger-ui/./src/core/plugins/configs/actions.js","webpack://swagger-ui/./src/core/plugins/configs/spec-actions.js","webpack://swagger-ui/./src/core/plugins/configs/selectors.js","webpack://swagger-ui/./src/core/plugins/configs/reducers.js","webpack://swagger-ui/./src/core/plugins/configs/index.js","webpack://swagger-ui/./src/core/plugins/deep-linking/helpers.js","webpack://swagger-ui/external module \"zenscroll\"","webpack://swagger-ui/./src/core/plugins/deep-linking/layout.js","webpack://swagger-ui/external module \"react-immutable-proptypes\"","webpack://swagger-ui/./src/core/plugins/deep-linking/operation-wrapper.jsx","webpack://swagger-ui/./src/core/plugins/deep-linking/operation-tag-wrapper.jsx","webpack://swagger-ui/./src/core/plugins/deep-linking/index.js","webpack://swagger-ui/external module \"lodash/reduce\"","webpack://swagger-ui/./src/core/plugins/err/error-transformers/transformers/not-of-type.js","webpack://swagger-ui/external module \"lodash/get\"","webpack://swagger-ui/./src/core/plugins/err/error-transformers/transformers/parameter-oneof.js","webpack://swagger-ui/./src/core/plugins/err/error-transformers/hook.js","webpack://swagger-ui/./src/core/plugins/err/reducers.js","webpack://swagger-ui/./src/core/plugins/err/selectors.js","webpack://swagger-ui/./src/core/plugins/err/index.js","webpack://swagger-ui/./src/core/plugins/filter/opsFilter.js","webpack://swagger-ui/./src/core/plugins/filter/index.js","webpack://swagger-ui/external module \"@babel/runtime-corejs3/helpers/extends\"","webpack://swagger-ui/./src/core/plugins/icons/components/arrow-up.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/arrow-down.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/arrow.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/close.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/copy.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/lock.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/unlock.jsx","webpack://swagger-ui/./src/core/plugins/icons/index.js","webpack://swagger-ui/./src/core/plugins/layout/actions.js","webpack://swagger-ui/./src/core/plugins/layout/reducers.js","webpack://swagger-ui/./src/core/plugins/layout/selectors.js","webpack://swagger-ui/./src/core/plugins/layout/spec-extensions/wrap-selector.js","webpack://swagger-ui/./src/core/plugins/layout/index.js","webpack://swagger-ui/./src/core/plugins/logs/index.js","webpack://swagger-ui/./src/core/plugins/on-complete/index.js","webpack://swagger-ui/./src/core/plugins/request-snippets/fn.js","webpack://swagger-ui/./src/core/plugins/request-snippets/selectors.js","webpack://swagger-ui/external module \"react-copy-to-clipboard\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/light\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/javascript\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/json\"","webpack://swagger-ui/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/xml.js","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/bash\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/yaml\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/http\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/powershell\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/agate\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/arta\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/monokai\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/nord\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/obsidian\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/idea\"","webpack://swagger-ui/./src/core/syntax-highlighting.js","webpack://swagger-ui/./src/core/plugins/request-snippets/request-snippets.jsx","webpack://swagger-ui/./src/core/plugins/request-snippets/index.js","webpack://swagger-ui/external module \"randexp\"","webpack://swagger-ui/external module \"lodash/isEmpty\"","webpack://swagger-ui/./src/core/utils/memoizeN.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/index.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-json-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-yaml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-xml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/index.js","webpack://swagger-ui/./src/core/plugins/spec/selectors.js","webpack://swagger-ui/external module \"lodash/isString\"","webpack://swagger-ui/external module \"lodash/debounce\"","webpack://swagger-ui/external module \"lodash/set\"","webpack://swagger-ui/external module \"lodash/fp/assocPath\"","webpack://swagger-ui/external module \"lodash/constant\"","webpack://swagger-ui/./src/core/plugins/spec/actions.js","webpack://swagger-ui/./src/core/plugins/spec/reducers.js","webpack://swagger-ui/./src/core/plugins/spec/wrap-actions.js","webpack://swagger-ui/./src/core/plugins/spec/index.js","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/generic\"","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/openapi-2\"","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/openapi-3-0\"","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/openapi-3-1-apidom\"","webpack://swagger-ui/external module \"swagger-client/es/resolver\"","webpack://swagger-ui/external module \"swagger-client/es/execute\"","webpack://swagger-ui/external module \"swagger-client/es/http\"","webpack://swagger-ui/external module \"swagger-client/es/subtree-resolver\"","webpack://swagger-ui/external module \"swagger-client/es/helpers\"","webpack://swagger-ui/./src/core/plugins/swagger-client/configs-wrap-actions.js","webpack://swagger-ui/./src/core/plugins/swagger-client/index.js","webpack://swagger-ui/./src/core/plugins/util/index.js","webpack://swagger-ui/external module \"react-dom\"","webpack://swagger-ui/external module \"react-redux\"","webpack://swagger-ui/external module \"lodash/identity\"","webpack://swagger-ui/./src/core/plugins/view/root-injects.jsx","webpack://swagger-ui/./src/core/plugins/view/fn.js","webpack://swagger-ui/./src/core/plugins/view/index.js","webpack://swagger-ui/./src/core/plugins/download-url/index.js","webpack://swagger-ui/external module \"lodash/zipObject\"","webpack://swagger-ui/./src/core/plugins/safe-render/fn.jsx","webpack://swagger-ui/./src/core/plugins/safe-render/components/fallback.jsx","webpack://swagger-ui/./src/core/plugins/safe-render/components/error-boundary.jsx","webpack://swagger-ui/./src/core/plugins/safe-render/index.js","webpack://swagger-ui/./src/core/components/app.jsx","webpack://swagger-ui/./src/core/components/auth/authorization-popup.jsx","webpack://swagger-ui/./src/core/components/auth/authorize-btn.jsx","webpack://swagger-ui/./src/core/containers/authorize-btn.jsx","webpack://swagger-ui/./src/core/components/auth/authorize-operation-btn.jsx","webpack://swagger-ui/./src/core/components/auth/auths.jsx","webpack://swagger-ui/./src/core/components/auth/auth-item.jsx","webpack://swagger-ui/./src/core/components/auth/error.jsx","webpack://swagger-ui/./src/core/components/auth/api-key-auth.jsx","webpack://swagger-ui/./src/core/components/auth/basic-auth.jsx","webpack://swagger-ui/./src/core/components/example.jsx","webpack://swagger-ui/./src/core/components/examples-select.jsx","webpack://swagger-ui/./src/core/components/examples-select-value-retainer.jsx","webpack://swagger-ui/./src/core/oauth2-authorize.js","webpack://swagger-ui/./src/core/components/auth/oauth2.jsx","webpack://swagger-ui/./src/core/components/clear.jsx","webpack://swagger-ui/./src/core/components/live-response.jsx","webpack://swagger-ui/./src/core/components/online-validator-badge.jsx","webpack://swagger-ui/./src/core/components/operations.jsx","webpack://swagger-ui/./src/core/utils/url.js","webpack://swagger-ui/./src/core/components/operation-tag.jsx","webpack://swagger-ui/./src/core/assets/rolling-load.svg","webpack://swagger-ui/./src/core/components/operation.jsx","webpack://swagger-ui/./src/core/containers/OperationContainer.jsx","webpack://swagger-ui/external module \"lodash/toString\"","webpack://swagger-ui/./src/core/components/operation-summary.jsx","webpack://swagger-ui/./src/core/components/operation-summary-method.jsx","webpack://swagger-ui/./src/core/components/operation-summary-path.jsx","webpack://swagger-ui/./src/core/components/operation-extensions.jsx","webpack://swagger-ui/./src/core/components/operation-extension-row.jsx","webpack://swagger-ui/external module \"classnames\"","webpack://swagger-ui/external module \"js-file-download\"","webpack://swagger-ui/./src/core/components/highlight-code.jsx","webpack://swagger-ui/./src/core/components/responses.jsx","webpack://swagger-ui/./src/core/utils/create-html-ready-id.js","webpack://swagger-ui/./src/core/utils/jsonParse.js","webpack://swagger-ui/./src/core/components/response.jsx","webpack://swagger-ui/./src/core/components/response-extension.jsx","webpack://swagger-ui/external module \"lodash/toLower\"","webpack://swagger-ui/./src/core/components/response-body.jsx","webpack://swagger-ui/./src/core/components/parameters/parameters.jsx","webpack://swagger-ui/./src/core/components/parameter-extension.jsx","webpack://swagger-ui/./src/core/components/parameter-include-empty.jsx","webpack://swagger-ui/./src/core/components/parameter-row.jsx","webpack://swagger-ui/./src/core/components/execute.jsx","webpack://swagger-ui/./src/core/components/headers.jsx","webpack://swagger-ui/./src/core/components/errors.jsx","webpack://swagger-ui/./src/core/components/content-type.jsx","webpack://swagger-ui/./src/core/components/layout-utils.jsx","webpack://swagger-ui/./src/core/components/overview.jsx","webpack://swagger-ui/./src/core/components/initialized-input.jsx","webpack://swagger-ui/./src/core/components/info.jsx","webpack://swagger-ui/./src/core/containers/info.jsx","webpack://swagger-ui/./src/core/components/contact.jsx","webpack://swagger-ui/./src/core/components/license.jsx","webpack://swagger-ui/./src/core/components/jump-to-path.jsx","webpack://swagger-ui/./src/core/components/copy-to-clipboard-btn.jsx","webpack://swagger-ui/./src/core/components/footer.jsx","webpack://swagger-ui/./src/core/containers/filter.jsx","webpack://swagger-ui/./src/core/components/param-body.jsx","webpack://swagger-ui/./src/core/components/curl.jsx","webpack://swagger-ui/./src/core/components/schemes.jsx","webpack://swagger-ui/./src/core/containers/schemes.jsx","webpack://swagger-ui/./src/core/components/model-collapse.jsx","webpack://swagger-ui/./src/core/components/model-example.jsx","webpack://swagger-ui/./src/core/components/model-wrapper.jsx","webpack://swagger-ui/external module \"react-immutable-pure-component\"","webpack://swagger-ui/./src/core/components/model.jsx","webpack://swagger-ui/./src/core/components/models.jsx","webpack://swagger-ui/./src/core/components/enum-model.jsx","webpack://swagger-ui/./src/core/components/object-model.jsx","webpack://swagger-ui/./src/core/components/array-model.jsx","webpack://swagger-ui/./src/core/components/primitive-model.jsx","webpack://swagger-ui/./src/core/components/property.jsx","webpack://swagger-ui/./src/core/components/try-it-out-button.jsx","webpack://swagger-ui/./src/core/components/version-pragma-filter.jsx","webpack://swagger-ui/./src/core/components/version-stamp.jsx","webpack://swagger-ui/./src/core/components/openapi-version.jsx","webpack://swagger-ui/./src/core/components/deep-link.jsx","webpack://swagger-ui/./src/core/components/svg-assets.jsx","webpack://swagger-ui/external module \"remarkable\"","webpack://swagger-ui/external module \"remarkable/linkify\"","webpack://swagger-ui/external module \"dompurify\"","webpack://swagger-ui/./src/core/components/providers/markdown.jsx","webpack://swagger-ui/./src/core/components/layouts/base.jsx","webpack://swagger-ui/./src/core/presets/base/plugins/core-components/index.js","webpack://swagger-ui/./src/core/presets/base/plugins/form-components/index.js","webpack://swagger-ui/external module \"react-debounce-input\"","webpack://swagger-ui/./src/core/components/json-schema-components.jsx","webpack://swagger-ui/./src/core/presets/base/plugins/json-schema-components/index.js","webpack://swagger-ui/./src/core/presets/base/index.js","webpack://swagger-ui/./src/core/plugins/oas3/spec-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/auth-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/helpers.jsx","webpack://swagger-ui/./src/core/plugins/oas3/spec-extensions/selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/components/callbacks.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/request-body.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/operation-link.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/servers.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/servers-container.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/request-body-editor.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/auth/http-auth.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/operation-servers.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/index.js","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/markdown.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/auth/auth-item.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/online-validator-badge.js","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/model.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/json-schema-string.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/index.js","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/openapi-version.jsx","webpack://swagger-ui/./src/core/plugins/oas3/actions.js","webpack://swagger-ui/./src/core/plugins/oas3/selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/reducers.js","webpack://swagger-ui/./src/core/plugins/oas3/index.js","webpack://swagger-ui/./src/core/plugins/oas31/components/webhooks.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/license.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/contact.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/info.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/json-schema-dialect.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/version-pragma-filter.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/model/model.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/models/models.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/auth/mutual-tls-auth.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/auth/auths.jsx","webpack://swagger-ui/./src/core/plugins/oas31/fn.js","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/license.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/contact.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/info.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/fn.js","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/model.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/models.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/version-pragma-filter.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/auth/auth-item.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/auths.jsx","webpack://swagger-ui/./src/core/plugins/oas31/spec-extensions/selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/spec-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/auth-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx","webpack://swagger-ui/./src/core/plugins/oas31/after-load.js","webpack://swagger-ui/./src/core/plugins/oas31/index.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/prop-types.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/context.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/hooks.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$schema.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$id.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$ref.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$defs.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$comment.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Not.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/If.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Then.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Else.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Items.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Type.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Const.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Default.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/fn.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/hoc.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/index.js","webpack://swagger-ui/external module \"lodash/isPlainObject\"","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/array.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/object.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/random.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/predicates.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/email.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-email.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/hostname.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-hostname.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv4.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv6.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-reference.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri-reference.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uuid.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-template.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/json-pointer.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/relative-json-pointer.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date-time.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/time.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/duration.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/password.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/regex.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/class/Registry.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/api/formatAPI.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/7bit.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/8bit.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/binary.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/quoted-printable.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base16.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base32.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base64.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/api/encoderAPI.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/class/EncoderRegistry.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/text.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/image.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/audio.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/video.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/application.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/api/mediaTypeAPI.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/class/MediaTypeRegistry.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/string.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/float.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/double.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/number.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int32.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int64.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/integer.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/boolean.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/index.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/null.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/constants.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/example.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/type.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/utils.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/merge.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/main.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-json-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-yaml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-xml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/index.js","webpack://swagger-ui/./src/core/presets/apis/index.js","webpack://swagger-ui/./src/core/index.js","webpack://swagger-ui/./src/index.js"],"sourcesContent":["/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/*!\n * @description Recursive object extending\n * @author Viacheslav Lotsmanov \n * @license MIT\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2013-2018 Viacheslav Lotsmanov\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nfunction isSpecificValue(val) {\n\treturn (\n\t\tval instanceof Buffer\n\t\t|| val instanceof Date\n\t\t|| val instanceof RegExp\n\t) ? true : false;\n}\n\nfunction cloneSpecificValue(val) {\n\tif (val instanceof Buffer) {\n\t\tvar x = Buffer.alloc\n\t\t\t? Buffer.alloc(val.length)\n\t\t\t: new Buffer(val.length);\n\t\tval.copy(x);\n\t\treturn x;\n\t} else if (val instanceof Date) {\n\t\treturn new Date(val.getTime());\n\t} else if (val instanceof RegExp) {\n\t\treturn new RegExp(val);\n\t} else {\n\t\tthrow new Error('Unexpected situation');\n\t}\n}\n\n/**\n * Recursive cloning array.\n */\nfunction deepCloneArray(arr) {\n\tvar clone = [];\n\tarr.forEach(function (item, index) {\n\t\tif (typeof item === 'object' && item !== null) {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tclone[index] = deepCloneArray(item);\n\t\t\t} else if (isSpecificValue(item)) {\n\t\t\t\tclone[index] = cloneSpecificValue(item);\n\t\t\t} else {\n\t\t\t\tclone[index] = deepExtend({}, item);\n\t\t\t}\n\t\t} else {\n\t\t\tclone[index] = item;\n\t\t}\n\t});\n\treturn clone;\n}\n\nfunction safeGetProperty(object, property) {\n\treturn property === '__proto__' ? undefined : object[property];\n}\n\n/**\n * Extening object that entered in first argument.\n *\n * Returns extended object or false if have no target object or incorrect type.\n *\n * If you wish to clone source object (without modify it), just use empty new\n * object as first argument, like this:\n * deepExtend({}, yourObj_1, [yourObj_N]);\n */\nvar deepExtend = module.exports = function (/*obj_1, [obj_2], [obj_N]*/) {\n\tif (arguments.length < 1 || typeof arguments[0] !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (arguments.length < 2) {\n\t\treturn arguments[0];\n\t}\n\n\tvar target = arguments[0];\n\n\t// convert arguments to array and cut off target object\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\tvar val, src, clone;\n\n\targs.forEach(function (obj) {\n\t\t// skip argument if isn't an object, is null, or is an array\n\t\tif (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {\n\t\t\treturn;\n\t\t}\n\n\t\tObject.keys(obj).forEach(function (key) {\n\t\t\tsrc = safeGetProperty(target, key); // source value\n\t\t\tval = safeGetProperty(obj, key); // new value\n\n\t\t\t// recursion prevention\n\t\t\tif (val === target) {\n\t\t\t\treturn;\n\n\t\t\t/**\n\t\t\t * if new value isn't object then just overwrite by new value\n\t\t\t * instead of extending.\n\t\t\t */\n\t\t\t} else if (typeof val !== 'object' || val === null) {\n\t\t\t\ttarget[key] = val;\n\t\t\t\treturn;\n\n\t\t\t// just clone arrays (and recursive clone objects inside)\n\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\ttarget[key] = deepCloneArray(val);\n\t\t\t\treturn;\n\n\t\t\t// custom cloning and overwrite for specific objects\n\t\t\t} else if (isSpecificValue(val)) {\n\t\t\t\ttarget[key] = cloneSpecificValue(val);\n\t\t\t\treturn;\n\n\t\t\t// overwrite by new value if source isn't object or array\n\t\t\t} else if (typeof src !== 'object' || src === null || Array.isArray(src)) {\n\t\t\t\ttarget[key] = deepExtend({}, val);\n\t\t\t\treturn;\n\n\t\t\t// source value and new value is objects both, extending...\n\t\t\t} else {\n\t\t\t\ttarget[key] = deepExtend(src, val);\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\t});\n\n\treturn target;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n // Element names can contain letters, digits, hyphens, underscores, and periods\n const TAG_NAME_RE = concat(/[A-Z_]/, optional(/[A-Z0-9_.-]*:/), /[A-Z0-9_.-]*/);\n const XML_IDENT_RE = /[A-Za-z0-9._:-]+/;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'meta-keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {\n className: 'meta-string'\n });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n className: 'meta-string'\n });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /`]+/\n }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: //,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: //,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n //,\n {\n relevance: 10\n }\n ),\n {\n begin: //,\n relevance: 10\n },\n XML_ENTITIES,\n {\n className: 'meta',\n begin: /<\\?xml/,\n end: /\\?>/,\n relevance: 10\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n ')/,\n end: />/,\n keywords: {\n name: 'style'\n },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the

    b 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