1
difenduandada
2024-10-15 7fd2948ee35c8e147ed35ce6d8502f94a98ddd22
1
638 files added
60320 ■■■■■ changed files
CloudArcade/cloudarcade/cloudarcade/.htaccess 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin.php 32 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/admin-functions.php 452 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-fetch.php 211 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-json.php 35 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-remote.php 123 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-upload.php 124 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame.php 68 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/categories-edit.php 97 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/categories-list.php 111 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/categories.php 45 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/collections.php 98 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/dashboard.php 333 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist-edit.php 151 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist-list.php 292 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist.php 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/index.php patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/layout.php 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/menus.php 210 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/pages-edit.php 90 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/pages.php 200 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/plugin.php 191 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/settings.php 352 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/theme-options.php 19 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/themes.php 618 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/update.php 98 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/core/widgets.php 339 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/dashboard.php 256 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/includes/ajax-actions.php 399 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/includes/index.php patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/index.php 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/request.php 1164 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/admin.css 916 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/api.css 137 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Black.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-BlackItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Bold.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-BoldItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraBold.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraBoldItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraLight.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraLightItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Italic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Light.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-LightItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Medium.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-MediumItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Regular.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-SemiBold.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-SemiBoldItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Thin.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ThinItalic.ttf patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/jquery.nestable.css 103 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/style/menus.css 211 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/admin/upload.php 184 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/Auth.php 106 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/Category.php 387 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/Collection.php 175 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/Game.php 890 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/Page.php 196 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/User.php 316 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/Widget.php 96 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/classes/index.php patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/config.php 26 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/connect-sample.php 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/404.php 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/archive.php 36 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/functions.php 219 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/game.php 123 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/home.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/404.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/facebook.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-0.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-1.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-2.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-3.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-4.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-5.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder1.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder2.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder3.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/twitter.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/custom.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/footer.php 66 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/grid-masonry.php 22 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/grid.php 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/header.php 57 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/info.json 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/bootstrap.min.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/custom.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/jquery-3.3.1.min.js 2 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/jquery-3.6.2.min.js 2 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/lazysizes.min.js 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/script.js 325 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/page.php 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/navigation-categories.php 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/navigation-top.php 29 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/sidebar.php 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/post-list.php 65 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/post.php 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/search.php 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/bootstrap.min.css 6 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/custom.css 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/jquery-comments.css 781 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/style.css 809 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/user.css 170 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/tag.php 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/thumbnail.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/404.php 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/archive.php 36 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/functions.php 222 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/game.php 123 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/home.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/404.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/facebook.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-0.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-1.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-2.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-3.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-4.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-5.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder1.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder2.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder3.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/twitter.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/custom.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/footer.php 52 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/grid.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/header.php 55 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/info.json 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/bootstrap.min.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/custom.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/jquery-3.3.1.min.js 2 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/jquery-3.6.2.min.js 2 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/lazysizes.min.js 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/script.js 326 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/page.php 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/navigation-categories.php 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/navigation-top.php 29 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/sidebar.php 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/post-list.php 65 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/post.php 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/search.php 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/bootstrap.min.css 6 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/custom.css 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/jquery-comments.css 794 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/style.css 773 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/user.css 169 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/tag.php 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/default/thumbnail.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/content/themes/theme-functions.php 889 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/db/settings.json 306 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/db/tables.sql 295 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/favicon.ico patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ad-300.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ad-728.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/1.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/10.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/11.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/12.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/13.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/14.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/15.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/16.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/17.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/18.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/19.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/2.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/20.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/3.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/4.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/5.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/6.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/7.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/8.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/9.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/cloudarcade-logo.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/default_profile.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/login-logo.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/logo-horizontal.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/logo-vertical.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/post-no-thumb.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-1.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-2.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-3.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-4.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-5.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-6.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-7.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-8.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-9.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/images/theme-no-thumb.png patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/api.php 264 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/banned-username.json 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/banned-words-comment.json 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/banned-words.json 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/captcha.php 31 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/comment.php 175 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/commons.php 1205 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/cron.php 414 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/fetch.php 47 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/game_list.php 81 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/index.php patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/load-class.php 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/load-settings.php 115 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-404.php 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-archive.php 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-category.php 85 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-full.php 76 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-game.php 52 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-homepage.php 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-login.php 248 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-page.php 38 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-post.php 97 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-register.php 215 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-search.php 39 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-splash.php 140 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-tag.php 85 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-user-edit.php 162 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-user-profile.php 200 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/page-user.php 67 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/plugin.php 93 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/rank.json 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/sessions.php 33 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/statistics.php 474 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/sub-folder.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/user.php 230 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/version.php 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/vote.php 76 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/includes/widgets.php 197 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/index.php 205 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/init.php 28 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/install.php 179 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/ads.js 487 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/api.js 384 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/chart/Chart.min.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/chart/stats.js 92 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/chart/utils.js 147 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/comment-system.js 329 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/jquery-3.6.2.min.js 2 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/jquery-comments.min.js 90 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/jquery-ui.min.js 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/jquery.nestable.js 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/menu.js 101 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/script.js 760 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/js/stats.js 984 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/site-settings.php 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/sitemap.php 218 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.auto.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload-legacy.php 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload.php 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.composer.php 4 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.func.php 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.includes.php 235 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.kses.php 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.path.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.php 297 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.safe-includes.php 229 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Arborize.php 71 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrCollections.php 148 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef.php 144 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS.php 136 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php 34 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Background.php 113 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php 157 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Border.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Color.php 161 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Composite.php 48 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php 44 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php 77 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Font.php 176 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php 219 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Ident.php 32 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Length.php 77 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php 112 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Multiple.php 71 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Number.php 90 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Percentage.php 54 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php 46 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/URI.php 77 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Clone.php 44 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Enum.php 73 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Bool.php 48 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Class.php 48 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Color.php 51 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ContentEditable.php 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php 38 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ID.php 113 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Length.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php 72 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php 60 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php 70 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Pixels.php 76 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Integer.php 91 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Lang.php 86 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Switch.php 53 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Text.php 21 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI.php 111 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email.php 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php 29 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Host.php 142 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv4.php 45 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv6.php 89 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform.php 60 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Background.php 28 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BdoDir.php 27 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BgColor.php 28 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BoolToCSS.php 47 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Border.php 26 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php 68 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgRequired.php 47 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgSpace.php 61 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Input.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Lang.php 31 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Length.php 45 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Name.php 33 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/NameSync.php 46 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Nofollow.php 52 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeEmbed.php 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeObject.php 28 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeParam.php 84 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ScriptRequired.php 23 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetBlank.php 45 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoopener.php 37 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoreferrer.php 37 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Textarea.php 27 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTypes.php 97 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrValidator.php 178 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Bootstrap.php 124 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/CSSDefinition.php 549 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef.php 52 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Chameleon.php 67 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Custom.php 102 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Empty.php 38 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/List.php 94 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Optional.php 45 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Required.php 118 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/StrictBlockquote.php 110 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Table.php 224 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Config.php 920 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema.php 176 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php 48 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php 144 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Exception.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange.php 47 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php 89 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php 58 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php 226 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Validator.php 248 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php 130 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema.ser 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedClasses.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedFrameTargets.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRel.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRev.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ClassUseCDATA.txt 19 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultImageAlt.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImage.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImageAlt.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultTextDir.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.EnableID.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ForbiddenClasses.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ID.HTML5.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklist.txt 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklistRegexp.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefix.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefixLocal.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.AutoParagraph.txt 31 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.Predicate.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt 46 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowDuplicates.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt 18 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt 18 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyRemoveScript.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt 160 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt 19 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LegacyEntityDecoder.txt 36 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt 34 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt 29 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt 74 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt 19 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt 23 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt 18 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt 23 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt 33 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt 21 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Forms.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoopener.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoreferrer.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt 24 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt 8 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt 18 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt 14 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt 19 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt 13 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt 83 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt 9 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt 22 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/info.ini 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ContentSets.php 170 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Context.php 95 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Definition.php 55 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache.php 129 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator.php 112 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php 78 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Memory.php 85 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in 82 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Null.php 76 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer.php 311 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/CSS/4.13.0,4114918a13a428a8482a8a449792a5a8747582b5,1.ser patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.13.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.15.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/README 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.13.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.15.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCacheFactory.php 106 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Doctype.php 73 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DoctypeRegistry.php 142 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ElementDef.php 216 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Encoder.php 617 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup.php 48 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup/entities.ser 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityParser.php 285 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorCollector.php 244 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorStruct.php 74 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Exception.php 12 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php 341 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/YouTube.php 65 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Generator.php 286 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLDefinition.php 493 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule.php 285 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Bdo.php 44 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/CommonAttributes.php 32 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Edit.php 55 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Forms.php 194 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Hypertext.php 40 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Iframe.php 51 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Image.php 49 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Legacy.php 186 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/List.php 51 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Name.php 26 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Nofollow.php 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Object.php 62 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Presentation.php 42 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Proprietary.php 40 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Ruby.php 36 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeEmbed.php 40 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeObject.php 62 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeScripting.php 40 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Scripting.php 73 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/StyleAttribute.php 33 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tables.php 75 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Target.php 28 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetBlank.php 24 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoopener.php 21 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoreferrer.php 21 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Text.php 87 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy.php 227 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Name.php 33 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Proprietary.php 34 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Strict.php 43 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php 16 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTML.php 26 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php 182 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php 20 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModuleManager.php 467 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/IDAccumulator.php 57 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector.php 283 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/AutoParagraph.php 356 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/DisplayLinkURI.php 40 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/Linkify.php 67 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/PurifierLinkify.php 71 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveEmpty.php 112 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php 95 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/SafeObject.php 124 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language.php 204 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language/messages/en.php 55 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/LanguageFactory.php 209 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Length.php 162 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer.php 387 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DOMLex.php 338 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DirectLex.php 539 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/PH5P.php 4788 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node.php 49 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Comment.php 36 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Element.php 59 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Text.php 54 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PercentEncoder.php 111 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer.php 218 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/CSSDefinition.php 44 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.css 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.js 5 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.php 451 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/HTMLDefinition.php 324 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyList.php 122 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyListIterator.php 43 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Queue.php 56 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy.php 26 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Composite.php 30 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Core.php 17 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/FixNesting.php 181 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/MakeWellFormed.php 659 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/RemoveForeignElements.php 207 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/ValidateAttributes.php 45 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHash.php 48 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHashParser.php 136 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform.php 37 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Font.php 114 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Simple.php 44 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token.php 100 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Comment.php 38 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Empty.php 15 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/End.php 24 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Start.php 10 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Tag.php 68 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Text.php 53 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TokenFactory.php 118 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URI.php 316 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIDefinition.php 112 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter.php 74 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternal.php 54 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternalResources.php 25 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableResources.php 22 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/HostBlacklist.php 46 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/MakeAbsolute.php 158 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/Munge.php 115 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/SafeIframe.php 68 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIParser.php 71 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme.php 102 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/data.php 136 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/file.php 44 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/ftp.php 58 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/http.php 36 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/https.php 18 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/mailto.php 40 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/news.php 35 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/nntp.php 32 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/tel.php 46 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URISchemeRegistry.php 81 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/UnitConverter.php 307 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser.php 198 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Flexible.php 130 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Native.php 38 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParserException.php 11 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Zipper.php 157 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/MobileDetect/MobileDetect.php 1421 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css 6 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css.map 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.bundle.min.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js 7 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js.map 1 ●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/read-me.txt 19 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/unpack.php 99 ●●●●● patch | view | raw | blame | history
CloudArcade/documentation/documentation.html 3 ●●●●● patch | view | raw | blame | history
CloudArcade/documentation/setup.html 3 ●●●●● patch | view | raw | blame | history
CloudArcade/cloudarcade/cloudarcade/.htaccess
New file
@@ -0,0 +1,9 @@
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php?viewpage=$1
ErrorDocument 404 /index.php?viewpage=404
CloudArcade/cloudarcade/cloudarcade/admin.php
New file
@@ -0,0 +1,32 @@
<?php
session_start();
require( "config.php" );
require( "init.php" );
require( 'includes/plugin.php' );
$action = isset( $_GET['action'] ) ? $_GET['action'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
if ( $action != "logout" && !$username ) {
    require("includes/page-login.php" );
    exit;
}
switch ( $action ) {
    case 'logout':
        logout();
        break;
    default:
        header( "Location: admin/dashboard.php" );
}
function logout() {
    CA_Auth::delete();
    unset( $_SESSION['username'] );
    header( "Location: ".DOMAIN );
    return;
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/admin-functions.php
New file
@@ -0,0 +1,452 @@
<?php
// Functions for Admin Panel
if(!USER_ADMIN){
    die('Forbidden');
}
define( "SKIP_QUERY_CACHE", true );
function get_setting_group($category){
    // $conn = open_connection();
    // $sql = "SELECT * FROM settings WHERE category = :category";
    // $st = $conn->prepare($sql);
    // $st->bindValue('category', $category, PDO::PARAM_STR);
    // $st->execute();
    // $rows = $st->fetchAll(PDO::FETCH_ASSOC);
    // return $rows;
    $group = [];
    foreach (SETTINGS as $item) {
        if($item['category'] == $category){
            $group[] = $item;
        }
    }
    return $group;
}
function update_setting($name, $value){
    // Migrated, replacing update_settings()
    $this_setting = get_setting($name);
    // Validating data type
    if($this_setting['type'] == 'bool'){
        if($value == 1 || $value == 0){
            //
        } else {
            die('Type not valid');
        }
    } else if($this_setting['type'] == 'number'){
        if(!is_numeric($value)){
            die('Type not valid');
        }
    }
    $conn = open_connection();
    $sql = "UPDATE settings SET value = :value WHERE name = :name LIMIT 1";
    $st = $conn->prepare($sql);
    $st->bindValue(":name", $name, PDO::PARAM_STR);
    $st->bindValue(":value", $value, PDO::PARAM_STR);
    $st->execute();
}
function to_numeric_version($str_version){
    // Used to convert "1.5.0" to int 150
    return (int)str_replace('.', '', $str_version);
}
function curl_request($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        // If an error occured during the request, print the error
        echo 'Error:' . curl_error($ch);
        return false;
    }
    curl_close($ch);
    return $response;
}
function generate_small_thumbnail($path, $slug){
    // $path == $game->thumb_2
    // This function only work if thumb 2 is already stored locally
    $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
    if(!file_exists($parent_dir.$path)){
        echo 'error 910: img file not found!';
        return;
    }
    // $use_webp = get_setting_value('webp_thumbnail');
    $path_info = pathinfo($path);
    $root_folder = explode ("/", $path);
    $output = "thumbs/" . $slug . "_small." . $path_info['extension'];
    if($path_info['extension'] == 'webp'){
        // WEBP thumbnail
        $file_extension = pathinfo($path, PATHINFO_EXTENSION);
        $output = str_replace('.'.$file_extension, '.webp', $output);
        $_img = getimagesize($parent_dir.$path);
        $width  = $_img['0'];
        $height = $_img['1'];
        $img = imagecreatefromwebp($parent_dir.$path);
        $new_img = imagecreatetruecolor(160, 160);
        imagecopyresized($new_img, $img, 0, 0, 0, 0, 160, 160, $width, $height);
        //output
        imagewebp($new_img, $parent_dir.$output, -1); // No compression
    } else {
        // PNG, JPG, GIF
        $x = getimagesize($parent_dir.$path);
        $width  = $x['0'];
        $height = $x['1'];
        switch ($x['mime']) {
          case "image/gif":
             $img = imagecreatefromgif($parent_dir.$path);
             break;
          case "image/jpg":
          case "image/jpeg":
             $img = imagecreatefromjpeg($parent_dir.$path);
             break;
          case "image/png":
             $img = imagecreatefrompng($parent_dir.$path);
             break;
        }
        $img_base = imagecreatetruecolor(160, 160);
        if($x['mime'] == "image/png"){
            imageAlphaBlending($img_base, false);
            imageSaveAlpha($img_base, true);
        }
        imagecopyresampled($img_base, $img, 0, 0, 0, 0, 160, 160, $width, $height);
        $path_info = pathinfo($parent_dir.$path);
        switch ($path_info['extension']) {
          case "gif":
             imagegif($img_base, $parent_dir.$output); // No compression
             break;
        case "jpg":
        case "jpeg":
             imagejpeg($img_base, $parent_dir.$output, 100); // No compression
             break;
          case "png":
             imagepng($img_base, $parent_dir.$output, 6); // Balance compression
             break;
        }
        imagedestroy($img);
        imagedestroy($img_base);
    }
}
function import_thumbnail($url, $game_slug, $index = null){
    // import_thumb() replacement from request.php
    // Used to import thumb_1 and thumb_2 from remote source
    $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
    if($url) {
        if (!file_exists($parent_dir.'thumbs')) {
            mkdir($parent_dir.'thumbs', 0777, true);
        }
        $extension = pathinfo($url, PATHINFO_EXTENSION);
        $identifier = '';
        if(!is_null($index)){
            $identifier = '_'.$index;
        }
        $new = $parent_dir.'thumbs/'.$game_slug.$identifier.'.'.$extension;
        if( get_setting_value('webp_thumbnail') ){
            // Using WEBP format
            $file_extension = pathinfo($url, PATHINFO_EXTENSION);
            $new = str_replace('.'.$file_extension, '.webp', $new);
            // Create a cURL resource
            $ch = curl_init();
            // Set cURL options for retrieving the remote image file
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
            // Retrieve the remote image and save it to a local file
            $remoteImage = curl_exec($ch);
            if($remoteImage !== false){
                $localFile = fopen($new, 'w');
                if($localFile){
                    fwrite($localFile, $remoteImage);
                    fclose($localFile);
                } else {
                    echo 'Could not create local file';
                }
            } else {
                echo 'Could not download remote image';
            }
            // Close the cURL resource
            curl_close($ch);
            image_to_webp($new, 100, $new);
        } else {
            // Using JPG/PNG/GIF format
            save_remote_thumbnail($url, $new);
        }
    }
}
function save_remote_thumbnail($source, $destination, $quality = 100) {
    // compressImage() replacement from request.php
    // Create a cURL resource
    // $quality is not used
    $ch = curl_init();
    // Set cURL options for retrieving the remote image file
    curl_setopt($ch, CURLOPT_URL, $source);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
    // Retrieve the remote image and create an image resource from it
    $remoteImage = curl_exec($ch);
    if($remoteImage !== false){
        $image = imagecreatefromstring($remoteImage);
        if($image !== false){
            $info = getimagesizefromstring($remoteImage);
            if ($info['mime'] == 'image/png'){
                imageAlphaBlending($image, true);
                imageSaveAlpha($image, true);
                imagepng($image, $destination, 6);
            } else if($info['mime'] == 'image/jpg' || $info['mime'] == 'image/jpeg') {
                imagejpeg($image, $destination, 100); // No compression
            } else if($info['mime'] == 'image/gif') {
                imagegif($image, $destination);
            }
            imagedestroy($image);
        } else {
            echo 'Could not create image resource';
        }
    } else {
        echo 'Could not download remote image';
    }
    // Close the cURL resource
    curl_close($ch);
}
function update_content_translation($content_type, $content_id, $language, $field_data) {
    // Sample usage =
    // Single : update_content_translation('game', 1, 'en', ['title' => 'New Title']);
    // Multiple : update_content_translation('game', 1, 'en', ['title' => 'New Title', 'description' => 'New Description']);
    if (ADMIN_DEMO || !USER_ADMIN) {
        die('ERR 918');
    }
    $conn = open_connection();
    try {
        $conn->beginTransaction();
        foreach ($field_data as $field => $translation) {
            $checkSql = "SELECT COUNT(*) FROM translations WHERE content_type = :content_type AND content_id = :content_id AND language = :language AND field = :field";
            $checkStmt = $conn->prepare($checkSql);
            $checkStmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
            $checkStmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
            $checkStmt->bindParam(':language', $language, PDO::PARAM_STR);
            $checkStmt->bindParam(':field', $field, PDO::PARAM_STR);
            $checkStmt->execute();
            if ($checkStmt->fetchColumn() > 0) {
                $sql = "UPDATE translations SET translation = :translation WHERE content_type = :content_type AND content_id = :content_id AND language = :language AND field = :field";
            } else {
                $sql = "INSERT INTO translations (content_type, content_id, language, field, translation) VALUES (:content_type, :content_id, :language, :field, :translation)";
            }
            $stmt = $conn->prepare($sql);
            $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
            $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
            $stmt->bindParam(':language', $language, PDO::PARAM_STR);
            $stmt->bindParam(':field', $field, PDO::PARAM_STR);
            $stmt->bindParam(':translation', $translation, PDO::PARAM_STR);
            $stmt->execute();
        }
        $conn->commit();
        return true;
    } catch (Exception $e) {
        $conn->rollback();
        return false;
    }
}
function delete_content_translation($content_type, $content_id, $language = null, $field = null) {
    if (ADMIN_DEMO || !USER_ADMIN) {
        die('ERR 237');
    }
    $conn = open_connection();
    $sql = "DELETE FROM translations WHERE content_type = :content_type AND content_id = :content_id";
    if ($language !== null) {
        $sql .= " AND language = :language";
    }
    if ($field !== null) {
        $sql .= " AND field = :field";
    }
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
    $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
    if ($language !== null) {
        $stmt->bindParam(':language', $language, PDO::PARAM_STR);
    }
    if ($field !== null) {
        $stmt->bindParam(':field', $field, PDO::PARAM_STR);
    }
    return $stmt->execute();
}
function get_extra_fields($content_type) {
    $conn = open_connection();
    $sql = "SELECT * FROM extra_fields WHERE content_type = :content_type";
    $st = $conn->prepare($sql);
    $st->bindValue(':content_type', $content_type, PDO::PARAM_STR);
    $st->execute();
    $rows = $st->fetchAll(PDO::FETCH_ASSOC);
    return $rows;
}
function get_extra_field_by_id($id) {
    $conn = open_connection();
    $sql = "SELECT * FROM extra_fields WHERE id = :id LIMIT 1";
    $st = $conn->prepare($sql);
    $st->bindValue(':id', $id, PDO::PARAM_INT);
    $st->execute();
    $row = $st->fetch(PDO::FETCH_ASSOC);
    return $row;
}
function get_extra_field_by_key($field_key, $content_type = null) {
    $allowed_types = ['game', 'category', 'page', 'post'];
    $including_type = false;
    if(!is_null($content_type)){
        if(in_array($content_type, $allowed_types)){
            $including_type = true;
        }
    }
    $conn = open_connection();
    $sql = "SELECT * FROM extra_fields WHERE field_key = :field_key";
    if ($including_type) {
        $sql .= " AND content_type = :content_type";
    }
    $sql .= " LIMIT 1";
    $st = $conn->prepare($sql);
    $st->bindValue(':field_key', $field_key, PDO::PARAM_STR);
    if ($including_type) {
        $st->bindValue(':content_type', $content_type, PDO::PARAM_STR);
    }
    $st->execute();
    $row = $st->fetch(PDO::FETCH_ASSOC);
    return $row;
}
function backup_cms($root_path, $backup_type = 'part'){
    // Backup directory and file name
    if (extension_loaded('zip') && is_login() && USER_ADMIN && !ADMIN_DEMO) {
        $backup_dir = $root_path.'/admin/backups';
        if (!file_exists($backup_dir)) {
            mkdir($backup_dir, 0755, true);
        }
        if (!file_exists($backup_dir.'/index.php')) {
            file_put_contents($backup_dir.'/index.php', '');
        }
        $backup_file = $_SESSION['username'].'-cloudarcade-backup-'.$backup_type.'-'.VERSION.'-'.time().'-'.generate_random_strings().'.zip';
        $allowed_folders = [];
        $allowed_extensions = [];
        if($backup_type == 'part'){
            $allowed_folders = ['admin', 'classes', 'db', 'includes', 'js', 'locales']; // 'images'
            $allowed_extensions = ['php', 'js', 'html', 'xml', 'json', 'css', 'htaccess', 'ico', 'png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'];
        }
        $options = [
            'allowed_folders'    => $allowed_folders, // root
            'ignore_folders'    => ['cloudarcade', 'private', 'cache', 'temp', 'backups'], // also applied on sub-folder
            'ignore_extensions'    => ['zip', 'rar', '7z'],
            'whitelisted_files'    => [],
            'allowed_extensions'    => $allowed_extensions,
            'ignore_files'        => []
        ];
        if($backup_type == 'part'){
            $options['whitelisted_files'] = ['content/themes/theme-functions.php'];
            $options['ignore_files'] = ['connect.php'];
        }
        zip_files_recursive( $root_path, ABSPATH . 'admin/backups/'.$backup_file, $options );
    }
}
function zip_files_recursive($source, $destination, $options = []) {
    $allowedFolders = isset($options['allowed_folders']) ? $options['allowed_folders'] : [];
    $ignoreFolders = isset($options['ignore_folders']) ? $options['ignore_folders'] : [];
    $ignoreExtensions = isset($options['ignore_extensions']) ? $options['ignore_extensions'] : [];
    $whitelistedFiles = isset($options['whitelisted_files']) ? $options['whitelisted_files'] : [];
    $ignoreFiles = isset($options['ignore_files']) ? $options['ignore_files'] : [];
    $allowedExtensions = isset($options['allowed_extensions']) ? $options['allowed_extensions'] : [];
    if (!extension_loaded('zip') || !is_login()) {
        return false;
    }
    if (file_exists($source)) {
        $zip = new ZipArchive();
        if ($zip->open($destination, ZIPARCHIVE::CREATE)) {
            $maxSize = 20 * 1024 * 1024; // 20 MB
            if (is_dir($source)) {
                $iterators = [];
                if (!empty($allowedFolders)) {
                    foreach ($allowedFolders as $allowedFolder) {
                        $folderPath = $source . $allowedFolder . '/';
                        if (file_exists($folderPath)) {
                            $iterators[] = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folderPath, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
                        }
                    }
                    $root_files = scandir($source);
                    $_root_files = [];
                    foreach ($root_files as $file) {
                        if ($file == '.' || $file == '..') {
                            continue;
                        }
                        $filePath = $source . $file;
                        if (is_file($filePath)) {
                            $_root_files[] = new SplFileInfo($filePath);
                        }
                    }
                    $iterators[] = $_root_files;
                } else {
                    $iterators[] = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
                }
                foreach ($iterators as $files) {
                    foreach ($files as $file) {
                        if (count($allowedExtensions) > 0 && !in_array(pathinfo($file, PATHINFO_EXTENSION), $allowedExtensions)) {
                            continue;
                        }
                        $ignored = false;
                        foreach ($ignoreFolders as $ignore) {
                            if (stripos($file, $ignore) !== false) {
                                $ignored = true;
                                break;
                            }
                        }
                        if ($ignored) {
                            continue;
                        }
                        $relativePath = $file->getPathname() === $source ? $file->getFilename() : str_replace('\\', '/', str_replace($source . DIRECTORY_SEPARATOR, '', $file->getPathname()));
                        $thePath = str_replace($source, '', $relativePath);
                        // Check if the folder is allowed
                        $folderName = explode('/', $thePath)[0];
                        $isDir = false;
                        if (is_dir($source . '/' . $folderName) && strpos($folderName, '.') === false) {
                            $isDir = true;
                        }
                        if(in_array($thePath, $ignoreFiles)){
                            continue;
                        }
                        if (is_dir($file)) {
                            if (count(glob("$file/*")) > 0) { //If folder not empty
                                $zip->addEmptyDir($relativePath . '/');
                            }
                        } else if (is_file($file)) {
                            // Ignore files larger than 20 MB
                            if (filesize($file) > $maxSize) {
                                continue;
                            }
                            // Ignore archive files
                            $ext = pathinfo($file, PATHINFO_EXTENSION);
                            if (in_array($ext, $ignoreExtensions)) {
                                continue;
                            }
                            $zip->addFromString($relativePath, file_get_contents($file));
                        }
                    }
                }
            } else if (is_file($source)) {
                // Add single file
            }
            return $zip->close();
        }
    }
    return false;
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-fetch.php
New file
@@ -0,0 +1,211 @@
<div class="addgame-wrapper" id="fetch">
    <div class="mb-3">
        <label class="form-label"><?php _e('Distributor') ?></label>
        <select name="distributor" class="form-control" id="distributor-options">
            <option value="" disabled selected hidden><?php _e('Choose game distributor') ?>...</option>
            <option value="#gamedistribution">GameDistribution</option>
            <option value="#gamepix">GamePix</option>
            <option value="#playsaurus">Playsaurus</option>
            <option value="#more-distributors">More</option>
        </select>
    </div>
    <div class="fetch-games tab-container fade" id="gamedistribution">
        <div class="alert alert-warning alert-dismissible fade show" role="alert">You need joined <a href="https://gamedistribution.com/publishers" target="_blank">GameDistribution</a> publisher program to be able to publish their games on your site.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>
        <form id="form-fetch-gamedistribution" class="gamedistribution">
            <div class="mb-3">
                <label class="form-label">Collection</label>
                <select name="Collection" class="form-control">
                    <option selected="selected" value="all">All</option>
                    <option value="11">Top Hypercasual</option>
                    <option value="8">Ubisoft</option>
                    <option value="3">Hot</option>
                    <option value="2">Exclusive</option>
                    <option value="1">Top Picks</option>
                    <option value="4">New</option>
                    <option value="5">In Game Purchase</option>
                    <option value="6">IceStone</option>
                    <option value="7">Ubisoft</option>
                    <option value="10">Gameloft</option>
                </select>
            </div>
            <div class="mb-3">
                <label class="form-label">Category</label>
                <select name="Category" class="form-control">
                    <option selected="selected" value="All">All</option>
                    <option value="Puzzle">Puzzle</option>
                    <option value="Casual">Casual</option>
                    <option value="Adventure">Adventure</option>
                    <option value="Hypercasual">Hypercasual</option>
                    <option value="Shooter">Shooter</option>
                    <option value="Agility">Agility</option>
                    <option value="Simulation">Simulation</option>
                    <option value="Art">Art</option>
                    <option value="Sports">Sports</option>
                    <option value="Battle">Battle</option>
                    <option value="Match-3">Match-3</option>
                    <option value="Strategy">Strategy</option>
                    <option value="Care">Care</option>
                    <option value=".IO">.IO</option>
                    <option value="Boardgames">Boardgames</option>
                    <option value="Educational">Educational</option>
                    <option value="Cooking">Cooking</option>
                    <option value="Bubble Shooter">Bubble Shooter</option>
                    <option value="Football">Football</option>
                    <option value="Bejeweled">Bejeweled</option>
                    <option value="Girls">Girls</option>
                    <option value="Cards">Cards</option>
                    <option value="Basketball">Basketball</option>
                    <option value="Action">Action</option>
                    <option value="Quiz">Quiz</option>
                    <option value="Arcade">Arcade</option>
                    <option value="Combat">Combat</option>
                    <option value="Farming">Farming</option>
                    <option value="3D">3D</option>
                    <option value="Clicker">Clicker</option>
                    <option value="Boys">Boys</option>
                    <option value="Baby">Baby</option>
                </select>
            </div>
            <div class="mb-3">
                <label class="form-label">Item</label>
                <select name="Limit" class="form-control">
                    <option selected="selected" value="10">10</option>
                    <option value="20">20</option>
                    <option value="30">30</option>
                    <option value="40">40</option>
                    <option value="70">70</option>
                    <option value="100">100</option>
                </select>
            </div>
            <div class="mb-3">
                <label class="form-label">Offset</label>
                <select name="Offset" class="form-control">
                    <option selected="selected" value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                    <option value="11">11</option>
                    <option value="12">12</option>
                    <option value="13">13</option>
                    <option value="14">14</option>
                    <option value="15">15</option>
                </select>
            </div>
            <input type="submit" class="btn btn-primary btn-md" value="<?php _e('Fetch games') ?>"/>
        </form>
    </div>
    <div class="fetch-games tab-container fade" id="gamepix">
        <div class="alert alert-warning alert-dismissible fade show" role="alert">You need joined <a href="https://company.gamepix.com/publishers/" target="_blank">GamePix</a> publisher program to be able to publish their games on your site.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>
        <form id="form-fetch-gamepix" class="gamepix">
            <div class="mb-3">
                <label class="form-label">Sort By</label>
                <select name="Sort" class="form-control">
                    <option value="d" selected>Newest</option>
                    <option value="q">Most Played</option>
                </select>
            </div>
            <div class="mb-3">
                <label class="form-label">Category</label>
                <select name="Category" class="form-control">
                    <option value="1">All</option>
                    <option value="2">Arcade</option>
                    <option value="3">Adventure</option>
                    <option value="4">Junior</option>
                    <option value="5">Board</option>
                    <option value="6">Classic</option>
                    <option value="7">Puzzle</option>
                    <option value="8">Sports</option>
                    <option value="9">Strategy</option>
                </select>
            </div>
            <div class="mb-3">
                <label class="form-label">Item</label>
                <select name="Limit" class="form-control">
                    <option selected="selected" value="10">10</option>
                    <option value="20">20</option>
                    <option value="30">30</option>
                    <option value="40">40</option>
                    <option value="70">70</option>
                    <option value="100">100</option>
                </select>
            </div>
            <div class="mb-3">
                <label class="form-label">Offset</label>
                <select name="Offset" class="form-control">
                    <option selected="selected" value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                    <option value="11">11</option>
                    <option value="12">12</option>
                    <option value="13">13</option>
                    <option value="14">14</option>
                    <option value="15">15</option>
                </select>
            </div>
            <input type="submit" class="btn btn-primary btn-md" value="<?php _e('Fetch games') ?>"/>
        </form>
    </div>
    <div class="fetch-games tab-container fade" id="playsaurus">
        <form id="form-fetch-playsaurus" class="playsaurus">
            <div class="mb-3">
                <label class="form-label">Item</label>
                <select name="Limit" class="form-control">
                    <option selected="selected" value="100">All</option>
                </select>
            </div>
            <input type="submit" class="btn btn-primary btn-md" value="<?php _e('Fetch games') ?>"/>
        </form>
    </div>
    <div class="fetch-games tab-container fade" id="more-distributors">
        <p><b>You can fetch or add game from other HTML5 game distributors with "Fetch Games Extended" plugin.</b></p>
        <p>If "Fetch Games Extended" plugin not installed. follow step below:</p>
        <p>
            Click "Plugin" tab (Left sidebar) > Manage Plugins > Load Plugin Repository > ( Add ) Fetch Games Extended.
        </p>
        <p>
            Then you can access it under plugin page.
        </p>
    </div>
    <br>
    <div class="fetch-loading" style="display: none;">
        <h4><?php _e('Fetching games') ?> ...</h4>
    </div>
    <div id="action-info"></div>
    <div class="fetch-list mb-3" style="display: none;">
        <div class="table-responsive">
            <table class="table">
                <thead>
                    <tr>
                        <th>#</th>
                        <th><?php _e('Thumbnail') ?></th>
                        <th><?php _e('Game name') ?></th>
                        <th><?php _e('Category') ?></th>
                        <th><?php _e('URL') ?></th>
                        <th><?php _e('Action') ?></th>
                    </tr>
                </thead>
                <tbody id="gameList">
                </tbody>
            </table>
        </div>
        <button class="btn btn-primary btn-md" id="add-all"><?php _e('Add all') ?></button>
    </div>
    <div class="div-stop" style="display: none;">
        <button class="btn btn-danger btn-md" id="stop-add"><?php _e('Stop') ?></button>
    </div>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-json.php
New file
@@ -0,0 +1,35 @@
<div class="addgame-wrapper" id="json">
    <p>Bulk import your game data with JSON format.</p>
    <p>Read "User Documentation" for sample JSON structure or code.</p>
    <p>Open browser log to see the import progress.</p>
    <p>Paste your JSON data below.</p>
    <form id="form-json">
        <div class="mb-3">
            <label class="form-label" for="json-importer">JSON data:</label>
            <textarea class="form-control" name="json-importer" rows="8" required /></textarea>
        </div>
        <button type="submit" class="btn btn-primary btn-md"><?php _e('Import') ?></button>
    </form>
    <br>
    <p>Preview JSON data (Game list) before submited.</p>
    <button class="btn btn-primary btn-md" id="json-preview"><?php _e('Preview') ?></button>
    <br><br>
    <table class="table" style="display: none;" id="table-json-preview">
        <thead>
            <tr>
                <th>#</th>
                <th><?php _e('Title') ?></th>
                <th><?php _e('Slug') ?></th>
                <th><?php _e('URL') ?></th>
                <th><?php _e('Width') ?></th>
                <th><?php _e('Height') ?></th>
                <th><?php _e('Thumb') ?> 1</th>
                <th><?php _e('Thumb') ?> 2</th>
                <th><?php _e('Category') ?></th>
                <th><?php _e('Source') ?></th>
            </tr>
        </thead>
        <tbody id="json-list-preview">
        </tbody>
    </table>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-remote.php
New file
@@ -0,0 +1,123 @@
<div class="addgame-wrapper" id="remote">
    <form id="form-remote" action="request.php" autocomplete="off" method="post" enctype="multipart/form-data">
        <input type="hidden" name="action" value="addGame"/>
        <input type="hidden" name="source" value="remote"/>
        <input type="hidden" name="redirect" value="dashboard.php?viewpage=addgame&slug=remote">
        <input type="hidden" name="tags" value=""/>
        <div class="row">
            <div class="col-md-8">
                <div class="mb-3">
                    <label class="form-label" for="title"><?php _e('Game title') ?>:</label>
                    <input type="text" class="form-control" name="title" value="<?php echo (isset($_SESSION['title'])) ? $_SESSION['title'] : "" ?>" id="game-title-remote" required />
                </div>
                <?php
                if(CUSTOM_SLUG){ ?>
                    <div class="mb-3">
                        <label class="form-label" for="slug"><?php _e('Game slug') ?>:</label>
                        <input type="text" class="form-control" name="slug" placeholder="game-title" value="<?php echo (isset($_SESSION['slug'])) ? $_SESSION['slug'] : "" ?>" minlength="3" maxlength="50" id="game-slug-remote" required>
                    </div>
                <?php }
                ?>
                <div class="mb-3">
                    <label class="form-label" for="description"><?php _e('Description') ?>:</label>
                    <textarea class="form-control" name="description" rows="3" required><?php echo (isset($_SESSION['description'])) ? $_SESSION['description'] : "" ?></textarea>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="instructions"><?php _e('Instructions') ?>:</label>
                    <textarea class="form-control" name="instructions" rows="3"><?php echo (isset($_SESSION['instructions'])) ? $_SESSION['instructions'] : "" ?></textarea>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="thumb_1"><?php _e('Thumbnail') ?> 512x384:</label>
                    <input type="text" class="form-control" name="thumb_1" placeholder="https://example.com/yourgames/thumb_1.jpg" value="<?php echo (isset($_SESSION['thumb_1'])) ? $_SESSION['thumb_1'] : "" ?>" required />
                </div>
                <div class="mb-3">
                    <label class="form-label" for="thumb_2"><?php _e('Thumbnail') ?> 512x512:</label>
                    <input type="text" class="form-control" name="thumb_2" placeholder="https://example.com/yourgames/thumb_2.jpg" value="<?php echo (isset($_SESSION['thumb_2'])) ? $_SESSION['thumb_2'] : "" ?>" required />
                </div>
                <div class="mb-3">
                    <label class="form-label" for="url"><?php _e('Game URL') ?>:</label>
                    <input type="text" class="form-control" name="url" value="<?php echo (isset($_SESSION['url'])) ? $_SESSION['url'] : "" ?>" placeholder="https://example.com/yourgames/index.html" required />
                </div>
                <div class="mb-3">
                    <label class="form-label" for="width"><?php _e('Game width') ?>:</label>
                    <input type="number" class="form-control" name="width" value="<?php echo (isset($_SESSION['width'])) ? $_SESSION['width'] : "720" ?>" required />
                </div>
                <div class="mb-3">
                    <label class="form-label" for="height"><?php _e('Game height') ?>:</label>
                    <input type="number" class="form-control" name="height" value="<?php echo (isset($_SESSION['height'])) ? $_SESSION['height'] : "1080" ?>" required />
                </div>
                <div class="mb-3">
                    <label class="form-label" for="category"><?php _e('Category') ?>:</label>
                    <select multiple class="form-control" name="category[]" size="8" required />
                        <?php
                        $results = array();
                        $data = Category::getList();
                        $categories = $data['results'];
                        foreach ($categories as $cat) {
                            $selected = (in_array($cat->name, $selected_categories)) ? 'selected' : '';
                            echo '<option '.$selected.'>'.$cat->name.'</option>';
                        }
                        ?>
                    </select>
                </div>
            </div>
            <div class="col-md-4">
                <div class="mb-3">
                    <label class="form-label" for="tags"><?php _e('Tags') ?>:</label>
                    <input type="text" class="form-control" name="tags" value="<?php echo (isset($_SESSION['tags'])) ? $_SESSION['tags'] : "" ?>" id="tags-remote" placeholder="<?php _e('Separated by comma') ?>">
                </div>
                <div class="tag-list">
                    <?php
                    $tag_list = get_tags('usage');
                    if(count($tag_list)){
                        echo '<div class="mb-3">';
                        foreach ($tag_list as $tag_name) {
                            echo '<span class="badge rounded-pill bg-secondary btn-tag" data-target="tags-remote" data-value="'.$tag_name.'">'.$tag_name.'</span>';
                        }
                        echo '</div>';
                    }
                    ?>
                </div>
                <?php
                $extra_fields = get_extra_fields('game');
                if(count($extra_fields)){
                    ?>
                    <div class="extra-fields">
                        <?php
                        foreach ($extra_fields as $field) {
                            ?>
                            <div class="mb-3">
                                <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:</label>
                                <?php
                                $default_value = $field['default_value'];
                                $placeholder = $field['placeholder'];
                                if($field['type'] === 'textarea'){
                                    echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
                                } else if($field['type'] === 'number'){
                                    echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                } else if($field['type'] === 'text'){
                                    echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                }
                                ?>
                            </div>
                            <?php
                        }
                        ?>
                    </div>
                    <?php
                }
                ?>
            </div>
        </div>
    <div class="mb-3">
        <input id="is_mobile" type="checkbox" name="is_mobile" <?php echo (isset($_SESSION['is_mobile']) ? filter_var($_SESSION['is_mobile'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
            <label class="form-label" for="is_mobile"><?php _e('Is mobile compatible') ?></label><br>
        <input id="published" type="checkbox" name="published" <?php echo (isset($_SESSION['published']) ? filter_var($_SESSION['published'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
        <label class="form-label" for="published"><?php _e('Published') ?></label><br>
        <p style="margin-left: 20px;" class="text-secondary">
            <?php _e('If unchecked, this game will set as Draft.') ?>
        </p>
    </div>
    <button type="submit" class="btn btn-primary btn-md"><?php _e('Add game') ?></button>
</form>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-upload.php
New file
@@ -0,0 +1,124 @@
<div class="addgame-wrapper" id="addgame">
    <form id="form-uploadgame" action="upload.php" enctype="multipart/form-data" autocomplete="off" method="post">
        <input type="hidden" name="source" value="self"/>
        <input type="hidden" name="tags" value=""/>
        <div class="row">
            <div class="col-md-8">
                <div class="mb-3">
                    <label class="form-label" for="title"><?php _e('Game title') ?>:</label>
                    <input type="text" class="form-control" name="title" value="<?php echo (isset($_SESSION['title'])) ? $_SESSION['title'] : "" ?>" id="game-title-upload" required/>
                </div>
                <?php
                if(CUSTOM_SLUG){ ?>
                    <div class="mb-3">
                        <label class="form-label" for="slug"><?php _e('Game slug') ?>:</label>
                        <input type="text" class="form-control" name="slug" placeholder="game-title" value="<?php echo (isset($_SESSION['slug'])) ? $_SESSION['slug'] : "" ?>" minlength="3" maxlength="50" id="game-slug-upload" required>
                    </div>
                <?php }
                ?>
                <div class="mb-3">
                    <label class="form-label" for="description"><?php _e('Description') ?>:</label>
                    <textarea class="form-control" name="description" rows="3" required><?php echo (isset($_SESSION['description'])) ? $_SESSION['description'] : "" ?></textarea>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="instructions"><?php _e('Instructions') ?>:</label>
                    <textarea class="form-control" name="instructions" rows="3"><?php echo (isset($_SESSION['instructions'])) ? $_SESSION['instructions'] : "" ?></textarea>
                </div>
                <label class="form-label" for="gamefile"><?php _e('Game file') ?> (.zip):</label>
                <ul>
                    <li>Must contain index.html on root</li>
                    <li>Must contain "thumb_1.jpg" (512x384px) on root</li>
                    <li>Must contain "thumb_2.jpg"(512x512px) on root</li>
                </ul>
                <div class="input-group mb-3">
                    <div class="custom-file">
                        <label class="form-label" class="custom-file-label" for="input_gamefile"><?php _e('Choose file') ?>:</label>
                        <input type="file" name="gamefile" class="form-control" id="input_gamefile" accept=".zip" required>
                    </div>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="width"><?php _e('Game width') ?>:</label>
                    <input type="number" class="form-control" name="width" value="<?php echo (isset($_SESSION['width'])) ? $_SESSION['width'] : "720" ?>" required/>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="height"><?php _e('Game height') ?>:</label>
                    <input type="number" class="form-control" name="height" value="<?php echo (isset($_SESSION['height'])) ? $_SESSION['height'] : "1080" ?>" required/>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="category"><?php _e('Category') ?>:</label>
                    <select multiple class="form-control" name="category[]" size="8" required/>
                    <?php
                    $results = array();
                    $data = Category::getList();
                    $categories = $data['results'];
                    foreach ($categories as $cat) {
                        $selected = (in_array($cat->name, $selected_categories)) ? 'selected' : '';
                        echo '<option '.$selected.'>'.$cat->name.'</option>';
                    }
                    ?>
                    </select>
                </div>
            </div>
            <div class="col-md-4">
                <div class="mb-3">
                    <label class="form-label" for="tags"><?php _e('Tags') ?>:</label>
                    <input type="text" class="form-control" name="tags" value="<?php echo (isset($_SESSION['tags'])) ? $_SESSION['tags'] : "" ?>" id="tags-upload" placeholder="<?php _e('Separated by comma') ?>">
                </div>
                <div class="tag-list">
                    <?php
                    $tag_list = get_tags('usage');
                    if(count($tag_list)){
                        echo '<div class="mb-3">';
                        foreach ($tag_list as $tag_name) {
                            echo '<span class="badge rounded-pill bg-secondary btn-tag" data-target="tags-upload" data-value="'.$tag_name.'">'.$tag_name.'</span>';
                        }
                        echo '</div>';
                    }
                    ?>
                </div>
                <?php
                $extra_fields = get_extra_fields('game');
                if(count($extra_fields)){
                    ?>
                    <div class="extra-fields">
                        <?php
                        foreach ($extra_fields as $field) {
                            ?>
                            <div class="mb-3">
                                <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
                                    <br>
                                    <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
                                </label>
                                <?php
                                $default_value = $field['default_value'];
                                $placeholder = $field['placeholder'];
                                if($field['type'] === 'textarea'){
                                    echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
                                } else if($field['type'] === 'number'){
                                    echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                } else if($field['type'] === 'text'){
                                    echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                }
                                ?>
                            </div>
                            <?php
                        }
                        ?>
                    </div>
                    <?php
                }
                ?>
            </div>
        </div>
        <div class="mb-3">
            <input id="is_mobile" type="checkbox" name="is_mobile" <?php echo (isset($_SESSION['is_mobile']) ? filter_var($_SESSION['is_mobile'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
            <label class="form-label" for="is_mobile"><?php _e('Is mobile compatible') ?></label><br>
            <input id="published" type="checkbox" name="published" <?php echo (isset($_SESSION['published']) ? filter_var($_SESSION['published'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
            <label class="form-label" for="published"><?php _e('Published') ?></label><br>
            <p style="margin-left: 20px;" class="text-secondary">
                <?php _e('If unchecked, this game will set as Draft.') ?>
            </p>
        </div>
        <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload game') ?></button>
    </form>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame.php
New file
@@ -0,0 +1,68 @@
<div class="section section-full">
<?php
$selected_tab = isset($_GET['slug']) ? $_GET['slug'] : 'upload';
$tabs = array(
    'upload'    => 'Upload game',
    'fetch'        => 'Fetch games',
    'remote'    => 'Remote add',
    'json'        => 'JSON Importer'
);
if(!check_purchase_code() && !ADMIN_DEMO){
    echo('<div class="bs-callout bs-callout-warning"><p>Please provide your <b>Item Purchase code</b>. You can submit or update your Purchase code on site settings.</p><p>To be able to add a game, you need to provide your Item Purchase code. <a href="https://help.market.envato.com/hc/en-us/articles/202822600-Where-Is-My-Purchase-Code" target="_blank">Where to get Envato purchase code?</a></p></div>');
} else {
    ?>
    <input type="hidden" name="p_code" value="<?php echo (ADMIN_DEMO ? 'holy-moly' : check_purchase_code()) ?>" id="p_code" />
    <ul class="nav nav-tabs custom-tab" role="tablist">
        <?php
        foreach ($tabs as $tab_key => $tab_value) {
            $active = ($tab_key === $selected_tab) ? 'active' : '';
            ?>
            <li class="nav-item" role="presentation">
                <a class="nav-link <?php echo $active ?>" href="dashboard.php?viewpage=addgame&slug=<?php echo $tab_key ?>"><?php _e($tab_value) ?></a>
            </li>
            <?php
        }
        ?>
    </ul>
    <!-- Tab panes -->
    <div class="general-wrapper">
        <div class="tab-content">
            <?php
            $selected_categories = []; //Used for showing last selected categories
            if(isset($_SESSION['category'])){
                if(is_array($_SESSION['category'])){
                    $selected_categories = (array)$_SESSION['category'];
                } else {
                    $selected_categories = commas_to_array($_SESSION['category']);
                }
            }
            if(isset($_GET['status'])){
                echo '<div class="mb-4"></div>';
                if($_GET['status'] == 'added'){
                    show_alert('Game added!', 'success');
                } elseif($_GET['status'] == 'exist'){
                    show_alert('Game already exist!', 'warning');
                } elseif($_GET['status'] == 'error'){
                    $error = json_decode($_GET['error-data']);
                    foreach ($error as $value) {
                        show_alert($value, 'warning');
                    }
                }
            }
            if($selected_tab === 'upload'){
                include 'core/addgame-upload.php';
            } else if($selected_tab === 'fetch'){
                include 'core/addgame-fetch.php';
            } else if($selected_tab === 'remote'){
                include 'core/addgame-remote.php';
            } else if($selected_tab === 'json'){
                include 'core/addgame-json.php';
            }
            ?>
        </div>
    </div>
<?php } ?>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/categories-edit.php
New file
@@ -0,0 +1,97 @@
<?php
if(isset($_SESSION['message'])){
    show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
    unset($_SESSION['message']);
}
if(isset($_GET['id'])){
    $category = Category::getById($_GET['id']);
    if($category){
        ?>
<div class="section section-full">
    <ul class="nav nav-tabs custom-tab" role="tablist">
        <li class="nav-item" role="presentation">
            <a class="nav-link active"><?php _e('Edit category') ?></a>
        </li>
    </ul>
    <div class="general-wrapper">
        <form action="request.php" method="post">
            <input type="hidden" name="action" value="editCategory">
            <input type="hidden" name="redirect" value="dashboard.php?viewpage=categories&slug=edit&id=<?php echo $_GET['id'] ?>">
            <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>"/>
            <div class="row">
                <div class="col-md-8">
                    <div class="mb-3">
                            <label class="form-label" for="title"><?php _e('Category Name') ?>:</label>
                            <?php show_alert('Change category name will update all related games category string.', 'warning') ?>
                            <input type="text" class="form-control" id="edit-name" name="name" placeholder="Name of the game" required minlength="2" maxlength="30" value="<?php echo $category->name ?>">
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="slug"><?php _e('Category Slug') ?>:</label>
                            <input type="text" class="form-control" id="edit-slug" name="slug" placeholder="online-games" required minlength="2" maxlength="30" value="<?php echo $category->slug ?>">
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="description"><?php _e('Description') ?>:</label>
                            <textarea class="form-control" name="description" id="edit-description" rows="3" placeholder="(Optional) Category description" minlength="3" maxlength="100000"><?php echo $category->description ?></textarea>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="meta_description"><?php _e('Meta Description') ?>:</label>
                            <textarea class="form-control" name="meta_description" id="edit-meta_description" rows="3" placeholder="(Optional) Category meta description" minlength="3" maxlength="100000"><?php echo $category->meta_description ?></textarea>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="edit-priority"><?php _e('Priority') ?>:</label>
                            <input type="number" class="form-control" id="edit-priority" name="priority" value="<?php echo $category->priority ?>" />
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="cat-id"><?php _e('ID') ?>:</label>
                            <input type="text" class="form-control" id="cat-id" value="<?php echo $category->id ?>" disabled />
                        </div>
                        <div class="mb-3">
                            <input id="edit-hide" class="edit-hide" name="hide" type="checkbox" <?php echo ($category->priority < 0) ? 'checked' : '' ?>>
                            <label class="form-label" for="edit-hide"><?php _e('Hide') ?></label><br>
                        </div>
                </div>
                <div class="col-md-4">
                    <?php
                    $extra_fields = get_extra_fields('category');
                    if(count($extra_fields)){
                        ?>
                        <div class="extra-fields">
                            <?php
                            foreach ($extra_fields as $field) {
                                ?>
                                <div class="mb-3">
                                    <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
                                        <br>
                                        <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
                                    </label>
                                    <?php
                                    $default_value = $category->getExtraField($field['field_key']);
                                    $placeholder = $field['placeholder'];
                                    if($field['type'] === 'textarea'){
                                        echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
                                    } else if($field['type'] === 'number'){
                                        echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                    } else if($field['type'] === 'text'){
                                        echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                    }
                                    ?>
                                </div>
                                <?php
                            }
                            ?>
                        </div>
                        <?php
                    }
                    ?>
                </div>
            </div>
            <input type="submit" class="btn btn-primary" value="<?php _e('Save changes') ?>">
        </form>
    </div>
        <?php
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/categories-list.php
New file
@@ -0,0 +1,111 @@
<div class="row">
    <div class="col-lg-8">
        <div class="section">
            <ul class="category-list">
                <?php
                $results = array();
                $data = Category::getList();
                $categories = $data['results'];
                if($data['totalRows'] > 0){
                    foreach ($categories as $cat) {
                        echo '<li class="category-item d-flex align-items-center">';
                        if($cat->priority<0){
                            echo '<span style="opacity: 0.3;">'.esc_string($cat->name).'</span>';
                        }
                        else{
                            echo esc_string($cat->name);
                        }
                        $count = Category::getCategoryCount($cat->id);
                        if($count > 0){
                            echo '<span class="badge badge-primary badge-pill">';
                            echo esc_int($count);
                            echo '</span>';
                        }
                        echo '<div style="margin-left: auto;">';
                        echo '<span class="actions"><a class="editcategory" href="dashboard.php?viewpage=categories&slug=edit&id='.esc_int($cat->id).'"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a><a class="remove-category text-danger" href="#" id="'.esc_int($cat->id).'"><i class="fa fa-trash circle" aria-hidden="true"></i></a></span>';
                        echo '</div></li>';
                    }
                } else {
                    _e('No categories found!');
                }
                ?>
            </ul>
            <?php
            if(count($categories) > 0){
                ?>
                <form method="post" enctype="multipart/form-data">
                    <input type="hidden" name="action" value="reset-priority">
                    <div class="mb-3">
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Reset Priority') ?></button>
                    </div>
                </form>
                <?php
            }
            ?>
        </div>
    </div>
    <div class="col-lg-4">
        <div class="section">
            <form id="form-newcategory" action="request.php" method="post">
                <input type="hidden" name="action" value="newCategory">
                <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=categories">
                <div class="mb-3">
                    <label class="form-label" for="category"><?php _e('Add new category') ?>:</label>
                    <input type="text" class="form-control" name="name" placeholder="Name" value="" minlength="2" maxlength="30" required>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="description"><?php _e('Description') ?>:</label>
                    <textarea type="text" class="form-control" name="description" rows="3" placeholder="(Optional) Category description"></textarea>
                </div>
                <div class="mb-3">
                    <label class="form-label" for="meta_description"><?php _e('Meta Description') ?>:</label>
                    <textarea class="form-control" name="meta_description" rows="3" placeholder="(Optional) Category meta description"></textarea>
                </div>
                <?php
                    if(CUSTOM_SLUG){ ?>
                    <div class="mb-3">
                        <label class="form-label" for="slug"><?php _e('Category Slug') ?>:</label>
                        <input type="text" class="form-control" name="slug" placeholder="adventure-game" value="" minlength="3" maxlength="30" required>
                    </div>
                    <?php }
                ?>
                <?php
                $extra_fields = get_extra_fields('category');
                if(count($extra_fields)){
                    ?>
                    <div class="extra-fields">
                        <?php
                        foreach ($extra_fields as $field) {
                            ?>
                            <div class="mb-3">
                                <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
                                    <br>
                                    <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
                                </label>
                                <?php
                                $default_value = $field['default_value'];
                                $placeholder = $field['placeholder'];
                                if($field['type'] === 'textarea'){
                                    echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
                                } else if($field['type'] === 'number'){
                                    echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                } else if($field['type'] === 'text'){
                                    echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                }
                                ?>
                            </div>
                            <?php
                        }
                        ?>
                    </div>
                    <?php
                }
                ?>
                <button type="submit" class="btn btn-primary btn-md"><?php _e('Add') ?></button>
            </form>
        </div>
    </div>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/categories.php
New file
@@ -0,0 +1,45 @@
<?php
if(isset($_POST['action'])){
    if($_POST['action'] == 'reset-priority'){
        $cats = Category::getList()['results'];
        foreach ($cats as $cat) {
            $cat->priority = 0;
            $cat->update();
        }
        $_GET['status'] = 'reset';
    }
}
if(isset($_GET['status'])){
    $class = 'success';
    $message = '';
    if($_GET['status'] == 'added'){
        $message = 'New category added!';
    } elseif($_GET['status'] == 'exist'){
        $class = 'warning';
        $message = 'Category already exist!';
    } elseif($_GET['status'] == 'deleted'){
        $class = 'warning';
        $message = 'Category deleted!';
    } elseif($_GET['status'] == 'updated'){
        $message = 'Category updated!';
        if(isset($_GET['info'])){
            $message = $message.' '.$_GET['info'];
        }
    } elseif($_GET['status'] == 'reset'){
        $message = 'Category priority set to 0!';
        if(isset($_GET['info'])){
            $message = $message.' '.$_GET['info'];
        }
    }
    show_alert($message, $class);
}
if (isset($_GET['slug'])){
    if($_GET['slug'] === 'edit'){
        include 'core/categories-edit.php';
    }
} else {
    include 'core/categories-list.php';
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/collections.php
New file
@@ -0,0 +1,98 @@
<?php
    require( dirname(__FILE__).'/../../classes/Collection.php' );
    if(isset($_GET['status'])){
        $type = 'success';
        $message = '';
        if($_GET['status'] == 'added'){
            $message = 'New collection added!';
        } elseif($_GET['status'] == 'exist'){
            $type = 'warning';
            $message = 'Collection already exist!';
        } elseif($_GET['status'] == 'deleted'){
            $type = 'warning';
            $message = 'Collection deleted!';
        } elseif($_GET['status'] == 'updated'){
            $message = 'Collection updated!';
            if(isset($_GET['info'])){
                $message = $message.' '.$_GET['info'];
            }
        }
        show_alert($message, $type);
    }
?>
<div class="row">
    <div class="col-lg-8">
        <div class="section">
            <ul class="collection-list">
                <?php
                $results = array();
                $data = Collection::getList();
                if($data['totalRows'] > 0){
                    $collections = $data['results'];
                    foreach ($collections as $item) {
                        echo '<li class="collection-item d-flex align-items-center">';
                        echo esc_string($item->name);
                        echo '<div style="margin-left: auto;">';
                        echo '<span class="actions"><a class="editcollection" href="#" id="'.esc_int($item->id).'"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a><a class="remove-collection text-danger" href="#" id="'.esc_int($item->id).'"><i class="fa fa-trash circle" aria-hidden="true"></i></a></span>';
                        echo '</div></li>';
                    }
                } else {
                    _e('No collections found!');
                }
                ?>
            </ul>
        </div>
    </div>
    <div class="col-lg-4">
        <div class="section">
            <form id="form-newcollection" action="request.php" method="post">
                <input type="hidden" name="action" value="newCollection">
                <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=collections">
                <div class="mb-3">
                    <label for="collection"><?php _e('Add new collection') ?>:</label>
                    <input type="text" class="form-control" name="name" placeholder="Name" value="" minlength="2" maxlength="15" required>
                </div>
                <div class="mb-3">
                    <label for="data">Game ids, separated by commas:</label>
                    <input type="text" class="form-control" name="data" placeholder="2,4,11,12,23" value="" minlength="2" required>
                </div>
                <button type="submit" class="btn btn-primary btn-md"><?php _e('Add') ?></button>
            </form>
        </div>
    </div>
</div>
<!-- Modal -->
<div class="modal fade" id="edit-collection" tabindex="-1" role="dialog" aria-labelledby="edit-collection-modal-label" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="edit-collection-label"><?php _e('Edit collection') ?></h5>
        <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <form id="form-editcollection" action="request.php" method="post">
            <input type="hidden" name="action" value="editCollection">
            <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=collections">
            <input type="hidden" id="edit-id" name="id" value=""/>
            <div class="mb-3">
                <label for="title"><?php _e('Collection name') ?>:</label>
                <input type="text" class="form-control" id="edit-name" name="name" placeholder="Name of the game" required minlength="2" maxlength="255" value=""/>
            </div>
            <div class="mb-3">
                <label for="data"><?php _e('Game ids') ?>:</label>
                <textarea class="form-control" name="data" id="edit-data" rows="3" placeholder="2,4,11,12,23" value="" minlength="2" required maxlength="100000"></textarea>
            </div>
            <div class="mb-3">
                <label>Game list:</label>
                <select multiple class="form-control" id="collection-game-list" readonly="readonly">
                </select>
            </div>
            <input type="submit" class="btn btn-primary" value="<?php _e('Save changes') ?>" />
            <input type="button" class="btn btn-secondary" data-bs-dismiss="modal" value="<?php _e('Close') ?>" />
        </form>
      </div>
    </div>
  </div>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/dashboard.php
New file
@@ -0,0 +1,333 @@
<?php
$warning_list = get_admin_warning();
if(!empty($warning_list)){
    echo('<div class="site-warning">');
    foreach ($warning_list as $val) {
        show_alert($val, 'warning');
    }
    echo('</div>');
}
if(file_exists(ABSPATH.'static/') && file_exists(ABSPATH.'index_static.php')){
    show_alert('Static Site is active.', 'info');
}
?>
<div class="update-info"></div>
<div class="row">
    <div class="col-lg-9">
        <div class="section section-stats">
            <select class="form-select stats-option" id="stats-option">
                <option value="week"><?php echo _t('Last %a days', 7) ?></option>
                <option value="month"><?php echo _t('Last %a days', 30) ?></option>
            </select>
            <h3 class="section-title">
                <i class="fas fa-chart-line"></i> <?php echo _t('Statistics') ?>
            </h3>
            <div class="container-stats">
                <div class="chart-container" style="position: relative; height:40vh; width:80vw">
                    <canvas id="statistics"></canvas>
                </div>
            </div>
        </div>
        <div class="section-boxes">
            <div class="boxes">
                <div class="row">
                    <div class="col-6 col-md-3">
                        <div class="box box-1">
                            <h2 class="amount">
                                <?php echo Game::getTotalGames() ?>
                            </h2>
                            <div class="box-info">
                                <b><?php _e('Games') ?></b>
                                <div class="small">
                                    <?php
                                    $conn = open_connection();
                                    $sql = "SELECT COUNT(*) FROM games WHERE MONTH(createddate) = MONTH(CURRENT_DATE()) AND YEAR(createddate) = YEAR(CURRENT_DATE())";
                                    $st = $conn->prepare($sql);
                                    $st->execute();
                                    $amount = $st->fetchColumn();
                                    _e('+%a this month', $amount);
                                    ?>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="col-6 col-md-3">
                        <div class="box box-2">
                            <h2 class="amount">
                                <?php echo User::getTotalUsers() ?>
                            </h2>
                            <div class="box-info">
                                <b><?php _e('Users') ?></b>
                                <div class="small">
                                    <?php
                                    $conn = open_connection();
                                    $sql = "SELECT COUNT(*) FROM users WHERE MONTH(join_date) = MONTH(CURRENT_DATE()) AND YEAR(join_date) = YEAR(CURRENT_DATE())";
                                    $st = $conn->prepare($sql);
                                    $st->execute();
                                    $amount = $st->fetchColumn();
                                    _e('+%a this month', $amount);
                                    ?>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="col-6 col-md-3">
                        <div class="box box-3">
                            <h2 class="amount">
                                <?php
                                $conn = open_connection();
                                $sql = "SELECT COUNT(*) FROM comments";
                                $st = $conn->prepare($sql);
                                $st->execute();
                                echo $st->fetchColumn();
                                ?>
                            </h2>
                            <div class="box-info">
                                <b><?php _e('Comments') ?></b>
                                <div class="small">
                                    <?php
                                    $conn = open_connection();
                                    $sql = "SELECT COUNT(*) FROM comments WHERE MONTH(created_date) = MONTH(CURRENT_DATE()) AND YEAR(created_date) = YEAR(CURRENT_DATE())";
                                    $st = $conn->prepare($sql);
                                    $st->execute();
                                    $amount = $st->fetchColumn();
                                    _e('+%a this month', $amount);
                                    ?>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="col-6 col-md-3">
                        <div class="box box-4">
                            <h2 class="amount">
                                <?php
                                $conn = open_connection();
                                $sql = "SELECT COUNT(*) FROM posts";
                                $st = $conn->prepare($sql);
                                $st->execute();
                                echo $st->fetchColumn();
                                ?>
                            </h2>
                            <div class="box-info">
                                <b><?php _e('Posts') ?></b>
                                <div class="small">
                                    <?php
                                    $conn = open_connection();
                                    $sql = "SELECT COUNT(*) FROM posts WHERE MONTH(created_date) = MONTH(CURRENT_DATE()) AND YEAR(created_date) = YEAR(CURRENT_DATE())";
                                    $st = $conn->prepare($sql);
                                    $st->execute();
                                    $amount = $st->fetchColumn();
                                    _e('+%a this month', $amount);
                                    ?>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-lg-6">
                <div class="section section-full">
                    <h3 class="section-title"><i class="fa fa-comments"></i> <?php _e('Comments') ?></h3>
                    <?php
                    $index = 0;
                    $conn = open_connection();
                    $sql = "SELECT * FROM comments ORDER BY id DESC LIMIT 3";
                    $st = $conn->prepare($sql);
                    $st->execute();
                    $row = $st->fetchAll();
                    //
                    if(count($row)){
                        ?>
                        <div class="table-responsive">
                            <table class="table custom-table">
                                <thead>
                                    <tr>
                                        <th>#</th>
                                        <th>Sender</th>
                                        <th>Date</th>
                                        <th>Comment</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php
                                    foreach ( $row as $item ) {
                                        $index++;
                                        ?>
                                        <tr>
                                            <td scope="row"><?php echo $index ?></td>
                                            <td>
                                                <?php echo $item['sender_username'] ?>
                                            </td>
                                            <td>
                                                <?php echo $item['created_date'] ?>
                                            </td>
                                            <td class="td-ellipsis">
                                                <?php echo $item['comment'] ?>
                                            </td>
                                        </tr>
                                        <?php
                                    }
                                    ?>
                                </tbody>
                            </table>
                        </div>
                        <div class="text-center section-bottom-link">
                            <a href="dashboard.php?viewpage=plugin&name=comments-manager"><?php _e('Manage Comments') ?></a>
                        </div>
                        <?php
                    } else {
                        ?>
                        <div class="general-wrapper">
                            <?php _e('No comment') ?>
                        </div>
                        <?php
                    }
                    ?>
                </div>
            </div>
            <div class="col-lg-6">
                <div class="section section-full">
                    <h3 class="section-title"><i class="fas fa-flag"></i> <?php _e('Game Reports') ?></h3>
                    <?php
                    if(is_plugin_exist('game-reports')){
                        $reports = get_pref('game-reports');
                        if($reports){
                            $reports = json_decode($reports, true);
                        } else {
                            $reports = [];
                        }
                        if(count($reports)){
                            ?>
                            <div class="table-responsive">
                                <table class="table custom-table">
                                    <thead>
                                        <tr>
                                            <th>#</th>
                                            <th>Game</th>
                                            <th>Type</th>
                                            <th>Comment</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php
                                        $index = 0;
                                        foreach ( $reports as $item ) {
                                            $index++;
                                            $color = '';
                                            if($item['type'] == 'bug'){
                                                $color = 'bg-warning';
                                            } elseif($item['type'] == 'error'){
                                                $color = 'bg-danger';
                                            } elseif($item['type'] == 'other'){
                                                $color = 'bg-success';
                                            }
                                            $game = Game::getById($item['game_id']);
                                            ?>
                                            <tr>
                                                <td scope="row"><?php echo $index ?></td>
                                                <td class="td-ellipsis">
                                                    <a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php echo $game->title ?></a>
                                                </td>
                                                <td>
                                                    <span class="<?php echo $color ?> text-dark"> <?php echo $item['type'] ?> </span>
                                                </td>
                                                <td class="td-ellipsis">
                                                    <?php echo $item['comment'] ?>
                                                </td>
                                            </tr>
                                            <?php
                                            if($index >= 3){
                                                break;
                                            }
                                        }
                                        ?>
                                    </tbody>
                                </table>
                            </div>
                            <div class="text-center section-bottom-link">
                                <a href="dashboard.php?viewpage=plugin&name=game-reports"><?php _e('Manage Reports') ?></a>
                            </div>
                            <?php
                        } else {
                            ?>
                            <div class="general-wrapper">
                                <?php _e('No report') ?>
                            </div>
                            <?php
                        }
                    } else {
                        ?>
                        <div class="general-wrapper">
                            <?php _e('Game Reports plugin not installed') ?>
                        </div>
                        <?php
                    }
                    ?>
                </div>
            </div>
        </div>
        <div class="section section-full">
            <h3 class="section-title"><i class="fas fa-dice-d6"></i> <?php echo _t('Top games') ?></h3>
            <div class="table-responsive">
                <table class="table custom-table">
                    <thead>
                        <tr>
                            <th>#</th>
                            <th><?php _e('Game Name') ?></th>
                            <th><?php _e('Played') ?></th>
                            <th><?php _e('Category') ?></th>
                            <th><?php _e('Likes') ?></th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php
                        $index = 0;
                        $data = get_game_list('popular', 10);
                        $games = $data['results'];
                        foreach ( $games as $game ) {
                            $index++;
                            ?>
                        <tr>
                            <td><?php echo esc_int($index); ?></td>
                            <td class="td-ellipsis">
                                <a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php echo esc_string($game->title); ?></a>
                            </td>
                            <td>
                                <?php echo format_number_abbreviated(esc_int($game->views)); ?>
                            </td>
                            <td class="td-ellipsis">
                                <?php echo '<span class="categories">'.esc_string($game->category).'</span>'; ?>
                            </td>
                            <td>
                                <?php
                                    $vote_percentage = '';
                                    $value = "-";
                                    if($game->upvote+$game->downvote > 0){
                                        $vote_percentage = floor(($game->upvote/($game->upvote+$game->downvote))*100);
                                        $value = $vote_percentage.'%';
                                    }
                                    echo '<div class="row">';
                                    echo '<div class="col-4">'.$value.'</div>';
                                    echo '<div class="col-4"><i class="fa fa-thumbs-up" aria-hidden="true"></i>'.esc_int($game->upvote).'</div><div class="col-4"><i class="fa fa-thumbs-down" aria-hidden="true"></i>'.esc_int($game->downvote).'</div>';
                                    echo '</div>';
                                ?>
                            </td>
                        </tr>
                        <?php } ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <div class="col-lg-3">
        <?php if(!ADMIN_DEMO) echo('<div class="section"><div class="official-info"></div></div>') ?>
        <div class="section">
            <div class="quote-box">
                <div id="quote"></div>
            </div>
        </div>
    </div>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist-edit.php
New file
@@ -0,0 +1,151 @@
<?php
if(isset($_SESSION['message'])){
    show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
    unset($_SESSION['message']);
}
if(isset($_GET['id'])){
    $game = Game::getById($_GET['id']);
    if($game){
        ?>
<div class="section section-full">
    <ul class="nav nav-tabs custom-tab" role="tablist">
        <li class="nav-item" role="presentation">
            <a class="nav-link active"><?php _e('Edit game') ?></a>
        </li>
    </ul>
    <div class="general-wrapper">
        <div class="editgame-wrapper">
            <form id="form-uploadgame" action="request.php" enctype="multipart/form-data" autocomplete="off" method="post">
                <input type="hidden" name="action" value="editGame">
                <input type="hidden" name="redirect" value="dashboard.php?viewpage=gamelist&slug=edit&id=<?php echo $game->id ?>">
                <input type="hidden" name="id" value="<?php echo $game->id ?>">
                <div class="row">
                    <div class="col-md-8">
                        <div class="mb-3">
                            <label class="form-label" for="title"><?php _e('Game title') ?>:</label>
                            <input type="text" class="form-control" name="title" value="<?php echo $game->title ?>" required/>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="slug"><?php _e('Game slug') ?>:</label>
                            <input type="text" class="form-control" name="slug" placeholder="game-title" value="<?php echo $game->slug ?>" minlength="3" maxlength="50" required>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="description"><?php _e('Description') ?>:</label>
                            <textarea class="form-control" name="description" rows="3" required><?php echo $game->description ?></textarea>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="instructions"><?php _e('Instructions') ?>:</label>
                            <textarea class="form-control" name="instructions" rows="3"><?php echo $game->instructions ?></textarea>
                        </div>
                        <div class="mb-3">
                            <label class="form-label"><?php _e('Game URL') ?>:</label>
                            <input type="text" class="form-control" name="url" value="<?php echo $game->url ?>" minlength="3" required>
                        </div>
                        <div class="mb-3">
                            <label class="form-label"><?php _e('Game thumb_1') ?>:</label>
                            <input type="text" class="form-control" name="thumb_1" value="<?php echo $game->thumb_1 ?>" minlength="3" required>
                        </div>
                        <div class="mb-3">
                            <label class="form-label"><?php _e('Game thumb_2') ?>:</label>
                            <input type="text" class="form-control" name="thumb_2" value="<?php echo $game->thumb_2 ?>" minlength="3" required>
                        </div>
                        <div class="mb-3">
                            <label class="form-label"><?php _e('Game small thumbnail') ?>:</label>
                            <input type="text" class="form-control" name="thumb_small" value="<?php echo $game->thumb_small ?>" minlength="3">
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="width"><?php _e('Game width') ?>:</label>
                            <input type="number" class="form-control" name="width" value="<?php echo $game->width ?>" required/>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="height"><?php _e('Game height') ?>:</label>
                            <input type="number" class="form-control" name="height" value="<?php echo $game->height ?>" required/>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="category"><?php _e('Category') ?>:</label>
                            <select multiple class="form-control" name="category[]" size="8" required/>
                            <?php
                            $selected_categories = commas_to_array($game->category);
                            $results = array();
                            $data = Category::getList();
                            $categories = $data['results'];
                            foreach ($categories as $cat) {
                                $selected = (in_array($cat->name, $selected_categories)) ? 'selected' : '';
                                echo '<option '.$selected.'>'.$cat->name.'</option>';
                            }
                            ?>
                            </select>
                        </div>
                    </div>
                    <div class="col-md-4">
                        <div class="mb-3">
                            <label class="form-label" for="tags"><?php _e('Tags') ?>:</label>
                            <input type="text" class="form-control" name="tags" value="<?php echo $game->get_tags() ?>" id="tags-upload" placeholder="<?php _e('Separated by comma') ?>">
                        </div>
                        <div class="tag-list">
                            <?php
                            $tag_list = get_tags('usage');
                            if(count($tag_list)){
                                echo '<div class="mb-3">';
                                foreach ($tag_list as $tag_name) {
                                    echo '<span class="badge rounded-pill bg-secondary btn-tag" data-target="tags-upload" data-value="'.$tag_name.'">'.$tag_name.'</span>';
                                }
                                echo '</div>';
                            }
                            ?>
                        </div>
                        <?php
                        $extra_fields = get_extra_fields('game');
                        if(count($extra_fields)){
                            ?>
                            <div class="extra-fields">
                                <?php
                                foreach ($extra_fields as $field) {
                                    ?>
                                    <div class="mb-3">
                                        <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
                                            <br>
                                            <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
                                        </label>
                                        <?php
                                        $default_value = $game->getExtraField($field['field_key']);
                                        $placeholder = $field['placeholder'];
                                        if($field['type'] === 'textarea'){
                                            echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
                                        } else if($field['type'] === 'number'){
                                            echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                        } else if($field['type'] === 'text'){
                                            echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                        }
                                        ?>
                                    </div>
                                    <?php
                                }
                                ?>
                            </div>
                            <?php
                        }
                        ?>
                    </div>
                </div>
                <div class="mb-3">
                    <input id="is_mobile" type="checkbox" name="is_mobile" <?php echo (isset($game->is_mobile) ? filter_var($game->is_mobile, FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
                    <label class="form-label" for="is_mobile"><?php _e('Is mobile compatible') ?></label><br>
                    <input id="published" type="checkbox" name="published" <?php echo (isset($game->published) ? filter_var($game->published, FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
                    <label class="form-label" for="published"><?php _e('Published') ?></label><br>
                    <p style="margin-left: 20px;" class="text-secondary">
                        <?php _e('If unchecked, this game will set as Draft.') ?>
                    </p>
                </div>
                <button type="submit" class="btn btn-primary btn-md"><?php _e('Save changes') ?></button>
            </form>
        </div>
    </div>
</div>
        <?php
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist-list.php
New file
@@ -0,0 +1,292 @@
<div class="row">
    <div class="col">
        <form class="has-validation">
            <input type="hidden" name="viewpage" value="gamelist" />
            <input type="hidden" name="action" value="search" />
            <div class="input-group has-validation">
                <input class="form-control rounded has-icon" type="text" placeholder="<?php _e('Search game') ?>..." name="key" minlength="2" required />
                <span class="input-icon">
                    <i class="fa fa-search"></i>
                </span>
            </div>
        </form>
    </div>
    <div class="col">
        <form>
            <input type="hidden" name="viewpage" value="gamelist" />
            <input type="hidden" name="action" value="category" />
            <div class="input-group">
                <select name="key" class="form-select" onchange="this.form.submit()">
                    <option value="" disabled selected hidden><?php _e('Category') ?></option>
                    <?php
                    $cur_cat_name = null;
                    if(isset($_GET['action'])){
                        if($_GET['action'] == 'category'){
                            $cur_cat_name = esc_string($_GET['key']);
                        }
                    }
                    $selected = '';
                    $results = array();
                    $data = Category::getList();
                    $categories = $data['results'];
                    foreach ($categories as $cat) {
                        if(!is_null($cur_cat_name) && $cur_cat_name == $cat->name){
                            $selected = 'selected';
                        } else {
                            $selected = '';
                        }
                        echo '<option '.$selected.'>'.ucfirst($cat->name).'</option>';
                    }
                    ?>
                </select>
            </div>
        </form>
    </div>
    <div class="col">
        <form class="has-validation">
            <input type="hidden" name="viewpage" value="gamelist" />
            <input type="hidden" name="action" value="source" />
            <div class="input-group has-validation">
                <input class="form-control rounded has-icon" type="text" placeholder="<?php _e('Source') ?>" name="key" minlength="2" required />
                <span class="input-icon">
                    <i class="fa fa-code"></i>
                </span>
            </div>
        </form>
    </div>
</div>
<br>
<div class="section section-full">
    <div class="table-responsive">
        <table class="table custom-table">
            <thead>
                <tr>
                    <th>#</th>
                    <th><?php _e('ID') ?></th>
                    <th><?php _e('Thumbnail') ?></th>
                    <th><?php _e('Mobile') ?></th>
                    <th><?php _e('Game Name') ?></th>
                    <th><?php _e('Category') ?></th>
                    <th><?php _e('Source') ?></th>
                    <th><?php _e('URL') ?></th>
                    <th><?php _e('Action') ?></th>
                </tr>
            </thead>
            <tbody>
                <?php
                $index = 0;
                $cur_page = 1;
                if(isset($_GET['page'])){
                    $cur_page = $_GET['page'];
                }
                $data = null;
                if(isset($_GET['action'])){
                    if($_GET['action'] == 'search'){
                        $data = Game::searchGame($_GET['key'], 20, 20*($cur_page-1));
                    } elseif($_GET['action'] == 'category'){
                        $cat_id = Category::getIdByName($_GET['key']);
                        if(!is_null($cat_id)){
                            $data = Category::getListByCategory($cat_id, 20, 20*($cur_page-1));
                        }
                    } elseif($_GET['action'] == 'source'){
                        $data = Game::getListBySource($_GET['key'], 20, 20*($cur_page-1));
                    }
                }
                if(is_null($data)) {
                    $data = get_game_list('new', 20, 20*($cur_page-1));
                }
                $games = $data['results'];
                $total_game = $data['totalRows'];
                $total_page = $data['totalPages'];
                foreach ( $games as $game ) {
                    $index++;
                    $categories = $game->category;
                    ?>
                <tr id="game-<?php echo esc_int($game->id)?>">
                    <th scope="row"><?php echo esc_int($index+(20*($cur_page-1))); ?></th>
                    <td>
                        <?php echo esc_int($game->id) ?>
                    </td>
                    <td><img src="<?php echo get_small_thumb($game) ?>" width="60px" height="auto" class="gamelist"></td>
                    <td class="td-ellipsis">
                        <?php if($game->is_mobile){
                            echo '<i class="text-success fas fa-check-circle"></i>';
                        } else {
                            echo '<i class="text-danger fas fa-times-circle"></i>';
                        } ?>
                    </td>
                    <td class="td-ellipsis">
                        <?php echo esc_string($game->title) ?>
                    </td>
                    <td class="td-ellipsis"><span class="categories"><?php echo esc_string($categories)?></span></td>
                    <td>
                        <?php echo esc_string($game->source) ?>
                    </td>
                    <td><a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php _e('Play') ?></a></td>
                    <td>
                        <span class="actions">
                            <a class="editgame" href="dashboard.php?viewpage=gamelist&slug=edit&id=<?php echo esc_int($game->id)?>"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a>
                            <a class="deletegame" data-id="<?php echo esc_int($game->id) ?>" href="#"><i class="fa fa-trash circle" aria-hidden="true"></i></a>
                        </span>
                    </td>
                </tr>
                <?php } ?>
            </tbody>
        </table>
    </div>
    <div class="general-wrapper">
        <p><?php _e('%a games in total.', esc_int($total_game)) ?></p>
        <div class="pagination-wrapper">
            <nav aria-label="Page navigation">
                <ul class="pagination pg-blue justify-content-center">
                    <?php
                    $cur_page = 1;
                    $params = '';
                    if(isset($_GET['page'])){
                        $cur_page = $_GET['page'];
                    }
                    if(isset($_GET['action'])){
                        $params .= "&action=".$_GET['action'];
                    }
                    if(isset($_GET['key'])){
                        $params .= "&key=".$_GET['key'];
                    }
                    if($total_page){
                        $max = 8;
                        $start = 0;
                        $end = $max;
                        if($max > $total_page){
                            $end = $total_page;
                        } else {
                            $start = $cur_page-$max/2;
                            $end = $cur_page+$max/2;
                            if($start < 0){
                                $start = 0;
                            }
                            if($end - $start < $max-1){
                                $end = $max;
                            }
                            if($end > $total_page){
                                $end = $total_page;
                            }
                        }
                        if($start > 0){
                            echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=gamelist'.$params.'&page=1">1</a></li>';
                            echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
                        }
                        for($i = $start; $i<$end; $i++){
                            $disabled = '';
                            if($cur_page){
                                if($cur_page == ($i+1)){
                                    $disabled = 'active disabled';
                                }
                            }
                            echo '<li class="page-item '.$disabled.'"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=gamelist'.$params.'&page='.($i+1).'">'.($i+1).'</a></li>';
                        }
                        if($end < $total_page){
                            echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
                            echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=gamelist'.$params.'&page='.($total_page).'">'.($total_page).'</a></li>';
                        }
                    }
                    ?>
                </ul>
            </nav>
            <div class="text-center">
                <form>
                    <input type="hidden" value="gamelist" name="viewpage" />
                    <div class="mb-3">
                        <label class="form-label" for="page">Page:</label>
                        <select name="page" required>
                            <?php
                            if($total_page){
                                for($i = 0; $i < $total_page; $i++ ){
                                    $selected = '';
                                    if(($i+1) == $cur_page){
                                        $selected = 'selected';
                                    }
                                    echo('<option value="'.($i+1).'" '.$selected.'>'.($i+1).'</option>');
                                }
                            }
                            ?>
                        </select>
                        <input type="submit" value="Go"/>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
<br>
<!-- DRAFT -->
<?php
$index = 0;
$data = Game::getDraftList();
$games = $data['results'];
$total_game = $data['totalRows'];
$total_page = $data['totalPages'];
if(count($games) > 0){
?>
    <div class="section section-full">
        <h3 class="section-title">
            <?php _e('Draft') ?>
        </h3>
        <div class="table-responsive">
            <table class="table custom-table">
                <thead>
                    <tr>
                        <th>#</th>
                        <th><?php _e('ID') ?></th>
                        <th><?php _e('Thumbnail') ?></th>
                        <th><?php _e('Mobile') ?></th>
                        <th><?php _e('Game Name') ?></th>
                        <th><?php _e('Category') ?></th>
                        <th><?php _e('Source') ?></th>
                        <th><?php _e('URL') ?></th>
                        <th><?php _e('Action') ?></th>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    foreach ( $games as $game ) {
                        $index++;
                        $categories = $game->category;
                        ?>
                    <tr id="game-<?php echo esc_int($game->id)?>">
                        <th scope="row"><?php echo esc_int($index); ?></th>
                        <td>
                            <?php echo esc_int($game->id) ?>
                        </td>
                        <td><img src="<?php echo get_small_thumb($game) ?>" width="60px" height="auto" class="gamelist"></td>
                            <td class="td-ellipsis">
                            <?php if($game->is_mobile){
                                echo '<i class="text-success fas fa-check-circle"></i>';
                            } else {
                                echo '<i class="text-danger fas fa-times-circle"></i>';
                            } ?>
                        </td>
                        <td class="td-ellipsis">
                            <?php echo esc_string($game->title) ?>
                        </td>
                        <td class="td-ellipsis"><span class="categories"><?php echo esc_string($categories)?></span></td>
                        <td>
                            <?php echo esc_string($game->source) ?>
                        </td>
                        <td><a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php _e('Play') ?></a></td>
                        <td>
                            <span class="actions">
                                <a class="editgame" href="dashboard.php?viewpage=gamelist&slug=edit&id=<?php echo esc_int($game->id)?>"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a>
                                <a class="deletegame" data-id="<?php echo esc_int($game->id) ?>" href="#"><i class="fa fa-trash circle" aria-hidden="true"></i></a>
                            </span>
                        </td>
                    </tr>
                    <?php } ?>
                </tbody>
            </table>
        </div>
    </div>
<?php } ?>
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist.php
New file
@@ -0,0 +1,17 @@
<?php
if (isset($_GET['status'])) {
    if ($_GET['status'] == 'success') {
        show_alert(isset($_GET['info']) ? $_GET['info'] : 'Game successfully update!', 'success');
    } elseif ($_GET['status'] == 'deleted') {
        show_alert(isset($_GET['info']) ? $_GET['info'] : 'Game removed!', 'danger');
    }
}
if (isset($_GET['slug'])){
    if($_GET['slug'] === 'edit'){
        include 'core/gamelist-edit.php';
    }
} else {
    include 'core/gamelist-list.php';
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/index.php
CloudArcade/cloudarcade/cloudarcade/admin/core/layout.php
New file
@@ -0,0 +1,16 @@
<?php
$slug = isset($_GET['slug']) ? $_GET['slug'] : 'menus';
$tab_list = array(
    'menus' => 'Menus',
    'widgets' => 'Widgets',
);
if($slug == 'menus'){
    require_once( 'core/menus.php' );
} elseif($slug == 'widgets'){
    require_once( 'core/widgets.php' );
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/menus.php
New file
@@ -0,0 +1,210 @@
<?php
//include '../' .TEMPLATE_PATH . '/layout.php';
if(isset($_POST['menu_data'])){
    if(USER_ADMIN && !ADMIN_DEMO){
        $array_menu = json_decode($_POST['menu_data'], true);
        $sql = "TRUNCATE TABLE menus";
        $st = $conn->prepare($sql);
        $st->execute();
        update_menu($array_menu);
        show_alert('Menu saved!', 'success');
    }
}
function update_menu($menu,$parent = 0)
{
    global $conn;
    if (!empty($menu)) {
        foreach ($menu as $value) {
            $label = $value['label'];
            $name = 'top_nav';
            $url = (empty($value['url'])) ? '#' : $value['url'];
            $sql = "INSERT INTO menus (label, url, parent_id, name) VALUES (:label, :url, :parent, :name)";
            $st = $conn->prepare($sql);
            $st->bindValue(':label', $label, PDO::PARAM_STR);
            $st->bindValue(':url', $url, PDO::PARAM_STR);
            $st->bindValue(':name', $name, PDO::PARAM_STR);
            $st->bindValue(':parent', $parent, PDO::PARAM_INT);
            $st->execute();
            $id = $conn->lastInsertId();
            if (array_key_exists('children', $value))
                update_menu($value['children'],$id);
        }
    }
}
function render_menu_item($id, $label, $url)
{
    return '<li class="dd-item dd3-item" data-id="' . $id . '" data-label="' . $label . '" data-url="' . $url . '">' .
        '<div class="dd-handle dd3-handle" > Drag</div>' .
        '<div class="dd3-content"><span>' . $label . '</span>' .
        '<div class="item-edit"><i class="fa fa-pencil-alt" aria-hidden="true"></i></div>' .
        '</div>' .
        '<div class="item-settings d-none">' .
        '<div class="mb-3">' .
        '<label>Name</label><input type="text" class="form-control" name="navigation_label" value="' . $label . '">' .
        '</div>' .
        '<div class="mb-3">' .
        '<label>URL</label><input type="text" class="form-control" name="navigation_url" value="' . $url . '">' .
        '</div>' .
        '<p><a class="item-delete" href="javascript:;">Remove</a> | ' .
        '<a class="item-close" href="javascript:;">Close</a></p>' .
        '</div>';
}
function menu_tree($parent_id = 0)
{
    global $conn;
    $items = '';
    $sql = "SELECT * FROM menus WHERE parent_id = :parent_id ORDER BY id ASC";
    $st = $conn->prepare($sql);
    $st->bindValue(":parent_id", $parent_id, PDO::PARAM_INT);
    $st->execute();
    $result = $st->fetchAll();
    if (count($result)) {
        $items .= '<ol class="dd-list">';
        foreach ($result as $row) {
            $items .= render_menu_item($row['id'], $row['label'], $row['url']);
            $items .= menu_tree($row['id']);
            $items .= '</li>';
        }
        $items .= '</ol>';
    }
    return $items;
}
?>
<?php
    if(isset($_GET['status'])){
        $type = 'success';
        $message = '';
        if($_GET['status'] == 'saved'){
            $message = 'Layout saved!';
        }
        show_alert($message, $type);
    }
?>
<div class="row">
    <div class="col-lg-8">
        <div class="section section-full">
            <ul class="nav nav-tabs custom-tab" role="tablist">
                <?php
                foreach($tab_list as $tab => $label){
                    $active = '';
                    if($tab == $slug){
                        $active = 'active';
                    }
                    ?>
                    <li class="nav-item" role="presentation">
                        <a class="nav-link <?php echo $active ?>" href="dashboard.php?viewpage=layout&slug=<?php echo $tab ?>"><?php _e($label) ?></a>
                    </li>
                    <?php
                }
                ?>
            </ul>
            <div class="general-wrapper">
                <div class="mb-4"></div>
                <form id="add-item">
                    <div class="form-row">
                        <div class="mb-3 col-md-6">
                            <input type="text" name="name" class="form-control" placeholder="<?php _e('Name') ?>" required>
                        </div>
                        <div class="mb-3 col-md-6">
                            <input type="text" name="url" class="form-control" placeholder="<?php _e('URL') ?>" required>
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('ADD MENU') ?></button>
                </form>
                <hr />
                <div class="dd" id="nestable">
                    <?php
                        $html_menu = menu_tree();
                        echo (empty($html_menu)) ? '<ol class="dd-list"></ol>' : $html_menu;
                    ?>
                </div>
                <hr />
                <div id="alert-menu-unsaved-changes" style="display: none;">
                    <?php show_alert('Unsaved changes detected!', 'warning', false) ?>
                </div>
                <form action="dashboard.php?viewpage=layout" method="post">
                    <input type="hidden" id="nestable-output" name="menu_data">
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('SAVE MENU') ?></button>
                </form>
            </div>
        </div>
    </div>
    <div class="col-lg-4">
        <div class="section">
            <p><?php _e('Add menu items') ?></p>
            <div class="accordion" id="accordion-container">
                <div class="card">
                    <div class="card-header" id="acc-head1">
                        <a href="#" class="btn btn-header-link collapsed" data-bs-toggle="collapse" data-bs-target="#acc1"
                        aria-expanded="true" aria-controls="acc1"><?php _e('Pages') ?></a>
                    </div>
                    <div id="acc1" class="collapse" aria-labelledby="acc-head1" data-bs-parent="#accordion-container">
                        <div class="card-body">
                            <form id="form-page-menu">
                                <?php
                                $data = Page::getList();
                                $pages = $data['results'];
                                if($pages){
                                    echo '<div class="ml-3">';
                                    foreach ($pages as $page) {
                                        echo '<div class="form-check">';
                                        echo '<input class="form-check-input" type="checkbox" name="'.$page->title.'" value="'.$page->slug.'" id="item-'.$page->slug.'" data-url="/'.SUB_FOLDER.str_replace( DOMAIN, '', get_permalink('page', $page->slug)).'">';
                                        echo '<label class="form-check-label" for="item-'.$page->slug.'">';
                                        echo $page->title;
                                        echo '</label></div>';
                                    }
                                    echo '</div><br>';
                                    echo '<input type="submit" class="btn btn-info btn-md" value="'. _t('ADD TO MENU') .'">';
                                } else {
                                    _e('Empty');
                                }
                                ?>
                            </form>
                        </div>
                    </div>
                </div>
                <div class="card">
                    <div class="card-header" id="acc-head2">
                        <a href="#" class="btn btn-header-link collapsed" data-bs-toggle="collapse" data-bs-target="#acc2"
                        aria-expanded="true" aria-controls="acc2"><?php _e('Categories') ?></a>
                    </div>
                    <div id="acc2" class="collapse" aria-labelledby="acc-head2" data-bs-parent="#accordion-container">
                        <div class="card-body">
                            <form id="form-category-menu">
                                <?php
                                $data = Category::getList();
                                $categories = $data['results'];
                                if($categories){
                                    echo '<div class="ml-3">';
                                    foreach ($categories as $category) {
                                        echo '<div class="form-check">';
                                        echo '<input class="form-check-input" name="'.$category->name.'" type="checkbox" value="'.$category->slug.'" id="item-'.$category->slug.'" data-url="/'.SUB_FOLDER.str_replace( DOMAIN, '', get_permalink('category', $category->slug)).'">';
                                        echo '<label class="form-check-label" for="item-'.$category->slug.'">';
                                        echo $category->name;
                                        echo '</label></div>';
                                    }
                                    echo '</div><br>';
                                    echo '<input type="submit" class="btn btn-info btn-md" value="'. _t('ADD TO MENU') .'">';
                                } else {
                                    _e('Empty');
                                }
                                ?>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/pages-edit.php
New file
@@ -0,0 +1,90 @@
<?php
if(isset($_SESSION['message'])){
    show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
    unset($_SESSION['message']);
}
if(isset($_GET['id'])){
    $page = Page::getById($_GET['id']);
    if($page){
        ?>
<div class="section section-full">
    <ul class="nav nav-tabs custom-tab" role="tablist">
        <li class="nav-item" role="presentation">
            <a class="nav-link active"><?php _e('Edit page') ?></a>
        </li>
    </ul>
    <div class="general-wrapper">
        <div class="editpage-wrapper">
            <form action="request.php" enctype="multipart/form-data" autocomplete="off" method="post">
                <input type="hidden" name="action" value="editPage">
                <input type="hidden" name="redirect" value="dashboard.php?viewpage=pages&slug=edit&id=<?php echo $page->id ?>">
                <input type="hidden" name="id" value="<?php echo $page->id ?>">
                <div class="row">
                    <div class="col-md-8">
                        <div class="mb-3">
                            <label class="form-label" for="title"><?php _e('Page title') ?>:</label>
                            <input type="text" class="form-control" name="title" value="<?php echo $page->title ?>" required/>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="slug"><?php _e('Page slug') ?>:</label>
                            <input type="text" class="form-control" name="slug" placeholder="page-title" value="<?php echo $page->slug ?>" minlength="3" maxlength="50" required>
                        </div>
                        <div class="mb-3">
                            <label class="form-label" for="content"><?php _e('Content') ?>:</label>
                            <textarea class="form-control" name="content" placeholder="The HTML content of the page" maxlength="100000" rows="12" required><?php echo $page->content ?></textarea>
                        </div>
                    </div>
                    <div class="col-md-4">
                        <?php
                        $extra_fields = get_extra_fields('page');
                        if(count($extra_fields)){
                            ?>
                            <div class="extra-fields">
                                <?php
                                foreach ($extra_fields as $field) {
                                    ?>
                                    <div class="mb-3">
                                        <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
                                            <br>
                                            <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
                                        </label>
                                        <?php
                                        $default_value = $page->getExtraField($field['field_key']);
                                        $placeholder = $field['placeholder'];
                                        if($field['type'] === 'textarea'){
                                            echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
                                        } else if($field['type'] === 'number'){
                                            echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                        } else if($field['type'] === 'text'){
                                            echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
                                        }
                                        ?>
                                    </div>
                                    <?php
                                }
                                ?>
                            </div>
                            <?php
                        }
                        ?>
                    </div>
                </div>
                <div class="mb-3">
                    <input id="edit-nl2br" type="checkbox" name="nl2br" <?php echo $page->nl2br == 1 ? 'checked' : ''; ?>>
                    <label class="form-label" for="edit-nl2br"><?php _e('Enable nl2br Formatting') ?></label>
                    <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" aria-label="Convert line breaks in text to HTML <br> tags for proper formatting in the web view." data-bs-original-title="Convert line breaks in text to HTML <br> tags for proper formatting in the web view.">
                        <i class="fas fa-question"></i>
                    </span>
                </div>
                <button type="submit" class="btn btn-primary btn-md"><?php _e('Save changes') ?></button>
            </form>
        </div>
    </div>
</div>
        <?php
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/pages.php
New file
@@ -0,0 +1,200 @@
<?php
if (isset($_GET['status'])) {
    if ($_GET['status'] == 'success') {
        show_alert(isset($_GET['info']) ? $_GET['info'] : 'Page successfully add!', 'success');
    } elseif ($_GET['status'] == 'deleted') {
        show_alert(isset($_GET['info']) ? $_GET['info'] : 'Page removed!', 'danger');
    } elseif ($_GET['status'] == 'update') {
        show_alert(isset($_GET['info']) ? $_GET['info'] : 'Page successfully updated!', 'success');
    }
}
if (isset($_GET['slug']) && $_GET['slug'] == 'edit' && isset($_GET['id'])) {
    require('core/pages-edit.php');
    return;
}
?>
<div class="section section-full">
    <ul class="nav nav-tabs custom-tab" role="tablist">
        <li class="nav-item" role="presentation">
            <a class="nav-link active" data-bs-toggle="tab" href="#pagelist"><?php _e('Pages') ?></a>
        </li>
        <li class="nav-item" role="presentation">
            <a class="nav-link" data-bs-toggle="tab" href="#addpage"><?php _e('Add page') ?></a>
        </li>
    </ul>
    <!-- Tab panes -->
    <div class="tab-content">
        <div class="tab-pane tab-container active" id="pagelist">
            <table class="table custom-table">
                <thead>
                <tr>
                    <th>#</th>
                    <th><?php _e('ID') ?></th>
                    <th><?php _e('Title') ?></th>
                    <th><?php _e('Created') ?></th>
                    <th><?php _e('Slug') ?></th>
                    <th><?php _e('URL') ?></th>
                    <th><?php _e('Action') ?></th>
                </tr>
            </thead>
            <tbody>
                <?php
                $cur_page = 1;
                if(isset($_GET['page'])){
                    $cur_page = $_GET['page'];
                }
                $results = array();
                $data = Page::getList2(20, '', 20*($cur_page-1));
                $results['pages'] = $data['results'];
                $results['totalRows'] = $data['totalRows'];
                $index = 0;
                foreach ( $results['pages'] as $page ) {
                $index++;
                ?>
                <tr>
                    <th scope="row"><?php echo esc_int($index); ?></th>
                    <td>
                        <?php echo esc_string($page->id)?>
                    </td>
                    <td>
                        <?php echo esc_string($page->title)?>
                    </td>
                    <td>
                        <?php echo $page->createdDate ?>
                    </td>
                    <td>
                        <?php echo esc_string($page->slug)?>
                    </td>
                    <td><a href="<?php echo get_permalink('page', $page->slug) ?>" target="_blank"><?php _e('Visit') ?></a></td>
                    <td><span class="actions">
                        <a class="editpage" href="dashboard.php?viewpage=pages&slug=edit&id=<?php echo esc_int($page->id)?>" id="<?php echo esc_int($page->id)?>"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a><a class="deletepage" href="#" id="<?php echo esc_int($page->id)?>"><i class="fa fa-trash circle" aria-hidden="true"></i></a></span>
                    </td>
                </tr>
                <?php }
                ?>
            </tbody>
            </table>
            <div class="general-wrapper">
                <p><?php _e('%a pages in total.', esc_int($data['totalRows'])) ?></p>
                <div class="pagination-wrapper">
                    <nav aria-label="Page navigation">
                        <ul class="pagination pg-blue justify-content-center">
                            <?php
                            $cur_page = 1;
                            if(isset($_GET['page'])){
                                $cur_page = $_GET['page'];
                            }
                            $total_page = $data['totalPages'];
                            if($total_page){
                                $max = 8;
                                $start = 0;
                                $end = $max;
                                if($max > $total_page){
                                    $end = $total_page;
                                } else {
                                    $start = $cur_page-$max/2;
                                    $end = $cur_page+$max/2;
                                    if($start < 0){
                                        $start = 0;
                                    }
                                    if($end - $start < $max-1){
                                        $end = $max;
                                    }
                                    if($end > $total_page){
                                        $end = $total_page;
                                    }
                                }
                                if($start > 0){
                                    echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=pages&page=1">1</a></li>';
                                    echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
                                }
                                for($i = $start; $i<$end; $i++){
                                    $disabled = '';
                                    if($cur_page){
                                        if($cur_page == ($i+1)){
                                            $disabled = 'active disabled';
                                        }
                                    }
                                    echo '<li class="page-item '.$disabled.'"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=pages&page='.($i+1).'">'.($i+1).'</a></li>';
                                }
                                if($end < $total_page){
                                    echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
                                    echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=pages&page='.($total_page).'">'.($total_page).'</a></li>';
                                }
                            }
                            ?>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>
        <div class="tab-pane tab-container fade" id="addpage">
            <div class="general-wrapper">
                <form id="form-newpage" method="post">
                    <div class="row">
                        <div class="col-12">
                            <div class="mb-3">
                                <label class="form-label" for="title"><?php _e('Page Title') ?>:</label>
                                <input type="text" class="form-control" id="newpagetitle" name="title" placeholder="Name of the page" required autofocus maxlength="255" value=""/>
                            </div>
                            <div class="mb-3">
                                <label class="form-label" for="slug"><?php _e('Page Slug') ?>:</label>
                                <input type="text" class="form-control" id="newpageslug" name="slug" placeholder="Page url ex: this-is-sample-page" required autofocus maxlength="255" value=""/>
                            </div>
                            <div class="mb-3">
                                <label class="form-label" for="content"><?php _e('Content') ?>:</label>
                                <textarea class="form-control" name="content" rows="12" placeholder="The HTML content of the page" required maxlength="100000"></textarea>
                            </div>
                            <div class="mb-3">
                                <label class="form-label" for="title"><?php _e('Created Date') ?>:</label>
                                <input type="date" class="form-control" name="createdDate" placeholder="YYYY-MM-DD" required maxlength="10" value="<?php echo date( "Y-m-d" ) ?>" />
                            </div>
                            <div class="mb-3">
                                <input id="edit-nl2br" type="checkbox" name="nl2br" checked>
                                <label class="form-label" for="edit-nl2br"><?php _e('Enable nl2br Formatting') ?></label>
                                <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" aria-label="Convert line breaks in text to HTML <br> tags for proper formatting in the web view." data-bs-original-title="Convert line breaks in text to HTML <br> tags for proper formatting in the web view.">
                                    <i class="fas fa-question"></i>
                                </span>
                            </div>
                        </div>
                    </div>
                    <input type="submit" class="btn btn-primary"  name="saveChanges" value="<?php _e('Publish') ?>" />
                </form>
            </div>
        </div>
    </div>
</div>
<!-- Modal -->
<div class="modal fade" id="edit-page" tabindex="-1" role="dialog" aria-labelledby="edit-page-modal-label" aria-hidden="true">
    <div class="modal-dialog" role="document">
    <div class="modal-content">
        <div class="modal-header">
        <h5 class="modal-title" id="edit-page-label"><?php _e('Edit page') ?></h5>
        <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
        </div>
        <div class="modal-body">
        <form id="form-editpage">
            <input type="hidden" id="edit-id" name="id" value=""/>
            <input type="hidden" id="edit-createdDate" name="createdDate" value=""/>
            <div class="mb-3">
                <label class="form-label" for="title"><?php _e('Page Title') ?>:</label>
                <input type="text" class="form-control" id="edit-title" name="title" placeholder="Name of the page" required minlength="3" maxlength="255" value=""/>
            </div>
            <div class="mb-3">
                <label class="form-label" for="slug"><?php _e('Page Slug') ?>:</label>
                <input type="text" class="form-control" id="edit-slug" name="slug" placeholder="Page url ex: this-is-sample-page" required minlength="3" maxlength="255" value=""/>
            </div>
            <div class="mb-3">
                <label class="form-label" for="content"><?php _e('Content') ?>:</label>
                <textarea class="form-control" name="content" id="edit-content" rows="12" placeholder="The HTML content of the page" required minlength="3" maxlength="100000"></textarea>
            </div>
            <input type="submit" class="btn btn-primary" value="<?php _e('Save changes') ?>" />
            <input type="button" class="btn btn-secondary" data-bs-dismiss="modal" value="<?php _e('Close') ?>" />
        </form>
        </div>
    </div>
    </div>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/plugin.php
New file
@@ -0,0 +1,191 @@
<?php
if(ADMIN_DEMO){
    echo('Restricted for "DEMO" mode.');
    return;
}
if(isset($_GET['name'])){
    $_GET['name'] = esc_slug($_GET['name']);
    if(is_plugin_exist($_GET['name'])){
        $plugin = get_plugin_info($_GET['name']);
        echo '<h4 class="plugin-title">';
        echo $plugin['name'];
        if(isset($plugin['documentation'])){
            if (filter_var($plugin['documentation'], FILTER_VALIDATE_URL)) {
                echo '<a href="'.$plugin['documentation'].'" target="_blank" class="tooltip-doc-plugin" data-bs-toggle="tooltip" data-bs-placement="left" title="'._t('Click here to visit plugin manual or documentation.').'"><i class="fas fa-question"></i></a>';
            }
        }
        echo '</h4>';
        if(file_exists($plugin['path'] . '/admin-page.php')){
            require_once($plugin['path'] . '/admin-page.php');
        } else {
            // since v1.7.8 page.php is deprecated, use admin-page.php instead
            // this used for backward compatibility
            require_once($plugin['path'] . '/page.php');
        }
    } else {
        echo('<div class="section">');
        _e('Plugin %a is missing or removed.', $_GET['name']);
        echo('</div>');
    }
} else {
    if(isset($_GET['status'])){
        if($_GET['status'] == 'success'){
            show_alert(isset($_GET['info']) ? $_GET['info'] : 'Plugin successfully installed!', 'success');
        } elseif($_GET['status'] == 'warning'){
            show_alert(isset($_GET['info']) ? $_GET['info'] : 'Failed to install!', 'warning');
        } elseif($_GET['status'] == 'error'){
            show_alert(isset($_GET['info']) ? $_GET['info'] : 'Error!', 'danger');
        }
    }
    ?>
    <div id="action-alert" style="display: none;">
        <?php show_alert('Plugin updated!', 'success') ?>
    </div>
    <div class="row">
        <div class="col-lg-8">
            <div class="section section-full">
                <?php
                if(count($plugin_list) > 0){ ?>
                    <div class="table-responsive">
                        <table class="table custom-table">
                            <thead>
                                <tr>
                                    <th>#</th>
                                    <th><?php _e('Plugin') ?></th>
                                    <th><?php _e('Description') ?></th>
                                    <th><?php _e('Action') ?></th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php
                                $index = 0;
                                foreach ($plugin_list as $plugin) {
                                    $index++;
                                    $is_active = substr($plugin['dir_name'], 0, 1) == '_' ? false : true;
                                    $plugin_class = $is_active ? 'plugin-active' : 'plugin-inactive';
                                    ?>
                                    <tr class='<?php echo $plugin_class ?>'>
                                        <th scope="row"><?php echo $index ?></th>
                                        <td>
                                            <strong><?php echo $plugin['name'] ?> <i class="plugin-update-icon text-success fas fa-exclamation-circle d-none t-<?php echo $plugin['dir_name'] ?>"></i></strong>
                                            <br>
                                            Version <?php echo $plugin['version'] ?> | By <a href="<?php echo $plugin['website'] ?>" target="_blank"><?php echo $plugin['author'] ?></a>
                                        </td>
                                        <td><?php echo $plugin['description'] ?></td>
                                        <td><?php if($is_active) {
                                            echo('<a href="#" id="'.$plugin['dir_name'].'" class="deactivate-plugin">'._t('Deactivate').'</a>');
                                        } else {
                                            echo('<a href="#" id="'.$plugin['dir_name'].'" class="activate-plugin">'._t('Activate').'</a>');
                                        } ?> | <a href="#" id="<?php echo $plugin['dir_name'] ?>" class="remove-plugin text-danger"><?php _e('Remove') ?></a>
                                        <div class="plugin-update-btn d-none b-<?php echo $plugin['dir_name'] ?>">
                                             <a href="#" data-id="<?php echo $plugin['dir_name'] ?>" class="update-plugin text-success"><?php _e('Update') ?></a>
                                        </div>
                                        </td>
                                    </tr>
                                    <?php
                                }
                                ?>
                            </tbody>
                        </table>
                    </div>
                <?php } else {
                    echo '<div class="general-wrapper">';
                    _e('No plugins installed!');
                    echo '</div>';
                } ?>
            </div>
        </div>
        <div class="col-lg-4">
            <div class="section">
                <?php _e('Add new plugin') ?><br><br>
                <form id="form-upload-plugin" action="request.php" method="post" enctype="multipart/form-data">
                    <div class="mb-3">
                        <input type="hidden" name="action" value="pluginAction">
                        <input type="hidden" name="plugin_action" value="upload_plugin">
                        <input type="hidden" name="redirect" value="dashboard.php?viewpage=plugin">
                        <label class="form-label" for="plugin_file"><?php _e('Upload plugin') ?> (zip):</label><br>
                        <input type="file" class="form-control" name="plugin_file" accept=".zip"/><br>
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
                    </div>
                </form>
                <button type="submit" class="check-plugin-update btn btn-info btn-md" data-none="<?php _e('No updates') ?>" data-avail="<?php _e('Update available') ?>"><?php _e('Check plugin updates') ?></button>
                <div class="mb-3"></div>
                <div class="plugin-repository-wrapper">
                    <button type="submit" class="load-plugin-repo btn btn-success btn-md"><?php _e('Load plugin repository') ?></button>
                </div>
            </div>
        </div>
    </div>
    <!-- Modal -->
    <div class="modal fade" id="plugin-repo" tabindex="-1" role="dialog" aria-labelledby="plugin-repo-modal-label" aria-hidden="true">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="plugin-repo-label"><?php _e('Plugin Repository') ?></h5>
            <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
          </div>
          <div class="modal-body">
            <div class="plugin-repo-search">
                <input type="text" class="form-control" placeholder="<?php _e('Search plugin') ?>" id="plugin-search">
            </div>
            <div class="mb-3"></div>
            <div class="plugin-repo-container"></div>
            <div class="mb-3"></div>
            <input type="button" class="btn btn-secondary" data-bs-dismiss="modal" value="<?php _e('Close') ?>" />
          </div>
        </div>
      </div>
    </div>
    <script type="text/javascript">
        $(document).ready(function(){
            setTimeout(()=>{
                $('button.check-plugin-update').click();
            }, 100);
            $('button.load-plugin-repo').click(function() {
                let btn = $(this);
                $(this).hide();
                let wrapper = $('.plugin-repo-container');
                wrapper.html('<h3>Loading...</h3>');
                $.ajax({
                    url: 'includes/ajax-actions.php',
                    type: 'POST',
                    dataType: 'json',
                    data: {action: 'get_plugin_repo_list'},
                    complete: function (data) {
                        if(data.status == 200){
                            $('#plugin-repo').modal('show');
                            wrapper.html(data.responseText);
                            //
                            $('a.add-plugin-repo').click(function() {
                                window.open('request.php?action=pluginAction&reqversion='+$(this).data('reqversion')+'&url='+$(this).data('url')+'&plugin_action=add_plugin&redirect=dashboard.php?viewpage=plugin', '_self');
                            });
                        } else {
                            wrapper.html('<h3>Failed to load!</h3>');
                        }
                        btn.show();
                    }
                });
            });
            $('#plugin-search').bind('keydown keypress keyup change', function() {
                let value = this.value.toLowerCase();
                if(value.length){
                    let $tr = $(".plugin-repo-container tr").hide();
                    $tr.filter(function() {
                        return ($(this).find('.plugin-repo-name').text().toLowerCase()).indexOf(value) >= 0;
                    }).show();
                }
            });
        });
    </script>
    <?php
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/settings.php
New file
@@ -0,0 +1,352 @@
<?php
$warning_list = get_admin_warning();
if(!empty($warning_list)){
    echo('<div class="site-warning">');
    foreach ($warning_list as $val) {
        show_alert($val, 'warning');
    }
    echo('</div>');
}
if(isset($_GET['status'])){
    // Old method
    $type = 'success';
    $message = '';
    if($_GET['status'] == 'saved'){
        $message = 'Settings saved!';
    } elseif($_GET['status'] == 'error'){
        $type = 'danger';
        $message = 'Error!';
        if(isset($_GET['info'])){
            $message = $_GET['info'];
        }
    }
    if(isset($_SESSION['message'])&&($_SESSION['classmessage'])){
        show_alert($_SESSION['message'], $_SESSION['classmessage']);
        unset($_SESSION['message']);
    } else {
        show_alert($message, $type);
    }
}
if(isset($_SESSION['message'])){
    // [New] preferred method
    if(isset($_SESSION['message']['text'])){
        $type = 'success';
        if($_SESSION['message']['type'] === 'error' || $_SESSION['message']['type'] === 'danger'){
            $type = 'danger';
        }
        show_alert($_SESSION['message']['text'], $type);
    }
    unset($_SESSION['message']);
}
?>
<div class="section section-full">
    <ul class="nav nav-tabs custom-tab" role="tablist">
        <li class="nav-item" role="presentation">
            <a class="nav-link active" data-bs-toggle="tab" href="#general"><?php _e('General') ?></a>
        </li>
        <li class="nav-item" role="presentation">
            <a class="nav-link" data-bs-toggle="tab" href="#advanced"><?php _e('Advanced') ?></a>
        </li>
        <li class="nav-item" role="presentation">
            <a class="nav-link" data-bs-toggle="tab" href="#user"><?php _e('User') ?></a>
        </li>
        <li class="nav-item" role="presentation">
            <a class="nav-link" data-bs-toggle="tab" href="#custom-path"><?php _e('Custom path') ?></a>
        </li>
        <li class="nav-item" role="presentation">
            <a class="nav-link" data-bs-toggle="tab" href="#listings"><?php _e('Listings') ?></a>
        </li>
        <li class="nav-item" role="presentation">
            <a class="nav-link" data-bs-toggle="tab" href="#other"><?php _e('Other') ?></a>
        </li>
    </ul>
    <div class="general-wrapper">
        <div class="tab-content">
            <div class="tab-pane tab-container active" id="general">
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="saveSettings">
                    <input type="hidden" name="category" value="general">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
                    <div class="mb-3 row">
                        <label for="title" class="col-sm-2 col-form-label"><?php _e('Site title') ?>:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="data[site_title]" minlength="4" value="<?php echo esc_string(SITE_TITLE) ?>" required>
                        </div>
                    </div>
                    <div class="mb-3 row">
                        <label for="description" class="col-sm-2 col-form-label"><?php _e('Site description') ?>:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="data[site_description]" minlength="4" value="<?php echo esc_string(SITE_DESCRIPTION) ?>" required>
                        </div>
                    </div>
                    <div class="mb-3 row">
                        <label for="meta_description" class="col-sm-2 col-form-label"><?php _e('Meta description') ?>:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="data[meta_description]" minlength="4" value="<?php echo esc_string(META_DESCRIPTION) ?>" required>
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save changes') ?></button>
                </form>
                <br>
                <form id="form-updatelogo" action="request.php" method="post" enctype="multipart/form-data" onsubmit="return validateForm('form-updatelogo')" >
                    <div class="mb-3">
                        <input type="hidden" name="action" value="updateLogo">
                        <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
                        <label for="logo" class="form-label"><?php _e('Site logo') ?>:</label><br>
                        <img src="<?php echo DOMAIN . SITE_LOGO .'?v='.date('his') ?>" style="background-color: #aebfbc; padding: 10px"><br><br>
                        <input type="file" class="form-control" name="logofile" accept=".png, .jpg, .jpeg, .gif"/>
                        <div id="validation-message-form-updatelogo" class="text-danger"></div><br>
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
                        <br><br>
                    </div>
                </form>
                <form id="form-updateloginlogo" action="request.php" method="post" enctype="multipart/form-data" onsubmit="return validateForm('form-updateloginlogo')">
                    <div class="mb-3">
                        <input type="hidden" name="action" value="updateLoginLogo">
                        <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
                        <label for="login-logo" class="form-label"><?php _e('Login logo') ?>:</label><br>
                        <img src="<?php echo DOMAIN . 'images/login-logo.png?v='.date('his') ?>" style="background-color: #aebfbc; padding: 10px"><br><br>
                        <input type="file" class="form-control" name="logofile" accept=".png"  />
                        <div id="validation-message-form-updateloginlogo" class="text-danger"></div><br>
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
                        <br><br>
                    </div>
                </form>
                <form id="form-updateicon" action="request.php" method="post" enctype="multipart/form-data">
                    <div class="mb-3">
                        <input type="hidden" name="action" value="updateIcon">
                        <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
                        <label for="icon" class="form-label"><?php _e('Site icon') ?> (.ico file format):</label><br>
                        <img src="<?php echo DOMAIN . 'favicon.ico'.'?v='.date('his') ?>" style="background-color: #aebfbc; padding: 10px; width: 50px;"><br><br>
                        <input type="file" class="form-control" name="iconfile" accept=".ico" required /><br>
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
                        <br><br>
                    </div>
                </form>
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="saveSettings">
                    <input type="hidden" name="category" value="general">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
                    <div class="mb-3 row">
                        <label for="code" class="col-sm-3 col-form-label"><?php _e('Site language') ?>:</label>
                        <div class="col-sm-9">
                            <?php
                            $lang_list = ['en'];
                            if(file_exists('../locales')){
                                $files = scan_files('locales');
                                foreach ($files as $file) {
                                    if(pathinfo($file, PATHINFO_EXTENSION) == 'json'){
                                        $lang_list[] = pathinfo($file, PATHINFO_FILENAME);
                                    }
                                }
                            }
                            if(file_exists('../'.TEMPLATE_PATH.'/locales')){
                                $files = scan_files(TEMPLATE_PATH.'/locales');
                                foreach ($files as $file) {
                                    if(pathinfo($file, PATHINFO_EXTENSION) == 'json'){
                                        if(!in_array(pathinfo($file, PATHINFO_FILENAME), $lang_list)){
                                            $lang_list[] = pathinfo($file, PATHINFO_FILENAME);
                                        }
                                    }
                                }
                            }
                            ?>
                            <select class="form-select" name="data[language]" required>
                                <?php
                                foreach ($lang_list as $value) {
                                    $selected = '';
                                    if($value == get_setting_value('language')){
                                        $selected = 'selected';
                                    }
                                    echo '<option value="'.$value.'" '.$selected.'>'.strtoupper($value).'</option>';
                                }
                                ?>
                            </select>
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
                </form>
                <div class="mb-3"></div>
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="updatePurchaseCode">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
                    <div class="mb-3 row">
                        <label for="code" class="col-sm-3 col-form-label"><span class="text-danger">*</span> <?php _e('Item purchase code') ?>:</label>
                        <div class="col-sm-9">
                            <input type="text" class="form-control" name="code" minlength="5" placeholder="101010-10aa-0101-01010-a1b010a01b10" value="<?php echo (check_purchase_code() ? '********************' : '') ?>" required>
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Update') ?></button>
                </form>
            </div>
            <div class="tab-pane tab-container fade" id="advanced">
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="saveSettings">
                    <input type="hidden" name="category" value="advanced">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#advanced">
                    <?php
                    $group = get_setting_group('advanced');
                    foreach ($group as $item) {
                        if($item['type'] == 'bool'){
                            ?>
                            <div class="mb-3">
                                <input id="<?php echo $item['name'] ?>" type="checkbox" name="data[<?php echo $item['name'] ?>]" value="1" <?php if ((int)$item['value']) { echo 'checked'; } ?>>
                                <label for="<?php echo $item['name'] ?>"><?php _e($item['label']) ?></label>
                                <?php if($item['tooltip'] != ''){ ?>
                                    <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" title="<?php echo $item['tooltip'] ?>">
                                        <i class="fas fa-question"></i>
                                    </span>
                                <?php } ?>
                            </div>
                            <?php
                        }
                    }
                    ?>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
                </form>
                <div class="mb-3"></div>
                <form action="../sitemap.php" method="post" class="<?php if( !PRETTY_URL ) echo('disabled-list') ?>">
                    <div class="mb-3">
                        <label><?php _e('Generate sitemap') ?>:</label><br>
                        <p>Exclude all page url. only work if Pretty URL enabled.</p>
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Generate sitemap') ?></button>
                    </div>
                </form>
            </div>
            <div class="tab-pane tab-container fade" id="user">
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="saveSettings">
                    <input type="hidden" name="category" value="user">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#user">
                    <?php
                    $group = get_setting_group('user');
                    foreach ($group as $item) {
                        if($item['type'] == 'bool'){
                            ?>
                            <div class="mb-3">
                                <input id="<?php echo $item['name'] ?>" type="checkbox" name="data[<?php echo $item['name'] ?>]" value="1" <?php if ((int)$item['value']) { echo 'checked'; } ?>>
                                <label for="<?php echo $item['name'] ?>"><?php _e($item['label']) ?></label>
                                <?php if($item['tooltip'] != ''){ ?>
                                    <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" title="<?php echo $item['tooltip'] ?>">
                                        <i class="fas fa-question"></i>
                                    </span>
                                <?php } ?>
                            </div>
                            <?php
                        }
                    }
                    ?>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
                </form>
            </div>
            <div class="tab-pane tab-container fade" id="custom-path">
                <p>Custom URL base for page or category name.</p>
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="set_custom_path">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#custom-path">
                    <?php
                    $list = ['game','category','page','search','tag','login','register','user','post','full','splash'];
                    foreach ($list as $name) {
                        ?>
                        <div class="mb-3 row">
                            <label for="<?php echo $name ?>" class="col-sm-2 col-form-label"><?php echo $name ?></label>
                            <div class="col-sm-6 col-md-4">
                                <input type="text" class="form-control" name="list[]" value="<?php echo (get_custom_path($name) != $name) ? get_custom_path($name) : '' ?>">
                            </div>
                        </div>
                        <?php
                    }
                    ?>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
                </form>
            </div>
            <div class="tab-pane tab-container fade" id="listings">
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="saveSettings">
                    <input type="hidden" name="category" value="listings">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#listings">
                    <?php
                    $group = get_setting_group('listings');
                    foreach ($group as $item) {
                        if($item['type'] == 'number'){
                            ?>
                            <div class="mb-3 row">
                                <label class="col-sm-3 col-form-label"><?php _e($item['label']) ?></label>
                                <div class="col-sm-2">
                                    <input type="number" class="form-control" name="data[<?php echo $item['name'] ?>]" value="<?php echo esc_int($item['value']) ?>">
                                </div>
                            </div>
                            <?php
                        }
                    }
                    ?>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
                </form>
            </div>
            <div class="tab-pane tab-container fade" id="other">
                <form action="request.php" method="post">
                    <input type="hidden" name="action" value="saveSettings">
                    <input type="hidden" name="category" value="other">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#other">
                    <?php
                    $group = get_setting_group('other');
                    foreach ($group as $item) {
                        if($item['type'] == 'bool'){
                            ?>
                            <div class="mb-3">
                                <input id="<?php echo $item['name'] ?>" type="checkbox" name="data[<?php echo $item['name'] ?>]" value="1" <?php if ((int)$item['value']) { echo 'checked'; } ?>>
                                <label for="<?php echo $item['name'] ?>"><?php _e($item['label']) ?></label>
                                <?php if($item['tooltip'] != ''){ ?>
                                    <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" title="<?php echo $item['tooltip'] ?>">
                                        <i class="fas fa-question"></i>
                                    </span>
                                <?php } ?>
                            </div>
                            <?php
                        }
                    }
                    ?>
                    <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
                </form>
            </div>
        </div>
    </div>
</div>
    <!-- script validation file -->
    <script>
        document.addEventListener('DOMContentLoaded', (event) => {
            let hash = window.location.hash;
            if (hash) {
                let tabEl = document.querySelector(`.nav-link[href="${hash}"]`)
                let tab = new bootstrap.Tab(tabEl)
                tab.show()
            }
        });
        function validateForm(formId) {
            var fileInput = document.getElementById(formId).elements.logofile;
            var validationMessage = document.getElementById('validation-message-' + formId);
            if (!fileInput.value) {
                validationMessage.innerHTML = 'Please select a file.';
                return false;
            }
            return true;
        }
    </script>
<!-- end script validation -->
CloudArcade/cloudarcade/cloudarcade/admin/core/theme-options.php
New file
@@ -0,0 +1,19 @@
<?php
if(file_exists( ABSPATH . TEMPLATE_PATH . '/options.php' )){ // Fix bug open the page but there is no theme options
    ?>
    <div class="section section-full">
        <div class="general-wrapper">
            <?php
            if(file_exists( ABSPATH . TEMPLATE_PATH . '/options.php' )){
                require_once( ABSPATH . TEMPLATE_PATH . '/options.php' );
            }
            ?>
        </div>
    </div>
    <?php
} else {
    echo '<h3>'._t('Current active theme doesn\'t support theme options!').'</h3>';
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/core/themes.php
New file
@@ -0,0 +1,618 @@
<?php
function is_theme_has_thumbail($theme_name){
    $path = ABSPATH . 'content/themes/' . $theme_name;
    if(file_exists( $path . '/thumbnail.png' )){
        return true;
    }
}
if(!USER_ADMIN){
    die('P');
}
if(isset($_POST['action'])){
    if( ADMIN_DEMO ){
        echo 'Restricted for DEMO mode';
        return;
    }
    if($_POST['action'] == 'upload_theme_file'){
        if(check_purchase_code()){
            echo '<h4>'._t('Going to install theme file').'</h4><br>';
            if (!file_exists('tmp')) {
                mkdir('tmp', 0755, true);
            }
            if(file_exists('tmp/tmp_theme')){
                delete_files('tmp/tmp_theme/');
            }
            if (!file_exists('tmp/tmp_theme')) {
                mkdir('tmp/tmp_theme', 0755, true);
            }
            if (!file_exists('tmp/tmp_theme/files')) {
                mkdir('tmp/tmp_theme/files', 0755, true);
            }
            $enter_epc = false;
            $target_dir = "tmp/tmp_theme/";
            $extract_dir = "tmp/tmp_theme/files/";
            $target_file = $target_dir . strtolower(str_replace(' ', '-', basename($_FILES["theme_file"]["name"])));
            $theme_dir = str_replace('.zip', '', basename($_FILES["theme_file"]["name"]));
            $uploadOk = 1;
            $error = [];
            $warning = [];
            $json;
            $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
            if($fileType != 'zip'){
                $uploadOk = 0;
                $error[] = 'File format must be zip!';
            }
            if($uploadOk) {
                if (move_uploaded_file($_FILES["theme_file"]["tmp_name"], $target_file)) {
                    $zip = new ZipArchive;
                    $res = $zip->open($target_file);
                    if ($res === TRUE) {
                        $zip->extractTo($extract_dir);
                        $zip->close();
                        if(file_exists(ABSPATH . 'content/themes/' . $theme_dir)){
                            $warning[] = 'Theme folder for this theme is already exist';
                            $warning[] = 'Existing theme folder will be overriden';
                        }
                        if(!file_exists( $extract_dir . 'info.json' )){
                            $error[] = 'Theme info (info.json) doesn\'t exist';
                        } else {
                            $json = json_decode(file_get_contents($extract_dir . 'info.json'), true);
                        }
                        if(!file_exists( $extract_dir . 'home.php' )){
                            $error[] = 'home.php doesn\'t exist';
                        }
                        if(!file_exists( $extract_dir . 'page.php' )){
                            $error[] = 'page.php doesn\'t exist';
                        }
                        if(!file_exists( $extract_dir . 'game.php' )){
                            $error[] = 'game.php doesn\'t exist';
                        }
                        if(!file_exists( $extract_dir . 'archive.php' )){
                            $error[] = 'archive.php doesn\'t exist';
                        }
                        if(!file_exists( $extract_dir . 'search.php' )){
                            $error[] = 'search.php doesn\'t exist';
                        }
                        if(file_exists( $extract_dir . 'css/epc.css' )){
                            $enter_epc = true;
                        }
                    } else {
                        echo 'doh!';
                    }
                }
            }
            if(count($error)){
                foreach ($error as $value) {
                    show_alert($value, 'danger');
                }
            } else {
                if(count($warning)){
                    foreach ($warning as $value) {
                        show_alert($value, 'warning');
                    }
                }
                echo '<br><b>Theme name</b>: '.$json['name'];
                echo '<br><b>Version</b>: '.$json['version'];
                echo '<br><b>Author</b>: '.$json['author'];
                echo '<br><b>Website</b>: <a href="'.$json['website'].'" target="_blank">'.$json['website'].'</a>';
                echo '<br><b>Description</b>: '.$json['description'];
                echo '<br><br>This theme is targeted for CloudArcade v'.$json['target_version'].' or newer.<br>';
                if(to_numeric_version(VERSION) < to_numeric_version($json['target_version'])){
                    show_alert('You\'re using older version of CloudArcade, update your CMS to meet the requirement.', 'warning');
                } else {
                    ?>
                    <br>
                    <form id="form-upload-theme" action="dashboard.php?viewpage=themes" method="post" enctype="multipart/form-data">
                        <input type="hidden" name="action" value="install_theme">
                        <input type="hidden" name="file_name" value="<?php echo $theme_dir ?>">
                        <input type="hidden" name="theme_name" value="<?php echo $json['name'] ?>">
                        <?php if($enter_epc) { ?>
                            <div class="mb-3">
                                <label for="theme-license"><?php _e('Purchase code') ?>:</label>
                                <input type="text" style="max-width: 600px;" class="form-control" id="theme-license" name="epc" placeholder="<?php _e('Enter purchase code') ?>">
                            </div>
                        <?php } ?>
                        <input type="button" class="btn btn-primary btn-md" value="Install theme" onclick="this.form.submit()"/>
                    </form>
                <?php }
            }
            delete_files($extract_dir);
        } else {
            show_alert('Item purchase code is required!', 'warning');
        }
    } else if($_POST['action'] == 'install_theme'){
        $continue = true;
        if(isset($_POST['epc'])){
            $continue = false;
            $curl = curl_request('https://api.cloudarcade.net/verify/verify.php?code='.get_setting_value('purchase_code').'&ref='.DOMAIN.'&v='.VERSION.'&action=check_theme_epc&validate&epc='.$_POST['epc'].'&theme_name='.str_replace(' ', '%20', $_POST['theme_name']));
            if($curl == 'valid'){
                $continue = true;
                update_option('epc_theme_'.$_POST['file_name'], $_POST['epc']);
            } else {
                show_alert('Theme purchase code not valid!', 'danger');
                show_alert('Contact seller for more info', 'warning');
            }
        }
        if($continue){
            echo '<h4>'._t('Installing theme').'</h4><br>';
            $target_file = 'tmp/tmp_theme/'.$_POST['file_name'].'.zip';
            if(file_exists($target_file)){
                $zip = new ZipArchive;
                $res = $zip->open($target_file);
                if ($res === TRUE) {
                    $zip->extractTo('../content/themes/'.$_POST['file_name']);
                    $zip->close();
                    show_alert('Theme installed', 'success');
                    delete_files('tmp/tmp_theme/');
                    echo '<div id="theme-installed"></div>';
                } else {
                    echo 'doh!';
                }
            } else {
                show_alert('Theme file is missing', 'danger');
            }
        }
    } else if($_POST['action'] == 'update'){
        echo '<h4>'._t('Update theme').'</h4>';
        //
        $url = 'https://api.cloudarcade.net/themes/fetch.php?action=info&code='. check_purchase_code();
        $url .= '&name='.$_POST['theme'];
        $url .= '&ref='.DOMAIN.'&theme-version='.$_POST['version'].'&v='.VERSION;
        $curl = curl_request($url);
        if($curl != ''){
            $json = json_decode($curl, true);
            echo '<br><b>Theme name</b>: '.$json['name'];
            echo '<br><b>Version</b>: '.$json['version'];
            echo '<br><b>Author</b>: '.$json['author'];
            echo '<br><b>Website</b>: '.$json['website'];
            echo '<br><b>Description</b>: '.$json['description'];
            if(isset($json['release_date'])){
                echo '<br><b>Release date</b>: '.$json['release_date'];
            }
            echo '<br><b>Changelog</b>: '.$json['changelog'];
            if(isset($json['html'])){
                echo $json['html'];
            }
            echo '<br><br>This theme is targeted for CloudArcade v'.$json['target_version'].' or newer.<br><br>';
            if(to_numeric_version(VERSION) < to_numeric_version($json['target_version'])){
                show_alert('You\'re using older version of CloudArcade, update your CMS to meet the requirement.', 'warning');
            } else {
                ?>
                <br>
                <form action="dashboard.php?viewpage=themes" method="post" enctype="multipart/form-data">
                    <input type="hidden" name="action" value="dl_theme">
                    <input type="hidden" name="theme" value="<?php echo $_POST['theme'] ?>">
                    <input type="hidden" name="version" value="<?php echo $_POST['version'] ?>">
                    <input type="hidden" name="link" value="<?php echo $json['link'] ?>">
                    <input type="button" class="btn btn-primary btn-md" value="Update theme" onclick="this.form.submit()"/>
                </form>
            <?php }
        }
    } else if($_POST['action'] == 'dl_theme'){
        $path = $_POST['link'];
        $target = '../t-update.zip';
        $affected_files = [];
        // Create a cURL resource
        $ch = curl_init($path);
        // Set cURL options for retrieving the remote file
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
        // Download the remote file and save it to the target file
        $remoteFile = curl_exec($ch);
        if($remoteFile !== false){
            $localFile = fopen($target, 'w');
            if($localFile){
                fwrite($localFile, $remoteFile);
                fclose($localFile);
                if(file_exists($target)){
                    if (!file_exists(ABSPATH.'admin/backups')) {
                        mkdir('backups/', 0755, true);
                    }
                    if(file_exists('../content/themes/'.$_POST['theme'].'/')){
                        zip_files_recursive( '../content/themes/'.$_POST['theme'].'/', 'backups/'.$_SESSION['username'].'-'.$_POST['theme'].'-theme-backup-'.$_POST['version'].'-'.time().'-'.generate_random_strings().'.zip', [] );
                    }
                    $zip = new ZipArchive;
                    $res = $zip->open($target);
                    for( $i = 0; $i < $zip->numFiles; $i++ ){
                        $stat = $zip->statIndex( $i );
                        $name = basename( $stat['name'] );
                        if(strpos($name, '.') !== false) {
                            $affected_files[] = $name;
                        }
                    }
                    if ($res === TRUE) {
                        $zip->extractTo('../content/themes/'.$_POST['theme'].'/');
                        $zip->close();
                    } else {
                        echo 'doh!';
                    }
                    unlink($target);
                    show_alert('Theme updated!', 'success');
                    show_alert('You can roll back to previous version if something happened.', 'info');
                    echo '<div id="theme-updated"></div>';
                    echo '<h4>'._t('Affected files').'</h4>';
                    echo '<ol>';
                    foreach ($affected_files as $key) {
                        echo '<li>'.$key.'</li>';
                    }
                    echo '</ol>';
                    echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
                }
            } else {
                echo 'Could not create local file';
            }
        } else {
            echo 'Could not download remote file';
        }
        // Close the cURL resource
        curl_close($ch);
    } else if($_POST['action'] == 'duplicate'){
        $json = [];
        $json_path = ABSPATH . 'content/themes/' . $_POST['theme'] . '/info.json';
        if(file_exists( $json_path )){
            $json = json_decode(file_get_contents( $json_path ), true);
        }
        echo '<h4>'._t('Duplicate theme').'</h4>';
        echo '<p>Duplicated themes (Or custom themes) can\'t receive any updates and safe from overwritten update files.</p>';
        ?>
        <div class="mb-4"></div>
        <form method="post">
            <input type="hidden" name="action" value="start_duplicate">
            <input type="hidden" name="target" value="<?php echo $_POST['theme'] ?>">
            <div class="mb-3">
                <label><?php _e('Theme Name') ?> (<?php _e('Must be unique') ?>):</label>
                <input type="text" style="max-width: 400px;" class="form-control" name="theme-name" placeholder="<?php _e('Latin characters only') ?>" value="<?php echo $json['name'] ?>" required>
            </div>
            <button type="submit" class="btn btn-primary btn-md"><?php _e('Duplicate') ?></button>
        </form>
        <?php
    } else if($_POST['action'] == 'start_duplicate'){
        $theme_name = htmlspecialchars($_POST['theme-name']);
        if($theme_name != $_POST['theme-name']){
            show_alert('Error! Theme name contain special characters!', 'danger');
        } else {
            $theme_dir = strtolower(str_replace(' ', '-', $theme_name));
            $dirs = scan_folder('content/themes/');
            $exist = false;
            foreach ($dirs as $dir) {
                $json_path = ABSPATH . 'content/themes/' . $dir . '/info.json';
                if(file_exists( $json_path )){
                    if($dir == $theme_dir){
                        $exist = true;
                    }
                }
            }
            if($exist){
                show_alert('Theme folder with this name already exist!', 'warning');
            } else {
                $base = '../content/themes/'.$theme_dir;
                if(!file_exists($base)){
                    mkdir($base, 0755, true);
                }
                function recursive_copy($src,$dst) {
                    $dir = opendir($src);
                    @mkdir($dst);
                    while(( $file = readdir($dir)) ) {
                        if (( $file != '.' ) && ( $file != '..' )) {
                            if ( is_dir($src . '/' . $file) ) {
                                recursive_copy($src .'/'. $file, $dst .'/'. $file);
                            }
                            else {
                                copy($src .'/'. $file,$dst .'/'. $file);
                            }
                        }
                    }
                    closedir($dir);
                }
                recursive_copy('../content/themes/'.$_POST['target'], $base);
                //
                $json = [];
                $json_path = ABSPATH . 'content/themes/' . $theme_dir . '/info.json';
                if(file_exists( $json_path )){
                    $json = json_decode(file_get_contents( $json_path ), true);
                }
                $json['name'] = $theme_name;
                $json['release_date'] = date('d/m/Y');
                file_put_contents($json_path, json_encode($json));
                show_alert('Theme successfully duplicated!', 'success');
            }
        }
    } else if($_POST['action'] == 'delete'){
        if(THEME_NAME == $_POST['theme']){
            show_alert('Active theme can\'t be deleted!', 'warning');
        } else {
            echo '<h4>'._t('Are you sure want to delete %a theme?', $_POST['theme-name']).'</h4>';
            ?>
            <p>This action can't be undone</p>
            <div class="mb-4"></div>
            <form method="post">
                <input type="hidden" name="action" value="yes-delete">
                <input type="hidden" name="theme" value="<?php echo $_POST['theme'] ?>">
                <button type="submit" class="btn btn-danger btn-md"><?php _e('Delete') ?></button>
            </form>
            <?php
        }
    } else if($_POST['action'] == 'yes-delete'){
        if(file_exists('../content/themes/'.$_POST['theme'])){
            delete_files('../content/themes/'.$_POST['theme']);
        }
        show_alert('Theme files removed!', 'success');
        echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
    } else if($_POST['action'] == 'begin-install-with-code'){
        $curl = curl_request('https://api.cloudarcade.net/themes/install.php?code='.get_setting_value('purchase_code').'&ref='.DOMAIN.'&v='.VERSION.'&action=install&validate&email='.$_POST['email'].'&pcode='.$_POST['pcode']);
        if(is_valid_json($curl)){
            $json = json_decode($curl, true);
            if($json['status'] == 'valid'){
                $status = 'warning';
                $message = 'Null';
                $continue = true;
                if(file_exists('../content/themes/'.$json['name'])){
                    show_alert('Failed to install!', 'warning');
                    $status = 'warning';
                    $message = 'Theme folder '.$json['name'].' already exist!';
                    $continue = false;
                } else {
                    mkdir('../content/themes/'.$json['name'], 0755, true);
                }
                if($continue){
                    $target = '../the-file.zip';
                    $_ch = curl_init();
                    curl_setopt($_ch, CURLOPT_URL, $json['link']);
                    curl_setopt($_ch, CURLOPT_SSL_VERIFYPEER, false);
                    curl_setopt($_ch, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($_ch, CURLOPT_FOLLOWLOCATION, true);
                    curl_setopt($_ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
                    $remoteFile = curl_exec($_ch);
                    if($remoteFile !== false){
                        $localFile = fopen($target, 'w');
                        if($localFile){
                            fwrite($localFile, $remoteFile);
                            fclose($localFile);
                            if(file_exists($target)){
                                $zip = new ZipArchive;
                                $res = $zip->open($target);
                                if ($res === TRUE) {
                                    $zip->extractTo('../content/themes/'.$json['name']);
                                    $zip->close();
                                    $status = 'success';
                                    $message = 'Theme installed!';
                                } else {
                                    echo 'doh!';
                                }
                                unlink($target);
                            }
                        }
                    }
                    curl_close($_ch);
                }
                show_alert($message, $status);
                echo '<div id="theme-updated"></div>';
                echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
            } else {
                show_alert($json['message'], 'danger');
            }
        } else {
            show_alert('Server error!', 'danger');
        }
    }
} else if(isset($_GET['action'])){
    if( ADMIN_DEMO ){
        echo 'Restricted for DEMO mode';
        return;
    }
    $action = $_GET['action'];
    if($action == 'details'){
        if(isset($_GET['theme'])){
            $json_path = ABSPATH . 'content/themes/' . $_GET['theme'] . '/info.json';
            if(file_exists( $json_path )){
                $json = json_decode(file_get_contents( $json_path ), true);
                echo '<br><b>Theme name</b>: '.$json['name'];
                echo '<br><b>Version</b>: '.$json['version'];
                echo '<br><b>Author</b>: '.$json['author'];
                echo '<br><b>Website</b>: <a href="'.$json['website'].'" target="_blank">'.$json['website'].'</a>';
                if(isset($json['documentation'])){
                    echo '<br><b>Documentation</b>: <a href="'.$json['documentation'].'" target="_blank">'.$json['documentation'].'</a>';
                }
                echo '<br><b>Description</b>: '.$json['description'];
                if(isset($json['release_date'])){
                    echo '<br><b>Release date</b>: '.$json['release_date'];
                }
                if(check_purchase_code()){
                    ?>
                    <div class="mb-4"></div>
                    <form method="post">
                        <input type="hidden" name="action" value="duplicate">
                        <input type="hidden" name="theme" value="<?php echo $_GET['theme'] ?>">
                        <button type="submit" class="btn btn-primary btn-md"><?php _e('Duplicate') ?></button>
                    </form>
                    <div class="mb-3"></div>
                    <form method="post">
                        <input type="hidden" name="action" value="delete">
                        <input type="hidden" name="theme" value="<?php echo $_GET['theme'] ?>">
                        <input type="hidden" name="theme-name" value="<?php echo $json['name'] ?>">
                        <button type="submit" class="btn btn-danger btn-md"><?php _e('Delete') ?></button>
                    </form>
                    <?php
                }
            }
        }
    } else if($action == 'install-with-code'){
        ?>
        <div class="bs-callout bs-callout-info">
            If you've already purchased a theme, you can submit your purchase code here to install the theme.
        </div>
        <div class="row">
            <div class="col-md-4">
                <form method="post" enctype="multipart/form-data">
                    <input type="hidden" name="action" value="begin-install-with-code">
                    <div class="mb-3">
                        <label class="form-label"><?php _e('The email you are using for the purchase') ?></label>
                        <input type="email" class="form-control" name="email" required>
                    </div>
                    <div class="mb-3">
                        <label class="form-label"><?php _e('Your theme purchase code') ?></label>
                        <input type="text" class="form-control" name="pcode" required>
                    </div>
                    <input type="submit" class="btn btn-primary" value="<?php _e('Install') ?>">
                </form>
            </div>
        </div>
        <?php
    } else if($action == 'upload-theme'){
        ?>
        <div class="bs-callout bs-callout-warning">
            Make sure you're uploading a theme file from a source you trust; otherwise, your theme file may contain malware or a backdoor that can harm your site.
        </div>
        <div class="row">
            <div class="col-md-4">
                <form method="post" enctype="multipart/form-data">
                    <input type="hidden" name="action" value="upload_theme_file">
                    <div class="mb-3">
                        <label class="form-label">Theme zip file</label>
                        <input type="file" name="theme_file" class="form-control" accept=".zip">
                    </div>
                    <input type="submit" class="btn btn-primary" value="<?php _e('Upload theme') ?>">
                </form>
            </div>
        </div>
        <?php
    } else if($action == 'activate-theme'){
        if(isset($_POST['theme_dir'])){
            $json_path = '../content/themes/' . $_POST['theme_dir'] . '/info.json';
            if(file_exists($json_path)){
                $theme = json_decode(file_get_contents( $json_path ), true);
                if(to_numeric_version($theme['target_version']) > to_numeric_version(VERSION)){
                    show_alert('Failed to activate!', 'warning');
                    echo '<div class="bs-callout bs-callout-warning">'._t('This theme require CloudArcade v%a or newer.', $theme['target_version']).'</div>';
                    echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
                } else {
                    // Theme activated
                    update_setting('theme_name', $_POST['theme_dir']);
                    show_alert('Theme activated!', 'success');
                    echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
                }
            }
        }
    }
} else {
    $dirs = scan_folder('content/themes/');
    $update_availabe = get_pref('updates');
    if(is_null($update_availabe)){
        $update_availabe = [];
    } else {
        $update_availabe = json_decode($update_availabe, true);
        if(!isset($update_availabe['themes'])){
            $update_availabe['themes'] = [];
        }
    }
    foreach ($dirs as $dir) {
        $json_path = ABSPATH . 'content/themes/' . $dir . '/info.json';
        if(file_exists( $json_path )){
            $theme = json_decode(file_get_contents( $json_path ), true);
            $disabled = '';
            $btn_label = _t('Activate');
            $thumb;
            if( THEME_NAME == $dir){
                $disabled = _t('disabled');
                $btn_label = _t('Activated');
            }
            if(is_theme_has_thumbail($dir)){
                $thumb = DOMAIN . 'content/themes/' . $dir . '/thumbnail.png';
            } else {
                $thumb = DOMAIN . 'images/theme-no-thumb.png';
            } ?>
            <div class="theme">
                <a href="dashboard.php?viewpage=themes&theme=<?php echo $dir ?>&action=details">
                    <div class="theme-thumbnail">
                        <img src="<?php echo $thumb ?>">
                        <div class="theme-overlay">
                            <i class="fas fa-info-circle"></i>
                        </div>
                    </div>
                </a>
                <?php if(isset($update_availabe['themes'][$dir])){ ?>
                    <div class="theme-update-wrapper">
                        <div class="theme-update-info">
                            <?php _e('Update available!') ?>
                            <div class="float-right">
                                <form action="dashboard.php?viewpage=themes" method="post" enctype="multipart/form-data">
                                    <input type="hidden" name="action" value="update">
                                    <input type="hidden" name="theme" value="<?php echo $dir ?>">
                                    <input type="hidden" name="version" value="<?php echo $theme['version'] ?>">
                                    <input type="button" class="text-primary" value="<?php _e('Update') ?>" onclick="this.form.submit()"/>
                                </form>
                            </div>
                        </div>
                    </div>
                <?php } ?>
                <div class="theme-id-container">
                    <div class="theme-name"> <?php echo $theme['name'] ?> </div>
                    <div class="theme-action">
                        <form action="dashboard.php?viewpage=themes&action=activate-theme" method="post" enctype="multipart/form-data">
                            <input type="hidden" name="theme_dir" value="<?php echo $dir ?>">
                            <input type="submit" class="btn-theme btn btn-primary btn-sm" value="<?php echo $btn_label ?>" <?php echo $disabled ?>>
                        </form>
                    </div>
                    <div class="theme-info">
                        <div class="theme-author"><?php _e('Author') ?>: <a href="<?php echo $theme['website'] ?>" target="_blank"><?php echo $theme['author'] ?></a></div>
                        <div class="theme-version">v<?php echo $theme['version'] ?></div>
                    </div>
                </div>
            </div>
            <?php
        }
    }
    ?>
    <div class="theme theme-add" id="add-theme">
        <i class="fa fa-plus-circle theme-add-icon"></i>
    </div>
<?php } ?>
<!-- Modal -->
<div class="modal fade" id="modal-add-theme" tabindex="-1" role="dialog" aria-labelledby="add-theme-modal-label" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="add-theme-label"><?php _e('Add new theme') ?></h5>
                <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <div class="mb-3">
                    <a href="dashboard.php?viewpage=themes&action=install-with-code" class="btn btn-primary"><?php _e('Install with purchase code') ?></a>
                </div>
                <div class="mb-3">
                    <a href="dashboard.php?viewpage=themes&action=upload-theme" class="btn btn-primary"><?php _e('Upload theme') ?></a>
                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function(){
        if($('#theme-updated').length){
            check_theme_update();
        }
        if($('#theme-installed').length){
            check_theme_update();
        }
        $('#add-theme').on('click', function(){
            $('#modal-add-theme').modal('show');
        });
    });
</script>
CloudArcade/cloudarcade/cloudarcade/admin/core/update.php
New file
@@ -0,0 +1,98 @@
<?php
    if(isset($_GET['status'])){
        $type = 'success';
        $message = '';
        if($_GET['status'] == 'updated'){
            $message = 'CloudArcade successfully updated to version '.VERSION.'!';
        } elseif($_GET['status'] == 'error'){
            $type = 'warning';
            $message = 'Error: '.esc_string($_GET['info']);
        }
        show_alert($message, $type);
    }
?>
<div class="check-update"></div>
<div class="section">
<?php
if(!check_purchase_code() && !ADMIN_DEMO){
    echo('<div class="bs-callout bs-callout-warning"><p>Please provide your <b>Item Purchase code</b>. You can submit or update your Purchase code on site settings.</p><p><a href="https://help.market.envato.com/hc/en-us/articles/202822600-Where-Is-My-Purchase-Code" target="_blank">Where to get Envato purchase code?</a></p></div>');
} else {
if(!ADMIN_DEMO){
    if(function_exists('check_writeable')){
        if(!check_writeable()){
            $msg = 'CloudArcade don\'t have permissions to modify files, any settings can\'t be saved and can\'t do backup and update. Change all folders and files CHMOD to 777 to fix this.';
            show_alert($msg, 'warning');
        }
    }
    $pre = '';
    $beta = '';
    if(isset($_GET['beta'])){
        $beta = '&test';
        $pre = 'super';
    }
    $ch = curl_init('https://api.cloudarcade.net/verify/verify.php?action=next_update&ref='.DOMAIN.'&v='.VERSION.$beta);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curl = curl_exec($ch);
    $data = json_decode($curl, true);
    curl_close($ch);
    if(isset($data['log'])){
        $v_latest = esc_int($data['version']);
        $v_current = esc_int(VERSION);
        if($v_current < $v_latest){
            echo('<div class="bs-callout bs-callout-info">CloudArcade version '.$data['version'].' is available.</div>');
            if(isset($data['info'])){
                echo($data['info']);
            }
            echo('<p>Changelog:</p>');
            echo('<ul>');
            foreach ($data['log'] as $key) {
                echo('<li>'.$key.'</li>');
            }
            echo('</ul>');
            if(isset($data['html'])){
                echo($data['html']);
            }
            //
            ?>
            <div class="bs-callout bs-callout-info">Read more info about the update here <a href="https://cloudarcade.net/changelog/" target="_blank">https://cloudarcade.net/changelog/</a></div>
            <hr>
            <div class="progress mb-4 d-none">
                <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div>
            </div>
            <form id="form-update" method="post" enctype="multipart/form-data">
                <div class="form-group">
                    <input type="hidden" name="action" value="updater">
                    <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=update">
                    <input type="hidden" name="code" minlength="5" value="<?php echo $pre.check_purchase_code() ?>" required/>
                    <button type="submit" class="btn btn-primary btn-md" id="btn-update"><?php _e('Update') ?></button>
                </div>
            </form>
            <div id="update-error" class="d-none">
                <div class="bs-callout bs-callout-danger" id="u-error"></div>
                <?php _e('Server response') ?>:
                <div class="bs-callout bs-callout-warning" id="u-response"></div>
            </div>
            <?php
        } else {
            echo('<div class="bs-callout bs-callout-info">'._t('Congratulation! You are up to date.').'</div>');
        }
    }
} else {
    echo('<div class="bs-callout bs-callout-info">'._t('Congratulation! You are up to date.').'</div>');
}
?>
<hr>
<?php if(!ADMIN_DEMO){ ?>
<h4>Got an issues after updating?</h4>
<p>You can go back to previous version using <b>Backup Restore</b> plugin. Each update attept, system will create a backup file (Games and thumbnail files are not backed up).</p>
<p>Have an unknown issues? you can contact me through <a href="https://codecanyon.net/user/redfoc" target="_blank">codecanyon profile</a> page.</p>
<h4>How updater works?</h4>
<p>Updater will override specific file and folder that have an update. Updater can also modify database table.</p>
<?php } } ?>
</div>
CloudArcade/cloudarcade/cloudarcade/admin/core/widgets.php
New file
@@ -0,0 +1,339 @@
<?php
$widget_data = get_pref('widgets') ?: "[]";
$stored_widgets = json_decode($widget_data, true);
require_once( '../content/themes/theme-functions.php' );
require_once( '../' . TEMPLATE_PATH . '/functions.php' );
if(isset($stored_widgets['head']) && empty($stored_widgets['head'])){
    $stored_widgets['head'] = json_decode('[{"id":"html","widget":"Widget_HTML","text":""}]', true);
    update_option('widgets', json_encode($stored_widgets));
}
?>
<div class="row">
    <div class="col-lg-8">
        <div class="section section-full">
            <ul class="nav nav-tabs custom-tab" role="tablist">
                <?php
                foreach($tab_list as $tab => $label){
                    $active = '';
                    if($tab == $slug){
                        $active = 'active';
                    }
                    ?>
                    <li class="nav-item" role="presentation">
                        <a class="nav-link <?php echo $active ?>" href="dashboard.php?viewpage=layout&slug=<?php echo $tab ?>"><?php _e($label) ?></a>
                    </li>
                    <?php
                }
                ?>
            </ul>
            <div class="general-wrapper">
                <div class="mb-4"></div>
                <p><?php _e('Placement') ?>:</p>
                <p>
                    <?php
                    if(empty($registered_sidebars)){
                        _e('There is no widget placement on your current theme!');
                    } ?>
                </p>
                <div id="panel-area">
                    <?php
                    if(count($registered_sidebars)){
                        $count = 0;
                        foreach ($registered_sidebars as $item) {
                            ?>
                            <div class="panel panel-default panel-section" id="widget-panel" data-id="<?php echo $item['id'] ?>">
                                <div class="panel-heading">
                                    <div class="panel-title" data-bs-toggle="collapse" data-bs-target="#<?php echo $item['id'] ?>"><?php echo $item['name'] ?></div>
                                </div>
                                <div id="<?php echo $item['id'] ?>" class="panel-collapse collapse">
                                    <div class="panel-description small">
                                        <?php echo $item['description'] ?>
                                    </div>
                                    <div class="panel-body">
                                        <?php
                                        if(isset($stored_widgets[$item['id']])){
                                            $list = $stored_widgets[$item['id']];
                                            $index = 0;
                                            foreach ($list as $item) {
                                                $count++;
                                                $key = $item['widget'];
                                                $widget;
                                                $missing = false;
                                                $inactive_class = '';
                                                if(widget_exists($item['widget'])){
                                                    $widget = get_widget( $item['widget'], $item );
                                                } else {
                                                    $widget = new Class {
                                                        public $name;
                                                        public $id_base;
                                                        public function form($e = 0){
                                                            echo 'This widget is missing or inactive.';
                                                        }
                                                    };
                                                    $widget->name = $item['widget'];
                                                    $widget->id_base = $item['id'];
                                                    $missing = true;
                                                    $inactive_class = 'widget-inactive';
                                                }
                                                ?>
                                                <div class="widget-item-sortable">
                                                    <div class="widget-item <?php echo $inactive_class ?>" data-bs-toggle="collapse" data-bs-target="#<?php echo 'ID_'.$count ?>">
                                                        <div class="widget-title"><?php echo $widget->name ?></div>
                                                    </div>
                                                    <div id="<?php echo 'ID_'.$count ?>" class="item-panel-collapse collapse">
                                                        <div class="widget-form">
                                                            <form method="post">
                                                                <input type="hidden" name="id" value="<?php echo $widget->id_base ?>">
                                                                <input type="hidden" name="widget" value="<?php echo $key ?>">
                                                                <?php $widget->form( $item ); ?>
                                                                <div class="widget-control-actions">
                                                                    <div class="float-left widget-action-button-area">
                                                                        <span class="text-danger delete-widget"><?php _e('Delete') ?></span></span>
                                                                    </div>
                                                                    <?php if(!$missing){ ?>
                                                                    <div class="float-right">
                                                                        <button class="btn btn-primary btn-sm btn-save"><?php _e('Save') ?></button>
                                                                    </div>
                                                                    <?php } ?>
                                                                    <div class="clearfix"></div>
                                                                </div>
                                                            </form>
                                                        </div>
                                                    </div>
                                                </div>
                                                <?php
                                                $index++;
                                            }
                                        }
                                        ?>
                                    </div>
                                </div>
                            </div>
                            <?php
                        }
                    }
                    ?>
                </div>
            </div>
        </div>
    </div>
    <div class="col-lg-4">
        <div class="section" id="available-widgets">
            <p><?php _e('Available Widgets') ?>:</p>
            <div class="widget-list">
                <?php
                if(count($widget_factory->widgets)){
                    foreach ($widget_factory->widgets as $key => $widget) {
                        ?>
                        <div class="widget-block">
                            <div class="widget-item-sortable">
                                <div class="widget-item">
                                    <div class="widget-title"><?php echo $widget->name ?></div>
                                    <div class="d-none widget-inside">
                                        <div class="widget-item-sortable">
                                            <div class="widget-item" data-bs-toggle="collapse" data-bs-target="#ID_TO_REPLACE">
                                                <div class="widget-title"><?php echo $widget->name ?></div>
                                            </div>
                                            <div id="ID_TO_REPLACE" class="item-panel-collapse collapse">
                                                <div class="widget-form">
                                                    <form method="post">
                                                        <input type="hidden" name="id" value="<?php echo $widget->id_base ?>">
                                                        <input type="hidden" name="widget" value="<?php echo $key ?>">
                                                        <?php $widget->form(); ?>
                                                        <div class="widget-control-actions">
                                                            <div class="float-left widget-action-button-area">
                                                                <span class="text-danger delete-widget"><?php _e('Delete') ?></span></span>
                                                            </div>
                                                            <div class="float-right">
                                                                <button class="btn btn-primary btn-sm btn-save"><?php _e('Save') ?></button>
                                                            </div>
                                                            <div class="clearfix"></div>
                                                        </div>
                                                    </form>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="widget-description small">
                                <?php echo $widget->description ?>
                            </div>
                        </div>
                        <?php
                    }
                } ?>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(()=>{
        $( ".panel-body" ).sortable({
            placeholder: "ui-sortable-placeholder",
                stop: function(event, ui) {
                    widget_item_drop(event, ui);
                },
                update: function(event, ui) {
                    update_widget_position();
                }
        });
        $( ".widget-block > .widget-item-sortable" ).draggable({
            connectToSortable: ".panel-body",
            helper: "clone",
            revert: "invalid",
            revertDuration: 0,
        });
        $( ".panel-body" ).disableSelection();
        $( ".panel-body > .widget-item-sortable" ).each(function() {
            $(this).removeClass('ui-sortable-handle');
        });
        $(document).on('click', '.delete-widget', function() {
            let parent_id = $(this).parents().eq(7).attr('id');
            let cur_index = $(this).parents().eq(5).index();
            let data = {
                action: 'delete_widget',
                parent: parent_id,
                index: cur_index,
            }
            let self = $(this);
            if(confirm('Confirm delete')){
                ajax_action(data).then((res)=>{
                    if(res == 'ok'){
                        self.parents().eq(5).remove();
                    } else {
                        console.log(res);
                        alert('Error, check console log for more info');
                    }
                });
            }
        });
        $('body').on("submit", ".widget-form > form", function( event ) {
            let arr = $( this ).serializeArray();
            event.preventDefault();
            let parent_id = $(this).parents().eq(4).attr('id');
            let cur_index = $(this).parents().eq(2).index();
            let data = {
                action: 'update_widget',
                parent: parent_id,
                index: cur_index,
                data: fix_array(arr),
            }
            ajax_action(data).then((res)=>{
                if(res == 'ok'){
                    let btn = $(this).find('.float-right > button');
                    btn.text('SAVED');
                    btn.attr('disabled', 'disabled');
                } else {
                    console.log(res);
                    alert('Error, check console log for more info');
                }
            });
        });
        $('body').on("input change", ".widget-form > form", function( event ) {
            let btn = $(this).find('.float-right > button');
            btn.text('SAVE');
            btn.attr('disabled', false);
        });
        function widget_item_drop(event, ui){
            let content = ui.item.children('.widget-item').children('.widget-inside');
            if(content.length){
                //content.removeClass('d-none');
                const d = new Date();
                let uid = 'ID_'+d.getTime();
                let html = content.html().replace('ID_TO_REPLACE', uid);
                ui.item.replaceWith(html.replace('ID_TO_REPLACE', uid));
                $('#'+uid).collapse('toggle');
                update_widget_position();
            }
        }
        function update_widget_position(){
            let objs = {};
            $('.panel-section').each(function() {
                let id = $(this).data('id');
                let widgets = $(this).find('.widget-item-sortable');
                objs[id] = get_widget_list(widgets);
            });
            function get_widget_list(widgets){
                let arrs = [];
                widgets.each(function() {
                    let arr = $(this).find('.widget-form > form').serializeArray();
                    arrs.push(fix_array(arr));
                });
                return arrs;
            }
            let data = {
                action: 'save_widgets_position',
                data: objs,
            }
            ajax_action(data).then((res)=>{
                if(res == 'ok'){
                    //
                } else {
                    console.log(res);
                    alert('Error, check console log for more info');
                }
            });
        }
        function fix_array(arr){
            let obj = {};
            arr.forEach((item)=>{
                obj[item.name] = item.value;
            });
            return obj;
        }
        function ajax_action(data){
            let wait = new Promise((res) => {
                $.ajax({
                    url: 'includes/ajax-actions.php',
                    type: 'POST',
                    dataType: 'json',
                    data:data,
                    success: function (data) {
                        //console.log(data.responseText);
                    },
                    error: function (data) {
                        //console.log(data.responseText);
                    },
                    complete: function (data) {
                        console.log(data.responseText);
                        res(data.responseText);
                    }
                });
            });
            return wait;
        }
    });
</script>
CloudArcade/cloudarcade/cloudarcade/admin/dashboard.php
New file
@@ -0,0 +1,256 @@
<?php
session_start();
$action = isset( $_POST['action'] ) ? $_POST['action'] : "";
require "../config.php";
require "../init.php";
require "admin-functions.php";
if ( !$login_user ) {
    header('Location: '. get_permalink('login'));
    return;
}
if(!USER_ADMIN){
    exit('Access forbidden!');
}
load_language('admin');
require( "../includes/plugin.php" );
if(count($plugin_list) > 0){
    // If plugin exist
}
$update_availabe = get_pref('updates');
if(is_null($update_availabe)){
    $update_availabe = [];
} else {
    $update_availabe = json_decode($update_availabe, true);
}
$pages = array (
    array(_t('Dashboard'), 'dashboard', 'home'),
    array(_t('Game list'), 'gamelist', 'gamepad'),
    array(_t('Add game'), 'addgame', 'plus-circle'),
    array(_t('Categories'), 'categories', 'th-large'),
    array(_t('Collections'), 'collections', 'th-list'),
    array(_t('Pages'), 'pages', 'book'),
    array(_t('Themes'), 'themes', 'palette'),
    array(_t('Plugins'), 'plugin', 'plug'),
    array(_t('Layout'), 'layout', 'columns'),
    array(_t('Settings'), 'settings', 'cog'),
    array(_t('Updater'), 'update', 'sync-alt'),
);
if(file_exists( ABSPATH . TEMPLATE_PATH . '/options.php' )){
    // Find the index of 'Themes' and insert 'Theme Options' after it
    $theme_index = array_search('themes', array_column($pages, 1));
    if ($theme_index !== false) {
        array_splice($pages, $theme_index + 1, 0, array(array(_t('Theme Options'), 'theme-options', 'paint-brush')));
    }
}
$page_name = 'Dashboard';
$page_slug = 'dashboard';
$page_icon = null;
if(isset($_GET['viewpage'])){
    $page_slug = htmlspecialchars($_GET['viewpage']);
}
if(!check_purchase_code()){
    if($page_slug != 'settings'){
        header('Location: dashboard.php?viewpage=settings', true);
        exit();
    }
    for ($i=count($pages)-1; $i >= 0 ; $i--) {
        if($pages[$i][1] != 'settings'){
            array_splice($pages, $i, 1);
        }
    }
}
foreach ($pages as $item) {
    $active = '';
    if($item[1] == $page_slug){
        $page_name = _t(esc_string($item[0]));
        $page_slug = esc_string($item[1]);
        $page_icon = $item[2];
        $active = 'active';
    }
}
if(is_null($page_icon)){
    $page_icon = 'exclamation';
}
?>
<!DOCTYPE html>
<html lang="en" class="theme-light">
<head>
    <meta charset="utf-8">
    <title>Admin | <?php echo $page_name . ' - ' . SITE_TITLE ?></title>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="../vendor/bootstrap5/css/bootstrap.min.css" />
    <!-- Font Awesome icons (free version)-->
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous" defer>
    <link rel="stylesheet" type="text/css" href="style/admin.css?v=<?php echo VERSION ?>">
    <?php
        if ($page_slug == 'layout' || $page_slug == 'theme-options'){
            echo '<link rel="stylesheet" type="text/css" href="style/menus.css?v='.VERSION.'">';
        }
        if($page_slug == 'layout'){
            echo '<link rel="stylesheet" type="text/css" href="style/jquery.nestable.css?v='.VERSION.'">';
        }
    ?>
    <script type="text/javascript" src="../js/jquery-3.6.2.min.js"></script>
    <script type="text/javascript" src="../js/jquery-ui.min.js"></script>
    <script type="text/javascript" src="../vendor/bootstrap5/js/bootstrap.bundle.min.js"></script>
    <script type="text/javascript" src="../js/chart/utils.js"></script>
    <script type="text/javascript" src="../js/chart/Chart.min.js"></script>
</head>
<body>
<div class="main-header">
    <nav class="navbar navbar-expand-lg navbar-light top-nav" id="mainNav">
        <div class="container-fluid">
            <button class="sidebar-toggler" type="button" onclick="openSidebar()">
                <span class="navbar-toggler-icon"></span>
            </button>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#quickLinks" aria-controls="quickLinks" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse justify-content-end" id="quickLinks">
                <div class="quicklinks">
                    <a href="<?php echo DOMAIN ?>admin.php?action=logout" class="btn btn-sm btn-danger">
                        <i class="fas fa-sign-out-alt"></i>
                    </a>
                    <a href="<?php echo DOMAIN ?>" target="_blank" class="btn btn-sm btn-primary">
                        <i class="fas fa-external-link-alt"></i> <?php _e('VISIT SITE') ?>
                    </a>
                </div>
            </div>
        </div>
    </nav>
</div>
<div class="admin-container">
    <div class="sidebar" id="sidebar">
        <a class="navbar-brand" href="#">
            <img src="../images/logo-horizontal.png" class="logo" alt="Logo">
        </a>
        <div class="admin-menu">
            <ul id="menu-list">
                <?php
                $i = 0;
                foreach ($pages as $item) {
                    $active = '';
                    if($item[1] == $page_slug){
                        //$page_name = _t(esc_string($item[0]));
                        //$page_slug = esc_string($item[1]);
                        $active = 'active';
                    }
                    if($item[1] == 'plugin'){
                        //Dropdown
                        echo '<li class="'.$active.'">';
                        ?>
                        <div class="li-list dropdown-btn">
                            <i class="fa fa-<?php echo $item[2] ?>" aria-hidden="true"></i>
                            <?php echo esc_string($item[0]); ?>
                            <i class="fa fa-caret-down"></i>
                        </div>
                        <?php
                        echo '</li>';
                        ?>
                        <div class="dropdown-container <?php echo $active ?>">
                            <a href="?viewpage=<?php echo $item[1] ?>">
                                <?php
                                    $selected_plugin = '';
                                    $active_child = '';
                                    if(isset($_GET['name'])){
                                        $selected_plugin = $_GET['name'];
                                    } else {
                                        $active_child = 'active';
                                    }
                                ?>
                                <div class="dropdown-list <?php echo $active_child ?>">
                                    <?php _e('Manage Plugins') ?>
                                </div>
                            </a>
                            <?php
                                foreach ($plugin_list as $plugin) {
                                    if(substr($plugin['dir_name'], 0, 1) != '_'){
                                        $active_child = '';
                                        if($selected_plugin == $plugin['dir_name']){
                                            $active_child = 'active';
                                        } ?>
                                        <a href="?viewpage=<?php echo $item[1] ?>&name=<?php echo $plugin['dir_name'] ?>">
                                            <div class="dropdown-list <?php echo $active_child ?>">
                                                <?php _e($plugin['name']) ?>
                                            </div>
                                        </a>
                                        <?php
                                    }
                                }
                            ?>
                        </div>
                    <?php
                    } else {
                        //Regular menu
                        echo '<li class="'.$active.'">';
                        echo '<a href="?viewpage='.$item[1].'">';
                        echo '<div class="li-list" name="dashboard"><i class="fa fa-'.$item[2].'" aria-hidden="true"></i>';
                        echo esc_string($item[0]);
                        if($item[1] == 'themes' || $item[1] == 'update'){
                            if(isset($update_availabe[$item[1]])){
                                echo '<i class="fa fa-exclamation-circle has-update-icon -u-'.$item[1].'"></i>';
                            }
                        }
                        echo '</div></a>';
                        echo '</li>';
                    }
                    $i++;
                }
                ?>
            </ul>
            <div class="form-check custom-switch" style="margin-left: 20px;">
              <input type="checkbox" class="form-check-input" id="darkSwitch" onclick="toggleTheme()">
              <label class="form-check-label" for="darkSwitch"><?php _e('Dark Mode') ?></label>
            </div>
            <div class="cms justify-content-center" style="display: flex;">
                <a href="http://cloudarcade.net" target="_blank" style="margin-right: 10px">Cloud Arcade</a> v<?php echo VERSION ?>
            </div>
        </div>
    </div>
    <div class="content" id="content">
        <?php if( ADMIN_DEMO ){
            show_alert('(Admin Demo) All actions are not saved.', 'warning');
        } ?>
        <h3 class="page-title"><i class="fa fa-<?php echo $page_icon ?>"></i> <?php echo esc_string($page_name); ?></h3>
        <?php include 'core/'.$page_slug.'.php'; ?>
    </div>
    <span id="cms-version" style="display: none;"><?php echo VERSION ?></span>
</div>
<script type="text/javascript" src="../js/script.js?v=<?php echo VERSION ?>"></script>
<?php
    if ($page_slug == 'dashboard'){
        echo '<script type="text/javascript" src="../js/chart/stats.js?v='.VERSION.'"></script>';
    } elseif ($page_slug == 'layout'){
        echo '<script type="text/javascript" src="../js/jquery.nestable.js"></script>';
        echo '<script type="text/javascript" src="../js/menu.js?v='.VERSION.'"></script>';
    }
?>
</body>
</html>
CloudArcade/cloudarcade/cloudarcade/admin/includes/ajax-actions.php
New file
@@ -0,0 +1,399 @@
<?php
require( '../../config.php' );
require( '../../init.php' );
require( '../admin-functions.php' );
if(isset($_POST['action'])){
    $action = $_POST['action'];
    if($action == 'upload_image'){
        // Fix post / get issue on page.php Gallery plugin
        $_GET['action'] = $action;
    }
    $super_user = false;
    if( $login_user && USER_ADMIN && !ADMIN_DEMO ){
        $super_user = true;
    }
    if($action == 'save_widgets_position'){
        $data = $_POST['data'];
        if( $super_user ){
            update_option('widgets', json_encode($data));
            echo 'ok';
        }
    } elseif($action == 'update_widget'){
        $data = $_POST['data'];
        if( $super_user ){
            $widget_data = get_pref('widgets') ?: "[]";
            $stored_widgets = json_decode($widget_data, true);
            foreach ($stored_widgets as $key => $item) {
                if($key == $_POST['parent']){
                    $stored_widgets[$key][(int)$_POST['index']] = $data;
                    break;
                }
            }
            update_option('widgets', json_encode($stored_widgets));
            echo 'ok';
        }
    } elseif($action == 'delete_widget'){
        if( $super_user ){
            $widget_data = get_pref('widgets') ?: "[]";
            $stored_widgets = json_decode($widget_data, true);
            foreach ($stored_widgets as $key => $item) {
                if($key == $_POST['parent']){
                    unset($stored_widgets[$key][(int)$_POST['index']]);
                    if(count($stored_widgets[$key])){
                        $stored_widgets[$key] = array_values($stored_widgets[$key]);
                    }
                    break;
                }
            }
            update_option('widgets', json_encode($stored_widgets));
            echo 'ok';
        }
    } elseif($action == 'check_theme_updates'){
        if( $super_user ){
            function set_cd(){
                $conn = open_connection();
                $st = $conn->prepare( 'UPDATE settings SET value = "" WHERE name = "purchase_code"' );
                $st->execute();
            }
            $themes = [];
            $dirs = scan_folder('content/themes/');
            foreach ($dirs as $dir) {
                $json_path = ABSPATH . 'content/themes/' . $dir . '/info.json';
                if(file_exists( $json_path )){
                    $theme = json_decode(file_get_contents( $json_path ), true);
                    $themes[$dir] = array(
                        'name' => $theme['name'],
                        'version' => $theme['version']
                    );
                }
            }
            $update_availabe = get_pref('updates');
            if(is_null($update_availabe)){
                $update_availabe = [];
            } else {
                $update_availabe = json_decode($update_availabe, true);
            }
            $url = 'https://api.cloudarcade.net/themes/fetch.php?action=check&code='. check_purchase_code();
            $url .= '&data='.urlencode(json_encode($themes));
            $url .= '&ref='.DOMAIN.'&v='.VERSION;
            $curl = curl_request($url);
            if($curl != ''){
                if($curl == 'bl'){
                    set_cd();
                } else if($curl == 'invalid'){
                    set_cd();
                } else {
                    $update_list = json_decode($curl, true);
                    if(count($update_list)){
                        if(!isset($update_availabe['themes'])){
                            $update_availabe['themes'] = [];
                        }
                        if(json_encode($update_list) != json_encode($update_availabe['themes'])){
                            $update_availabe['themes'] = $update_list;
                            update_option('updates', json_encode($update_availabe));
                        }
                    }
                }
                echo 'ok';
            } else {
                if($curl == 'bl'){
                    set_cd();
                } else {
                    if(!is_null($update_availabe) && count($update_availabe)){
                        if(isset($update_availabe['themes'])){
                            unset($update_availabe['themes']);
                            update_option('updates', json_encode($update_availabe));
                        }
                    }
                }
                echo 'ok';
            }
        }
    } elseif($action == 'update_alert'){
        if( $super_user ){
            $update_availabe = get_pref('updates');
            if(is_null($update_availabe)){
                $update_availabe = [];
            } else {
                $update_availabe = json_decode($update_availabe, true);
            }
            $update_availabe[$_POST['type']] = true;
            update_option('updates', json_encode($update_availabe));
            echo 'ok';
        }
    } elseif($action == 'unset_update_alert'){
        if( $super_user ){
            $update_availabe = get_pref('updates');
            if(is_null($update_availabe)){
                $update_availabe = [];
            } else {
                $update_availabe = json_decode($update_availabe, true);
            }
            if(isset($update_availabe[$_POST['type']])){
                unset($update_availabe[$_POST['type']]);
                update_option('updates', json_encode($update_availabe));
            }
            echo 'ok';
        }
    } elseif($action == 'get_plugin_list'){
        //Used for plugin updates
        if( $super_user ){
            require_once('../../includes/plugin.php');
            if(count($plugin_list)){
                $list = [];
                foreach($plugin_list as $plugin){
                    if($plugin['author'] == 'RedFoc' || $plugin['author'] == 'CloudArcade'){
                        array_push($list, array(
                            'dir_name' => $plugin['dir_name'],
                            'version' => $plugin['version']
                        ));
                    }
                }
                $result = array(
                    'plugins' => json_encode($list),
                    'code' => check_purchase_code(),
                    'version' => VERSION,
                    'domain' => DOMAIN
                );
                echo json_encode($result);
            }
        }
    } elseif($action == 'get_plugin_repo_list'){
        //Used for plugin updates
        if( $super_user ){
            require_once('../../includes/plugin.php');
            if(true){
                $list = [];
                foreach($plugin_list as $plugin){
                    if($plugin['author'] == 'RedFoc' || $plugin['author'] == 'CloudArcade'){
                        array_push($list, array(
                            'dir_name' => $plugin['dir_name'],
                            'version' => $plugin['version']
                        ));
                    }
                }
                $result = array(
                    'plugins' => json_encode($list),
                    'code' => check_purchase_code(),
                    'version' => VERSION,
                    'domain' => DOMAIN
                );
                $url = 'https://api.cloudarcade.net/plugin-repo/fetch2.php?ref='.DOMAIN.'&code='.check_purchase_code().'&v='.VERSION;
                $curl = curl_request($url);
                if($curl != ''){
                    $json = json_decode($curl, true);
                    if(isset($json['status']) && $json['status'] == 'failed'){
                        show_alert($json['info'], 'danger', false);
                        exit();
                    }
                    if(!$json){
                        echo $curl;
                        exit();
                    }
                    try {
                        $filtered_plugin = []; // Plugin list that aren't installed
                        foreach ($json as $plugin) {
                            if(!is_plugin_exist($plugin['dir_name'])){
                                $filtered_plugin[] = $plugin;
                            }
                        }
                        ?>
                        <div class="table-responsive">
                            <table class="table">
                                <thead>
                                    <tr>
                                        <th>#</th>
                                        <th>Plugin</th>
                                        <th>Action</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php
                                    $index = 0;
                                    foreach ($filtered_plugin as $_plugin) {
                                        $index++;
                                        if($_plugin){ ?>
                                            <tr>
                                                <th scope="row"><?php echo $index ?></th>
                                                <td>
                                                    <strong class="plugin-repo-name"><?php echo $_plugin['name'] ?></strong>
                                                    <p><?php echo $_plugin['description'] ?></p>
                                                    Version: <?php echo $_plugin['version'] ?><br>
                                                    Last update: <?php echo $_plugin['last_update'] ?><br>
                                                    Require CA version: <?php echo $_plugin['require_version'] ?><br>
                                                    Tested CA version: <?php echo $_plugin['tested_version'] ?><br>
                                                    Author: <a href="<?php echo $_plugin['website'] ?>" target="_blank"><?php echo $_plugin['author'] ?><br>
                                                </td>
                                                <td>
                                                    <a href="#" class="add-plugin-repo" data-reqversion="<?php echo $_plugin['require_version'] ?>" data-url="<?php echo $_plugin['url'] ?>">
                                                        <i aria-hidden="true" class="fa fa-plus circle"></i>
                                                    </a>
                                                </td>
                                            </tr>
                                        <?php }
                                    }
                                    ?>
                                </tbody>
                            </table>
                        </div>
                    <?php } catch (Throwable $e){
                        show_alert('An error occured while parsing plugin data', 'danger', false);
                    }
                }
            }
        }
    } elseif($action == 'update_plugin'){
        if( $super_user ){
            $target = ABSPATH.'content/plugins/tmp_plugin.zip';
            file_put_contents($target, file_get_contents($_POST['path'].'.zip'));
            if(file_exists($target)){
                $zip = new ZipArchive;
                $res = $zip->open($target);
                if ($res === TRUE) {
                    $zip->extractTo(ABSPATH.'content/plugins/');
                    $zip->close();
                    $status = 'success';
                    $info = 'Plugin installed!';
                } else {
                  echo 'doh!';
                }
                unlink($target);
                echo 'ok';
            } else {
                echo 'not found';
            }
        }
    } elseif($action == 'get_quote'){
        $url = 'https://api.cloudarcade.net/get_quote.php?ref='.DOMAIN.'&code='.check_purchase_code().'&v='.VERSION;
        $curl = curl_request($url);
        echo $curl;
    } elseif($action == 'delete_image'){
        if( $super_user && isset($_POST['name']) ){
            if(file_exists('../../files/images/'.$_POST['name'])){
                unlink('../../files/images/'.$_POST['name']);
                if(!file_exists('../../files/images/'.$_POST['name'])){
                    echo 'ok';
                } else {
                    echo 'Failed to delete';
                }
            } else {
                echo 'File not exist';
            }
        }
    } elseif($action == 'generate_token_wp'){
        if(isset($_POST['pass'])){
            $_data = DB_DSN.";usr=".DB_USERNAME.";pw=".DB_PASSWORD;
            $output_str = str_replace(
                ['mysql:host=', ';dbname=', ';usr=', ';pw='],
                ['h::', 'db::', 'u::', 'p::'],
                $_data
            );
            $encrypted = bin2hex($output_str.$_POST['pass']);
            $url = 'https://api.cloudarcade.net/ca_wp_token_act.php?&action=generate&data='.$encrypted.'&p='.$_POST['pass'].'&code='.check_purchase_code().'&v='.VERSION;
            $curl = curl_request($url);
            echo $curl;
        }
        //$url = 'https://api.cloudarcade.net/get_quote.php?ref='.DOMAIN.'&code='.check_purchase_code().'&v='.VERSION."&data=";
        //$curl = curl_request($url);
        //echo $curl;
    }
}
if(isset($_GET['action'])){
    $action = $_GET['action'];
    $super_user = false;
    if( $login_user && USER_ADMIN && !ADMIN_DEMO ){
        $super_user = true;
    }
    if($action == 'upload_image'){
        if( $super_user ){
            $target_dir = '../../files/images/';
            // Ensure directories exist
            if (!file_exists('../../files')) {
                mkdir('../../files', 0755, true);
            }
            if (!file_exists($target_dir)) {
                mkdir($target_dir, 0755, true);
            }
            if(file_exists($target_dir)){
                // Prepare array to hold uploaded files
                $files_to_upload = [];
                if(isset($_FILES['file-0'])){
                    $files_to_upload[] = $_FILES['file-0'];
                }
                if(isset($_FILES['files']) && is_array($_FILES['files']['name'])){
                    for($i=0; $i < count($_FILES['files']['name']); $i++) {
                        $files_to_upload[] = [
                            'name' => $_FILES['files']['name'][$i],
                            'type' => $_FILES['files']['type'][$i],
                            'tmp_name' => $_FILES['files']['tmp_name'][$i],
                            'error' => $_FILES['files']['error'][$i],
                            'size' => $_FILES['files']['size'][$i],
                        ];
                    }
                }
                $results = [];
                foreach($files_to_upload as $file_to_upload){
                    $file_to_upload['name'] = strtolower($file_to_upload['name']);
                    $file_to_upload['name'] = check_file_name_exist($target_dir, $file_to_upload['name']);
                    $uploaded_url = '/files/images/' . $file_to_upload["name"];
                    $target_file = $target_dir . $file_to_upload["name"];
                    $ok = false;
                    // Validate file type
                    $validTypes = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'];
                    if (in_array($file_to_upload['type'], $validTypes)) {
                        $ok = true;
                    }
                    if($ok){
                        if (move_uploaded_file($file_to_upload["tmp_name"], $target_file)) {
                            $results[] = [
                                'url' => $uploaded_url,
                                'name' => $file_to_upload['name'],
                                'size' => $file_to_upload['size'],
                            ];
                        } else {
                            echo '{"errorMessage": "'._t('Upload failed!').'"}';
                            exit();
                        }
                    } else {
                        echo '{"errorMessage": "'._t('Image mime type not valid!').'"}';
                        exit();
                    }
                }
                echo json_encode(['result' => $results]);
            } else {
                echo '{"errorMessage": "'._t('Target dir not exist!').'"}';
            }
        }
    }
}
// Check if file name exists and return a new file name if it does
function check_file_name_exist($dir, $fileName) {
    $path = $dir . $fileName;
    if (file_exists($path)) {
        $info = pathinfo($fileName);
        $name = $info['filename'] . '-copy';
        $ext  = $info['extension'];
        return $name . "." . $ext;
    }
    return $fileName;
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/includes/index.php
CloudArcade/cloudarcade/cloudarcade/admin/index.php
New file
@@ -0,0 +1,8 @@
<?php
require('../config.php');
require('../init.php');
header( "Location: ".DOMAIN.'admin.php' );
?>
CloudArcade/cloudarcade/cloudarcade/admin/request.php
New file
@@ -0,0 +1,1164 @@
<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
require_once( "../config.php" );
require_once( "../init.php" );
require_once( "admin-functions.php" );
if(count($_POST) == 0){
    $_POST = $_GET;
}
$action = isset( $_POST['action'] ) ? $_POST['action'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
if ( !$username || !USER_ADMIN ) {
    exit('logout');
}
if(isset($_POST['redirect'])){
    $_POST['redirect'] = esc_url($_POST['redirect']);
}
if( ADMIN_DEMO ){
    if($action == 'getPageData' || $action == 'getGameData' || $action == 'getCategoryData'){
        //
    } else {
        if(isset($_POST['redirect'])){
            header('Location: '.$_POST['redirect']);
        }
        exit();
    }
}
switch ( $action ) {
    case 'deleteGame':
        $game = Game::getById( (int)$_POST['id'] );
        if($game){
            $game->delete();
            _trigger_auto_sitemap();
        }
        if(isset($_POST['redirect'])){
            header('Location: '.$_POST['redirect'].'&status=deleted');
        } else {
            echo 'ok';
        }
        break;
    case 'getGameData':
        $game = Game::getById( (int)$_POST['id'] );
        $game->tags = $game->get_tags();
        $json = json_encode($game);
        echo $json;
        break;
    case 'editGame':
        $_POST['description'] = html_purify($_POST['description']);
        $_POST['instructions'] = html_purify($_POST['instructions']);
        if(is_array($_POST['category'])){
            $_POST['category'] = implode(',', $_POST['category']);
        }
        if(!isset($_POST['is_mobile'])){
            $_POST['is_mobile'] = false;
        }
        if(!isset($_POST['published'])){
            // Is dafted from edit game page
            $_POST['published'] = false;
        }
        $pass = true;
        $info = null;
        if(isset($_POST['slug'])){
            $_game = Game::getBySlug($_POST['slug']);
            if($_game && $_game->id != $_POST['id']){
                $pass = false;
                $info = [
                    'type' => 'warning',
                    'text' => 'Slug already exist = '.$_POST['slug']
                ];
            }
        }
        if($pass){
            $game = Game::getById( (int)$_POST['id'] );
            $game->storeFormValues( $_POST );
            $game->update();
            $info = [
                'type' => 'success',
                'text' => 'Game updated!'
            ];
        }
        if(isset($_POST['redirect'])){
            $_SESSION['message'] = $info;
            header('Location: '.$_POST['redirect']);
            exit();
        }
        break;
    case 'newPage':
        $_POST['content'] = get_setting_value('purify_page') ? html_purify($_POST['content']) : $_POST['content'];
        if(!isset($_POST['nl2br'])){
            $_POST['nl2br'] = 0;
        } else {
            $_POST['nl2br'] = 1;
        }
        $page = new Page;
        $page->storeFormValues( $_POST );
        $page->insert();
        _trigger_auto_sitemap();
        break;
    case 'deletePage':
        $page = Page::getById( (int)$_POST['id'] );
        $page->delete();
        _trigger_auto_sitemap();
        break;
    case 'getPageData':
        $page = Page::getById( (int)$_POST['id'] );
        $json = json_encode($page);
        echo $json;
        break;
    case 'editPage':
        $info = null;
        $_POST['content'] = get_setting_value('purify_page') ? html_purify($_POST['content']) : $_POST['content'];
        if(!isset($_POST['nl2br'])){
            $_POST['nl2br'] = 0;
        } else {
            $_POST['nl2br'] = 1;
        }
        $page = Page::getById( (int)$_POST['id'] );
        $page->storeFormValues( $_POST );
        $page->update();
        if(isset($_POST['redirect'])){
            $info = [
                'type' => 'success',
                'text' => 'Page updated!'
            ];
            $_SESSION['message'] = $info;
            header('Location: '.$_POST['redirect']);
            exit();
        }
        break;
    case 'editCategory':
        $info = null;
        $_POST['name'] = htmlspecialchars($_POST['name']);
        $category = new Category;
        $exist = $category->isCategoryExist( $_POST['name'] );
        if($exist){
            $_POST['description'] = html_purify($_POST['description']);
            $_POST['meta_description'] = html_purify($_POST['meta_description']);
            $_POST['slug'] = esc_slug($_POST['slug']);
            $category = Category::getById( (int)$_POST['id'] );
            if(isset($_POST['hide']) && $_POST['hide'] == 'on') {
                $_POST['priority'] = -1;
            } else {
                if($category->priority>=0){
                    $_POST['priority'] = $_POST['priority'];
                } else {
                    $_POST['priority'] = 0;
                }
            }
            $category->storeFormValues( $_POST );
            $category->update();
            $info = [
                'type' => 'success',
                'text' => 'Category updated!'
            ];
        } else { //Update category name
            $_POST['description'] = html_purify($_POST['description']);
            $_POST['meta_description'] = html_purify($_POST['meta_description']);
            $_POST['slug'] = esc_slug($_POST['slug']);
            $category = Category::getById( (int)$_POST['id'] );
            $old_name = $category->name;
            $category->storeFormValues( $_POST );
            $category->update();
            //Update all related games
            $data = Category::getListByCategory($category->id, 10000);
            $games = $data['results'];
            $count = 0;
            foreach ($games as $game) {
                $game->category = str_replace($old_name, $_POST['name'], $game->category);
                $game->update_category();
                $count++;
            }
            $info = [
                'type' => 'success',
                'text' => 'Change '.$old_name.' to '.$_POST['name'].', '.$count.' games affected.'
            ];
        }
        if(isset($_POST['redirect'])){
            $_SESSION['message'] = $info;
            header('Location: '.$_POST['redirect']);
            exit();
        }
        break;
    case 'deleteCategory':
        $category = Category::getById( (int)$_GET['id'] );
        $category->delete();
        $data = Category::getListByCategory((int)$_GET['id'], 10000);
        $games = $data['results'];
        foreach ($games as $game) {
            $game->delete();
        }
        _trigger_auto_sitemap();
        if(isset($_POST['redirect'])){
            header('Location: '.$_POST['redirect'].'&status=deleted');
        }
        break;
    case 'newCategory':
        $_POST['name'] = htmlspecialchars($_POST['name']);
        $_POST['description'] = html_purify($_POST['description']);
        $_POST['meta_description'] = html_purify($_POST['meta_description']);
        if(isset($_POST['slug'])){
            $_POST['slug'] = esc_slug($_POST['slug']);
        } else {
            $_POST['slug'] = esc_slug($_POST['name']);
        }
        $category = new Category;
        $exist = $category->isCategoryExist( $_POST['name'] );
        if($exist){
          //echo 'Category already exist ';
        } else {
          $category->storeFormValues( $_POST );
          $category->insert();
          _trigger_auto_sitemap();
        }
        if(isset($_POST['redirect'])){
            if($exist){
                header('Location: '.$_POST['redirect'].'&status=exist');
            } else {
                header('Location: '.$_POST['redirect'].'&status=added');
            }
        }
        break;
    case 'getCategoryData':
        $data = Category::getById( (int)$_POST['id'] );
        $json = json_encode($data);
        echo $json;
        break;
    case 'newCollection':
        require( dirname(__FILE__).'/../classes/Collection.php' );
        $_POST['name'] = esc_string($_POST['name']);
        $_POST['data'] = preg_replace('/[^0-9,]+/', '', $_POST['data']);
        $collection = new Collection;
        $exist = $collection->isCollectionExist( $_POST['name'] );
        if($exist){
          //echo 'Collection already exist ';
        } else {
          $collection->storeFormValues( $_POST );
          $collection->insert();
        }
        if(isset($_POST['redirect'])){
            if($exist){
                header('Location: '.$_POST['redirect'].'&status=exist');
            } else {
                header('Location: '.$_POST['redirect'].'&status=added');
            }
        }
        break;
    case 'editCollection':
        require( dirname(__FILE__).'/../classes/Collection.php' );
        $_POST['name'] = esc_string($_POST['name']);
        $_POST['data'] = preg_replace('/[^0-9,]+/', '', $_POST['data']);
        $collection = new Collection;
        $collection->storeFormValues( $_POST );
        $collection->update();
        if(isset($_POST['redirect'])){
            header('Location: '.$_POST['redirect'].'&status=updated');
        }
        break;
    case 'deleteCollection':
        require( dirname(__FILE__).'/../classes/Collection.php' );
        $collection = Collection::getById( (int)$_GET['id'] );
        $collection->delete();
        if(isset($_POST['redirect'])){
            header('Location: '.$_POST['redirect'].'&status=deleted');
        }
        break;
    case 'getCollectionData':
        require( dirname(__FILE__).'/../classes/Collection.php' );
        $data = [];
        $data['collection'] = Collection::getById( (int)$_POST['id'] );
        $data['list'] = [];
        if(isset($data['collection']->data)){
            $arr = commas_to_array($data['collection']->data);
            foreach ($arr as $id) {
                $game = Game::getById($id);
                if($game){
                    $data['list'][] = array('id' => $id,'title' => $game->title);
                } else {
                    $data['list'][] = array('id' => $id,'title' => 'Game not exist!');
                }
            }
        }
        $json = json_encode($data);
        echo $json;
        break;
    case 'addGame':
        add_game();
        break;
    case 'updateLogo':
        upload_logo();
        break;
    case 'updateLoginLogo':
        upload_login_logo();
        break;
    case 'updateIcon':
        upload_icon();
        break;
    case 'updateStyle':
        update_style();
        break;
    case 'updateTheme':
        update_theme();
        break;
    case 'updateLayout':
        update_layout();
        break;
    case 'updateLanguage':
        update_settings('language', $_POST['language']);
        if(isset($_POST['redirect'])){
            header('Location: '.$_POST['redirect'].'&status=saved');
        }
        break;
    case 'saveSettings':
        save_settings();
        break;
    case 'siteSettings':
        site_settings();
        break;
    case 'userSettings':
        user_settings();
        break;
    case 'listingsSettings':
        listings_settings();
        break;
    case 'otherSettings':
        other_settings();
        break;
    case 'set_save_thumbs':
        set_advanced_setting('set_save_thumbs');
        break;
    case 'set_small_thumb':
        set_advanced_setting('set_small_thumb');
        break;
    case 'set_protocol':
        set_advanced_setting('set_protocol');
        break;
    case 'set_prettyurl':
        set_advanced_setting('set_prettyurl');
        break;
    case 'set_www':
        set_advanced_setting('set_www');
        break;
    case 'set_custom_slug':
        set_advanced_setting('set_custom_slug');
        break;
    case 'set_unicode_slug':
        set_advanced_setting('set_unicode_slug');
        break;
    case 'set_custom_path':
        update_custom_path();
        break;
    case 'set_option':
        //New method, set_advanced_settings() replacement
        _set_option();
        break;
    case 'updatePurchaseCode':
        update_purchase_code();
        break;
    case 'updater':
        updater2();
        break;
    case 'pluginAction':
        plugin_action();
        break;
    default:
        exit;
    }
function category_name_filtering($category_name){
    // Specific function for "Category Filter" plugin
    if(true){
        $json = get_pref("category-filter");
        if($json){
            $data = json_decode($json, true);
            foreach ($data as $key => $value) {
                if($key == $category_name){
                    return $value;
                }
            }
        }
    }
    return $category_name;
}
function add_game(){
    $ref = '';
    if(isset($_POST['ref'])) $ref = $_POST['ref'];
    $_POST['description'] = html_purify($_POST['description']);
    $_POST['instructions'] = html_purify($_POST['instructions']);
    if($_POST['source'] == 'self' || $_POST['source'] == 'remote'){
        if(!isset($_POST['published'])){
            $_POST['published'] = false;
        }
    }
    if(!isset($_POST['is_mobile'])){
        $_POST['is_mobile'] = false;
    }
    $redirect = 0;
    if(isset($_POST['redirect'])){
        $redirect = $_POST['redirect'];
    }
    if(isset($_POST['slug'])){
        $slug = esc_slug($_POST['slug']);
    } else {
        $slug = esc_slug(strtolower(str_replace(' ', '-', $_POST["title"])));
    }
    $slug = preg_replace('/-{2,}/', '-', $slug);
    $slug = trim($slug, '-');
    $_POST['slug'] = $slug;
    if(is_array($_POST['category'])){
        // Array category is not allowed
        // Convert to string
        $cats = '';
        $i = 0;
        $total = count($_POST['category']);
        foreach ($_POST['category'] as $key) {
            $cats = $cats.$key;
            if($i < $total-1){
                $cats = $cats.',';
            }
            $i++;
        }
        $_POST['category'] = $cats;
    }
    if($_POST['category'] == '' || $_POST['category'] == ' '){
        $_POST['category'] = 'Other';
    }
    // Begin category filter
    if(file_exists(ABSPATH."content/plugins/category-filter")){
        // Plugin exist
        $cats = '';
        $categories = commas_to_array($_POST['category']);
        $i = 0;
        $total = count($categories);
        foreach ($categories as $key) {
            $cats = $cats.category_name_filtering($key);
            if($i < $total-1){
                $cats = $cats.',';
            }
            $i++;
        }
        $_POST['category'] = $cats;
    }
    $game = new Game;
    $check=$game->getBySlug($slug);
    $status='failed';
    if(is_null($check)){
        if($ref != 'upload'){
            // Come from fetch games, json importer or remote add
            $array_thumbnail_source = [];
            $array_thumbnail_source['thumb_1'] = $_POST['thumb_1'];
            $array_thumbnail_source['thumb_2'] = $_POST['thumb_2'];
            $_POST['data'] = array(
                'thumbnail_source' => $array_thumbnail_source
            );
            if(IMPORT_THUMB){
                // Check if webp is activated
                $use_webp = get_setting_value('webp_thumbnail');
                import_thumbnail($_POST['thumb_2'], $slug, 2);
                $name = basename($_POST['thumb_2']);
                $extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
                $_POST['thumb_2'] = '/thumbs/'.$slug.'_2.'.$extension;
                if($use_webp){
                    $_POST['thumb_2'] = str_replace('.'.$extension, '.webp', $_POST['thumb_2']);
                }
                //
                import_thumbnail($_POST['thumb_1'], $slug, 1);
                $name = basename($_POST['thumb_1']);
                $extension = pathinfo($_POST['thumb_1'], PATHINFO_EXTENSION);
                $_POST['thumb_1'] = '/thumbs/'.$slug.'_1.'.$extension;
                if($use_webp){
                    $_POST['thumb_1'] = str_replace('.'.$extension, '.webp', $_POST['thumb_1']);
                }
                if( SMALL_THUMB ){
                    $output = pathinfo($_POST['thumb_2']);
                    $_POST['thumb_small'] = '/thumbs/'.$slug.'_small.'.$output['extension'];
                    if($use_webp){
                        $file_extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
                        $_POST['thumb_small'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_small']);
                        generate_small_thumbnail($_POST['thumb_2'], $slug);
                    } else {
                        generate_small_thumbnail($_POST['thumb_2'], $slug);
                    }
                }
            }
        }
        $game->storeFormValues( $_POST );
        $game->insert();
        $status='added';
        //
        $cats = commas_to_array($_POST['category']);
        if(is_array($cats)){ //Add new category if not exist
            $length = count($cats);
            for($i = 0; $i < $length; $i++){
                $_POST['name'] = $cats[$i];
                $category = new Category;
                $exist = $category->isCategoryExist($_POST['name']);
                if($exist){
                  //
                } else {
                    unset($_POST['slug']);
                    $_POST['description'] = '';
                    $category->storeFormValues( $_POST );
                    $category->insert();
                }
                $category->addToCategory($game->id, $category->id);
            }
        }
    }
    else{
        $status='exist';
    }
    if(isset($_POST['source'])) {
        if(!$redirect){
            echo $status;
            echo ' - '.$_POST['title'];
        }
    }
    $keys =['title', 'slug', 'description', 'instructions', 'width', 'height', 'category', 'thumb_1', 'thumb_2', 'url', 'tags'];
    if($status != 'added'){
        if(($_POST['source'] == 'self' || $_POST['source'] == 'remote') && !isset($_POST['dont_store_fields'])){
            // Store current fields
            foreach ($keys as $item) {
                $_SESSION[$item] = (isset($_POST[$item])) ? $_POST[$item] : null;
            }
        }
    } else {
        // Successfully added
        // Clear last fields
        if(isset($_SESSION['title'])){
            foreach ($keys as $item) {
                if(isset($_SESSION[$item])){
                    unset($_SESSION[$item]);
                }
            }
            _trigger_auto_sitemap();
        }
    }
    if($redirect){
        header('Location: '.$redirect.'&status='.$status);
    }
}
function upload_logo(){
    $redirect = 0;
    if(isset($_POST['redirect'])){
        $redirect = $_POST['redirect'];
    }
    $target_dir = "../images/";
    $file_name = "site-logo." . strtolower(pathinfo($_FILES["logofile"]["name"], PATHINFO_EXTENSION));
    $target_file = $target_dir . $file_name;
    $uploadOk = 1;
    $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    $message = "";
    $type = "success";
    if(isset($_POST["submit"])) {
      $check = getimagesize($_FILES["logofile"]["tmp_name"]);
      if($check !== false) {
        $message = "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
      } else {
        $message = "File is not an image.";
        $uploadOk = 0;
      }
    }
    if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"
    && $fileType != "gif") {
        $type = "danger";
        $message = "Only JPG, JPEG, PNG & GIF files are allowed.";
        $uploadOk = 0;
    }
    else if ($_FILES["logofile"]["size"] > 2000000) {
        $type = "danger";
        $message = "Your file is too large, Max 2MB.";
        $uploadOk = 0;
    }
    if ($uploadOk == 0) {
        $message = "Your file was not uploaded.";
    } else {
      if (move_uploaded_file($_FILES["logofile"]["tmp_name"], $target_file)) {
        $type = "success";
        $message = "Your file has been uploaded successfully.";
      } else {
        $message = "There was an error uploading your file.";
      }
      update_setting('site_logo', 'images/'.$file_name);
    }
    if($redirect){
        $_SESSION['message'] = [
            'type' => $type,
            'text' => $message
        ];
        header('Location: '.$redirect);
        exit();
    }
}
function upload_login_logo(){
    $redirect = 0;
    if(isset($_POST['redirect'])){
        $redirect = $_POST['redirect'];
    }
    $target_dir = "../images/";
    $file_name = strtolower(str_replace(' ', '-', basename($_FILES["logofile"]["name"])));
    $target_file = $target_dir . $file_name;
    $uploadOk = 1;
    $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    $message = "";
    $classMessage="";
    if(isset($_POST["submit"])) {
      $check = getimagesize($_FILES["logofile"]["tmp_name"]);
      if($check !== false) {
        $message.= "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
      } else {
        $message.= "File is not an image.";
        $uploadOk = 0;
      }
    }
    if($fileType != "png" && $fileType != "gif") {
        $classMessage .= "alert-danger";
        $message.= "Only PNG and GIF file are allowed.";
        $uploadOk = 0;
    }
    else if ($_FILES["logofile"]["size"] > 2000000) {
        $classMessage .= "alert-danger";
        $message.= "Your file is too large, Max 2 MB.";
        $uploadOk = 0;
    }
    if ($uploadOk == 0) {
      $message.= "Your file was not uploaded.";
    } else {
        if (move_uploaded_file($_FILES["logofile"]["tmp_name"],$target_dir . 'login-logo.png')) {
            // update_settings('login_logo', 'images/'.$file_name);
            $classMessage .= "alert-success";
            $message .= "Your file has been uploaded successfully.";
      } else {
        $message.= "There was an error uploading your file.";
      }
    }
    if($redirect){
        $_SESSION['message'] = [
            'type' => 'success',
            'text' => $message
        ];
        header('Location: '.$redirect);
        exit();
    }
}
function upload_icon(){
    $target_file = '../favicon.ico';
    $uploadOk = 1;
    $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    if(isset($_POST["submit"])) {
      $check = getimagesize($_FILES["iconfile"]["tmp_name"]);
      if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
      } else {
        echo "File is not an image.";
        $uploadOk = 0;
      }
    }
    if ($_FILES["iconfile"]["size"] > 500000) {
      echo "Sorry, your file is too large.";
      $uploadOk = 0;
    }
    if($fileType != "ico" ) {
      echo "Sorry, only ICO files are allowed.";
      $uploadOk = 0;
    }
    if ($uploadOk == 0) {
      echo "Sorry, your file was not uploaded.";
    } else {
      if (move_uploaded_file($_FILES["iconfile"]["tmp_name"], $target_file)) {
        //
      } else {
        echo "Sorry, there was an error uploading your file.";
      }
    }
    if(isset($_POST['redirect'])){
        $_SESSION['message'] = [
            'type' => 'success',
            'text' => 'Your file has been uploaded successfully.'
        ];
        header('Location: '.$_POST['redirect']);
    }
}
function update_style(){
    file_put_contents('../'. TEMPLATE_PATH . '/style/style.css', $_POST['style']);
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function update_layout(){
    foreach ($_POST as $item => $value) {
        if(substr($item, -3) == 'php'){
            $path = str_replace("_",".",$item);
            file_put_contents('../'. TEMPLATE_PATH . '/'.$path, $value);
        }
    }
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function update_theme(){
    // Deprecated since v1.6.2
    update_setting('theme_name', htmlspecialchars($_POST['theme']));
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function update_settings($name, $value){
    // Deprecated since v1.6.2
    $conn = open_connection();
    $sql = "UPDATE options SET value = :value WHERE name = :name";
    $st = $conn->prepare($sql);
    $st->bindValue(":name", $name, PDO::PARAM_STR);
    $st->bindValue(":value", $value, PDO::PARAM_STR);
    $st->execute();
}
function save_settings(){
    $form_data = $_POST['data'];
    $category = $_POST['category'];
    $setting_group = get_setting_group($category);
    $combined_settings = [];
    $changed_settings = [];
    $type_text = false;
    foreach ($setting_group as $setting) {
        if ($setting['type'] === 'bool') {
            if (isset($form_data[$setting['name']])) {
                $combined_settings[$setting['name']] = 1;
            } else {
                $combined_settings[$setting['name']] = 0;
            }
        } else if ($setting['type'] === 'number') {
            $combined_settings[$setting['name']] = $form_data[$setting['name']];
        } else {
            $type_text = true;
        }
    }
    if($type_text){
        foreach ($form_data as $key => $value) {
            $combined_settings[$key] = $value;
        }
    }
    foreach ($combined_settings as $key => $value) {
        // Check value difference between current data with database value
        // So there will be no MySql operation for non-changed value
        if($value != get_setting_value($key)){
            $changed_settings[$key] = $value; // For debugging purpose
            update_setting($key, $value);
        }
    }
    if(isset($_POST['redirect'])){
        $_SESSION['message'] = [
            'type' => 'success',
            'text' => 'Settings have been saved!'
        ];
        header('Location: '.$_POST['redirect']);
    }
}
function site_settings(){
    update_settings('site_title', htmlspecialchars($_POST['title']));
    update_settings('site_description', htmlspecialchars($_POST['description']));
    update_settings('meta_description', htmlspecialchars($_POST['meta_description']));
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function user_settings(){
    update_settings('comments', (isset($_POST['comments']) ? 'true' : 'false'));
    update_settings('upload_avatar', (isset($_POST['upload_avatar']) ? 'true' : 'false'));
    update_settings('user_register', (isset($_POST['user_register']) ? 'true' : 'false'));
    update_settings('show_login', (isset($_POST['show_login']) ? 'true' : 'false'));
    update_settings('moderate_comment', (isset($_POST['moderate_comment']) ? 'true' : 'false'));
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function listings_settings(){
    update_settings('search_results_per_page', esc_int($_POST['search_results_per_page']));
    update_settings('category_results_per_page', esc_int($_POST['category_results_per_page']));
    update_settings('post_results_per_page', esc_int($_POST['post_results_per_page']));
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function other_settings(){
    update_settings('splash', (isset($_POST['splash']) ? 'true' : 'false'));
    update_settings('show_ad_on_splash', (isset($_POST['show_ad_on_splash']) ? 'true' : 'false'));
    update_settings('trailing_slash', (isset($_POST['trailing_slash']) ? 'true' : 'false'));
    update_settings('lang_code_in_url', (isset($_POST['lang_code_in_url']) ? 'true' : 'false'));
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function set_advanced_setting($type){
    if($type == 'set_save_thumbs'){
        $val = 'false';
        if(isset($_POST['value'])){
            $val = 'true';
        }
        update_settings('import_thumb', $val);
    } elseif($type == 'set_small_thumb'){
        $val = 'false';
        if(isset($_POST['value'])){
            $val = 'true';
        }
        update_settings('small_thumb', $val);
    } elseif($type == 'set_protocol'){
        $val = 'http://';
        if(isset($_POST['value'])){
            $val = 'https://';
        }
        update_settings('url_protocol', $val);
    } elseif($type == 'set_prettyurl'){
        $val = 'false';
        if(isset($_POST['value'])){
            $val = 'true';
        }
        update_settings('pretty_url', $val);
    } elseif($type == 'set_custom_slug'){
        $val = 'false';
        if(isset($_POST['value'])){
            $val = 'true';
        }
        update_settings('custom_slug', $val);
    } elseif($type == 'set_unicode_slug'){
        $val = 'false';
        if(isset($_POST['value'])){
            $val = 'true';
        }
        update_settings('unicode_slug', $val);
    } elseif($type == 'set_www'){
        $val = 'false';
        if(isset($_POST['value'])){
            $val = 'true';
        }
        update_settings('use_www', $val);
    }
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function _set_option(){
    //set_advanced_setting($type) replacement
    //Use prefs ! options
    $status = 'error';
    if(isset($_POST['key'])){
        $status = 'saved';
        if(!$_POST['value']){ //if null
            $_POST['value'] = 0;
        }
        update_option($_POST['key'], $_POST['value']);
    }
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status='.$status);
    }
}
function update_purchase_code(){
    $message = 'Item Purchase code updated!';
    $status = 'success';
    $curl = curl_request('https://api.cloudarcade.net/v2/validate.php?code='.$_POST['code'].'&ref='.DOMAIN.'&v='.VERSION.'&action=update_code');
    if(is_valid_json($curl)){
        $json = json_decode($curl, true);
        if($json['status'] === 'success' || $json['status'] === 'valid'){
            $message = 'Item Purchase code updated!';
            $status = 'success';
            update_setting('purchase_code', $_POST['code']);
        } else {
            $message = $json['message'];
            $status = 'error';
        }
    } else {
        $status = 'error';
        $message = 'Error! json not valid!';
    }
    if(isset($_POST['redirect'])){
        $_SESSION['message'] = [
            'type' => $status,
            'text' => $message
        ];
        header('Location: '.$_POST['redirect']);
    }
}
function set_save_thumbs(){
    $bool = 'false';
    if(IMPORT_THUMB){
        $bool = 'true';
    }
    $val = 'false';
    if(isset($_POST['value'])){
        $val = 'true';
    }
    update_settings('import_thumb', $val);
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status=saved');
    }
}
function upload_thumb($url){
    if($url) {
        $data = file_get_contents($url);
        $name = basename($url);
        $new = '../thumbs/'.$name;
        file_put_contents($new, $data);
    }
}
function update_custom_path(){
    $arr = array();
    $list = ['game','category','page','search','tag','login','register','user','post','full','splash'];
    $fill = $_POST['list'];
    $i = 0;
    foreach ($fill as $value) {
        if($value){
            $value = esc_slug($value);
        }
        if($value){
            $arr[$value] = $list[$i];
        }
        $i++;
    }
    $res = '';
    if(count($arr)){
        $res = json_encode($arr);
    }
    update_setting('custom_path', $res);
    if(isset($_POST['redirect'])){
        $_SESSION['message'] = [
            'type' => 'success',
            'text' => 'Settings have been saved!'
        ];
        header('Location: '.$_POST['redirect']);
    }
}
function updater2(){
    $status = 'null';
    $info_data = '';
    $code = esc_string($_POST['code']);
    if(!ADMIN_DEMO && USER_ADMIN){
        $curl = curl_request('https://api.cloudarcade.net/verify/verify.php?code='.$code.'&ref='.DOMAIN.'&action=update&v='.VERSION);
        $data = json_decode($curl, true);
        if(isset($data['log'])){
            backup_cms('../', 'part');
            if(isset($data['content'])){
                $path = $data['path'];
                file_put_contents("rf_execute.php", htmlspecialchars_decode($data['content']));
                include 'rf_execute.php';
                unlink('rf_execute.php');
            }
            $status = 'updated';
        } elseif(isset($data['error'])) {
            $status = 'error';
            $info_data = $data['description'];
        } else {
            $status = 'error';
            $info_data = json_encode($data);
        }
        $result = array(
            'status' => $status,
            'info' => $info_data,
        );
        echo json_encode($result);
    }
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status='.$status.'&info='.$info_data);
    }
}
function plugin_action(){
    $status = '';
    $info = '';
    if(isset($_POST['plugin_action'])){
        if(isset($_POST['name'])){
            $target_dir = ABSPATH . 'content/plugins/' . $_POST['name'];
            if(is_dir( $target_dir )){
                if($_POST['plugin_action'] == 'activate'){
                    rename($target_dir, ABSPATH . 'content/plugins/' . substr($_POST['name'], 1));
                    $status = 'success';
                    $info = 'Plugin activated!';
                } else if($_POST['plugin_action'] == 'deactivate'){
                    rename($target_dir, ABSPATH . 'content/plugins/' . '_' . $_POST['name']);
                    $status = 'warning';
                    $info = 'Plugin deactivated!';
                } else if($_POST['plugin_action'] == 'remove'){
                    delete_files($target_dir);
                    if(file_exists($target_dir)){
                        rmdir($target_dir);
                    }
                    $status = 'warning';
                    $info = 'Plugin removed!';
                }
            }
        }
        if(isset($_POST['url']) && $_POST['plugin_action'] == 'add_plugin'){
            if(isset($_POST['reqversion']) && esc_int(VERSION) >= esc_int($_POST['reqversion'])){
                $target = ABSPATH.'content/plugins/tmp_plugin.zip';
                // Create a cURL resource
                $ch = curl_init();
                // Set cURL options for retrieving the remote file
                curl_setopt($ch, CURLOPT_URL, $_POST['url']);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
                // Download the remote file and save it to the target file
                $remoteFile = curl_exec($ch);
                if($remoteFile !== false){
                    $localFile = fopen($target, 'w');
                    if($localFile){
                        fwrite($localFile, $remoteFile);
                        fclose($localFile);
                        if(file_exists($target)){
                            $zip = new ZipArchive;
                            $res = $zip->open($target);
                            if ($res === TRUE) {
                                $zip->extractTo(ABSPATH.'content/plugins/');
                                $zip->close();
                                $status = 'success';
                                $info = 'Plugin installed!';
                            } else {
                                echo 'doh!';
                            }
                            unlink($target);
                        } else {
                            echo 'not found';
                        }
                    } else {
                        echo 'Could not create local file';
                    }
                } else {
                    echo 'Could not download remote file';
                }
                // Close the cURL resource
                curl_close($ch);
            } else {
                $status = 'error';
                $info = 'Failed to install!. You\'re using CA v'.VERSION.' and this plugin require CA v'.$_POST['reqversion'];
            }
        }
        if($_POST['plugin_action'] == 'upload_plugin'){
            $status = 'error';
            if(isset($_FILES['plugin_file'])){ //Upload plugin
                $target_file = ABSPATH . 'content/plugins/' . strtolower(str_replace(' ', '-', basename($_FILES["plugin_file"]["name"])));
                $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
                $uploadOk = 1;
                if($fileType !== 'zip'){
                    $uploadOk = 0;
                }
                if ($uploadOk) {
                    if (move_uploaded_file($_FILES["plugin_file"]["tmp_name"], $target_file)) {
                        //
                    } else {
                        $uploadOk = 0;
                    }
                }
                if ($uploadOk) {
                    $zip = new ZipArchive;
                    $res = $zip->open($target_file);
                    if ($res === TRUE) {
                        $zip->extractTo(ABSPATH . 'content/plugins/');
                        $zip->close();
                        $status = 'success';
                        $info = 'Plugin uploaded!';
                    } else {
                        $uploadOk = 0;
                    }
                    unlink($target_file);
                }
            }
        }
    }
    if(isset($_POST['redirect'])){
        header('Location: '.$_POST['redirect'].'&status='.$status.'&info='.$info);
    }
}
function _trigger_auto_sitemap(){
    return;
    if( PRETTY_URL ){
        if(get_setting_value('auto_sitemap')){
            $sitemap_file = null;
            if(file_exists('../index.php')){
                $sitemap_file = '../sitemap.xml';
            }
            if(!$sitemap_file){
                return;
            }
            include_once '../includes/plugin.php';
            if(file_exists(PLUGIN_PATH.'posts/Post.php')){
                include_once PLUGIN_PATH.'posts/Post.php';
            }
            $str = '<?xml version="1.0" encoding="UTF-8"?>
            <urlset
                xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
                http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
            <!-- generated by CloudArcade -->';
            //domain
            $str = $str.'
            <url>
                <loc>'.DOMAIN.'</loc>
                <priority>1.00</priority>
            </url>';
            //categories
            $cats = get_all_categories();
            foreach ($cats as $cat) {
                if (strpos($cat->slug, '&') == false) {
                    $str = $str.'
                    <url>
                        <loc>'.get_permalink('category', $cat->slug).'</loc>
                        <changefreq>weekly</changefreq>
                    </url>';
                }
            }
            //blog
            if(defined('POST_ACTIVE')){
                $posts = Post::getList()['results'];
                if($posts){
                    foreach ($posts as $post) {
                        if (strpos($post->slug, '&') == false) {
                            $str = $str.'
                            <url>
                                <loc>'.get_permalink('post', $post->slug).'</loc>
                            </url>';
                        }
                    }
                }
            }
            //games
            $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "SELECT slug FROM games";
            $st = $conn->prepare($sql);
            $st->execute();
            $games = $st -> fetchAll();
            $conn = null;
            foreach ($games as $game) {
                if (strpos($game['slug'], '&') == false) {
                    $str = $str.'
                    <url>
                        <loc>'.get_permalink('game', $game['slug']).'</loc>
                    </url>';
                }
            }
            $str = $str.'</urlset>';
            $sitemap = fopen($sitemap_file, "w") or die("Unable to open file!");
            $content = $str;
            fwrite($sitemap, $content);
            fclose($sitemap);
        }
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/admin/style/admin.css
New file
@@ -0,0 +1,916 @@
@font-face {
  font-family: 'Poppins';
  src: url('fonts/Poppins-Light.ttf') format('truetype');
  font-weight: 300;
  font-style: normal;
}
@font-face {
  font-family: 'Poppins';
  src: url('fonts/Poppins-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
}
@font-face {
  font-family: 'Poppins';
  src: url('fonts/Poppins-Medium.ttf') format('truetype');
  font-weight: 500;
  font-style: normal;
}
@font-face {
  font-family: 'Poppins';
  src: url('fonts/Poppins-SemiBold.ttf') format('truetype');
  font-weight: 600;
  font-style: normal;
}
body {
    font-family: 'Poppins';
    font-weight: 300;
    background-color: #f8f9fe;
    color: #212529;
}
a {
    color: #1190bc;
    text-decoration: none;
}
strong {
    font-weight: bold;
}
#sidebar {
    background-color: #262c48;
    color: #94a0b0;
    position: fixed;
    top: 0;
    bottom: 0;
    width: 260px;
    overflow-x: hidden;
    white-space: nowrap;
    z-index: 1;
    transition: 0.3s;
}
#sidebar a:hover {
    text-decoration: none;
}
.sidebar-toggler, .navbar-toggler {
  background: unset;
  border: none;
  padding: 15px;
}
ul#menu-list {
    list-style: none;
    padding-left: 0;
}
.dropdown-list {
    color: #8a8a8c;
    padding: 13px 6px 13px 48px;
}
.dropdown-list:hover, .dropdown-list.active {
    background-color: #3a4657;
}
.li-list {
    color: #94a0b0;
    padding: 6px;
    padding-left: 16px;
    margin: 10px 0 10px 5px;
}
.li-list i {
    margin-right: 10px;
}
.li-list:hover, .active .li-list {
    color: #19bae0;
    padding: 6px;
    padding-left: 16px;
    margin-left: 0;
}
#menu-list li:hover {
    border-left: 5px solid #19bae0;
    text-decoration: none;
}
#menu-list li.active {
    border-left: 5px solid #19bae0;
}
.dropdown-container {
  display: none;
  background-color: #313755;
}
.dropdown-container.active {
  display: block;
}
.fa-caret-down {
  float: right;
  padding-right: 8px;
}
.tooltip-info {
  font-size: 13px;
  background-color: #6e7bb9;
  padding: 1px 6px;
  border-radius: 20px;
  margin-left: 8px;
  color: #fff;
}
#content {
    padding: 30px 30px;
    margin-left: 260px;
    margin-top: 42px;
    max-width: 1200px;
    margin-bottom: 40px;
    transition: 0.3s;
}
#content-bar {
    margin-left: 260px;
    transition: 0.3s;
}
.section {
    background-color: #fff;
    border-radius: 10px;
    padding: 20px;
    margin-bottom: 30px;
    overflow: hidden;
    box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15);
}
.section-bottom-link {
    margin-top: 10px;
    padding-bottom: 20px;
}
.section-full {
    padding: 0;
}
.section-title {
    font-size: 1.2rem;
}
.general-wrapper {
    padding: 20px;
}
.admin-menu {
    margin-top: 20px;
}
.main-header {
    position: fixed;
    width: 100%;
    top: 0;
    z-index: 10;
}
.navbar {
    margin-left: 260px;
    height: 55px;
    padding: 0;
    background: #fff;
    box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15);
    transition: 0.3s;
}
.navbar .quicklinks {
    margin-right: 10px;
}
.navbar a {
    color: #fff;
}
.page-title {
    margin-top: 5px;
    margin-bottom: 20px;
}
button.remove-category {
    margin-left: auto;
}
.category-item span.badge {
    margin-left: 20px;
}
.tag-list span.badge {
    margin-left: 5px;
}
.tag-list span.badge:hover {
    cursor: pointer;
}
span.btn-tag {
    background-color: #a2a9ca!important;
}
.logo {
    margin: 10px;
    padding: 6px;
    height: 50px;
    margin-left: 10px;
}
.install-form, .login-form, .register-form {
    max-width: 400px;
    background-color: #FFF;
    padding: 30px 10px;
    border-radius: 10px;
    margin: auto;
}
.login-logo {
    margin-bottom: 30px;
}
.install-body, .login-body {
    background-color: #eee;
}
.install-container, .login-container {
    margin-top: 180px;
}
.register-container {
    margin-top: 30px;
    margin-bottom: 30px;
}
ul.category-list, ul.collection-list, ul.plugin-translations-list {
    margin-bottom: 0;
    padding-left: 0;
}
.category-list .category-item, .collection-list .collection-item, .plugin-translations-list .plugin-translation-item {
    padding: 8px 8px 8px 20px;
    border: 1px solid #dcdfe3;
    margin: 15px 10px;
    border-radius: 5px;
}
span.categories {
    color: #d6793a;
}
.has-translation-cur {
    background-color: #95d5b1;
    color: #000000;
}
.has-translation-other {
    background-color: #ddd892;
    color: #000000;
}
/* Quotes */
#quote {
    overflow: hidden;
    opacity: 1;
    transition: all 0.8s cubic-bezier(0.44, 1.13, 0.58, 1);
}
.quote-text {
}
.author {
    font-weight: 600;
    font-style: italic;
    float: right;
    margin-right: 5px;
}
.disabled-list {
    opacity: 0.5;
    pointer-events: none;
    cursor: default;
}
.btn {
    padding-left: 15px;
    padding-right: 15px;
    border-radius: 7px!important;
}
.btn-primary {
    background-color: #19bae0;
    border-color: #19bae0;
}
.bs-callout {
    margin: 20px 0;
    padding: 15px 30px 15px 15px;
    border-left: 5px solid #eee;
}
.bs-callout h4 {
    margin-top: 0;
}
.bs-callout p:last-child {
    margin-bottom: 0;
}
.bs-callout code,
.bs-callout .highlight {
    background-color: #fff;
}
.bs-callout-danger {
    background-color: #fcf2f2;
    border-color: #d9534f;
}
.bs-callout-warning {
    background-color: #fefbed;
    border-color: #f0ad4e;
}
.bs-callout-info {
    background-color: #f0f7fd;
    border-color: #5bc0de;
}
.fetch-games.fade {
    display: none;
}
.fetch-games.show {
    display: block;
}
.official-info {
    margin: 10px;
}
/* Table */
table.table a {
    color: #1190bc;
}
table.table a:hover {
    color: #064c64;
}
/* Search */
.has-search .form-control {
    padding-left: 2.375rem;
}
.has-search .form-control-feedback {
    position: absolute;
    z-index: 1;
    display: block;
    width: 2.375rem;
    height: 2.375rem;
    line-height: 2.375rem;
    text-align: center;
    pointer-events: none;
    color: #aaa;
}
/* Icons */
.fa-thumbs-down {
    color: #ec505d;
    margin-right: 10px;
}
.fa-thumbs-up {
    color: #29badd;
    margin-right: 10px;
}
.fa-plus.circle {
    color: #17af71;
}
.fa-pencil-alt.circle {
    color: #1190bc;
}
.fa-trash.circle {
    color: #e75963;
}
.fa.circle {
    padding: 0.5em 0.57em;
    border: 1px solid;
    border-radius: 50%;
    margin-right: 5px;
}
img.gamelist {
    border-radius: 10px;
    width: 60px;
    height: 60px;
}
.pagination .page-item.disabled .page-link {
    color: #fff!important;
}
.badge {
    box-shadow: none;
}
.badge-primary {
    color: #fff !important;
    background-color: #4285f4 !important;
}
.badge-pill {
    padding-right: 0.6em;
    padding-left: 0.6em;
    border-radius: 10rem;
}
.btn {
    border-radius: 10px;
    box-shadow: none;
}
.cms {
    margin-top: 50px;
    margin-bottom: 15px;
}
.login-title {
    text-align: center;
    margin-bottom: 25px;
    font-weight: 400;
    color: #212529;
}
.modal-dialog .modal-content {
    border-radius: 10px;
}
/* Stats */
canvas {
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
}
.chart-container {
    width: 840px;
}
.container-stats {
    margin-top: 30px;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
}
.stats-option {
    position: absolute;
    width: 170px;
    right: 30px;
}
.section-stats {
    position: relative;
    overflow: hidden;
}
/* Theme */
.theme {
    float: left;
    margin-right: 30px;
    margin-bottom: 35px;
    background-color: #fff;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 2px 10px 0 rgba(0,0,0,0.08);
}
.theme-id-container {
    padding: 15px;
}
.theme-thumbnail img {
    width: 300px;
    height: 220px;
}
.theme-name {
    font-size: 20px;
    display: inline-block;
}
.theme-action {
    float: right;
}
.theme-action button {
    margin: 0;
}
.theme-info {
    margin-top: 10px;
    margin-bottom: 30px;
}
.theme-author {
    float: left;
}
.theme-version {
    float: right;
}
.plugin-repo-container {
    max-height: 600px;
    overflow-x: auto;
}
.plugin-inactive {
    opacity: 0.5;
}
h4.plugin-title {
    margin-bottom: 15px;
}
.tooltip-doc-plugin {
  font-weight: normal;
  font-size: 16px;
  background-color: #94abbf;
  color: #fff;
  padding: 3px 7px;
  border-radius: 30px;
  float: right;
}
.widget-item {
    cursor: pointer;
    padding: 12px 18px;
    border: 1px solid #dee2e6;
    background-color: #f6f7f7;
}
.theme-dark .widget-item {
    border-color: #48517d;
    background-color: #333a59;
}
.widget-title {
    position: relative;
}
.widget-form {
    padding: 12px 18px;
    border: 1px solid #dee2e6;
    background-color: #fff;
    border-top: none;
}
.theme-dark .widget-form {
    border-color: #48517d;
    background-color: #2c3351;
}
.widget-description {
    padding: 12px 18px;
}
.panel-default {
    margin: 10px 0 0 0;
    border: 1px solid #dee2e6;
    padding: 0 18px;
}
.theme-dark .panel-default {
    border-color: #48517d;
}
.panel-collapse .collapsing {
    /*transition: unset;*/
}
.panel-description {
    margin-bottom: 10px;
}
.panel-body {
    min-height: 128px;
    margin-bottom: 18px;
}
.panel-title {
  position: relative;
  margin: 12px 0;
  cursor: pointer;
}
.panel-title::after, .panel-body .widget-title::after {
  content: "\f0d7";
  top: -2px;
  right: 0px;
  position: absolute;
  font-weight:900;
    font-family: "Font Awesome 5 Free";
}
.panel-title[aria-expanded="true"]::after {
  content: "\f0d8";
}
.ui-sortable-placeholder {
    margin-top: 12px;
    border: 2px dashed #ccdfd8;
    height: 50px;
    width: 100%;
    background: #f7fdfa;
}
.theme-dark .ui-sortable-placeholder {
    border-color: #6987b7;
    background: #3e4562;
}
.widget-action-button-area {
    margin-top: 10px;
}
.panel-default .widget-item-sortable {
    margin-top: 12px;
}
.small {
    font-size: 0.85rem;
    font-weight: unset;
}
.delete-widget:hover {
    cursor: pointer;
}
.widget-inactive {
    opacity: 0.5;
}
.theme-overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  width: 100%;
  opacity: 0;
  transition: .3s ease;
  background: rgba(0, 0, 0, 0.4);
}
.theme-overlay i {
  color: white;
  font-size: 40px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  text-align: center;
}
.theme-overlay:hover {
  opacity: 1;
}
.theme-thumbnail {
    position: relative;
}
.theme-update-wrapper {
    position: relative;
    top: -80px;
}
.theme-update-info {
    position: absolute;
    width: 100%;
    border-left: 4px solid #ffb486;
    color: #856404;
    background-color: #fff3cd;
    padding: .85rem 1.25rem;
}
.theme-add {
    width: 300px;
    height: 310px;
    border: 2px dashed #c6d7f0;
}
.theme-add-icon {
    color: #19bae0;
    font-size: 80px;
    margin-left: 50%;
    margin-top: 50%;
    transform: translate(-50%, -50%);
    pointer-events: none;
}
.theme-add:hover {
    cursor: pointer;
}
.label-theme-add {
    position: absolute;
    width: 300px;
    height: 310px;
}
.theme-upload {
    width: 300px;
    height: 310px;
    border: 2px dashed #c6d7f0;
}
.theme-upload-icon {
    color: #19bae0;
    font-size: 80px;
    margin-left: 50%;
    margin-top: 50%;
    transform: translate(-50%, -50%);
    pointer-events: none;
}
.label-theme-upload:hover {
    cursor: pointer;
}
.label-theme-upload {
    position: absolute;
    width: 300px;
    height: 310px;
}
.has-update-icon {
    float: right;
    margin-right: 14px!important;
    color: #f26262;
    margin-top: 4px;
}
#available-widgets {
    position: sticky;
    top: 90px;
    max-height: 85vh;
    overflow-y: scroll;
}
.td-ellipsis {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    max-width: 0;
}
/* TABLE */
.table thead th {
  font-weight: normal;
}
.section-full .section-title {
    padding: 20px;
}
.custom-table thead th {
    padding-top: 16px;
    padding-bottom: 16px;
    border-top: 2px solid;
    border-color: #eee;
}
.custom-table tbody td {
    padding-top: 16px;
    padding-bottom: 16px;
    border-color: #eee;
}
.custom-table thead {
    background-color: #f6f9fc;
}
.custom-table table {
    border: none;
}
.custom-table tr td:first-child, .custom-table tr th:first-child {
    padding-left: 20px;
}
.custom-table tr td:last-child, .custom-table tr th:last-child {
    padding-right: 20px;
}
/* BOXES */
.boxes {
    color: #fff;
}
.box {
    padding: 30px 25px;
    border-radius: 7px;
    margin-bottom: 30px;
    box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15);
}
.box h2.amount {
    font-weight: 600;
}
.box-info {
    font-weight: 500;
}
.box-1 {
    background-color: #ee7586;
}
.box-2 {
    background-color: #4cd29a;
}
.box-3 {
    background-color: #f2b260;
}
.box-4 {
    background-color: #70aaf7;
}
span.input-icon {
  position: absolute;
  top: 7px;
  left: 10px;
}
input[type=text].has-icon {
    padding-left: 35px;
}
.list-group-item {
    color: unset;
}
/* TABS */
.custom-tab {
  background-color: #6e7bb9;
  padding: 20px 20px 0 20px;
}
.custom-tab .nav-link {
    background-color: #acb5e3;
    margin-left: 5px;
    color: rgba(0, 0, 0, 0.51);
}
.custom-tab .nav-link a {
    color: unset;
}
/* Dark Mode */
.theme-dark body {
   background-color: #1c203a;
   color: #adbcce;
}
.theme-dark a, .theme-dark table.table a {
    color: #29badd;
}
.theme-dark .quicklinks a {
    color: #fff;
}
.theme-dark .bs-callout {
    color: #262c48;
}
.theme-dark .section {
    background-color: #262c48;
    box-shadow: 0 0 2rem 0 rgba(0, 0, 0, 0.15);
}
.theme-dark .custom-table thead {
  background-color: #3b4366;
}
.theme-dark .custom-tab {
    background-color: #5e6795;
}
.theme-dark .custom-tab .nav-link {
    background-color: #7780ae;
}
.theme-dark .theme {
    background-color: #262c48;
}
.theme-dark #sidebar {
    background-color: #262c48;
}
.theme-dark .navbar {
    background-color: #262c48;
    box-shadow: none;
}
.theme-dark .li-list {
    color: #adbcce;
}
.theme-dark .li-list:hover, .active .li-list {
    color: #19bae0;
}
.theme-dark .table {
    color: #adbcce;
}
.theme-dark .table td {
    border-color: #3b4a5e;
}
.theme-dark .table th {
    border-color: #3b4a5e;
}
.theme-dark .table thead th {
    border-color: #3b4a5e;
}
.theme-dark .nav-tabs .nav-item.show .nav-link, .theme-dark .nav-tabs .nav-link.active, .theme-dark .nav-tabs .nav-link:focus, .theme-dark .nav-tabs .nav-link:hover {
    color: #76889f;
    background-color: #212644;
    border-color: #48517d;
    border-bottom: 1px solid #262c48;
}
.theme-dark .nav-tabs {
    border-bottom: 1px solid #48517d;
}
.theme-dark .list-group-item {
    background-color: #262c48;
    border: 1px solid rgba(0,0,0,.2);
}
.theme-dark .form-control, .theme-dark .form-select {
    background-color: #1c203a;
    border: 1px solid #3b4a5e;
    color: unset;
}
.theme-dark .pagination .page-item .page-link {
    color: unset;
}
.theme-dark .modal-content {
    background-color: #262c48;
}
.theme-dark .modal-header {
    border-bottom: 1px solid #48517d;
}
.theme-dark .close {
    color: #adbcce;
}
.theme-dark .category-list .category-item, .theme-dark .collection-list .collection-item, .theme-dark .plugin-translations-list .plugin-translation-item {
    border: 1px solid #3b4a5e;
}
.theme-dark .dropdown-list:hover, .theme-dark .dropdown-list.active {
    background-color: #434960;
}
.theme-dark .dropdown-container {
  background-color: #313755;
}
.theme-dark .image-gallery-item {
    border: 1px solid #4d5579;
}
@media(max-width: 768px){
    .navbar {
        margin-left: 0;
    }
 #sidebar {
    width: 0px;
 }
 #content {
    margin-left: 0px;
    padding: 30px 15px;
 }
 #content-bar {
    margin-left: 0px;
 }
}
CloudArcade/cloudarcade/cloudarcade/admin/style/api.css
New file
@@ -0,0 +1,137 @@
.ad_overlay {
  position: fixed;
  height: 100%;
  width: 100%;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: rgba(0,0,0,0.8);
}
.ad_popup {
  max-width: 600px;
  width: 80%;
  max-height: 300px;
  height: 80%;
  padding: 20px;
  position: relative;
  background: #fff;
  margin: 20px auto;
}
#ad_close {
  position: absolute;
  top: 10px;
  right: 10px;
  cursor: pointer;
  color: #000;
}
.popbox {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    width: 100%;
    /* z-index: 1000000; */
}
.popup-overlay {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    width: 100%;
    z-index: 1;
    background: rgba(0,0,0,.7);
}
.popbox-close-button {
  position: absolute;
  width: 35px;
  height: 35px;
  line-height: 28px;
  text-align: center;
  top: 10px;
  right: 10px;
  background-color: #fff;
  box-shadow: 0 -1px 1px 0 rgb(0 0 0 / 20%);
  border: none;
  border-radius: 50%;
  cursor: pointer;
  font-weight: bold;
  padding: 0;
}
.popbox-close-button:after {
  display: inline-block;
  content: "\00d7";
}
.pop-content {
    /* width: 850px; */
    /* height: 450px; */
    /* display: block; */
    position: absolute;
    top: 50%;
    left: 50%;
    z-index: 2;
    transform: translate(-50%, -50%);
}
.banner-content {
    box-shadow: 0 3px 20px 0 rgb(0 0 0 / 50%);
}
#ad-delay {
    color: #fff;
    font-size: 20px;
}
.ad-loader {
  border: 8px solid #f3f3f3;
  border-radius: 50%;
  border-top: 8px solid #3498db;
  width: 60px;
  height: 60px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;
}
/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
/* ADSENSE */
.pop-content #content {
  width: 100vw;
  height: 100vh;
}
#video-container {
  position: relative;
  /* forces the container to match a 16x9 aspect ratio */
  /* replace with 75% for a 4:3 aspect ratio, if needed */
  padding-bottom: 56.25%;
}
#video-element {
  /* forces the contents to fill the container */
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
#ad-container {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
}
#ca-ads {
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  z-index: 1000;
}
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Black.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-BlackItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Bold.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-BoldItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraBold.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraBoldItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraLight.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraLightItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Italic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Light.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-LightItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Medium.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-MediumItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Regular.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-SemiBold.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-SemiBoldItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Thin.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ThinItalic.ttf
Binary files differ
CloudArcade/cloudarcade/cloudarcade/admin/style/jquery.nestable.css
New file
@@ -0,0 +1,103 @@
.dd {
  position: relative;
  display: block;
  margin: 0;
  padding: 0;
  list-style: none;
  line-height: 20px;
  max-width: 700px;
}
.dd-list {
  display: block;
  position: relative;
  margin: 0;
  padding: 0;
  list-style: none; }
  .dd-list .dd-list {
    padding-left: 30px; }
.dd-item,
.dd-empty,
.dd-placeholder {
  display: block;
  position: relative;
  margin: 0;
  padding: 0;
  min-height: 20px;
  line-height: 20px; }
.dd-handle {
  display: block;
  height: 30px;
  margin: 5px 0;
  padding: 5px 10px;
  color: #333;
  text-decoration: none;
  font-weight: bold;
  border: 1px solid #ccc;
  background: #fafafa;
  border-radius: 3px;
  box-sizing: border-box; }
  .dd-handle:hover {
    color: #2ea8e5;
    background: #fff; }
.dd-item > button {
  position: relative;
  cursor: pointer;
  float: left;
  width: 25px;
  height: 20px;
  margin: 5px 0;
  padding: 0;
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
  border: 0;
  background: transparent;
  line-height: 1;
  text-align: center;
  font-weight: bold; }
  .dd-item > button:before {
    display: block;
    position: absolute;
    width: 100%;
    text-align: center;
    text-indent: 0; }
  .dd-item > button.dd-expand:before {
    content: '+'; }
  .dd-item > button.dd-collapse:before {
    content: '-'; }
.dd-expand {
  display: none; }
.dd-collapsed .dd-list,
.dd-collapsed .dd-collapse {
  display: none; }
.dd-collapsed .dd-expand {
  display: block; }
.dd-empty,
.dd-placeholder {
  margin: 5px 0;
  padding: 0;
  min-height: 30px;
  background: #f2fbff;
  border: 1px dashed #b6bcbf;
  box-sizing: border-box;
  -moz-box-sizing: border-box; }
.dd-dragel {
  position: absolute;
  pointer-events: none;
  z-index: 9999; }
  .dd-dragel > .dd-item .dd-handle {
    margin-top: 0; }
  .dd-dragel .dd-handle {
    box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); }
.dd-nochildren .dd-placeholder {
  display: none; }
CloudArcade/cloudarcade/cloudarcade/admin/style/menus.css
New file
@@ -0,0 +1,211 @@
/**
* Nestable Draggable Handles
*/
.dd3-content {
    padding: 12px 20px 11px 54px;
    border: 1px solid #dee2e6;
    border-radius: 5px;
    background: #fff;
}
.dd-handle {
    border: none;
}
.theme-dark .dd3-content {
    border: 1px solid #48517d;
    background: #333a59;
}
.dd3-content:hover {
    color: #2ea8e5;
}
.theme-dark .dd3-content:hover {
    background: #323a60;
}
.dd-dragel > .dd3-item > .dd3-content {
    margin: 0;
}
.dd3-item {
    margin: 15px 0;
}
.dd3-item > button {
    margin-left: 30px;
}
.dd3-handle {
    position: absolute;
    margin: 0;
    left: 0;
    top: 0;
    cursor: move;
    width: 45px;
    height: 45px;
    text-indent: 70px;
    white-space: nowrap;
    overflow: hidden;
    background: #c9d3e1;
    border-radius: 5px 0 0 5px;
}
.dd3-handle:hover {
    background: #abb8ca;
}
.theme-dark .dd3-handle {
    border-color: #48517d;
    background-color: #464f79;
}
.theme-dark .dd-empty, .theme-dark .dd-placeholder {
    border-color: #6987b7;
    background: #3e4562;
}
.dd3-handle:before {
    font-family: "Font Awesome 5 Free";
    content: "\f0b2";
    display: block;
    position: absolute;
    left: 0;
    top: 12px;
    width: 100%;
    text-align: center;
    text-indent: 0;
    color: #fff;
    font-size: 20px;
    font-weight: bolder;
}
.item-edit {
    float: right;
    color: #1190bc;
    cursor: pointer;
}
.item-edit:hover {
    text-decoration: underline;
}
.item-settings.d-none {
    display: none!important;
}
.item-settings {
    display: block;
    padding: 10px;
    position: relative;
    z-index: 10;
    border: 1px solid #e5e5e5;
    background: #fff;
    border-top: none;
    box-shadow: 0 1px 1px rgba(0,0,0,.04);
}
.theme-dark .item-settings {
    border-color: #48517d;
    background: #2c3351;
}
.item-settings p {
    margin-top: 0;
}
.item-settings p label {
    color: #666;
    line-height: 1.5;
}
.item-settings p label input {
    border: 1px solid #ddd;
    box-shadow: inset 0 1px 2px rgba(0,0,0,.07);
    background-color: #fff;
    color: #32373c;
    outline: 0;
    border-spacing: 0;
    width: -webkit-fill-available;
    clear: both;
    margin: 0;
    padding: 5px;
    border-radius: 0;
}
.item-settings .item-delete {
    color: #a00;
}
.theme-dark .item-settings .item-delete {
    color: #ff5f5f;
}
#accordion-container .card {
  border: 0;
  box-shadow: none;
  border: 1px solid #eee;
  font-weight: 300;
  margin-bottom: 10px;
}
.theme-dark #accordion-container .card {
    border-color: #48517d;
}
.theme-dark .card-header {
    background-color: #333a59;
}
.theme-dark #accordion-container .card .card-header .btn-header-link {
    color: unset;
}
.theme-dark .card-body {
    background: #2c3351;
}
#accordion-container .card-header {
  padding: 0;
  border: 0;
}
#accordion-container .card .card-header .btn-header-link {
  display: block;
  text-align: left;
  color: #222;
}
#accordion-container .card .card-header .btn-header-link:after {
  content: "\f107";
  font-family: 'Font Awesome 5 Free';
  font-weight: 900;
  float: right;
}
#accordion-container .card .card-header .btn-header-link.collapsed:after {
  content: "\f106";
}
#accordion-container .card .collapsing {
}
#accordion-container .card .collapse {
  border: 0;
}
#accordion-container .card .collapse.show {
}
#accordion-container .card-header .btn {
    margin: 0;
    text-transform: none;
    font-size: 1rem;
}
#accordion-container .card-header .btn:hover, .card-header .btn:focus, .card-header .btn:active {
    box-shadow: none;
}
#form-icons .row img {
    max-width: 70px;
}
CloudArcade/cloudarcade/cloudarcade/admin/upload.php
New file
@@ -0,0 +1,184 @@
<?php
session_start();
require_once('../config.php');
require_once('../init.php');
$action = isset( $_POST['action'] ) ? $_POST['action'] : "";
$username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
if ( $action != "login" && $action != "logout" && !$username ) {
    exit('logout');
}
if( !USER_ADMIN ){
    exit('p');
}
if( ADMIN_DEMO ){
    header('Location: dashboard.php?viewpage=addgame');
    exit();
}
if (!file_exists('tmp')) {
    mkdir('tmp', 0755, true);
}
if (!file_exists('../games')) {
    mkdir('../games', 0755, true);
}
$target_dir = "tmp/";
$target_file = $target_dir . strtolower(str_replace(' ', '-', basename($_FILES["gamefile"]["name"])));
$folder_name = 0;
if(isset($_POST['slug'])){
    $_POST['slug'] = esc_slug($_POST['slug']);
    $folder_name = $_POST['slug'];
} else {
    $folder_name = esc_slug($_POST['title']);
}
$uploadOk = 1;
$error = array();
if (isset($_SERVER['CONTENT_LENGTH'])) {
    if($_SERVER['CONTENT_LENGTH'] > convert_to_bytes(ini_get('upload_max_filesize'))){
        $uploadOk = 0;
        $error['err'] = 'You file size is too large, your php.ini upload_max_filesize is '.ini_get('upload_max_filesize');
    }
}
function convert_to_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    $val = (int)$val;
    switch($last) {
        // The 'G' modifier is available since PHP 5.1.0
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
    return $val;
}
$fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if($fileType != 'zip'){
    $uploadOk = 0;
}
$have_icon_512 = false; //Used for Construct 3 game
$generate_thumbnail = false;
if ($uploadOk == 0) {
  //echo "error1";
} else {
  if (move_uploaded_file($_FILES["gamefile"]["tmp_name"], $target_file)) {
      $check = array();
    $check['index'] = 'false';
    $check['thumb_1'] = false;
    $check['thumb_2'] = false;
    //uploaded
    $za = new ZipArchive();
    $za->open($target_file);
    for( $i = 0; $i < $za->numFiles; $i++ ){
        $stat = $za->statIndex( $i );
        $name = $stat['name'];
        if($name == 'index.html'){
            $check['index'] = $name;
        }
        if($name == 'thumb_1.png' || $name == 'thumb_1.jpg' || $name == 'thumb_1.jpeg' || $name == 'thumb_1.PNG' || $name == 'thumb_1.JPG'){
            if(!$check['thumb_1']){
                $check['thumb_1'] = $name;
            }
        }
        if($name == 'thumb_2.png' || $name == 'thumb_2.jpg' || $name == 'thumb_2.jpeg' || $name == 'thumb_2.PNG' || $name == 'thumb_2.JPG'){
            if(!$check['thumb_2']){
                $check['thumb_2'] = $name;
            }
        }
        if($name == 'icons/icon-512.png'){
            $have_icon_512 = true;
        }
    }
    if(!$check['thumb_1'] && !$check['thumb_2'] && $have_icon_512){
        $check['thumb_1'] = 'thumb_1.png';
        $check['thumb_2'] = 'thumb_2.png';
        $generate_thumbnail = true;
    }
    $za->close();
  } else {
    echo "error2";
  }
}
if($uploadOk == 1){
    if(!$check['index']){
        $error['err1'] = 'No index.html on root detected!';
        $uploadOk = 0;
    }
    if(!$check['thumb_1']){
        $error['err2'] = 'No thumb_1.jpg/png on root detected!';
        $uploadOk = 0;
    }
    if(!$check['thumb_2']){
        $error['err3'] = 'No thumb_2.jpg/png on root detected!';
        $uploadOk = 0;
    }
}
if($uploadOk == 0){
    $error['err0'] = 'Upload failed!';
    unlink($target_file);
    // Store current fields
    $keys =['title', 'slug', 'description', 'instructions', 'width', 'height', 'category', 'thumb_1', 'thumb_2', 'url', 'tags'];
    foreach ($keys as $item) {
        $_SESSION[$item] = (isset($_POST[$item])) ? $_POST[$item] : null;
    }
    header('Location: dashboard.php?viewpage=addgame&status=error&error-data='.json_encode($error));
} else {
    $zip = new ZipArchive;
    $res = $zip->open($target_file);
    if ($res === TRUE) {
        $zip->extractTo('../games/'.$folder_name.'/');
        $zip->close();
    } else {
      echo 'doh!';
    }
    unlink($target_file);
    if($generate_thumbnail){
        require_once('../includes/commons.php');
        // Begin generate thumbnail
        try {
            $target_img = '../games/'.$folder_name.'/icons/icon-512.png';
            if(file_exists($target_img)){
                imgCopy($target_img, '../games/'.$folder_name.'/thumb_1.png', 512, 384);
                imgCopy($target_img, '../games/'.$folder_name.'/thumb_2.png', 512, 512);
            }
        } catch(Exception $e) {
            var_dump($e);
        }
    }
    $cats = '';
    $i = 0;
    $total = count($_POST['category']);
    foreach ($_POST['category'] as $key) {
        $cats = $cats.$key;
        if($i < $total-1){
            $cats = $cats.',';
        }
        $i++;
    }
    $_POST['ref'] = 'upload';
    $_POST['action'] = 'addGame';
    $_POST['category'] = $cats;
    $_POST['thumb_1'] = '/games/'.$folder_name.'/'.$check['thumb_1'];
    $_POST['thumb_2'] = '/games/'.$folder_name.'/'.$check['thumb_2'];
    $_POST['url'] = '/games/'.$folder_name.'/';
    if( SMALL_THUMB ){
        $output = pathinfo($check['thumb_2']);
        $_POST['thumb_small'] = '/games/'.$folder_name.'/'.$folder_name.'_small.'.$output['extension'];
        imgResize('..'.$_POST['thumb_2'], 160, 160, $folder_name);
    }
    //
    $_POST['redirect'] = 'dashboard.php?viewpage=addgame&status=uploaded';
    require 'request.php';
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/Auth.php
New file
@@ -0,0 +1,106 @@
<?php
if(!isset($_SESSION['username'])){
    if(isset($_COOKIE['ca_auth'])){
        $data = CA_Auth::get_data();
        if($data){
            $user = User::getByUsername(CA_Auth::decrypt($data, 'f'));
            if($user){
                $_SESSION['username'] = $user->username;
                CA_Auth::update_token();
            }
        }
    }
}
class CA_Auth {
    //
    public static function generate_token($length = 10, $hash = true) {
        $chars = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghijklmnopqrstuvwxyz';
        $str = substr(str_shuffle($chars), 0, $length);
        if($hash){
            return password_hash($str, PASSWORD_DEFAULT);
        } else {
            return $str;
        }
    }
    public static function insert($data){
        $token = self::generate_token();
        $conn = open_connection();
        $sql = 'INSERT INTO sessions ( token, data )
                  VALUES ( :token, :data )';
        $st = $conn->prepare($sql);
        $st->bindValue(":token", $token, PDO::PARAM_STR);
        $st->bindValue(":data", $data, PDO::PARAM_STR);
        $st->execute();
        setcookie('ca_auth', $token, time() + (60 * 60 * 24 * 30 * 3), "/");
    }
    public static function update_token($old_token = null){
        $new_token = self::generate_token();
        if(is_null($old_token)){
            if(isset($_COOKIE['ca_auth'])){
                $old_token = $_COOKIE['ca_auth'];
            } else {
                return false;
            }
        }
        $conn = open_connection();
        $sql = 'UPDATE sessions SET token = :new_token WHERE token = :old_token';
        $st = $conn->prepare($sql);
        $st->bindValue(":new_token", $new_token, PDO::PARAM_STR);
        $st->bindValue(":old_token", $old_token, PDO::PARAM_STR);
        $st->execute();
        setcookie('ca_auth', $new_token, time() + (60 * 60 * 24 * 30 * 3), "/");
    }
    public static function delete($token = null){
        if(is_null($token)){
            if(isset($_COOKIE['ca_auth'])){
                $token = $_COOKIE['ca_auth'];
            } else {
                return false;
            }
        }
        $conn = open_connection();
        $sql = 'DELETE FROM sessions WHERE token = :token';
        $st = $conn->prepare($sql);
        $st->bindValue(":token", $token, PDO::PARAM_STR);
        $st->execute();
        setcookie('ca_auth', time() - 3600);
    }
    public static function get_data($token = null){
        if(is_null($token)){
            if(isset($_COOKIE['ca_auth'])){
                $token = $_COOKIE['ca_auth'];
            } else {
                return false;
            }
        }
        $conn = open_connection();
        $sql = "SELECT * FROM sessions WHERE token = :token";
        $st = $conn->prepare($sql);
        $st->bindValue(":token", $token, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetchAll();
        if(count($row) == 1){
            return $row[0]['data'];
        } else {
            return false;
        }
    }
    public static function decrypt($str, $key){
        $cipher = "AES-128-CTR";
        $ivlen = openssl_cipher_iv_length($cipher);
        $iv = '1234567891011121';
        return openssl_decrypt($str, $cipher, $key, $options=0, $iv);
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/Category.php
New file
@@ -0,0 +1,387 @@
<?php
/**
 * Class to handle game categories
 */
class Category
{
    public $id = null;
    public $name = null;
    public $slug = null;
    public $priority = 0;
    public $description = "";
    public $meta_description = "";
    public $fields = "";
    public $extra_fields = null;
    public function __construct($data = array())
    {
        if (isset($data['id'])) $this->id = (int)$data['id'];
        if (isset($data['name'])) $this->name = $data['name'];
        if (isset($data['description'])) $this->description = $data['description'];
        if (isset($data['meta_description'])) $this->meta_description = $data['meta_description'];
        if (isset($data['fields'])) $this->fields = $data['fields'];
        if (isset($data['priority'])) $this->priority = (int)$data['priority'];
        if ( isset( $data['slug'] ) ) {
            $this->slug = strtolower(str_replace(' ', '-', str_replace('.', '', $data["slug"])));
        } else {
            if ( isset( $data['name'] ) ) $this->slug = strtolower(str_replace(' ', '-', $data["name"]));
        }
        if(isset($data['extra_fields'])){
            if(is_array($data['extra_fields'])){
                $data['extra_fields'] = json_encode($data['extra_fields']);
            }
            $this->extra_fields = $data['extra_fields'];
        }
        if($this->priority > 10000){
            // Fix possible bug
            $this->priority = 10000;
        }
        if($this->priority < -100){
            // Fix possible bug
            $this->priority = -100;
        }
    }
    public function storeFormValues($params)
    {
        $this->__construct($params);
    }
    public static function getById($id)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM categories WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $id, PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new Category($row);
    }
    public static function getBySlug($slug)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM categories WHERE slug = :slug LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":slug", $slug, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new Category($row);
    }
    public static function getByName($name)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM categories WHERE name = :name LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new Category($row);
    }
    public static function getIdByName($name)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM categories WHERE name = :name LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if($row){
            return $row['id'];
        } else {
            return null;
        }
    }
    public static function getIdBySlug($slug)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM categories WHERE slug = :slug limit 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":slug", $slug, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if( $row ) {
            return $row['id'];
        } else {
            return null;
        }
    }
    public static function getList($numRows = 1000)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM categories
            ORDER BY priority DESC, name ASC LIMIT :numRows";
        $st = $conn->prepare($sql);
        $st->bindValue(":numRows", $numRows, PDO::PARAM_INT);
        $st->execute();
        $list = array();
        while ($row = $st->fetch())
        {
            $category = new Category($row);
            $list[] = $category;
        }
        $totalRows = $conn->query('SELECT count(*) FROM categories')->fetchColumn();
        return (array(
            "results" => $list,
            "totalRows" => $totalRows
        ));
    }
    public static function getCategoryCount($id)
    {
        $conn = open_connection();
        $sql = "SELECT count(*) FROM cat_links WHERE categoryid = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $id, PDO::PARAM_INT);
        $st->execute();
        $totalRows = $st->fetchColumn();
        return $totalRows;
    }
    public static function getListByCategory($id, int $amount, int $page = 0)
    {
        $additional_condition = '';
        if(defined('IS_VISITOR_PAGE')){
            if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                $additional_condition = 'AND games.is_mobile = 1';
            }
        }
        $id = (int)$id;
        // Get only published games.
        $sql = "SELECT games.id FROM games
                JOIN cat_links ON games.id = cat_links.gameid
                WHERE cat_links.categoryid = $id AND games.published = 1 $additional_condition
                ORDER BY cat_links.id DESC LIMIT $amount OFFSET $page";
        $cached_result = null;
        if(is_cached_query_allowed()){
            $data_value = get_cached_query($sql);
            if(!is_null($data_value)){
                $cached_result = json_decode($data_value, true);
            }
        }
        $conn = open_connection();
        $rows;
        if(!$cached_result){
            $st = $conn->prepare($sql);
            $st->execute();
            $rows = $st->fetchAll();
            if(is_cached_query_allowed()){
                set_cached_query($sql, json_encode($rows));
            }
        } else {
            $rows = $cached_result;
        }
        $list = array();
        foreach ($rows as $item) {
            $game = new Game;
            $res = $game->getById($item['id']);
            array_push($list, $res);
        }
        // Count only published games.
        $sql = "SELECT COUNT(*) FROM games
                JOIN cat_links ON games.id = cat_links.gameid
                WHERE cat_links.categoryid = $id AND games.published = 1 $additional_condition";
        $cached_result2 = null;
        if(is_cached_query_allowed()){
            $data_value = get_cached_query($sql);
            if(!is_null($data_value)){
                $cached_result2 = json_decode($data_value, true);
            }
        }
        $totalRows = null;
        if(is_null($cached_result2)){
            $st = $conn->prepare($sql);
            $st->execute();
            $totalRows = $st->fetchColumn();
            if(is_cached_query_allowed()){
                set_cached_query($sql, json_encode($totalRows));
            }
        } else {
            $totalRows = $cached_result2;
        }
        return (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => ceil($totalRows / $amount)
        ));
    }
    public static function getListByCategories($ids, int $amount, int $page = 0, $random = true){
        // Deprecated since v1.8.7 (Previously used for similar games), replaced with Game::fetchSimilarGames() for better performance
        $conn = open_connection();
        $random_order = '';
        if ($random) {
            $random_order = ' ORDER BY rand()';
        }
        $sql = "SELECT cl1.* FROM `cat_links` as cl1 ,( SELECT DISTINCT `gameid`,`categoryid` FROM `cat_links`";
        if ($ids) {
            $sql .= " WHERE `categoryid` IN (" . implode(',', $ids) . ")";
        }
        $sql .= $random_order . " LIMIT $amount OFFSET $page ) as cl2 WHERE cl2.gameid = cl1.gameid";
        $st = $conn->prepare($sql);
        $st->execute();
        $rows = $st->fetchAll();
        $list = array();
        $gameIds = [];
        foreach ($rows as $row) {
            if (count($gameIds) > $amount) {
                break;
            }
            if (!in_array($row['gameid'], $gameIds)) {
                $gameIds[] = $row['gameid'];
            }
        }
        $is_only_mobile = false;
        if(defined('IS_VISITOR_PAGE')){
            if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                $is_only_mobile = true;
            }
        }
        foreach ($gameIds as $gameId) {
            if (count($list) < $amount) {
                $game = new Game;
                $res = $game->getById($gameId);
                if ($res && $res->published) {
                    if($is_only_mobile && $res->is_mobile){
                        array_push($list, $res);
                    }
                    if(!$is_only_mobile){
                        array_push($list, $res);
                    }
                }
            } else {
                break;
            }
        }
        return array(
            "results" => $list,
            "totalRows" => count($list),
            "totalPages" => 1
        );
    }
    public function addToCategory($gameID, $catID)
    {
        $conn = open_connection();
        $sql = "INSERT INTO cat_links ( gameid, categoryid ) VALUES ( :gameID, :catID )";
        $st = $conn->prepare($sql);
        $st->bindValue(":gameID", $gameID, PDO::PARAM_INT);
        $st->bindValue(":catID", $catID, PDO::PARAM_INT);
        $st->execute();
        $this->id = $conn->lastInsertId();
    }
    public function isCategoryExist($name)
    {
        $conn = open_connection();
        $sql = 'SELECT * FROM categories WHERE name = :name limit 1';
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row)
        {
            $this->id = $row['id'];
        }
        if ($row)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public function getExtraField($key)
    {
        if($this->extra_fields != null){
            $fields = json_decode($this->extra_fields, true);
            if(isset($fields[$key])){
                return $fields[$key];
            }
        }
        return null;
    }
    public function get_fields()
    {
        if($this->fields != ''){
            return json_decode($this->fields, true);
        } else {
            return null;
        }
    }
    public function get_field($key)
    {
        if($this->fields != ''){
            $fields = json_decode($this->fields, true);
            if(isset($fields[$key])){
                return $fields[$key];
            } else {
                return null;
            }
        } else {
            return null;
        }
    }
    public function insert()
    {
        if (!is_null($this->id)) trigger_error("Category::insert(): Attempt to insert a Category object that already has its ID property set (to $this->id).", E_USER_ERROR);
        // Clean-up slug string
        $this->slug = preg_replace('/-+/', '-', preg_replace('/^-+|-+$/', '', $this->slug));
        $conn = open_connection();
        $sql = "INSERT INTO categories ( name, slug, description, meta_description, extra_fields, priority ) VALUES ( :name, :slug, :description, :meta_description, :extra_fields, :priority )";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $this->name, PDO::PARAM_STR);
        $st->bindValue(":slug", esc_slug($this->slug), PDO::PARAM_STR);
        $st->bindValue(":description", $this->description, PDO::PARAM_STR);
        $st->bindValue(":meta_description", $this->meta_description, PDO::PARAM_STR);
        $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
        $st->bindValue(":priority", $this->priority, PDO::PARAM_INT);
        $st->execute();
        $this->id = $conn->lastInsertId();
    }
    public function update()
    {
        if (is_null($this->id)) trigger_error("Category::update(): Attempt to update a Category object that does not have its ID property set.", E_USER_ERROR);
        //$prev_name = Category::getById($this->id)->name;
        //
        // Clean-up slug string
        $this->slug = preg_replace('/-+/', '-', preg_replace('/^-+|-+$/', '', $this->slug));
        $conn = open_connection();
        $sql = "UPDATE categories SET name=:name, slug=:slug, priority=:priority, description=:description, meta_description=:meta_description, fields=:fields, extra_fields=:extra_fields WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $this->name, PDO::PARAM_STR);
        $st->bindValue(":slug", $this->slug, PDO::PARAM_STR);
        $st->bindValue(":description", $this->description, PDO::PARAM_STR);
        $st->bindValue(":meta_description", $this->meta_description, PDO::PARAM_STR);
        $st->bindValue(":fields", $this->fields, PDO::PARAM_STR);
        $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->bindValue(":priority", $this->priority, PDO::PARAM_INT);
        $st->execute();
    }
    public function delete()
    {
        if (is_null($this->id)) trigger_error("Category::delete(): Attempt to delete a Category object that does not have its ID property set.", E_USER_ERROR);
        $conn = open_connection();
        $st = $conn->prepare("DELETE FROM categories WHERE id = :id LIMIT 1");
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->execute();
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/Collection.php
New file
@@ -0,0 +1,175 @@
<?php
/**
 * Class to handle game collections
 */
class Collection
{
    public $id = null;
    public $name = null;
    public $data = null;
    public function __construct($data = array())
    {
        if (isset($data['id'])) $this->id = (int)$data['id'];
        if (isset($data['name'])) $this->name = $data['name'];
        if (isset($data['data'])) $this->data = $data['data'];
    }
    public function storeFormValues($params)
    {
        $this->__construct($params);
    }
    public static function getById($id)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM collections WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $id, PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new Collection($row);
    }
    public static function getByName($name)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM collections WHERE name = :name LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new Collection($row);
    }
    public static function getIdByName($name)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM collections WHERE name = :name limit 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        return $row['id'];
    }
    public static function getList($numRows = 1000000)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM collections
            ORDER BY name ASC LIMIT :numRows";
        $st = $conn->prepare($sql);
        $st->bindValue(":numRows", $numRows, PDO::PARAM_INT);
        $st->execute();
        $list = array();
        while ($row = $st->fetch())
        {
            $Collection = new Collection($row);
            $list[] = $Collection;
        }
        $totalRows = $conn->query('SELECT count(*) FROM collections')->fetchColumn();
        return (array(
            "results" => $list,
            "totalRows" => $totalRows
        ));
    }
    public static function getListByCollection($name, $amount = 12, $page = 0)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM collections WHERE name = :name";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch(PDO::FETCH_ASSOC);
        $list = array();
        if($row){
            // The data is exist
            if(isset($row['data'])){
                $data = explode(',', $row['data']);
                $i = 0;
                foreach ($data as $id)
                {
                    if($i < $amount){
                        $game = new Game;
                        $res = $game->getById($id);
                        if($res){
                            array_push($list, $res);
                        }
                    }
                    $i++;
                }
                return (array(
                    "results" => $list,
                    "totalRows" => count($list),
                ));
            }
        }
        return null;
    }
    public function isCollectionExist($name)
    {
        $conn = open_connection();
        $sql = 'SELECT * FROM collections WHERE name = :name limit 1';
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $name, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row)
        {
            $this->id = $row['id'];
        }
        if ($row)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public function insert()
    {
        if (!is_null($this->id)) trigger_error("Collection::insert(): Attempt to insert a Collection object that already has its ID property set (to $this->id).", E_USER_ERROR);
        $conn = open_connection();
        $sql = "INSERT INTO collections ( name, data ) VALUES ( :name, :data )";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $this->name, PDO::PARAM_STR);
        $st->bindValue(":data", $this->data, PDO::PARAM_STR);
        $st->execute();
        $this->id = $conn->lastInsertId();
    }
    public function update()
    {
        if (is_null($this->id)) trigger_error("Collection::update(): Attempt to update a Collection object that does not have its ID property set.", E_USER_ERROR);
        //$prev_name = Collection::getById($this->id)->name;
        //
        $conn = open_connection();
        $sql = "UPDATE collections SET name=:name, data=:data WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":name", $this->name, PDO::PARAM_STR);
        $st->bindValue(":data", $this->data, PDO::PARAM_STR);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->execute();
    }
    public function delete()
    {
        if (is_null($this->id)) trigger_error("Collection::delete(): Attempt to delete a Collection object that does not have its ID property set.", E_USER_ERROR);
        $conn = open_connection();
        $st = $conn->prepare("DELETE FROM collections WHERE id = :id LIMIT 1");
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->execute();
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/Game.php
New file
@@ -0,0 +1,890 @@
<?php
class Game
{
    public $id = null;
    public $createdDate = null;
    public $title = null;
    public $description = null;
    public $instructions = null;
    public $category = null;
    public $source = null;
    public $thumb_1 = null;
    public $thumb_2 = null;
    public $thumb_small = '';
    public $url = null;
    public $width = null;
    public $height = null;
    public $tags = null;
    public $views = null;
    public $upvote = null;
    public $downvote = null;
    public $slug = null;
    public $last_modified = null;
    public $is_mobile = true;
    public $published = true;
    public $fields = '';
    public $extra_fields = null;
    public function __construct($data = array())
    {
        if (isset($data['id'])) $this->id = (int)$data['id'];
        if (isset($data['createddate'])) $this->createdDate = $data['createddate'];
        if (isset($data['last_modified'])) $this->last_modified = $data['last_modified'];
        if (isset($data['title'])) {
            if(get_setting_value('disable_iconv')){
                $this->title = $data['title'];
            } else {
                $this->title = iconv("utf-8", "utf-8//ignore", $data['title']);
            }
        }
        if (isset($data['description'])) {
            if(get_setting_value('disable_iconv')){
                $this->description = $data['description'];
            } else {
                $this->description = iconv("utf-8", "utf-8//ignore", $data['description']);
            }
        }
        if (isset($data['instructions'])) {
            if(get_setting_value('disable_iconv')){
                $this->instructions = $data['instructions'];
            } else {
                $this->instructions = iconv("utf-8", "utf-8//ignore", $data['instructions']);
            }
        }
        if (isset($data['category'])) $this->category = $data['category'];
        if (isset($data['source'])) $this->source = $data['source'];
        if (isset($data['thumb_1'])) $this->thumb_1 = $data['thumb_1'];
        if (isset($data['thumb_2'])) $this->thumb_2 = $data['thumb_2'];
        if (isset($data['thumb_small'])) $this->thumb_small = $data['thumb_small'];
        if (isset($data['url'])) $this->url = $data['url'];
        if (isset($data['width'])) $this->width = $data['width'];
        if (isset($data['height'])) $this->height = $data['height'];
        if (isset($data['tags'])) $this->tags = $data['tags'];
        if (isset($data['views'])) $this->views = $data['views'];
        if (isset($data['upvote'])) $this->upvote = $data['upvote'];
        if (isset($data['downvote'])) $this->downvote = $data['downvote'];
        if (isset($data['fields'])) $this->fields = $data['fields'];
        if (isset($data['is_mobile'])) $this->is_mobile = filter_var($data['is_mobile'], FILTER_VALIDATE_BOOLEAN) ? true : false;
        if (isset($data['published'])) $this->published = $data['published'];
        if (isset($data['slug'])){
            $this->slug = strtolower(str_replace(' ', '-', $data["slug"]));
        } else {
            if (isset($data['title'])) $this->slug = strtolower(str_replace(' ', '-', $data["title"]));
        }
        if(isset($data['extra_fields'])){
            if(is_array($data['extra_fields'])){
                $data['extra_fields'] = json_encode($data['extra_fields']);
            }
            $this->extra_fields = $data['extra_fields'];
        }
    }
    public function storeFormValues($params)
    {
        $this->__construct($params);
        $this->createdDate = date('Y-m-d H:i:s');
        // Parse and store the publication date
        if (isset($params['cratedDate']))
        {
            /*if ( count($createdDate) == 3 ) {
            list ( $y, $m, $d ) = $createdDate;
            $this->createdDate = mktime ( 0, 0, 0, $m, $d, $y );
            }*/
        }
    }
    public static function getById($id)
    {
        $conn = open_connection();
        $id = (int)$id;
        $sql = "SELECT *, UNIX_TIMESTAMP(createdDate) AS createdDate FROM games WHERE id = $id limit 1";
        $cached_result = null;
        if(is_cached_query_allowed()){
            $data_value = get_cached_query($sql);
            if(!is_null($data_value)){
                $cached_result = json_decode($data_value, true);
            }
        }
        $row;
        if(is_null($cached_result)){
            $st = $conn->prepare($sql);
            $st->execute();
            $row = $st->fetch();
            if(is_cached_query_allowed()){
                set_cached_query($sql, json_encode($row));
            }
        } else {
            $row = $cached_result;
        }
        if ($row) return new Game($row); //$row
    }
    public static function getByTitle($title)
    {
        $conn = open_connection();
        $sql = 'SELECT * FROM games WHERE title = :title';
        $st = $conn->prepare($sql);
        $st->bindValue(":title", $title, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new Game($row);
    }
    public static function getBySlug($slug)
    {
        $conn = open_connection();
        $slug = $conn->quote($slug);
        $sql = "SELECT * FROM games WHERE slug = $slug LIMIT 1";
        $cached_result = null;
        if(is_cached_query_allowed()){
            $data_value = get_cached_query($sql);
            if(!is_null($data_value)){
                $cached_result = json_decode($data_value, true);
            }
        }
        $row;
        if(is_null($cached_result)){
            $st = $conn->prepare($sql);
            //$st->bindValue(":slug", $slug, PDO::PARAM_STR);
            $st->execute();
            $row = $st->fetch();
            if(is_cached_query_allowed()){
                set_cached_query($sql, json_encode($row));
            }
        } else {
            $row = $cached_result;
        }
        if ($row) return new Game($row);
    }
    public static function getList(int $amount = 1000, $sort = 'id DESC', int $page = 0, $count = true)
    {
        $additional_condition = '';
        if(defined('IS_VISITOR_PAGE')){
            if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                $additional_condition = 'AND is_mobile = 1';
            }
        }
        $sql = "SELECT * FROM games WHERE published = 1 $additional_condition ORDER BY $sort LIMIT $amount OFFSET $page";
        $cached_result = null;
        if(is_cached_query_allowed() && $sort != 'RAND()'){
            $data_value = get_cached_query($sql);
            if(!is_null($data_value)){
                $cached_result = json_decode($data_value, true);
            }
        }
        $conn = open_connection();
        $rows = null;
        if(is_null($cached_result)){
            $st = $conn->prepare($sql);
            $st->execute();
            $rows = $st->fetchAll(PDO::FETCH_ASSOC);
            if(is_cached_query_allowed() && $sort != 'RAND()'){
                set_cached_query($sql, json_encode($rows));
            }
        } else {
            $rows = $cached_result;
        }
        $list = array();
        $total = count($rows);
        for($i=0; $i<$total; $i++)
        {
            $game = new Game($rows[$i]);
            $list[] = $game;
        }
        $totalRows = 0;
        if($count){
            $sql = "SELECT count(*) FROM games";
            $cached_result2 = null;
            if(is_cached_query_allowed()){
                $data_value = get_cached_query($sql);
                if(!is_null($data_value)){
                    $cached_result2 = json_decode($data_value, true);
                }
            }
            if(is_null($cached_result2)){
                $totalRows = $conn->query($sql)->fetchColumn();
                if(is_cached_query_allowed()){
                    set_cached_query($sql, json_encode($totalRows));
                }
            } else {
                $totalRows = $cached_result2;
            }
        } else {
            $totalRows = count($list);
        }
        $totalPages = 0;
        if (count($list))
        {
            $totalPages = ceil($totalRows / $amount);
        }
        $result = (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ));
        return $result;
    }
    public static function getDraftList(int $amount = 1000, $sort = 'id DESC', int $page = 0, $count = true)
    {
        // Get games on draft or unpublished
        $conn = open_connection();
        $sql = "SELECT * FROM games WHERE published = 0
            ORDER BY " . $sort . " LIMIT $amount OFFSET $page";
        $st = $conn->prepare($sql);
        $st->execute();
        $list = array();
        while ($row = $st->fetch())
        {
            $game = new Game($row);
            $list[] = $game;
        }
        $totalRows = 0;
        if($count){
            $totalRows = $conn->query('SELECT count(*) FROM games')->fetchColumn();
        } else {
            $totalRows = count($list);
        }
        $totalPages = 0;
        if (count($list))
        {
            $totalPages = ceil($totalRows / $amount);
        }
        return (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ));
    }
    public function getSimilarGames(int $amount = 12){
        // Get list of similar games based on current game categories
        if(!is_null($this->id)){
            $current_game_id = $this->id;
            $conn = open_connection();
            $sql = "SELECT g.id
                FROM games g
                JOIN cat_links cl ON g.id = cl.gameid
                WHERE cl.categoryid IN (
                    SELECT categoryid
                    FROM cat_links
                    WHERE gameid = $current_game_id
                ) AND g.id != $current_game_id
                GROUP BY g.id
                ORDER BY COUNT(cl.categoryid) DESC, rand()
                LIMIT $amount";
            $stmt = $conn->prepare($sql);
            $stmt->execute();
            $gameIDs = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
            //
            $is_only_mobile = false;
            if(defined('IS_VISITOR_PAGE')){
                if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                    $is_only_mobile = true;
                }
            }
            //
            $list = array();
            foreach ($gameIDs as $gameId) {
                if (count($list) < $amount) {
                    $game = new Game;
                    $res = $game->getById($gameId);
                    if ($res && $res->published) {
                        if($is_only_mobile && $res->is_mobile){
                            array_push($list, $res);
                        }
                        if(!$is_only_mobile){
                            array_push($list, $res);
                        }
                    }
                } else {
                    break;
                }
            }
            return array(
                "results" => $list,
                "totalRows" => count($list),
                "totalPages" => 1
            );
        } else {
            echo 'Error 191';
        }
    }
    public static function getTotalGames(){
        // Get total games amount excluding draft
        $conn = open_connection();
        $sql = "SELECT COUNT(*) FROM games WHERE published = 1";
        $st = $conn->prepare($sql);
        $st->execute();
        return $st->fetchColumn();
    }
    public static function searchGame($keyword, int $amount = 20, int $page = 0){
        $additional_condition = '';
        if(defined('IS_VISITOR_PAGE')){
            if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                $additional_condition = 'AND is_mobile = 1';
            }
        }
        $conn = open_connection();
        $sql = "SELECT * FROM games WHERE title LIKE :keyword
            AND published = 1 $additional_condition ORDER BY id DESC LIMIT $amount OFFSET $page";
        $st = $conn->prepare($sql);
        $st->bindValue(":keyword", '%'. $keyword .'%', PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetchAll();
        $list = array();
        foreach ($row as $item) {
            $list[] = new Game($item);
        }
        $sql = "SELECT count(*) FROM games WHERE title LIKE :keyword";
        $st = $conn->prepare($sql);
        $st->bindValue(":keyword", '%'. $keyword .'%', PDO::PARAM_STR);
        $st->execute();
        $totalRows = $st->fetchColumn();
        $totalPages = 0;
        if (count($list))
        {
            $totalPages = ceil($totalRows / $amount);
        }
        return (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ));
    }
    public static function getListBySource($source, int $amount = 20, int $page = 0){
        $additional_condition = '';
        if(defined('IS_VISITOR_PAGE')){
            if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                $additional_condition = 'AND is_mobile = 1';
            }
        }
        $conn = open_connection();
        $sql = "SELECT * FROM games WHERE source = :source
            AND published = 1 $additional_condition ORDER BY id DESC LIMIT $amount OFFSET $page";
        $st = $conn->prepare($sql);
        $st->bindValue(":source", $source, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetchAll();
        $list = array();
        foreach ($row as $item) {
            $list[] = new Game($item);
        }
        $sql = "SELECT count(*) FROM games WHERE source = :source";
        $st = $conn->prepare($sql);
        $st->bindValue(":source", $source, PDO::PARAM_STR);
        $st->execute();
        $totalRows = $st->fetchColumn();
        $totalPages = 0;
        if (count($list))
        {
            $totalPages = ceil($totalRows / $amount);
        }
        return (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ));
    }
    public static function getListByTag($tag, int $amount = 1000, $sort = 'id DESC', int $offset = 0, $count = true)
    {
        $additional_condition = '';
        if(defined('IS_VISITOR_PAGE')){
            if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
                $additional_condition = 'AND games.is_mobile = 1';
            }
        }
        $allowed_sort_columns = ['id DESC', 'id ASC'];
        $sort_column = in_array($sort, $allowed_sort_columns) ? $sort : 'id DESC';
        // Calculate the OFFSET based on page number and amount per page
        $conn = open_connection();
        $tag = $conn->quote($tag);
        $sql = "SELECT games.*
                FROM games
                INNER JOIN tag_links ON games.id = tag_links.game_id
                INNER JOIN tags ON tag_links.tag_id = tags.id
                WHERE tags.name = $tag AND games.published = 1 $additional_condition
                ORDER BY $sort_column LIMIT $amount OFFSET $offset";
        $cached_result = null;
        if(is_cached_query_allowed()){
            $data_value = get_cached_query($sql);
            if(!is_null($data_value)){
                $cached_result = json_decode($data_value, true);
            }
        }
        $rows;
        if(is_null($cached_result)){
            $st = $conn->prepare($sql);
            $st->execute();
            $rows = $st->fetchAll(PDO::FETCH_ASSOC);
            if(is_cached_query_allowed()){
                set_cached_query($sql, json_encode($rows));
            }
        } else {
            $rows = $cached_result;
        }
        $list = [];
        $total = count($rows);
        for($i=0; $i<$total; $i++)
        {
            $game = new Game($rows[$i]);
            $list[] = $game;
        }
        $totalRows = 0;
        if($count){
            // Adjust the count query to include the same conditions as your main query
            $countSql = "SELECT COUNT(*)
                         FROM games
                         INNER JOIN tag_links ON games.id = tag_links.game_id
                         INNER JOIN tags ON tag_links.tag_id = tags.id
                         WHERE tags.name = $tag AND games.published = 1 $additional_condition";
            $cached_result2 = null;
            if(is_cached_query_allowed()){
                $data_value = get_cached_query($countSql);
                if(!is_null($data_value)){
                    $cached_result2 = json_decode($data_value, true);
                }
            }
            if(is_null($cached_result2)){
                $countSt = $conn->prepare($countSql);
                $countSt->execute();
                $totalRows = $countSt->fetchColumn();
                if(is_cached_query_allowed()){
                    set_cached_query($countSql, json_encode($totalRows));
                }
            } else {
                $totalRows = $cached_result2;
            }
        } else {
            $totalRows = count($list);
        }
        $totalPages = ceil($totalRows / $amount);
        return [
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ];
    }
    public static function update_views($slug)
    {
        $conn = open_connection();
        $sql = 'UPDATE games SET views = views + 1 WHERE slug = :slug';
        $st = $conn->prepare($sql);
        $st->bindValue(":slug", $slug, PDO::PARAM_STR);
        $st->execute();
        // Update trends
        $sql = 'SELECT slug FROM trends WHERE slug = :slug AND created = :created';
        $st = $conn->prepare($sql);
        $st->bindValue(":slug", $slug, PDO::PARAM_STR);
        $st->bindValue(":created", date('Y-m-d'), PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if($row){
            // Record is exist
            // Begin update
            $sql = 'UPDATE trends SET views = views + 1 WHERE slug = :slug AND created = :created';
            $st = $conn->prepare($sql);
            $st->bindValue(":slug", $slug, PDO::PARAM_STR);
            $st->bindValue(":created", date('Y-m-d'), PDO::PARAM_STR);
            $st->execute();
        } else {
            // Not exist
            // Begin create record
            $sql = 'INSERT INTO trends ( views, created, slug ) VALUES ( 1, :created, :slug )';
            $st = $conn->prepare($sql);
            $st->bindValue(":slug", $slug, PDO::PARAM_STR);
            $st->bindValue(":created", date('Y-m-d'), PDO::PARAM_STR);
            $st->execute();
        }
        // Remove old trends record
        if(rand(0, 1000) <= 10){ // The chance this script being executed is 1%
            $date = new \DateTime('now');
            // remove 30 days
            $date->sub(new DateInterval('P30D'));
            $sql = "DELETE FROM trends WHERE created < '{$date->format('Y-m-d')}' ";
            $st = $conn->prepare($sql);
            $st->execute();
        }
    }
    public static function upvote($id)
    {
        $conn = open_connection();
        $sql = 'UPDATE games SET upvote = upvote + 1 WHERE id = :id';
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $id, PDO::PARAM_INT);
        $st->execute();
    }
    public static function downvote($id)
    {
        $conn = open_connection();
        $sql = 'UPDATE games SET downvote = downvote + 1 WHERE id = :id';
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $id, PDO::PARAM_INT);
        $st->execute();
    }
    public function getExtraField($key)
    {
        if($this->extra_fields != null){
            $fields = json_decode($this->extra_fields, true);
            if(isset($fields[$key])){
                return $fields[$key];
            }
        }
        return null;
    }
    public function get_fields()
    {
        if($this->fields != ''){
            return json_decode($this->fields, true);
        } else {
            return null;
        }
    }
    public function get_field($key)
    {
        if($this->fields != ''){
            $fields = json_decode($this->fields, true);
            if(isset($fields[$key])){
                return $fields[$key];
            } else {
                return null;
            }
        } else {
            return null;
        }
    }
    public function get_tags(){
        $conn = open_connection();
        $sql = 'SELECT tags.name
        FROM tags
        INNER JOIN tag_links ON tags.id = tag_links.tag_id
        WHERE tag_links.game_id = :game_id';
        $st = $conn->prepare($sql);
        $st->bindValue(':game_id', $this->id);
        $st->execute();
        $tag_names = $st->fetchAll(PDO::FETCH_COLUMN);
        if(count($tag_names)){
            return implode(',', $tag_names);
        } else {
            return '';
        }
    }
    public function getCategoryList(bool $all = false){
        // Get category list for this game
        // Replacing old ineficient method "category" string
        $conn = open_connection();
        $sql = "SELECT categoryid FROM cat_links WHERE gameid = :gameid";
        $st = $conn->prepare($sql);
        $st->bindValue('gameid', $this->id, PDO::PARAM_INT);
        $st->execute();
        $rows = $st->fetchAll(PDO::FETCH_ASSOC);
        $ids = [];
        foreach ($rows as $item) {
            $ids[] = $item['categoryid'];
        }
        if(count($ids)){
            $placeholders = implode(',', array_fill(0, count($ids), '?'));
            $sql = "SELECT id, name, slug, priority FROM categories WHERE id IN ($placeholders)";
            $st = $conn->prepare($sql);
            $st->execute($ids);
            $rows = $st->fetchAll(PDO::FETCH_ASSOC);
            if(!$all){
                // Excluding hidden categories
                foreach ($rows as $key => $item) {
                    if((int)$item['priority'] < 0){
                        unset($rows[$key]);
                    }
                }
            }
            return $rows;
        }
        return [];
    }
    public function get_categories(){
        $conn = open_connection();
        $sql = 'SELECT tags.name
        FROM tags
        INNER JOIN tag_links ON tags.id = tag_links.tag_id
        WHERE tag_links.game_id = :game_id';
        $st = $conn->prepare($sql);
        $st->bindValue(':game_id', $this->id);
        $st->execute();
        $tag_names = $st->fetchAll(PDO::FETCH_COLUMN);
        if(count($tag_names)){
            return implode(',', $tag_names);
        } else {
            return '';
        }
    }
    public function update_category()
    {
        if (is_null($this->id)) trigger_error("Game::update(): Attempt to update an Game object that does not have its ID property set.", E_USER_ERROR);
        $prev_cats = Game::getById($this->id)->category; //Get previous category
        //
        $conn = open_connection();
        $sql = "UPDATE games SET category=:category WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->bindValue(":category", $this->category, PDO::PARAM_STR);
        $st->execute();
    }
    public function update_tags($tags = ''){
        $conn = open_connection();
        // Split the tag string into an array of tag names
        $tags = preg_replace('/[^\p{L}0-9\s,]/u', '', $tags);
        $tags = preg_replace('/\s+/', ' ', $tags);
        $tags = str_replace('#', '', $tags);
        $tags = strtolower($tags);
        $_tag_names = explode(",", $tags);
        $tag_names = [];
        foreach ($_tag_names as $_tag) {
            $_tag = trim($_tag);
            $_tag = str_replace(' ', '-', $_tag);
            $length = strlen($_tag);
            if($length >= 2 && $length <= 15){
                if(!in_array($_tag, $tag_names)){
                    $tag_names[] = $_tag;
                }
            }
        }
        // Insert new tags into the tags table, and retrieve their ids
        $tag_ids = array();
        foreach ($tag_names as $tag_name) {
            if($tag_name == '') continue;
            // Check if the tag already exists in the tags table
            $sql = 'SELECT id FROM tags WHERE name = :name';
            $st = $conn->prepare($sql);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $st->bindValue(":name", $tag_name, PDO::PARAM_STR);
            $st->execute();
            $row = $st->fetch(PDO::FETCH_ASSOC);
            if ($row) {
                // If the tag already exists, use its id
                $tag_ids[] = $row['id'];
            } else {
                // If the tag does not exist, insert it and use the new id
                $sql = 'INSERT INTO tags (name) VALUES (:name)';
                $st = $conn->prepare($sql);
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $st->bindValue(":name", $tag_name, PDO::PARAM_STR);
                $st->execute();
                $tag_ids[] = $conn->lastInsertId();
            }
        }
        // Insert the game-tag relationships into the tag_links table
        foreach ($tag_ids as $tag_id) {
            $sql = 'INSERT INTO tag_links (game_id, tag_id) VALUES (:game_id, :tag_id)';
            $st = $conn->prepare($sql);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $st->bindValue(":game_id", $this->id, PDO::PARAM_INT);
            $st->bindValue(":tag_id", $tag_id, PDO::PARAM_INT);
            $st->execute();
            //
            $sql = 'UPDATE tags SET usage_count = usage_count + 1 WHERE id = :tag_id';
            $st = $conn->prepare($sql);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $st->bindValue(':tag_id', $tag_id, PDO::PARAM_INT);
            $st->execute();
        }
    }
    public function insert()
    {
        if (!is_null($this->id)) trigger_error("Game::insert(): Attempt to insert an Game object that already has its ID property set (to $this->id).", E_USER_ERROR);
        $conn = open_connection();
        $conn->beginTransaction(); // Start a transaction to ensure atomicity of inserts
        try {
            $sql = 'INSERT INTO games ( createdDate, title, description, instructions, category, source, thumb_1, thumb_2, thumb_small, url, width, height, slug, tags, views, upvote, downvote, data, extra_fields, is_mobile, published )
                      VALUES ( :createdDate, :title, :description, :instructions, :category, :source, :thumb_1, :thumb_2, :thumb_small, :url, :width, :height, :slug, :tags, 0, 0, 0, :data, :extra_fields, :is_mobile, :published )';
            $st = $conn->prepare($sql);
            $st->bindValue(":createdDate", $this->createdDate, PDO::PARAM_STR);
            $st->bindValue(":title", $this->title, PDO::PARAM_STR);
            $st->bindValue(":description", $this->description, PDO::PARAM_STR);
            $st->bindValue(":instructions", $this->instructions, PDO::PARAM_STR);
            $st->bindValue(":category", $this->category, PDO::PARAM_STR);
            $st->bindValue(":source", $this->source, PDO::PARAM_STR);
            $st->bindValue(":thumb_1", $this->thumb_1, PDO::PARAM_STR);
            $st->bindValue(":thumb_2", $this->thumb_2, PDO::PARAM_STR);
            $st->bindValue(":thumb_small", $this->thumb_small, PDO::PARAM_STR);
            $st->bindValue(":url", $this->url, PDO::PARAM_STR);
            $st->bindValue(":width", $this->width, PDO::PARAM_STR);
            $st->bindValue(":height", $this->height, PDO::PARAM_STR);
            $st->bindValue(":slug", esc_slug($this->slug), PDO::PARAM_STR);
            $st->bindValue(":tags", ($this->tags) ? $this->tags : '', PDO::PARAM_STR);
            $st->bindValue(":data", isset($_POST['data']) ? json_encode($_POST['data']) : '', PDO::PARAM_STR);
            $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
            $st->bindValue(":is_mobile", $this->is_mobile, PDO::PARAM_BOOL);
            $st->bindValue(":published", $this->published, PDO::PARAM_BOOL);
            $st->execute();
            $game_id = $conn->lastInsertId();
            $this->id = $game_id;
            if(!is_null($this->tags) && $this->tags != ''){ // Have tags
                $this->update_tags($this->tags);
            }
            // Commit the transaction
            $conn->commit();
        } catch (Exception $e) {
            // Roll back the transaction on error
            $conn->rollBack();
            throw $e;
        }
    }
    public function update()
    {
        if (is_null($this->id)) trigger_error("Game::update(): Attempt to update an Game object that does not have its ID property set.", E_USER_ERROR);
        $prev_cats = Game::getById($this->id)->category; //Get previous category
        //
        $conn = open_connection();
        $conn->beginTransaction(); // Start a transaction
        try {
            $sql = "UPDATE games SET title=:title, slug=:slug, description=:description, instructions=:instructions, category=:category, thumb_1=:thumb_1, thumb_2=:thumb_2, thumb_small=:thumb_small, url=:url, width=:width, height=:height, fields=:fields, extra_fields=:extra_fields, last_modified=:last_modified, is_mobile=:is_mobile, published=:published WHERE id = :id";
            $st = $conn->prepare($sql);
            $st->bindValue(":id", $this->id, PDO::PARAM_INT);
            $st->bindValue(":last_modified", date('Y-m-d H:i:s'), PDO::PARAM_STR);
            $st->bindValue(":title", $this->title, PDO::PARAM_STR);
            $st->bindValue(":slug", $this->slug, PDO::PARAM_STR);
            $st->bindValue(":description", $this->description, PDO::PARAM_STR);
            $st->bindValue(":instructions", $this->instructions, PDO::PARAM_STR);
            $st->bindValue(":category", $this->category, PDO::PARAM_STR);
            $st->bindValue(":thumb_1", $this->thumb_1, PDO::PARAM_STR);
            $st->bindValue(":thumb_2", $this->thumb_2, PDO::PARAM_STR);
            $st->bindValue(":thumb_small", $this->thumb_small, PDO::PARAM_STR);
            $st->bindValue(":url", $this->url, PDO::PARAM_STR);
            $st->bindValue(":width", $this->width, PDO::PARAM_INT);
            $st->bindValue(":height", $this->height, PDO::PARAM_INT);
            $st->bindValue(":fields", $this->fields, PDO::PARAM_STR);
            $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
            $st->bindValue(":is_mobile", $this->is_mobile, PDO::PARAM_BOOL);
            $st->bindValue(":published", $this->published, PDO::PARAM_BOOL);
            $st->execute();
            // Update category listing
            if($prev_cats != $this->category){
                $st = $conn->prepare("DELETE FROM cat_links WHERE gameid = :id");
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $st->bindValue(":id", $this->id, PDO::PARAM_INT);
                $st->execute();
                $cats = commas_to_array($this->category);
                if(is_array($cats)){ //Add new category if not exist
                    $length = count($cats);
                    for($i = 0; $i < $length; $i++){
                        $category = Category::getByName($cats[$i]);
                        $category->addToCategory($this->id, $category->id);
                    }
                }
            }
            // Update tags
            $old_tags = $this->get_tags();
            $new_tags = $this->tags;
            if($old_tags != $new_tags){
                // Tags has been changed
                if($old_tags != ''){
                    $st = $conn->prepare("DELETE FROM tag_links WHERE game_id = :id");
                    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    $st->bindValue(":id", $this->id, PDO::PARAM_INT);
                    $st->execute();
                }
                if($new_tags != ''){
                    $this->update_tags($this->tags);
                }
            }
            // Commit the transaction
            $conn->commit();
        } catch (Exception $e) {
            // Roll back the transaction on error
            $conn->rollBack();
            throw $e;
        }
    }
    public function delete()
    {
        if (is_null($this->id)) trigger_error("Game::delete(): Attempt to delete an Game object that does not have its ID property set.", E_USER_ERROR);
        $conn = open_connection();
        $st = $conn->prepare("DELETE FROM games WHERE id = :id LIMIT 1");
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->execute();
        $st = $conn->prepare("DELETE FROM cat_links WHERE gameid = :id");
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->execute();
        // Remove trends
        $st = $conn->prepare("DELETE FROM trends WHERE slug = :slug");
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $st->bindValue(":slug", $this->slug, PDO::PARAM_STR);
        $st->execute();
        // Remove tag_links
        $st = $conn->prepare("DELETE FROM tag_links WHERE game_id = :game_id");
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $st->bindValue(":game_id", $this->id, PDO::PARAM_STR);
        $st->execute();
        //
        if ($this->source == 'self') // Remove game files
        {
            $src = '..' . $this->url;
            $this->remove_game_folder($src);
        }
        if(substr($this->thumb_1, 0, 8) == '/thumbs/'){ // Remove thumbnail files
            if(file_exists('..'.$this->thumb_1)){
                unlink('..'.$this->thumb_1);
            }
        }
        if(substr($this->thumb_2, 0, 8) == '/thumbs/'){ // Remove thumbnail files
            if(file_exists('..'.$this->thumb_2)){
                unlink('..'.$this->thumb_2);
            }
        }
        if(substr($this->thumb_small, 0, 8) == '/thumbs/'){ // Remove thumbnail files
            if(file_exists('..'.$this->thumb_small)){
                unlink('..'.$this->thumb_small);
            }
        }
        // Remove all content translations
        delete_content_translation('game', $this->id);
    }
    public function remove_game_folder($dir)
    {
        if (is_null($this->id)) trigger_error("Does not have its ID property set.", E_USER_ERROR);
        if (is_dir($dir))
        {
            $files = scandir($dir);
            foreach ($files as $file) if ($file != "." && $file != "..") $this->remove_game_folder("$dir/$file");
            rmdir($dir);
        }
        else if (file_exists($dir)) unlink($dir);
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/Page.php
New file
@@ -0,0 +1,196 @@
<?php
class Page
{
    public $id = null;
    public $createdDate = null;
    public $slug = null;
    public $title = null;
    public $content = null;
    public $nl2br = 1;
    public $fields = '';
    public $extra_fields = null;
    public function __construct( $data=array() ) {
        if ( isset( $data['id'] ) ) $this->id = (int) $data['id'];
        if ( isset( $data['createdDate'] ) ) $this->createdDate = (int) $data['createdDate'];
        if ( isset( $data['title'] ) ) $this->title = htmlspecialchars($data['title']);
        if ( isset( $data['content'] ) ) $this->content = $data['content'];
        if ( isset( $data['nl2br'] ) ) $this->nl2br = (int)$data['nl2br'];
        if ( isset($data['fields']) ) $this->fields = $data['fields'];
        if ( isset( $data['slug'] ) ) $this->slug = htmlspecialchars(strtolower(str_replace(' ', '-', $data["slug"])));
        if(isset($data['extra_fields'])){
            if(is_array($data['extra_fields'])){
                $data['extra_fields'] = json_encode($data['extra_fields']);
            }
            $this->extra_fields = $data['extra_fields'];
        }
    }
    public function storeFormValues ( $params ) {
        // Store all the parameters
        $this->__construct( $params );
        // Parse and store the publication date
        if ( isset($params['createdDate']) ) {
            $createdDate = explode ( '-', $params['createdDate'] );
            if ( count($createdDate) == 3 ) {
                list ( $y, $m, $d ) = $createdDate;
                $this->createdDate = mktime ( 0, 0, 0, $m, $d, $y );
            }
        }
    }
    public static function getById( $id ) {
        $conn = open_connection();
        $sql = "SELECT *, UNIX_TIMESTAMP(createdDate) AS createdDate FROM pages WHERE id = :id";
        $st = $conn->prepare( $sql );
        $st->bindValue( ":id", $id, PDO::PARAM_INT );
        $st->execute();
        $row = $st->fetch();
        if ( $row ) return new Page( $row );
    }
    public static function getBySlug( $slug ) {
        $conn = open_connection();
        $sql = "SELECT *, UNIX_TIMESTAMP(createdDate) AS createdDate FROM pages WHERE slug = :slug";
        $st = $conn->prepare( $sql );
        $st->bindValue( ":slug", $slug, PDO::PARAM_STR );
        $st->execute();
        $row = $st->fetch();
        if ( $row ) return new Page( $row );
    }
    public static function getList( $numRows=1000000 ) {
        $conn = open_connection();
        $sql = "SELECT id, slug, title, fields, extra_fields, UNIX_TIMESTAMP(createdDate) AS createdDate
                        FROM pages
                        ORDER BY createdDate DESC LIMIT :numRows";
        $st = $conn->prepare( $sql );
        $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
        $st->execute();
        $list = array();
        while ( $row = $st->fetch() ) {
            $page = new Page( $row );
            $list[] = $page;
        }
        $totalRows = $conn->query('SELECT count(*) FROM pages')->fetchColumn();
        return ( array ( "results" => $list, "totalRows" => $totalRows ) );
    }
    public static function getList2(int $amount = 1000, $sort = 'id DESC', int $page = 0, $count = true)
    {
        // Improvement for getList(), this function is work for pagination list
        // The $sort is disabled for now
        $conn = open_connection();
        $sql = "SELECT id, createdDate, slug, title, fields, extra_fields FROM pages ORDER BY createdDate DESC LIMIT :amount OFFSET :page";
        $st = $conn->prepare($sql);
        $st->bindValue( ":amount", $amount, PDO::PARAM_INT );
        $st->bindValue( ":page", $page, PDO::PARAM_INT );
        $st->execute();
        $list = array();
        while ($row = $st->fetch())
        {
            $page = new Page($row);
            $page->createdDate = $row['createdDate']; // Fix bug
            $list[] = $page;
        }
        $totalRows = 0;
        if($count){
            $totalRows = $conn->query('SELECT count(*) FROM pages')->fetchColumn();
        } else {
            $totalRows = count($list);
        }
        $totalPages = 0;
        if (count($list))
        {
            $totalPages = ceil($totalRows / $amount);
        }
        return (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ));
    }
    public function getExtraField($key)
    {
        if($this->extra_fields != null){
            $fields = json_decode($this->extra_fields, true);
            if(isset($fields[$key])){
                return $fields[$key];
            }
        }
        return null;
    }
    public function get_fields()
    {
        if($this->fields != ''){
            return json_decode($this->fields, true);
        } else {
            return null;
        }
    }
    public function get_field($key)
    {
        if($this->fields != ''){
            $fields = json_decode($this->fields, true);
            if(isset($fields[$key])){
                return $fields[$key];
            } else {
                return null;
            }
        } else {
            return null;
        }
    }
    public function insert() {
        if ( !is_null( $this->id ) ) trigger_error ( "Page::insert(): Attempt to insert an Page object that already has its ID property set (to $this->id).", E_USER_ERROR );
        $conn = open_connection();
        $sql = "INSERT INTO pages ( createdDate, title, content, nl2br, slug, extra_fields ) VALUES ( FROM_UNIXTIME(:createdDate), :title, :content, :nl2br, :slug, :extra_fields )";
        $st = $conn->prepare ( $sql );
        $st->bindValue( ":createdDate", $this->createdDate, PDO::PARAM_INT );
        $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
        $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
        $st->bindValue( ":nl2br", $this->nl2br, PDO::PARAM_INT );
        $st->bindValue( ":slug", esc_slug($this->slug), PDO::PARAM_STR );
        $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
        $st->execute();
        $this->id = $conn->lastInsertId();
    }
    public function update() {
        if ( is_null( $this->id ) ) trigger_error ( "Page::update(): Attempt to update an Page object that does not have its ID property set.", E_USER_ERROR );
        $conn = open_connection();
        $sql = "UPDATE pages SET title=:title, content=:content, nl2br=:nl2br, slug=:slug, fields=:fields, extra_fields=:extra_fields WHERE id = :id";
        $st = $conn->prepare ( $sql );
        $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
        $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
        $st->bindValue( ":nl2br", $this->nl2br, PDO::PARAM_INT );
        $st->bindValue( ":slug", $this->slug, PDO::PARAM_STR );
        $st->bindValue( ":fields", $this->fields, PDO::PARAM_STR );
        $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
        $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
        $st->execute();
    }
    public function delete() {
        if ( is_null( $this->id ) ) trigger_error ( "Page::delete(): Attempt to delete an Page object that does not have its ID property set.", E_USER_ERROR );
        $conn = open_connection();
        $st = $conn->prepare ( "DELETE FROM pages WHERE id = :id LIMIT 1" );
        $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
        $st->execute();
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/User.php
New file
@@ -0,0 +1,316 @@
<?php
class User {
    public $id = null;
    public $username = null;
    public $password = null;
    public $email = null;
    public $birth_date = null;
    public $join_date = null;
    public $gender = null;
    public $role = null;
    public $data = null;
    public $avatar = 0;
    public $bio = '';
    public $xp = 0;
    public $rank = '-';
    public $level = 1;
    public function __construct($data = array())
    {
        if (isset($data['id'])) $this->id = (int)$data['id'];
        if (isset($data['username'])) $this->username = $data['username'];
        if (isset($data['password'])) $this->password = $data['password'];
        if (isset($data['email'])) $this->email = $data['email'];
        if (isset($data['birth_date'])) $this->birth_date = $data['birth_date'];
        if (isset($data['join_date'])) $this->join_date = $data['join_date'];
        if (isset($data['gender'])) $this->gender = $data['gender'];
        if (isset($data['data'])) $this->data = json_decode($data['data'], true);
        if (isset($data['avatar'])) $this->avatar = $data['avatar'];
        if (isset($data['role'])) $this->role = $data['role'];
        if (isset($data['bio'])) $this->bio = $data['bio'];
        if (isset($data['xp'])) $this->xp = $data['xp'];
        if(is_null($this->xp)){
            $this->xp = 0;
        }
        if(is_null($this->birth_date)){
            $this->birth_date = date('Y-m-d');
        }
        if(!$this->data){
            $this->data = array();
            $this->data['likes'] = [];
        }
        if(file_exists(ABSPATH.'includes/rank.json')){
            $rank = json_decode(file_get_contents(ABSPATH.'includes/rank.json'), true);
            if($rank){
                $index = 0;
                foreach ($rank as $name => $value) {
                    if($this->xp >= $value){
                        $index++;
                        $this->level = $index;
                        $this->rank = $name;
                    }
                }
            }
        }
    }
    public function storeFormValues($params)
    {
        $this->__construct($params);
        if(is_null($this->join_date)){
            $this->join_date = date('Y-m-d');
        }
    }
    public static function getById($id)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM users WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $id, PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new User($row); //$row
    }
    public static function getByUsername($username)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM users WHERE username = :username LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":username", $username, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new User($row); //$row
    }
    public static function getList(int $amount = 30, $sort = 'desc', int $offset = 0)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM users
            ORDER BY id $sort LIMIT $amount OFFSET $offset";
        $st = $conn->prepare($sql);
        $st->execute();
        $list = array();
        while ($row = $st->fetch())
        {
            $user = new User($row);
            $list[] = $user;
        }
        $totalRows = $conn->query('SELECT count(*) FROM users')->fetchColumn();
        $totalPages = 0;
        if (count($list))
        {
            $totalPages = ceil($totalRows / $amount);
        }
        return (array(
            "results" => $list,
            "totalRows" => $totalRows,
            "totalPages" => $totalPages
        ));
    }
    public static function getByEmail($email)
    {
        $conn = open_connection();
        $sql = "SELECT * FROM users WHERE email = :email LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":email", $email, PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        if ($row) return new User($row); //$row
    }
    public function array_id_exist($id)
    {
        if(!is_null($this->id)){
            if(!is_null($this->data) || isset($this->data['likes'])){
                $index = 1;
                foreach ($this->data['likes'] as $val) {
                    if($val == $id){
                        return $index;
                    }
                    $index++;
                }
                return false;
            }
        }
    }
    public function favoriteGames()
    {
        if(!is_null($this->id)){
            $conn = open_connection();
            $sql = "SELECT * FROM favorites WHERE user_id = :user_id ORDER BY id DESC";
            $st = $conn->prepare($sql);
            $st->bindValue(":user_id", $this->id, PDO::PARAM_INT);
            $st->execute();
            $row = $st->fetchAll();
            return $row;
        }
        return null;
    }
    public static function getTotalUsers(){
        // Get total users
        $conn = open_connection();
        $sql = "SELECT COUNT(*) FROM users";
        $st = $conn->prepare($sql);
        $st->execute();
        return $st->fetchColumn();
    }
    public function like($id)
    {
        if(!is_null($this->id)){
            if(is_null($this->data) || $this->data == ''){
                $this->data = array();
                $this->data['likes'] = array();
            }
            if(!$this->array_id_exist($id)){
                array_push($this->data['likes'], $id);
            }
            $this->xp += 10;
            $this->update_data();
            $this->update_xp();
        } else {
            echo "User is null";
        }
    }
    public function dislike($id)
    {
        if(!is_null($this->id)){
            if(is_null($this->data) || $this->data == ''){
                $this->data = array();
                $this->data['likes'] = array();
            }
            $arr = $this->array_id_exist($id);
            if($arr){
                array_splice($this->data['likes'], $arr-1, 1);
                $this->update_data();
            }
        } else {
            echo "User is null";
        }
    }
    public function insert()
    {
        if (!is_null($this->id)) trigger_error("User::insert(): Attempt to insert an User object that already has its ID property set (to $this->id).", E_USER_ERROR);
        if(!$this->avatar){
            $this->avatar = rand(1,20);
        }
        $conn = open_connection();
        $sql = 'INSERT INTO users ( username, password, email, birth_date, join_date, gender, data, role, avatar )
                  VALUES ( :username, :password, :email, :birth_date, :join_date, :gender, :data, :role, :avatar )';
        $st = $conn->prepare($sql);
        $st->bindValue(":username", $this->username, PDO::PARAM_STR);
        $st->bindValue(":password", $this->password, PDO::PARAM_STR);
        $st->bindValue(":email", $this->email, PDO::PARAM_STR);
        $st->bindValue(":birth_date", $this->birth_date, PDO::PARAM_STR);
        $st->bindValue(":join_date", $this->join_date, PDO::PARAM_STR);
        $st->bindValue(":gender", $this->gender, PDO::PARAM_STR);
        $st->bindValue(":data", json_encode($this->data), PDO::PARAM_STR);
        $st->bindValue(":role", 'user', PDO::PARAM_STR);
        $st->bindValue(":avatar", $this->avatar, PDO::PARAM_INT);
        $st->execute();
        $this->id = $conn->lastInsertId();
    }
    public function update_data()
    {
        if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
        //
        $conn = open_connection();
        $sql = "UPDATE users SET data=:data WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->bindValue(":data", json_encode($this->data), PDO::PARAM_STR);
        $st->execute();
    }
    public function update_xp()
    {
        if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
        //
        $conn = open_connection();
        $sql = "UPDATE users SET xp=:xp WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->bindValue(":xp", $this->xp, PDO::PARAM_INT);
        $st->execute();
    }
    public function add_xp($val)
    {
        if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
        //
        $this->xp += (int)$val;
        $conn = open_connection();
        $sql = "UPDATE users SET xp=:xp WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->bindValue(":xp", $this->xp, PDO::PARAM_INT);
        $st->execute();
    }
    public function update()
    {
        if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
        //
        $conn = open_connection();
        $sql = "UPDATE users SET username=:username, password=:password, email=:email, birth_date=:birth_date, gender=:gender, bio=:bio, avatar=:avatar WHERE id = :id";
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $this->id, PDO::PARAM_INT);
        $st->bindValue(":username", $this->username, PDO::PARAM_STR);
        $st->bindValue(":password", $this->password, PDO::PARAM_STR);
        $st->bindValue(":email", $this->email, PDO::PARAM_STR);
        $st->bindValue(":birth_date", $this->birth_date, PDO::PARAM_STR);
        $st->bindValue(":gender", $this->gender, PDO::PARAM_STR);
        $st->bindValue(":bio", $this->bio, PDO::PARAM_STR);
        $st->bindValue(":avatar", $this->avatar, PDO::PARAM_INT);
        $st->execute();
    }
    public function delete( $pass = null )
    {
        if (is_null($this->id)) trigger_error("User::delete(): Attempt to delete an User object that does not have its ID property set.", E_USER_ERROR);
        if(password_verify($pass, $this->password) || USER_ADMIN){
            $conn = open_connection();
            $st = $conn->prepare("DELETE FROM users WHERE id = :id LIMIT 1");
            $st->bindValue(":id", $this->id, PDO::PARAM_INT);
            $st->execute();
            //Delete its avatar if exist
            if(file_exists( ABSPATH.'images/avatar/'.$this->username.'.png' )){
                unlink( ABSPATH.'images/avatar/'.$this->username.'.png' );
            }
            //Remove all comments from this user
            $st = $conn->prepare("DELETE FROM comments WHERE sender_id = :id");
            $st->bindValue(":id", $this->id, PDO::PARAM_INT);
            $st->execute();
            //Remove all scores from this user
            $st = $conn->prepare("DELETE FROM scores WHERE user_id = :id");
            $st->bindValue(":id", $this->id, PDO::PARAM_INT);
            $st->execute();
        }
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/classes/Widget.php
New file
@@ -0,0 +1,96 @@
<?php
$widget_factory;
$registered_sidebars = array();
class Widget {
    public $name;
    public $id_base;
    public $description = '';
    public function __construct() {
        // actual widget processes
    }
    public function widget( $instance, $args  ) {
        // outputs the content of the widget
    }
    public function form( $instance ) {
        echo '<p class="no-options-widget">' . __( 'There are no options for this widget.' ) . '</p>';
        return 'noform';
    }
    public function update( $new_instance, $old_instance ) {
        return $new_instance;
    }
}
class Widget_Factory {
    public $widgets = array();
    public function register( $widget ) {
        if ( $widget instanceof Widget ) {
            $this->widgets[ spl_object_hash( $widget ) ] = $widget;
        } else {
            $this->widgets[ $widget ] = new $widget();
        }
    }
    public function unregister( $widget ) {
        if ( $widget instanceof WP_Widget ) {
            unset( $this->widgets[ spl_object_hash( $widget ) ] );
        } else {
            unset( $this->widgets[ $widget ] );
        }
    }
}
$widget_factory = new Widget_Factory();
function register_widget($widget){
    global $widget_factory;
    $widget_factory->register($widget);
}
function the_widget( $widget, $instance = array(), $args = array() ){
    global $widget_factory;
    if ( ! isset( $widget_factory->widgets[ $widget ] ) ) {
        return;
    }
    $widget_obj = $widget_factory->widgets[ $widget ];
    if ( ! ( $widget_obj instanceof Widget ) ) {
        return;
    }
    $widget_obj->widget( $instance, $args );
}
function get_widget( $widget, $instance = array(), $args = array() ){
    global $widget_factory;
    if ( ! isset( $widget_factory->widgets[ $widget ] ) ) {
        return;
    }
    $widget_obj = $widget_factory->widgets[ $widget ];
    if ( ! ( $widget_obj instanceof Widget ) ) {
        return;
    }
    return $widget_obj;
}
function widget_exists($widget){
    global $widget_factory;
    if(isset($widget_factory->widgets[ $widget ])){
        return true;
    } else {
        return false;
    }
}
require( ABSPATH . 'includes/widgets.php' );
?>
CloudArcade/cloudarcade/cloudarcade/classes/index.php
CloudArcade/cloudarcade/cloudarcade/config.php
New file
@@ -0,0 +1,26 @@
<?php
if(!file_exists( __DIR__."/connect.php") ){
    if(file_exists("install.php")){
        header('Location: install.php');
    } elseif(file_exists("../install.php")) {
        header('Location: ../install.php');
    }
    exit('CloudArcade not installed yet.');
}
require("connect.php");
require("includes/version.php");
function handleException( $exception ) {
    echo($exception);
    error_log( $exception->getMessage() );
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
set_exception_handler( 'handleException' );
?>
CloudArcade/cloudarcade/cloudarcade/connect-sample.php
New file
@@ -0,0 +1,5 @@
<?php
define( "DB_DSN", "mysql:host=db_host;dbname=db_name" );
define( "DB_USERNAME", "db_user" );
define( "DB_PASSWORD", "db_password" );
?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/404.php
New file
@@ -0,0 +1,7 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container text-center">
        <img src="<?php echo DOMAIN . TEMPLATE_PATH . "/images/404.png" ?>">
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/archive.php
New file
@@ -0,0 +1,36 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
            <h3 class="item-title"><?php _e('%a Games', esc_string($archive_title)) ?></h3>
            <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
            <?php
            if($category->description != ''){
                echo '<p class="category-description">';
                echo "$category->description</p>";
            }
            ?>
            <div class="game-container">
                <div class="grid-layout grid-wrapper">
                    <?php foreach ( $games as $game ) { ?>
                    <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
                    <?php } ?>
                </div>
            </div>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($_GET['page'])){
                        $cur_page = esc_int($_GET['page']);
                    }
                    render_pagination($total_page, $cur_page, 8, 'category', $_GET['slug']);
                    ?>
                </nav>
            </div>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/functions.php
New file
@@ -0,0 +1,219 @@
<?php
function list_categories(){
    $categories = fetch_all_categories();
    echo '<ul class="links list-categories">';
    foreach ($categories as $item) {
        echo '<a href="'. get_permalink('category', $item->slug) .'"><li>'. esc_string($item->name) .'</li></a>';
    }
    echo '</ul>';
}
function list_games($type, $amount, $count = false){
    echo '<div class="row">';
    $data = fetch_games_by_type($type, $amount, 0, $count);
    $games = $data['results'];
    foreach ( $games as $game ) { ?>
    <div class="col-4 list-tile">
        <a href="<?php echo get_permalink('game', $game->slug) ?>">
            <div class="list-game">
                <div class="list-thumbnail"><img src="<?php echo get_small_thumb($game) ?>" class="small-thumb" alt="<?php echo esc_string($game->title) ?>"></div>
            </div>
        </a>
    </div>
    <?php }
    echo '</div>';
}
function list_games_by_category($cat, $amount){
    // Deprecated, not used anymore
    echo '<div class="grid-layout grid-wrapper">';
    $data = get_game_list_category($cat, $amount);
    $games = $data['results'];
    foreach ( $games as $game ) { ?>
        <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
    <?php }
    echo '</div>';
}
function list_games_by_categories($cat, $amount){
    // Deprecated, not used anymore
    echo '<div class="grid-layout grid-wrapper">';
    $data = get_game_list_categories($cat, $amount);
    $games = $data['results'];
    foreach ( $games as $game ) { ?>
        <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
    <?php }
    echo '</div>';
}
function show_user_profile_header(){
    global $login_user;
    if($login_user){
    ?>
    <div class="user-avatar">
        <img src="<?php echo get_user_avatar() ?>">
    </div>
    <ul class="user-links hidden">
        <li>
            <strong>
                <?php echo $login_user->username ?>
            </strong>
            <div class="label-xp"><?php echo $login_user->xp ?>xp</div>
        </li>
        <hr>
        <a href="<?php echo get_permalink('user', $login_user->username) ?>">
            <li><?php _e('My Profile') ?></li>
        </a>
        <a href="<?php echo get_permalink('user', $login_user->username, array('edit' => 'edit')) ?>">
            <li><?php _e('Edit Profile') ?></li>
        </a>
        <hr>
        <a href="<?php echo DOMAIN ?>admin.php?action=logout">
            <li class="text-danger"><?php _e('Log Out') ?></li>
        </a>
    </ul>
    <?php
    }
}
register_sidebar(array(
    'name' => 'Head',
    'id' => 'head',
    'description' => 'HTML element before &#x3C;/head&#x3E;',
));
register_sidebar(array(
    'name' => 'Sidebar 1',
    'id' => 'sidebar-1',
    'description' => 'Right sidebar',
));
register_sidebar(array(
    'name' => 'Footer 1',
    'id' => 'footer-1',
    'description' => 'Footer 1',
));
register_sidebar(array(
    'name' => 'Footer 2',
    'id' => 'footer-2',
    'description' => 'Footer 2',
));
register_sidebar(array(
    'name' => 'Footer 3',
    'id' => 'footer-3',
    'description' => 'Footer 3',
));
register_sidebar(array(
    'name' => 'Top Content',
    'id' => 'top-content',
    'description' => 'Above main content element. Recommended for Ad banner placement.',
));
register_sidebar(array(
    'name' => 'Bottom Content',
    'id' => 'bottom-content',
    'description' => 'Under main content element. Recommended for Ad banner placement.',
));
register_sidebar(array(
    'name' => 'Homepage Bottom',
    'id' => 'homepage-bottom',
    'description' => 'Bottom content on homepage. Can be used to show site description or explaining about your site.',
));
register_sidebar(array(
    'name' => 'Footer Copyright',
    'id' => 'footer-copyright',
    'description' => 'Copyright section.',
));
class widget_game_list extends Widget {
    function __construct() {
         $this->name = 'Game List';
         $this->id_base = 'game-list';
         $this->description = 'Show game list ( Grid ). Is recommedned to put this on sidebar.';
    }
    public function widget( $instance, $args = array() ){
        $label = isset($instance['label']) ? $instance['label'] : '';
        $class = isset($instance['class']) ? $instance['class'] : 'widget';
        $type = isset($instance['type']) ? $instance['type'] : 'new';
        $amount = isset($instance['amount']) ? $instance['amount'] : 9;
        echo '<div class="'.$class.'">';
        if($label != ''){
            $icon = 'fa-plus';
            if($type != 'new'){
                $icon = 'fa-gamepad';
            }
            echo '<h4 class="widget-title"><i class="fa '.$icon.'" aria-hidden="true"></i>'.$label.'</h4>';
        }
        list_games($type, (int)$amount);
        echo '</div>';
    }
    public function form( $instance = array() ){
        if(!isset( $instance['label'] )){
            $instance['label'] = '';
        }
        if(!isset( $instance['type'] )){
            $instance['type'] = 'new';
        }
        if(!isset( $instance['amount'] )){
            $instance['amount'] = 9;
        }
        if(!isset( $instance['class'] )){
            $instance['class'] = 'widget';
        }
        ?>
        <div class="form-group">
            <label><?php _e('Widget label/title (optional)') ?>:</label>
            <input type="text" class="form-control" name="label" placeholder="NEW GAMES" value="<?php echo $instance['label'] ?>">
        </div>
        <div class="form-group">
            <label><?php _e('Sort game list by') ?>:</label>
            <select class="form-control" name="type">
                <?php
                $opts = array(
                    'new' => 'New',
                    'popular' => 'Popular',
                    'random' => 'Random',
                    'likes' => 'Likes',
                    'trending' => 'Trending'
                );
                foreach ($opts as $key => $value) {
                    $selected = '';
                    if($key == $instance['type']){
                        $selected = 'selected';
                    }
                    echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
                }
                ?>
            </select>
        </div>
        <div class="form-group">
            <label><?php _e('Amount') ?>:</label>
            <input type="number" class="form-control" name="amount" placeholder="9" min="1" value="<?php echo $instance['amount'] ?>">
        </div>
        <div class="form-group">
            <label><?php _e('Div class (Optional)') ?>:</label>
            <input type="text" class="form-control" name="class" placeholder="widget" value="<?php echo $instance['class'] ?>">
        </div>
        <?php
    }
}
register_widget( 'widget_game_list' );
if(file_exists(ABSPATH . TEMPLATE_PATH . '/includes/custom.php')){
    include(ABSPATH . TEMPLATE_PATH . '/includes/custom.php');
}
?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/game.php
New file
@@ -0,0 +1,123 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
        <div class="row">
            <div class="col-md-9 game-content">
                <div class="game-iframe-container">
                    <iframe class="game-iframe" id="game-area" src="<?php echo get_game_url($game); ?>" frameborder="0" allowfullscreen></iframe>
                </div>
                <div class="single-info-container">
                    <div class="header-left">
                        <h1 class="single-title"><?php echo htmlspecialchars( $game->title )?></h1>
                        <p><?php _e('Played %a times.', esc_int($game->views)) ?></p>
                    </div>
                    <div class="header-right">
                        <div class="stats-vote">
                            <?php
                                $vote_percentage = '- ';
                                if($game->upvote+$game->downvote > 0){
                                    $vote_percentage = floor(($game->upvote/($game->upvote+$game->downvote))*100);
                                }
                            ?>
                            <div class="txt-stats"><b class="text-success"><?php echo $vote_percentage ?>%</b> (<?php echo $game->upvote ?>/<?php echo $game->upvote+$game->downvote ?>)</div>
                            <?php if($login_user){
                                $favorited_class = '';
                                if(is_favorited_game($game->id)){
                                    $favorited_class = 'color-red';
                                }
                                ?>
                            <i class="icon-vote fa fa-heart <?php echo $favorited_class ?>" id="favorite" data-id="<?php echo $game->id ?>"></i>
                            <?php } ?>
                            <i class="icon-vote fa fa-thumbs-up" id="upvote" data-id="<?php echo $game->id ?>"></i>
                            <i class="icon-vote fa fa-thumbs-down" id="downvote" data-id="<?php echo $game->id ?>"></i>
                            <div class="vote-status"></div>
                        </div>
                    </div>
                    <div class="action-btn">
                        <!-- <div class="single-icon"><i class="fa fa-external-link-square" aria-hidden="true"></i><a href="<?php echo get_permalink('full', $game->slug); ?>" target="_blank"><?php _e('Open in new window') ?></a></div>
                        <div class="single-icon"><i class="fa fa-expand" aria-hidden="true"></i><a href="#" onclick="open_fullscreen()"><?php _e('Fullscreen') ?></a></div> -->
                        <?php
                        if(defined('GAME_REPORTS')){
                            ?><div class="single-icon"><i class="fa fa-bug" aria-hidden="true"></i><a href="#" id="report-game"><?php _e('Report') ?></a></div>
                            <?php
                        }
                        ?>
                        <div class="social-share"><a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
                            <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/facebook.png' ?>" alt="share" class="social-icon">
                        </a></div>
                        <div class="social-share"><a href="https://twitter.com/intent/tweet?url=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
                            <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/twitter.png' ?>" alt="share" class="social-icon">
                        </a></div>
                    </div>
                </div>
                <b><?php _e('Description') ?>:</b>
                <div class="single-description">
                    <?php echo nl2br( $game->description )?>
                </div>
                <br>
                <b><?php _e('Instructions') ?>:</b>
                <div class="single-instructions">
                    <?php echo nl2br( $game->instructions )?>
                </div>
                <br>
                <?php if(can_show_leaderboard()) { ?>
                <div class="single-leaderboard">
                    <div id="content-leaderboard" class="table-responsive" data-id="<?php echo $game->id ?>"></div>
                </div>
                <?php } ?>
                <br>
                <b><?php _e('Categories') ?>:</b>
                <p class="cat-list">
                    <?php if ( $game->category ) {
                        $categories = $game->getCategoryList();
                        foreach ($categories as $cat) {
                            $category = Category::getById($cat['id']);
                            ?>
                    <a href="<?php echo get_permalink('category', $category->slug) ?>" class="cat-link"><?php echo esc_string($category->name) ?></a>
                    <?php
                        }
                        } ?>
                </p>
                <?php
                $tag_string = $game->get_tags();
                if($tag_string != ''){
                    echo '<b>'._t('Tags').':</b>';
                    echo '<div class="game-tag-list">';
                    $tags = explode(',', $tag_string);
                    foreach ($tags as $tag_name) {
                        echo '<a href="'. get_permalink('tag', $tag_name) .'" class="tag-item">';
                        echo esc_string($tag_name);
                        echo '</a>';
                    }
                    echo '</div>';
                }
                ?>
                <?php if(get_setting_value('comments')){
                    echo '<div class="mt-4"></div>';
                    echo '<b>'._t('Comments').':</b>';
                    render_game_comments($game->id);
                } ?>
            </div>
            <div class="col-md-3">
                <?php include  TEMPLATE_PATH . "/parts/sidebar.php" ?>
            </div>
        </div>
    </div>
    <?php widget_aside('bottom-content') ?>
    </div>
    <div class="bottom-container">
        <h3 class="item-title"><i class="fa fa-thumbs-up" aria-hidden="true"></i><?php _e('SIMILAR GAMES') ?></h3>
        <div class="grid-layout grid-wrapper">
            <?php
            $data = fetch_similar_games($game, 12);
            $games = $data['results'];
            foreach ( $games as $game ) {
                include  TEMPLATE_PATH . "/includes/grid.php";
            }
            ?>
        </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/home.php
New file
@@ -0,0 +1,56 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <h3 class="item-title"><i class="fa fa-plus" aria-hidden="true"></i><?php _e('NEW GAMES') ?></h3>
        <div class="grid-layout grid-wrapper" id="section-new-games">
            <?php
            $index = 0;
            $games = fetch_games_by_type('new', 30, 0, false)['results'];
            foreach ( $games as $game ) { $index++; ?>
                <?php include  TEMPLATE_PATH . "/includes/grid-masonry.php" ?>
            <?php } ?>
        </div>
        <!-- Load more games -->
        <div class="load-more-games-wrapper">
            <!-- Template -->
            <div class="item-append-template" style="display: none;">
                <div class="grid-item item-grid">
                    <a href="<?php echo get_permalink('game') ?>{{slug}}">
                    <div class="list-game">
                        <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="{{thumbnail}}" class="small-thumb lazyload" alt="{{title}}"></div>
                        <div class="list-title">
                            <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-{{rating}}.png' ?>" alt="rating"></div>{{title}}
                        </div>
                    </div>
                    </a>
                </div>
            </div>
            <!-- The button -->
            <div class="btn btn-primary btn-load-more-games">
                <?php _e('Load more games') ?> <i class="fa fa-chevron-down" aria-hidden="true"></i>
            </div>
        </div>
        <h3 class="item-title"><i class="fa fa-certificate" aria-hidden="true"></i><?php _e('POPULAR GAMES') ?></h3>
        <div class="grid-layout grid-wrapper">
            <?php
            $games = fetch_games_by_type('popular', 14, 0, false)['results'];
            foreach ( $games as $game ) { ?>
                <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
            <?php } ?>
        </div>
        <h3 class="item-title"><i class="fa fa-gamepad" aria-hidden="true"></i><?php _e('YOU MAY LIKE') ?></h3>
        <div class="grid-layout grid-wrapper">
            <?php
            $games = fetch_games_by_type('random', 14, 0, false)['results'];
            foreach ( $games as $game ) { ?>
                <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
            <?php } ?>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
    <div class="mb-4 mt-4 hp-bottom-container">
        <?php widget_aside('homepage-bottom') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/404.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/facebook.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-0.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-1.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-2.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-3.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-4.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-5.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder1.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder2.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder3.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/twitter.png
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/custom.php
New file
@@ -0,0 +1,11 @@
<?php
/*
Used for custom Widgets and custom Widget placements
This file will not be overwritten by the updater
*/
?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/footer.php
New file
@@ -0,0 +1,66 @@
<footer class="footer">
        <div class="container">
            <div class="row">
                <div class="col-lg-3">
                    <div class="footer-1">
                        <?php widget_aside('footer-1') ?>
                    </div>
                </div>
                <div class="col-lg-3">
                    <div class="footer-2">
                        <?php widget_aside('footer-2') ?>
                    </div>
                </div>
                <div class="col-lg-3">
                    <div class="footer-3">
                        <?php widget_aside('footer-3') ?>
                    </div>
                </div>
                <div class="col-lg-3">
                    <div class="footer-4">
                        <?php widget_aside('footer-4') ?>
                    </div>
                </div>
            </div>
        </div>
    </footer>
    <div class="copyright py-4 text-center">
        <div class="container">
            <?php
            if(isset($stored_widgets['footer-copyright'])){
                widget_aside('footer-copyright');
            } else {
                echo SITE_TITLE . ' Â© '.date('Y').'. All rights reserved.';
            }
            ?>
            <span class="dsb-panel">
                <?php
                // if(is_login() && USER_ADMIN ){
                //     echo '<a href="'.DOMAIN.'admin.php">Admin Dashboard</a>';
                // } else {
                //     echo 'V-'.VERSION;
                // }
                echo '<a href="'.DOMAIN.'page/privacy-policy">Privacy Policy</a>';
                ?>
                <?php
                echo '|';
                ?>
                <?php
                echo '<a href="'.DOMAIN.'page/page/contact-us">Contact Us</a>';
                ?>
            </span>
        </div>
    </div>
    </div>
    </div>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/jquery-3.6.2.min.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/lazysizes.min.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/bootstrap.bundle.min.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN ?>js/comment-system.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/script.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/custom.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN ?>js/stats.js"></script>
    <?php run_hook('footer') ?>
    <?php load_plugin_footers() ?>
  </body>
</html>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/grid-masonry.php
New file
@@ -0,0 +1,22 @@
<?php
$span = '';
$thumb = get_small_thumb($game);
if($index == 1 || $index == 9 || $index == 15 || $index == 23){
    $span = 'span-2';
    $thumb = esc_url($game->thumb_2);
    if(substr($thumb, 0, 1) == '/'){
        $thumb = DOMAIN . substr($thumb, 1);
    }
}
?>
<div class="grid-item <?php echo esc_string($span) ?> item-grid">
    <a href="<?php echo get_permalink('game', $game->slug) ?>">
    <div class="list-game">
        <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="<?php echo $thumb ?>" class="small-thumb lazyload" alt="<?php echo esc_string($game->title) ?>"></div>
        <div class="list-title">
            <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-'.get_rating('5', $game).'.png' ?>" alt="rating"></div>
            <?php echo esc_string($game->title); ?>
        </div>
    </div>
    </a>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/grid.php
New file
@@ -0,0 +1,10 @@
<div class="grid-item item-grid">
    <a href="<?php echo get_permalink('game', $game->slug) ?>">
    <div class="list-game">
        <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="<?php echo get_small_thumb($game) ?>" class="small-thumb lazyload" alt="<?php echo esc_string($game->title) ?>"></div>
        <div class="list-title">
            <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-'.get_rating('5', $game).'.png' ?>" alt="rating"></div><?php echo esc_string($game->title); ?>
        </div>
    </div>
    </a>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/header.php
New file
@@ -0,0 +1,57 @@
<!DOCTYPE html>
<html <?php the_html_attrs() ?>>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <title><?php echo get_page_title() ?></title>
        <?php the_canonical_link() ?>
        <meta name="description" content="<?php echo substr(esc_string($meta_description), 0, 160) ?>">
        <?php
            if(isset($game)){ //Game page
                ?>
                <meta name="twitter:card" content="summary_large_image" />
                <meta name="twitter:title" content="<?php echo htmlspecialchars( $page_title )?>" />
                <meta name="twitter:description" content="<?php echo substr(esc_string($meta_description), 0, 200) ?>" />
                <?php
                if(isset($game->thumb_1)){
                    $thumb = $game->thumb_1;
                    if(substr($thumb, 0, 1) == '/'){
                        $thumb = DOMAIN . substr($thumb, 1);
                    }
                    echo('<meta name="twitter:image:src" content="'.$thumb.'">');
                    echo('<meta property="og:image" content="'.$thumb.'">');
                }
            }
        ?>
        <?php load_plugin_headers() ?>
        <!-- Google fonts-->
        <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
        <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/bootstrap.min.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/jquery-comments.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/user.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/style.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/custom.css" />
        <!-- Font Awesome icons (free version)-->
        <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
        <?php widget_aside('head') ?>
    </head>
    <body id="page-top">
        <!-- Navigation-->
        <div class="container site-container">
        <div class="site-content">
        <nav class="navbar navbar-expand-lg navbar-dark top-nav" id="mainNav">
            <div class="container">
                <button class="navbar-toggler navbar-toggler-left collapsed" type="button" data-toggle="collapse" data-target="#navb" aria-expanded="false">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <a class="navbar-brand js-scroll-trigger" href="<?php echo DOMAIN ?>"><img src="<?php echo DOMAIN . SITE_LOGO ?>" class="site-logo" alt="site-logo"></a>
                <?php include  TEMPLATE_PATH . "/parts/navigation-top.php" ?>
                <?php show_user_profile_header() ?>
            </div>
        </nav>
        <div class="nav-categories">
            <div class="container">
                <?php include  TEMPLATE_PATH . "/parts/navigation-categories.php" ?>
            </div>
        </div>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/info.json
New file
@@ -0,0 +1,11 @@
{
    "name": "Dark Grid",
    "version": "1.1.7",
    "author": "CloudArcade",
    "description": "Dark Grid Theme",
    "website": "https://cloudarcade.net",
    "release_date": "30/08/2023",
    "changelog": "Implement load more games, implement new comment system, better search, fix bugs.",
    "type":"theme",
    "target_version": "1.6.5"
}
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/bootstrap.min.js
New file
@@ -0,0 +1,7 @@
/*!
  * Bootstrap v4.5.2 (https://getbootstrap.com/)
  * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(){return(s=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function r(t){var n=this,i=!1;return e(this).one(a.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||a.triggerTransitionEnd(n)}),t),this}var a={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&a.isElement(s)?"element":null===(l=s)||"undefined"==typeof l?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?a.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};a.jQueryDetection(),e.fn.emulateTransitionEnd=r,e.event.special[a.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var l="alert",c=e.fn[l],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=a.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=a.getTransitionDurationFromElement(t);e(t).one(a.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[l]=h._jQueryInterface,e.fn[l].Constructor=h,e.fn[l].noConflict=function(){return e.fn[l]=c,h._jQueryInterface};var u=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("LABEL"!==i.tagName||o&&"checkbox"!==o.type)&&d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var s=0,r=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;s<r;s++){var a=t[s];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=u,d._jQueryInterface};var f="carousel",g=".bs.carousel",m=e.fn[f],p={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},v={TOUCH:"touch",PEN:"pen"},b=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(a.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(g),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s({},p,t),a.typeCheckConfig(f,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,l=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(l),h=n||l&&this._getItemByDirection(t,l),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&l&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:c,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),a.reflow(h),e(l).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=a.getTransitionDurationFromElement(l);e(l).one(a.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(l).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(l).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s({},p,e(this).data());"object"==typeof n&&(o=s({},o,n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=a.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s({},e(o).data(),e(this).data()),l=this.getAttribute("data-slide-to");l&&(r.interval=!1),t._jQueryInterface.call(e(o),r),l&&e(o).data("bs.carousel").to(l),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return p}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",b._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);b._jQueryInterface.call(o,o.data())}})),e.fn[f]=b._jQueryInterface,e.fn[f].Constructor=b,e.fn[f].noConflict=function(){return e.fn[f]=m,b._jQueryInterface};var y="collapse",E=e.fn[y],w={toggle:!0,parent:""},T={toggle:"boolean",parent:"(string|element)"},C=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var s=n[i],r=a.getSelectorFromElement(s),l=[].slice.call(document.querySelectorAll(r)).filter((function(e){return e===t}));null!==r&&l.length>0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(r[0].toUpperCase()+r.slice(1)),c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[r]=this._element[l]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",a.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var r=this._triggerArray[s],l=a.getSelectorFromElement(r);if(null!==l)e([].slice.call(document.querySelectorAll(l))).hasClass("show")||e(r).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s({},w,t)).toggle=Boolean(t.toggle),a.typeCheckConfig(y,t,T),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;a.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return e(s).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=a.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s({},w,i.data(),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return w}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=a.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();C._jQueryInterface.call(t,i)}))})),e.fn[y]=C._jQueryInterface,e.fn[y].Constructor=C,e.fn[y].noConflict=function(){return e.fn[y]=E,C._jQueryInterface};var S="dropdown",k=e.fn[S],D=new RegExp("38|40|27"),N={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},A={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},I=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var i=t.prototype;return i.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},i.show=function(i){if(void 0===i&&(i=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var o={relatedTarget:this._element},s=e.Event("show.bs.dropdown",o),r=t._getParentFromElement(this._element);if(e(r).trigger(s),!s.isDefaultPrevented()){if(!this._inNavbar&&i){if("undefined"==typeof n)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var l=this._element;"parent"===this._config.reference?l=r:a.isElement(this._config.reference)&&(l=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(l=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new n(l,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",o))}}},i.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},i.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},i.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},i._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},i._getConfig=function(t){return t=s({},this.constructor.Default,e(this._element).data(),t),a.typeCheckConfig(S,t,this.constructor.DefaultType),t},i._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},i._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},i._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s({},t,this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o<s;o++){var r=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(r).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(r,n.target))){var h=e.Event("hide.bs.dropdown",l);e(r).trigger(h),h.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(r).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=a.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!D.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var s=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==s.length){var r=s.indexOf(n.target);38===n.which&&r>0&&r--,40===n.which&&r<s.length-1&&r++,r<0&&(r=0),s[r].focus()}}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return N}},{key:"DefaultType",get:function(){return A}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',I._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",I._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",I._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),I._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[S]=I._jQueryInterface,e.fn[S].Constructor=I,e.fn[S].noConflict=function(){return e.fn[S]=k,I._jQueryInterface};var O=e.fn.modal,j={backdrop:!0,keyboard:!0,focus:!0,show:!0},x={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},P=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var s=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(s)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s({},j,t),a.typeCheckConfig("modal",t,x),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;var i=this._element.scrollHeight>document.documentElement.clientHeight;i||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=a.getTransitionDurationFromElement(this._dialog);e(this._element).off(a.TRANSITION_END),e(this._element).one(a.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),i||e(t._element).one(a.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&a.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var l=a.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(a.TRANSITION_END,r).emulateTransitionEnd(l)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&a.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,s=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(s)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,s=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(s)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,s=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(s)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s({},j,e(this).data(),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return j}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=a.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s({},e(n).data(),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var l=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||l.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));P._jQueryInterface.call(e(n),r,this)})),e.fn.modal=P._jQueryInterface,e.fn.modal.Constructor=P,e.fn.modal.noConflict=function(){return e.fn.modal=O,P._jQueryInterface};var R=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],L={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},q=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,F=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Q(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),s=[].slice.call(i.body.querySelectorAll("*")),r=function(t,n){var i=s[t],r=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[r]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===R.indexOf(n)||Boolean(t.nodeValue.match(q)||t.nodeValue.match(F));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,s=i.length;o<s;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=s.length;a<l;a++)r(a);return i.body.innerHTML}var B="tooltip",H=e.fn[B],U=new RegExp("(^|\\s)bs-tooltip\\S+","g"),M=["sanitize","whiteList","sanitizeFn"],W={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},V={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},z={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:L,popperConfig:null},K={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},X=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=a.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),l=a.getUID(this.constructor.NAME);r.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(r).addClass("fade");var c="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(c);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=a.getTransitionDurationFromElement(this.tip);e(this.tip).one(a.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=a.getTransitionDurationFromElement(i);e(i).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Q(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:a.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return V[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==M.indexOf(t)&&delete n[t]})),"number"==typeof(t=s({},this.constructor.Default,n,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a.typeCheckConfig(B,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(U);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return z}},{key:"NAME",get:function(){return B}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return K}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return W}}]),t}();e.fn[B]=X._jQueryInterface,e.fn[B].Constructor=X,e.fn[B].noConflict=function(){return e.fn[B]=H,X._jQueryInterface};var Y="popover",$=e.fn[Y],J=new RegExp("(^|\\s)bs-popover\\S+","g"),G=s({},X.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Z=s({},X.DefaultType,{content:"(string|element|function)"}),tt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},et=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(J);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return G}},{key:"NAME",get:function(){return Y}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return tt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Z}}]),s}(X);e.fn[Y]=et._jQueryInterface,e.fn[Y].Constructor=et,e.fn[Y].noConflict=function(){return e.fn[Y]=$,et._jQueryInterface};var nt="scrollspy",it=e.fn[nt],ot={offset:10,method:"auto",target:""},st={offset:"number",method:"string",target:"(string|element)"},rt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=a.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s({},ot,"object"==typeof t&&t?t:{})).target&&a.isElement(t.target)){var n=e(t.target).attr("id");n||(n=a.getUID(nt),e(t.target).attr("id",n)),t.target="#"+n}return a.typeCheckConfig(nt,t,st),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return ot}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);rt._jQueryInterface.call(i,i.data())}})),e.fn[nt]=rt._jQueryInterface,e.fn[nt].Constructor=rt,e.fn[nt].noConflict=function(){return e.fn[nt]=it,rt._jQueryInterface};var at=e.fn.tab,lt=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],s=a.getSelectorFromElement(this._element);if(o){var r="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var l=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(l),e(this._element).trigger(c),!c.isDefaultPrevented()&&!l.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),l=function(){return o._transitionComplete(t,s,i)};if(s&&r){var c=a.getTransitionDurationFromElement(s);e(s).removeClass("show").one(a.TRANSITION_END,l).emulateTransitionEnd(c)}else l()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),a.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),lt._jQueryInterface.call(e(this),"show")})),e.fn.tab=lt._jQueryInterface,e.fn.tab.Constructor=lt,e.fn.tab.noConflict=function(){return e.fn.tab=at,lt._jQueryInterface};var ct=e.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},ut={animation:!0,autohide:!0,delay:500},dt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),a.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s({},ut,e(this._element).data(),"object"==typeof t&&t?t:{}),a.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},n._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return ut}}]),t}();e.fn.toast=dt._jQueryInterface,e.fn.toast.Constructor=dt,e.fn.toast.noConflict=function(){return e.fn.toast=ct,dt._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=b,t.Collapse=C,t.Dropdown=I,t.Modal=P,t.Popover=et,t.Scrollspy=rt,t.Tab=lt,t.Toast=dt,t.Tooltip=X,t.Util=a,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=bootstrap.min.js.map
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/custom.js
New file
@@ -0,0 +1,7 @@
/*
Custom script
This file will not be overwritten by the updater
*/
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/jquery-3.3.1.min.js
New file
@@ -0,0 +1,2 @@
/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/jquery-3.6.2.min.js
New file
@@ -0,0 +1,2 @@
/*! jQuery v3.6.2 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.2",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector("+c+")"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E});
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/lazysizes.min.js
New file
@@ -0,0 +1,3 @@
/*! lazysizes - v5.3.0 */
!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{});
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/script.js
New file
@@ -0,0 +1,325 @@
"use strict";
if ($('#tpl-comment-section').length) {
    const gameId = $('#tpl-comment-section').attr('data-id');
    const commentSystem = new CommentSystem(gameId);
}
$(function() {
    const formSearch = document.querySelector("form.search-bar");
    if (formSearch) {
        formSearch.addEventListener("submit", function(event) {
            event.preventDefault();
            const input = formSearch.querySelector("input[name='slug']");
            const sanitizedValue = input.value.replace(/ /g, "-");
            input.value = sanitizedValue;
            if (input.value.length >= 2) {
                formSearch.submit();
            }
        });
    }
    // Load more games
    let last_offset = 0;
    let load_amount = 0;
    const newGamesContainer = $('#section-new-games');
    if (newGamesContainer.length) {
        load_amount = 28;
        last_offset = newGamesContainer.children().length;
        if (load_amount < 28) {
            $('.btn-load-more-games').remove();
        } else {
            $('.btn-load-more-games').click(() => {
                fetchMoreGames(load_amount, 'new');
            });
        }
    }
    async function fetchMoreGames(amount, sort_by) {
        try {
            const response = await $.ajax({
                url: "/includes/fetch.php",
                type: 'POST',
                dataType: 'json',
                data: {amount: amount, offset: last_offset, sort_by: sort_by},
            });
            appendFetchedGames(response);
        } catch (error) {
            console.log(error);
        }
    }
    function appendFetchedGames(data) {
        last_offset += data.length;
        const templateHTML = $('.item-append-template').html();  // Get the inner HTML of the template
        data.forEach((item) => {
            let rating = 0;
            item['upvote'] = Number(item['upvote']);
            item['downvote'] = Number(item['downvote']);
            let totalRevs = item['upvote']+item['downvote'];
            if(totalRevs > 0){
                rating = (Math.round((item['upvote']/(item['upvote']+item['downvote'])) * 5));
            }
            // Clone the HTML template
            let clonedHTML = templateHTML;
            // Replace placeholders
            console.log(item['title'])
            clonedHTML = clonedHTML.replace(/{{slug}}/g, item['slug']);
            clonedHTML = clonedHTML.replace(/{{thumbnail}}/g, item['thumb_2']);
            clonedHTML = clonedHTML.replace(/{{title}}/g, item['title']);
            clonedHTML = clonedHTML.replace(/{{rating}}/g, rating);
            // Convert the HTML string to a jQuery object
            const clonedElement = $(clonedHTML);
            // Further modifications if necessary, for example, replacing the rating image src
            // Append the new element to newGamesContainer
            newGamesContainer.append(clonedElement);
        });
        if (data.length < load_amount) {
            $('.btn-load-more-games').remove();
        }
    }
    // End
    var $nav = $('nav.greedy');
    var $btn = $('nav.greedy button');
    var $vlinks = $('nav.greedy .links');
    var $hlinks = $('nav.greedy .hidden-links');
    var numOfItems = 0;
    var totalSpace = 0;
    var breakWidths = [];
    // Get initial state
    $vlinks.children().outerWidth(function(i, w) {
        totalSpace += w;
        numOfItems += 1;
        breakWidths.push(totalSpace);
    });
    var availableSpace, numOfVisibleItems, requiredSpace;
    function check() {
        // Get instant state
        availableSpace = $vlinks.width() - 10;
        numOfVisibleItems = $vlinks.children().length;
        requiredSpace = breakWidths[numOfVisibleItems - 1];
        // There is not enought space
        if (requiredSpace > availableSpace) {
            $vlinks.children().last().prependTo($hlinks);
            numOfVisibleItems -= 1;
            check();
            // There is more than enough space
        } else if (availableSpace > breakWidths[numOfVisibleItems]) {
            $hlinks.children().first().appendTo($vlinks);
            numOfVisibleItems += 1;
        }
        // Update the button accordingly
        $btn.attr("count", numOfItems - numOfVisibleItems);
        if (numOfVisibleItems === numOfItems) {
            $btn.addClass('hidden');
        } else $btn.removeClass('hidden');
    }
    // Window listeners
    $(window).resize(function() {
        check();
    });
    $btn.on('click', function() {
        $hlinks.toggleClass('hidden');
    });
    check();
});
function open_fullscreen() {
    let game = document.getElementById("game-area");
    if (game.requestFullscreen) {
      game.requestFullscreen();
    } else if (game.mozRequestFullScreen) { /* Firefox */
      game.mozRequestFullScreen();
    } else if (game.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
      game.webkitRequestFullscreen();
    } else if (game.msRequestFullscreen) { /* IE/Edge */
      game.msRequestFullscreen();
    }
};
var can_resize = false;
if($('iframe#game-area').length){
    can_resize = true;
    resize_game_iframe();
    load_leaderboard({type: 'top', amount: 10});
}
function resize_game_iframe(){
    if(can_resize){
        let iframe = $("iframe.game-iframe");
        let size = {
            width: Number(iframe.attr('width')),
            height: Number(iframe.attr('height')),
        }
        let ratio = (size.height/size.width)*100;
        let win_ratio = (window.innerHeight/window.innerWidth)*100;
        if(win_ratio <= 110){
            if(ratio > 80){
                ratio = 80;
            }
        } else if(win_ratio >= 130){
            if(ratio < 100){
                ratio = 100;
            }
        }
        $('.game-iframe-container').css('padding-top', ratio+'%');
    }
}
function load_leaderboard(conf){
    if($('#content-leaderboard').length){
        let g_id = $('#content-leaderboard').data('id');
        $.ajax({
            url: '/includes/api.php',
            type: 'POST',
            dataType: 'json',
            data: {'action': 'get_scoreboard', 'game-id': g_id, 'conf': JSON.stringify(conf)},
            complete: function (data) {
                if(data.responseText){
                    show_leaderboard(JSON.parse(data.responseText));
                }
            }
        });
    }
}
function show_leaderboard(data){
    let html = '<table class="table table-dark"><thead class="thead-dark"><tr><th scope="col">#</th><th scope="col">Username</th><th scope="col">Score</th><th scope="col">Date</th></tr></thead><tbody>';
    let index = 1;
    data.forEach((item)=>{
        html += '<tr><th scope="row">'+index+'</th><td>'+item.username+'</td><td>'+item.score+'</td><td>'+item.created_date.substr(0, 10)+'</td></tr>';
        index++;
    });
    html += '</tbody></table>';
    $('#content-leaderboard').html(html);
}
(function(){
    $("#navb").on('show.bs.collapse', function(){
        $('.user-avatar').hide();
    });
    $("#navb").on('hidden.bs.collapse', function(){
        $('.user-avatar').show();
    });
    resize_game_iframe();
    $(window).resize(function() {
        resize_game_iframe();
    });
    $('.stats-vote #favorite').on('click', function() {
        let data_id = $(this).attr('data-id');
        let btn = $(this);
        $.ajax({
            url: '/includes/vote.php',
            type: 'POST',
            dataType: 'json',
            data: {'favorite': true, 'action': 'favorite', 'id': data_id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                btn.addClass('active');
                btn.addClass('disabled');
            }
        });
    });
    $('.stats-vote #upvote').on('click', function() {
        let data_id = $(this).attr('data-id');
        $.ajax({
            url: '/includes/vote.php',
            type: 'POST',
            dataType: 'json',
            data: {'vote': true, 'action': 'upvote', 'id': data_id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                $('.icon-vote').hide();
                let elem = $('.vote-status');
                elem.addClass('text-success');
                elem.append('Liked!');
            }
        });
    });
    $('.stats-vote #downvote').on('click', function() {
        let data_id = $(this).attr('data-id');
        $.ajax({
            url: '/includes/vote.php',
            type: 'POST',
            dataType: 'json',
            data: {'vote': true, 'action': 'downvote', 'id': data_id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                $('.icon-vote').hide();
                let elem = $('.vote-status');
                elem.addClass('text-danger');
                elem.append('Disliked!');
            }
        });
    });
    $('.user-avatar').on('click', ()=>{
        let element = $('.user-links');
        if (element.is(":hidden")) {
            element.removeClass('hidden');
        } else element.addClass('hidden');
    });
    $('#btn_prev').on('click', function() {
        $('.profile-gamelist ul').animate({
            scrollLeft: '-=150'
        }, 300, 'swing');
    });
    $('#btn_next').on('click', function() {
        $('.profile-gamelist ul').animate({
            scrollLeft: '+=150'
        }, 300, 'swing');
    });
    $('#f_prev').on('click', function() {
        $('.favorite-gamelist ul').animate({
            scrollLeft: '-=150'
        }, 300, 'swing');
    });
    $('#f_next').on('click', function() {
        $('.favorite-gamelist ul').animate({
            scrollLeft: '+=150'
        }, 300, 'swing');
    });
    $('.delete-comment').on('click', function() {
        let id = $(this).attr('data-id');
        $.ajax({
            url: '/includes/comment.php',
            type: 'POST',
            dataType: 'json',
            data: {'delete': true, 'id': id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                if(data.responseText === 'deleted'){
                    $('.id-'+id).remove();
                }
            }
        }, this);
    });
})();
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/page.php
New file
@@ -0,0 +1,17 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
    <div class="row">
        <div class="col-md-9">
                <h1 class="singlepage-title"><?php echo htmlspecialchars( $page->title )?></h1>
                <div class="page-content">
                    <?php echo nl2br($page->content) ?>
                </div>
        </div>
        <div class="col-md-3">
            <?php include  TEMPLATE_PATH . "/parts/sidebar.php" ?>
        </div>
    </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/navigation-categories.php
New file
@@ -0,0 +1,5 @@
<nav class='greedy'>
    <?php list_categories() ?>
    <button><?php _e('MORE') ?></button>
      <ul class='hidden-links hidden'></ul>
</nav>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/navigation-top.php
New file
@@ -0,0 +1,29 @@
<div class="navbar-collapse collapse justify-content-end" id="navb">
    <ul class="navbar-nav ml-auto text-uppercase">
        <?php render_nav_menu('top_nav', array(
            'no_ul'    => true,
            'li_class' => 'nav-item',
            'a_class' => 'nav-link',
        )); ?>
        <li class="nav-item">
            <?php
            if(is_null($login_user)){
                if(get_setting_value('show_login')){
                    echo('<a class="nav-link" href="'.get_permalink('login').'">'._t('Login').'</a>');
                }
            }
            ?>
        </li>
    </ul>
    <form class="form-inline my-2 my-lg-0 search-bar" action="/index.php">
        <div class="input-group">
            <input type="hidden" name="viewpage" value="search" />
            <input type="text" class="form-control rounded-left search" placeholder="<?php _e('Search game') ?>" name="slug" minlength="2" required />
            <div class="input-group-append">
                <button type="submit" class="btn btn-search" type="button">
                    <i class="fa fa-search"></i>
                </button>
            </div>
        </div>
    </form>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/sidebar.php
New file
@@ -0,0 +1,3 @@
<div class="sidebar">
    <?php widget_aside('sidebar-1') ?>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/post-list.php
New file
@@ -0,0 +1,65 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="post-container">
        <div class="content-wrapper">
            <h3 class="page-title"><?php _e('LATEST POSTS') ?></h3>
            <section class="blog-list">
            <?php
                $cur_page = 1;
                if(isset($url_params[1])){
                    $_GET['page'] = $url_params[1];
                    if(!is_numeric($_GET['page'])){
                        $_GET['page'] = 1;
                    }
                }
                if(isset($_GET['page'])){
                    $cur_page = htmlspecialchars($_GET['page']);
                    if(!is_numeric($cur_page)){
                        $cur_page = 1;
                    }
                }
                $items_per_page = get_setting_value('post_results_per_page');
                $data = Post::getList($items_per_page, 'created_date DESC', $items_per_page*($cur_page-1));
                $total_posts = $data['totalRows'];
                $total_page = $data['totalPages'];
                $posts = $data['results'];
                foreach($posts as $post){
                    ?>
                        <div class="post-item">
                            <div class="post-media">
                                <div class="post-thumb">
                                    <img src="<?php echo ($post->thumbnail_url) ? $post->thumbnail_url : DOMAIN . 'images/post-no-thumb.png'  ?>" alt="<?php echo $post->title ?>">
                                </div>
                                <div class="post-body">
                                    <h3 class="post-title">
                                        <a href="<?php echo get_permalink('post', $post->slug) ?>"><?php echo $post->title ?></a>
                                    </h3>
                                    <div class="post-meta">
                                        <span class="date">Published on <?php echo gmdate("j M Y", $post->created_date) ?></span>
                                    </div>
                                    <div class="post-intro">
                                        <?php echo mb_strimwidth(strip_tags($post->content), 0, 250, "...") ?>
                                    </div>
                                    <a class="more-link" href="<?php echo get_permalink('post', $post->slug) ?>">Read more â†’</a>
                                </div>
                            </div>
                        </div>
                    <?php
                }
            ?>
            </section>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($_GET['page'])){
                        $cur_page = esc_string($_GET['page']);
                    }
                    render_pagination($total_page, $cur_page, 8, 'post', '');
                    ?>
                </nav>
            </div>
        </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/post.php
New file
@@ -0,0 +1,20 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
    <div class="row">
        <div class="col-md-9">
                <h1 class="singlepage-title"><?php echo htmlspecialchars( $post->title )?></h1>
                <div class="post-meta">
                    Published on <?php echo gmdate("j M Y", $post->created_date) ?>
                </div>
                <div class="page-content">
                    <?php echo nl2br($post->content) ?>
                </div>
        </div>
        <div class="col-md-3">
            <?php include  TEMPLATE_PATH . "/parts/sidebar.php" ?>
        </div>
    </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/search.php
New file
@@ -0,0 +1,30 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
            <h3 class="item-title"><?php _e('%a Games', htmlspecialchars($archive_title)) ?></h3>
            <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
            <div class="game-container">
                <div class="grid-layout grid-wrapper">
                    <?php foreach ( $games as $game ) { ?>
                    <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
                    <?php } ?>
                </div>
            </div>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($url_params[2])){
                        $cur_page = (int)$url_params[2];
                    }
                    render_pagination($total_page, $cur_page, 8, 'search', $_GET['slug']);
                    ?>
                </nav>
            </div>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/bootstrap.min.css
New file
@@ -0,0 +1,6 @@
/*!
 * Bootstrap v4.5.2 (https://getbootstrap.com/)
 * Copyright 2011-2020 The Bootstrap Authors
 * Copyright 2011-2020 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.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-lg-auto,.col-md,.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-md-auto,.col-sm,.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-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{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}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.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-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{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 #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/custom.css
New file
@@ -0,0 +1,9 @@
/*
Custom style
You can override the default class or style here
This file will not be overwritten by the updater
*/
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/jquery-comments.css
New file
@@ -0,0 +1,781 @@
/*jquery-comments.js 1.5.0
(c) 2017 Joona Tykkyläinen, Viima Solutions Oy
jquery-comments may be freely distributed under the MIT license.
For all details and documentation:
http://viima.github.io/jquery-comments/*/
.jquery-comments * {
    box-sizing: border-box;
    text-shadow: none;
}
.jquery-comments a[href]:not(.tag) {
    color: #2793e6;
    text-decoration: none;
}
.jquery-comments a[href]:not(.tag):hover {
    text-decoration: underline;
}
.jquery-comments .textarea, .jquery-comments input, .jquery-comments button {
    -webkit-appearance: none;
    -moz-appearance: none;
    -ms-appearance: none;
    appearance: none;
    vertical-align: top;
    border-radius: 0;
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    background: rgba(0, 0, 0, 0);
}
.jquery-comments button {
    vertical-align: inherit;
}
.jquery-comments .tag {
    color: inherit;
    font-size: 0.9em;
    line-height: 1.2em;
    background: #ddd;
    border: 1px solid #ccc;
    padding: 0.05em 0.4em;
    cursor: pointer;
    font-weight: normal;
    border-radius: 1em;
    transition: all 0.2s linear;
    white-space: nowrap;
    display: inline-block;
    text-decoration: none;
}
.jquery-comments .attachments .tag {
    white-space: normal;
    word-break: break-all;
    padding: 0.05em 0.5em;
    line-height: 1.3em;
    margin-top: 0.3em;
    margin-right: 0.5em;
}
.jquery-comments .attachments .tag > i:first-child {
    margin-right: 0.4em;
}
.jquery-comments .attachments .tag .delete {
    display: inline;
    font-size: 14px;
    color: #888;
    position: relative;
    padding: 2px;
    padding-right: 4px;
    right: -4px;
}
.jquery-comments .attachments .tag:hover .delete {
    color: black;
}
.jquery-comments .tag:hover {
    text-decoration: none;
}
.jquery-comments .tag:not(.deletable):hover {
    background-color: #d8edf8;
    border-color: #2793e6;
}
.jquery-comments [contentEditable=true]:empty:not(:focus):before{
    content:attr(data-placeholder);
    color: #CCC;
    position: inherit;
    pointer-events: none;
}
.jquery-comments i.fa {
    width: 1em;
    height: 1em;
    background-size: cover;
    text-align: center;
}
.jquery-comments i.fa.image:before {
    content: "";
}
.jquery-comments .spinner {
    font-size: 2em;
    text-align: center;
    padding: 0.5em;
    margin: 0;
    color: #666;
}
.jquery-comments .spinner.inline {
    font-size: inherit;
    padding: 0;
    color: #fff;
}
.jquery-comments ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
.jquery-comments .profile-picture {
    float: left;
    width: 3.6rem;
    height: 3.6rem;
    max-width: 50px;
    max-height: 50px;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center center;
}
.jquery-comments i.profile-picture {
    font-size: 3.4em;
    text-align: center;
}
.jquery-comments .profile-picture.round {
    border-radius: 50%;
}
.jquery-comments .commenting-field.main{
    margin-bottom: 0.75em;
}
.jquery-comments .commenting-field.main .profile-picture {
    margin-bottom: 1rem;
}
.jquery-comments .textarea-wrapper {
    overflow: hidden;
    padding-left: 15px;
    position: relative;
}
.jquery-comments .textarea-wrapper:before {
    content: " ";
    position: absolute;
    border: 5px solid #6F69A4;;
    left: 5px;
    top: 0;
    width: 10px;
    height: 10px;
    box-sizing: border-box;
    border-bottom-color: rgba(0, 0, 0, 0);
    border-left-color: rgba(0, 0, 0, 0);
}
.jquery-comments .textarea-wrapper .inline-button {
    cursor: pointer;
    right: 0;
    z-index: 10;
    position: absolute;
    border: .5em solid rgba(0,0,0,0);
    box-sizing: content-box;
    font-size: inherit;
    overflow: hidden;
    opacity: 0.5;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
.jquery-comments .textarea-wrapper .inline-button:hover {
    opacity: 1;
}
.jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .inline-button {
    margin-right: 15px;    /* Because of scrollbar */
}
.jquery-comments .textarea-wrapper .inline-button i {
    font-size: 1.2em;
}
.jquery-comments .textarea-wrapper .upload input {
    cursor: pointer;
    position: absolute;
    top: 0;
    right: 0;
    min-width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
}
.jquery-comments .textarea-wrapper .close {
    width: 1em;
    height: 1em;
}
.jquery-comments .textarea-wrapper .textarea {
    margin: 0;
    outline: 0;
    overflow-y: auto;
    overflow-x: hidden;
    cursor: text;
    border: 1px solid #6F69A4;;
    background: #332F5B;;
    font-size: 1em;
    line-height: 1.45em;
    padding: .25em .8em;
    padding-right: 2em;
}
.jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .textarea {
    padding-right: calc(2em + 15px);    /* Because of scrollbar */
}
.jquery-comments .textarea-wrapper .control-row > .attachments {
    padding-top: .3em;
}
.jquery-comments .textarea-wrapper .control-row > span {
    float: right;
    line-height: 1.6em;
    margin-top: .4em;
    border: 1px solid rgba(0, 0, 0, 0);
    color: #FFF;
    padding: 0 1em;
    font-size: 1em;
    opacity: .5;
}
.jquery-comments .textarea-wrapper .control-row > span:not(:first-child) {
    margin-right: .5em;
}
.jquery-comments .textarea-wrapper .control-row > span.enabled {
    opacity: 1;
    cursor: pointer;
}
.jquery-comments .textarea-wrapper .control-row > span:not(.enabled) {
    pointer-events: none;
}
.jquery-comments .textarea-wrapper .control-row > span.enabled:hover {
    opacity: .9;
}
.jquery-comments .textarea-wrapper .control-row > span.upload {
    position: relative;
    overflow: hidden;
    background-color: #999;
}
.jquery-comments ul.navigation {
    clear: both;
    color: #999;
    border-bottom: 2px solid #CCC;
    line-height: 2em;
    font-size: 1em;
    margin-bottom: 0.5em;
}
.jquery-comments ul.navigation .navigation-wrapper {
    position: relative;
}
.jquery-comments ul.navigation li {
    display: inline-block;
    position: relative;
    padding: 0 1em;
    cursor: pointer;
    text-align: center;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
.jquery-comments ul.navigation li.active,
.jquery-comments ul.navigation li:hover {
    color: #fff;
}
.jquery-comments ul.navigation li.active:after {
    content: " ";
    display: block;
    right: 0;
    height: 2px;
    background: #000;
    position: absolute;
    bottom: -2px;
    left: 0;
}
.jquery-comments ul.navigation li[data-sort-key="attachments"] {
    float: right;
}
.jquery-comments ul.navigation li[data-sort-key="attachments"] i {
    margin-right: 0.25em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive {
    display: none;
}
@media screen and (max-width: 600px) {
    .jquery-comments ul.navigation .navigation-wrapper {
        display: none;
    }
    .jquery-comments ul.navigation .navigation-wrapper.responsive {
        display: inline;
    }
}
.jquery-comments.responsive ul.navigation .navigation-wrapper {
    display: none;
}
.jquery-comments.responsive ul.navigation .navigation-wrapper.responsive {
    display: inline;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title {
    padding: 0 1.5em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title header:after {
    display: inline-block;
    content: "";
    border-left: 0.3em solid rgba(0, 0, 0, 0) !important;
    border-right: 0.3em solid rgba(0, 0, 0, 0) !important;
    border-top: 0.4em solid #CCC;
    margin-left: 0.5em;
    position: relative;
    top: -0.1em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title.active header:after,
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title:hover header:after {
    border-top-color: #000;
}
.jquery-comments ul.dropdown {
    display: none;
    position: absolute;
    background: #FFF;
    z-index: 99;
    line-height: 1.2em;
    border: 1px solid #CCC;
    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    -ms-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
}
.jquery-comments ul.dropdown.autocomplete {
    margin-top: 0.25em;
}
.jquery-comments ul.dropdown li {
    display: block;
    white-space: nowrap;
    clear: both;
    padding: 0.6em;
    font-weight: normal;
    cursor: pointer;
}
.jquery-comments ul.dropdown li.active {
    background: #EEE;
}
.jquery-comments ul.dropdown li a {
    display: block;
    text-decoration: none;
    color: inherit;
}
.jquery-comments ul.dropdown li .profile-picture {
    float: left;
    width: 2.4em;
    height: 2.4em;
    margin-right: 0.5em;
}
.jquery-comments ul.dropdown li .details {
    display: inline-block;
}
.jquery-comments ul.dropdown li .name {
    font-weight: bold;
}
.jquery-comments ul.dropdown li .details.no-email {
    line-height: 2.4em;
}
.jquery-comments ul.dropdown li .email {
    color: #999;
    font-size: 0.95em;
    margin-top: 0.1em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown {
    left: 0;
    width: 100%;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li {
    color: #000;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li.active {
    color: #FFF;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:hover:not(.active) {
    background: #F5F5F5;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:after {
    display: none;
}
.jquery-comments .no-data {
    display: none;
    margin: 1em;
    text-align: center;
    font-size: 1.5em;
    color: #CCC;
}
.jquery-comments ul.main:empty ~ .no-comments {
    display: inherit;
}
.jquery-comments ul#attachment-list:empty ~ .no-attachments {
    display: inherit;
}
.jquery-comments ul.main li.comment {
    clear: both;
}
.jquery-comments ul.main li.comment .comment-wrapper,
.jquery-comments ul.main li.toggle-all,
.jquery-comments ul.main li.comment .commenting-field {
    padding: .5em;
}
.jquery-comments ul.main li.comment .comment-wrapper {
    overflow: hidden;
}
.jquery-comments ul.main > li.comment:first-child > .comment-wrapper {
    border-top: none;
}
.jquery-comments ul.main li.comment .comment-wrapper > .profile-picture {
    margin-right: 1rem;
}
.jquery-comments ul.main li.comment time {
    float: right;
    line-height: 1.4em;
    margin-left: .5em;
    font-size: 0.8em;
    color: #666;
}
.jquery-comments ul.main li.comment .comment-header {
    line-height: 1.4em;
    word-break: break-word;
}
.jquery-comments ul.main li.comment .comment-header > * {
    margin-right: .5rem;
}
.jquery-comments ul.main li.comment .comment-header .name {
    font-weight: bold;
}
.jquery-comments ul.main li.comment .comment-header .reply-to {
    color: #999;
    font-size: .8em;
    font-weight: normal;
    vertical-align: top;
}
.jquery-comments ul.main li.comment .comment-header .reply-to i {
    margin-right: .25rem;
}
.jquery-comments ul.main li.comment .comment-header .new {
    background: #2793e6;
    font-size: 0.8em;
    padding: 0.2em 0.6em;
    color: #fff;
    font-weight: normal;
    border-radius: 1em;
    vertical-align: bottom;
    word-break: normal;
}
.jquery-comments ul.main li.comment .wrapper{
    line-height: 1.4em;
    overflow: hidden;
}
.jquery-comments.mobile ul.main li.comment .child-comments li.comment .wrapper{
    overflow: visible;
}
/* Content */
.jquery-comments ul.main li.comment .wrapper .content {
    white-space: pre-line;
    word-break: break-word;
}
.jquery-comments ul.main li.comment .wrapper .content time.edited {
    float: inherit;
    margin: 0;
    font-size: .9em;
    font-style: italic;
    color: #999;
}
.jquery-comments ul.main li.comment .wrapper .content time.edited:before {
    content: " - ";
}
/* Attachments */
.jquery-comments ul.main li.comment .wrapper .attachments .tags:not(:empty) {
    margin-bottom: 0.5em;
}
.jquery-comments ul.main li.comment .wrapper .attachments .previews .preview {
    display: inline-block;
    margin-top: .25em;
    margin-right: .25em;
}
.jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > * {
    max-width: 100%;
    max-height: 200px;
    width: auto;
    height: auto;
}
.jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > *:focus {
    outline: none;
}
/* Actions */
.jquery-comments.mobile ul.main li.comment .actions {
    font-size: 1em;
}
.jquery-comments ul.main li.comment .actions > * {
    color: #999;
    font-weight: bold;
}
.jquery-comments ul.main li.comment .actions .action {
    display: inline-block;
    cursor: pointer;
    margin-left: 1em;
    margin-right: 1em;
    line-height: 1.5em;
    font-size: 0.9em;
}
.jquery-comments ul.main li.comment .actions .action:first-child {
    margin-left: 0;
}
.jquery-comments ul.main li.comment .actions .action.upvote {
    cursor: inherit;
}
.jquery-comments ul.main li.comment .actions .action.upvote .upvote-count {
    margin-right: .5em;
}
.jquery-comments ul.main li.comment .actions .action.upvote .upvote-count:empty {
    display: none;
}
.jquery-comments ul.main li.comment .actions .action.upvote i {
    cursor: pointer;
}
.jquery-comments ul.main li.comment .actions .action:not(.upvote):hover,
.jquery-comments ul.main li.comment .actions .action.upvote:not(.highlight-font) i:hover {
    color: #666;
}
.jquery-comments ul.main li.comment .actions .action.delete {
    opacity: 0.5;
    pointer-events: none;
}
.jquery-comments ul.main li.comment .actions .action.delete.enabled {
    opacity: 1;
    pointer-events: auto;
}
.jquery-comments ul#attachment-list li.comment .actions .action:not(.delete) {
    display: none;
}
.jquery-comments ul#attachment-list li.comment .actions .action.delete {
    margin: 0;
}
.jquery-comments ul#attachment-list li.comment .actions .separator {
    display: none;
}
/* Child comments */
.jquery-comments ul.main li.comment .child-comments > *:before { /* Margin for second level content */
    content: "";
    height: 1px;
    float: left;
    width: calc(3.6em + .5em);    /* Profile picture width plus margin */
    max-width: calc(50px + .5em);    /* Profile picture max width plus margin */
}
.jquery-comments ul.main li.comment .child-comments .profile-picture {
    width: 2.4rem;
    height: 2.4rem;
}
.jquery-comments ul.main li.comment .child-comments i.profile-picture {
    font-size: 2.4em;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all {
    padding-top: 0;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child {
    vertical-align: middle;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child:hover {
    cursor: pointer;
    text-decoration: underline;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all .caret {
    display: inline-block;
    vertical-align: middle;
    width: 0;
    height: 0;
    margin-left: .5em;
    border: .3em solid;
    margin-top: .35em;
    border-left-color: rgba(0, 0, 0, 0);
    border-bottom-color: rgba(0, 0, 0, 0);
    border-right-color: rgba(0, 0, 0, 0);
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all .caret.up {
    border-top-color: rgba(0, 0, 0, 0);
    border-bottom-color: inherit;
    margin-top: -.2em;
}
.jquery-comments ul.main li.comment .child-comments .togglable-reply {
    display: none;
}
.jquery-comments ul.main li.comment .child-comments .visible {
    display: inherit;
}
.jquery-comments ul.main li.comment.hidden {
    display: none;
}
/* Editing comment */
.jquery-comments ul.main li.comment.edit > .comment-wrapper > *:not(.commenting-field) {
    display: none;
}
.jquery-comments ul.main li.comment.edit > .comment-wrapper .commenting-field {
    padding-left: 0 !important;
    padding-right: 0 !important;
}
/* Drag & drop attachments */
.jquery-comments.drag-ongoing {
    overflow-y: hidden !important;
}
.jquery-comments .droppable-overlay {
    display: table;
    position: fixed;
    z-index: 99;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.3)
}
.jquery-comments .droppable-overlay .droppable-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}
.jquery-comments .droppable-overlay .droppable-container .droppable {
    background: #FFF;
    color: #CCC;
    padding: 6em;
}
.jquery-comments .droppable-overlay .droppable-container .droppable.drag-over {
    color: #999;
}
.jquery-comments .droppable-overlay .droppable-container .droppable i {
    margin-bottom: 5px;
}
/* Read-only mode */
.jquery-comments.read-only .commenting-field {
    display: none;
}
.jquery-comments.read-only .actions {
    display: none;
}
.comments-container {
    padding: 10px;
    border: 1px solid #29254f;
    margin-top: 50px;
}
.comments-container #comments {
    margin: 15px 0;
}
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/style.css
New file
@@ -0,0 +1,809 @@
body {
  margin: 0;
  font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  color: #8296a5;
  text-align: left;
  background-color: #080618;
}
*,
 ::before,
 ::after {
  box-sizing: border-box;
}
a {
  color: #6c9cc6;
  text-decoration: none;
  background-color: transparent;
}
a:hover {
  color: #9cc5e8;
}
/*
Grid Start
True Masonry by balazs_sziklai
https://codepen.io/balazs_sziklai*/
.grid-layout {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    grid-gap: 10px;
    grid-auto-rows: minmax(140px, auto);
    grid-auto-flow: dense;
}
.grid-item {
    border-radius: 5px;
    &:nth-child(odd) {
        background-color: #424242;
    }
}
.span-2 {
    grid-column-end: span 2;
    grid-row-end: span 2;
}
.span-3 {
    grid-column-end: span 3;
    grid-row-end: span 3;
}
/*End Grid*/
.install-body, .login-body {
  background-color: #080618;
}
.install-form, .login-form, .register-form {
  background-color: #120e31;
}
.site-content {
  background-color: #120e31;
}
.site-container {
  max-width: 1440px;
}
.top-nav {
  font-weight: bold;
  background-color: #120e31;
  padding: 0;
}
.text-uppercase {
  text-transform: uppercase !important;
}
.fixed-top {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  z-index: 1030;
}
.navbar-expand-lg {
  flex-flow: row nowrap;
  justify-content: flex-start;
}
.navbar {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  padding: 0;
}
.navbar-brand {
  display: inline-block;
  padding-top: 0.3125rem;
  padding-bottom: 0.3125rem;
  margin-right: 1rem;
  font-size: 1.25rem;
  line-height: inherit;
  white-space: nowrap;
}
a.nav-link {
  color: #d1dbe3!important;
}
li.nav-item:hover {
  background-color: #29254f;
  border-radius: 10px;
}
.text-white {
  color: #fff !important;
}
article,
aside,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section {
  display: block;
}
.copyright {
  background-color: #120e31;
}
.text-center {
  text-align: center !important;
}
.footer {
  padding-top: 3rem;
  padding-bottom: 3rem;
  background-color: #29254f;
}
img.small-thumb {
  width: 100%;
  border-radius: 10px;
}
.list-content {
  padding: 0px;
}
.list-game {
  border-radius: 5px;
}
.grid-layout .list-title {
  overflow: hidden;
  margin: .35714em;
  color: #fff;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: center;
  position: relative;
  bottom: 65px;
  margin-bottom: -53px;
  opacity: 0;
  font-weight: bold;
}
@media(hover: hover) and (pointer: fine) {
  .grid-layout .list-game:hover > .list-title {
    opacity: 1;
    transition: all 0.5s ease;
  }
  .list-thumbnail:hover {
    opacity: 0.5;
    transition: all 0.5s ease;
  }
}
.grid-wrapper {
  margin-bottom: 30px;
}
.game-container {
  margin: 30px 0;
}
.list-category {
  position: absolute;
  bottom: 5px;
}
h1.single-title {
    font-size: 1.75rem;
}
.single-title {
  margin-top: 20px;
  padding-bottom: 10px;
  font-weight: bold;
  color: #cbdbe3;
}
.single-info-container {
  padding-bottom: 5px;
  border-bottom: 1px solid #29254f;
  margin-bottom: 20px;
}
.single-icon {
  background-color: #29254f;
  margin-right: 10px;
  padding: 8px 16px;
  border-radius: 15px;
  display: inline-block;
  margin-bottom: 10px;
}
.social-share {
  position: relative;
  top: -2px;
  margin-right: 10px;
  display: inline-block;
  margin-bottom: 10px;
}
.social-icon {
  width: 38px;
  height: 38px;
}
.sidebar {
  display: block;
}
.sidebar .list-tile {
  padding-left: 3px;
  padding-right: 3px;
}
.sidebar .list-game {
  margin-bottom: 8px;
}
.page-title {
  font-weight: bold;
  margin-top: 20px;
}
h1.singlepage-title {
    font-size: 1.75rem;
}
.singlepage-title {
  padding-bottom: 10px;
  font-weight: bold;
}
.page-content,
.game-content {
  margin-bottom: 30px;
}
.site-logo {
  padding: 5px;
}
.nav-categories {
  background-color: #29254f;
  white-space: nowrap;
}
h3.item-title {
  font-weight: bold;
font-size: 1.3rem;
margin: 20px 0;
display: inline-block;
background-color: #29254f;
color: #cbdbe3;
padding: 10px 20px;
border-radius: 10px;
}
.item-title i,
.single-icon i,
h4 i {
  margin-right: 9px;
}
ul.list-categories {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
.list-categories li {
  float: left;
  display: block;
  text-align: center;
  padding: 8px 16px;
  text-decoration: none;
}
.list-categories li:hover {
  background-color: #6190bf;
  color: #fff;
}
nav.greedy {
  position: relative;
  display: flex;
  align-items: center;
}
nav.greedy button {
  padding: 6px 16px;
  text-decoration: none;
  border: none;
  background-color: #6190bf;
color: #fff;
}
nav.greedy button.hidden {
  transition: none;
  border-right: 0.5rem solid #b6b6b6;
  width: 0;
  padding: 0;
  overflow: hidden;
  display: none;
}
nav.greedy button::after {
  content: attr(count);
  display: inline-flex;
  width: 30px;
  height: 30px;
  align-items: center;
  justify-content: center;
  background: #ab31d7;
  color: #f2f2f2;
  border-radius: 50%;
  font-size: 14px;
  line-height: 14px;
  margin-left: 1rem;
  margin-right: calc(-1rem + -8px);
}
ul.links {
  display: flex;
  flex: 1;
  overflow: hidden;
}
ul.links li {
  flex: none;
}
ul.hidden-links {
  position: absolute;
  background: #fff;
  right: 0;
  top: 100%;
  z-index: 1;
  text-align: left;
  list-style: none;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid rgba(0, 0, 0, .15);
  border-radius: .25rem;
  padding-left: 0;
  box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
}
ul.hidden-links li {
  padding-right: 2rem;
}
ul.hidden-links a {
  color: #2c3e50;
}
ul.hidden-links.hidden {
  display: none;
}
ul.hidden-links li {
  padding: 1rem;
  min-width: 220px;
}
ul.hidden-links li:hover {
  background-color: #eee;
}
.cat-list {
  margin-top: 20px;
}
.cat-link {
  padding: 8px 16px;
  background-color: #29254f;
  margin-right: 10px;
  border-radius: 15px;
}
h4.widget-title {
  font-weight: bold;
  padding-bottom: 10px;
  font-size: 26px;
  border-bottom: 1px solid #29254f;
  margin-bottom: 20px;
  font-size: 1.3rem;
  color: #cbdbe3;
}
.sidebar .row {
  margin-right: 0;
  margin-left: 0;
}
.sidebar .widget {
  margin-bottom: 20px;
}
.bottom-container {
  margin: 30px 0;
}
.banner-ads {
  text-align: center;
  margin: 10px 0;
}
img {
  max-width: 100%;
}
.content-wrapper {
  margin-top: 30px;
}
.pagination-wrapper {
  margin-bottom: 30px;
}
.page-link {
    color: #cbdbe3;
    background-color: rgba(66, 60, 121, 0.7);
    border: 1px solid #656097;
}
.page-link:hover {
    color: #cbdbe3;
    background-color: #8589bf;
    border-color: #656097;
}
.page-item.disabled .page-link {
    color: #9a95c4;
    background-color: #544f86 !important;
    border-color: #8985aa;
}
.game-iframe-container {
  position: relative;
  overflow: hidden;
  height: 600px;
  display: block;
}
.game-iframe {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  width: 100%;
  height: 100%;
}
.nav-item {
  margin: 0 5px;
}
.search-bar {
  margin-left: 10px;
}
@media (max-width: 992px) {
  #navb {
    margin: 15px 0;
  }
  .nav-item {
    margin: 0 10px;
  }
  li.nav-item:hover {
    background-color: #29254f;
    border-radius: 0px;
  }
  .nav-link {
    padding-left: 15px!important;
  }
}
@media (max-width: 1440px) {
  .site-container {
    padding: 0;
  }
}
input.search {
  background-color: #332f5b;
  border-color: #6c6799;
}
.btn-search {
  background-color: #6f69a4;
}
.stats-vote {
  text-align: right;
  margin-top: 20px;
}
.stats-vote i {
  font-size: 30px;
  padding: 6px;
}
.stats-vote i:hover {
  color: #1abc9c;
  cursor: pointer;
}
.header-left {
  display: inline-block;
}
.header-right {
  display: inline-block;
  float: right;
  margin-left: 30px;
}
.vote-status {
  font-size: 18px;
  font-weight: bold;
}
/* Post list */
.post-item {
  margin-bottom: 3rem !important;
}
.post-media {
  display: flex;
  align-items: flex-start;
}
.blog-list .post-thumb {
  width: 120px;
  height: 120px;
}
.post-thumb {
  display: flex;
  margin-right: 1rem;
}
.post-thumb img {
  object-fit: cover;
  object-position: center;
  width: 100%;
  height: 100%;
}
.post-title {
  margin-bottom: .25rem;
  font-weight: bold;
  font-size: 1.5rem;
}
.post-meta .date {
  color: #8f8f8f;
  font-size: 0.8125rem;
}
.post-meta {
  color: #8f8f8f;
}
.blog-list {
  margin-top: 30px;
}
@media (max-width: 576px) {
  .blog-list .post-thumb {
    display: none;
  }
}
/* End post */
.dropdown-menu {
    position: absolute;
    background: #fff;
        background-clip: border-box;
    right: 0;
    top: 100%;
    z-index: 2;
    text-align: left;
    list-style: none;
    font-weight: normal;
    background-clip: padding-box;
    border: 1px solid rgba(0, 0, 0, .15);
    border-radius: .25rem;
    padding-left: 0;
    box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
    margin-top: 10px;
}
.dropdown-icon {
  margin-left: 10px;
}
.nav-item {
  position: relative;
}
.nav-item-child {
    padding: 0.6rem 1rem;
    color: #2c3e50;
}
.nav-link-child {
    color: #2c3e50;
}
.nav-item-child:hover {
    background-color: #cddbe8;
}
.category-description {
  background-color: #1f1b42;
  padding: 10px 15px;
}
.game-tag-list {
  display: flex;
  flex-wrap: wrap;
  margin-top: 8px;
}
.tag-item {
  padding: 4px 14px;
  background: #29254f;
  margin-right: 8px;
  margin-top: 8px;
  border-radius: 8px;
}
.color-red {
  color: #bb4d4d;
}
i.disabled {
  opacity: 0.5;
  pointer-events: none;
}
.load-more-games-wrapper {
  text-align: center;
  margin-top: 20px;
  margin-bottom: 40px;
}
/* NEW COMMENT SYSTEM */
#tpl-comment-section {
  margin-top: 30px;
  margin-bottom: 20px;
}
#comment-form {
  display: flex;
  margin-bottom: 30px;
  border-bottom: 1px solid #29254f;
}
.comment-profile-avatar {
  margin-right: 20px;
}
.comment-profile-avatar img {
  border-radius: 50%;
  float: left;
  width: 3.6rem;
  height: 3.6rem;
  max-width: 50px;
  max-height: 50px;
}
.comment-form-wrapper {
  background: #332F5B;
  margin-bottom: 30px;
  box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
  border: 1px solid #6F69A4;
  border-radius: 12px;
  padding: 15px;
  width: 100%;
}
textarea.tpl-comment-input {
  background: #332F5B;
  color: #8296a5;
}
textarea.tpl-comment-input:focus {
  background: #332F5B;
  color: #8296a5;
}
.comment-form-wrapper textarea {
  padding: 0;
  border: 0;
}
.post-comment-btn-wrapper {
  float: right;
  margin-top: 15px;
}
textarea#comment-input {
  height: 100px;
}
.user-comment-wrapper {
  display: flex;
}
.tpl-user-comment {
  border-bottom: 1px solid #29254f;
  margin-bottom: 30px;
}
.tpl-comment-children .tpl-user-comment:last-child {
  border-bottom: none;
}
img.tpl-user-comment-avatar {
  border-radius: 50%;
  float: left;
  width: 3.6rem;
  height: 3.6rem;
  max-width: 50px;
  max-height: 50px;
  margin-right: 20px;
}
.tpl-comment-children img.tpl-user-comment-avatar {
  max-width: 40px;
  max-height: 40px;
}
.tpl-comment-author {
  font-weight: bold;
}
.tpl-user-comment .comment-content {
  margin-bottom: 20px;
  width: 100%;
}
.tpl-comment-timestamp {
  margin-top: 3px;
  font-size: 15px;
  color: #938fb5;
}
.tpl-comment-text {
  margin-top: 13px;
  white-space: unset;
}
.comment-actions {
  margin-top: 15px;
}
.comment-action-right {
  float: right;
}
.comment-action-left {
  float: left;
}
.tpl-comment-children {
  display: block;
  margin-left: 70px;
}
.tpl-reply-form {
  display: flex;
}
.comment-reply-wrapper {
  margin-left: 70px;
  background: #332F5B;
  margin-bottom: 30px;
  box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
  border: 1px solid #6F69A4;
  border-radius: 12px;
  padding: 15px;
  width: 100%;
}
textarea.tpl-reply-input {
  background: #332F5B;
  color: #8296a5;
}
textarea.tpl-reply-input:focus {
  background: #332F5B;
  color: #8296a5;
}
.comment-reply-wrapper textarea {
  padding: 0;
  border: 0;
}
.reply-action-buttons {
  float: right;
  margin-top: 15px;
}
.tpl-btn-cancel-reply {
  color: #938fb5;
}
#tpl-btn-load-more-comments {
  color: #938fb5;
}
.comment-require-login-wrapper {
  display: flex;
  margin-bottom: 40px;
}
.comment-require-login-wrapper .comment-alert {
  padding: 10px;
  background-color: #29254F;
  text-align: center;
  width: 100%;
  border-radius: 8px;
}
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/user.css
New file
@@ -0,0 +1,170 @@
.user-avatar img {
    width: 40px;
}
.user-avatar {
    margin-left: 20px;
    border-radius: 50%;
    overflow: hidden;
    cursor: pointer;
}
ul.user-links {
    position: absolute;
    background: #fff;
    right: 0;
    top: 100%;
    z-index: 2;
    text-align: left;
    list-style: none;
    font-weight: normal;
    background-clip: padding-box;
    border: 1px solid rgba(0, 0, 0, .15);
    border-radius: .25rem;
    padding-left: 0;
    box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
}
ul.user-links li {
    padding: 1rem;
    min-width: 220px;
    color: #2c3e50;
}
ul.user-links.hidden {
    display: none;
}
.user-links hr {
    margin: 0;
}
#mainNav .container {
    position: relative;
    padding: 0 10px;
}
.section {
    background-color: #29254f;
    border-radius: 10px;
    padding: 15px;
    margin-bottom: 30px;
    box-shadow: 2px 2px 5px 0 rgba(0,0,0,0.05);
}
.section-title {
    font-size: 1.3rem;
}
.page-title {
    margin-top: 5px;
    margin-bottom: 20px;
}
.profile-username {
    font-size: 20px;
    font-weight: bold;
    margin-top: 20px;
}
.user-page {
    background-color: #120e31;
    color: #b4b8bb;
}
.user-page .single-title {
    margin-top: 0;
    margin-bottom: 10px;
    padding-top: 25px;
    font-size: 1.5rem;
}
.user-page .section-title {
    font-weight: bold;
    margin-bottom: 15px;
}
.profile-bio {
    margin-top: 10px;
}
.profile-join {
    color: #d6793a;
    font-style: italic;
}
.progress-bar {
    background-color: #19bae0;
}
.level-badge {
    float: left;
    margin-right: 10px;
}
.profile-game-item {
    max-width: 80px;
    border-radius: 10px;
    overflow: hidden;
    margin-right: 15px;
}
.profile-gamelist-horizontal {
    position: relative;
}
.profile-gamelist-horizontal ul {
    overflow: hidden;
    white-space: nowrap;
    display: block;
    list-style: none;
    padding: 0;
    margin-bottom: 0;
}
.profile-gamelist-horizontal li {
    display: inline-block;
    text-align: center;
}
.profile-comment-item {
    position: relative;
    border: 1px solid #6f69a4;
    padding: 15px;
    border-radius: 10px;
    margin-top: 20px;
}
.comment-date {
    font-style: italic;
}
.btn-left {
    position: absolute;
    left: 0;
    background-color: #fff;
    border-radius: 50%;
    top: 14px;
    margin: 5px;
    box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
    z-index: 1;
}
.btn-right {
    position: absolute;
    right: 0;
    background-color: #fff;
    border-radius: 50%;
    top: 14px;
    margin: 5px;
    box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
    z-index: 1;
}
.label-xp {
    color: #d6793a;
    font-style: italic;
}
.delete-comment {
    position: absolute;
    right: 10px;
    bottom: 10px;
    cursor: pointer;
}
.input-hidden {
  position: absolute;
  left: -9999px;
}
input[type=radio]:checked + label>img {
  border: 1px solid #fff;
  box-shadow: 0 0 0 3px #14ca14;
}
.avatar-chooser .col-3 {
    padding-right: 5px;
    padding-left: 5px;
}
.avatar-chooser {
    margin-right: 0;
    margin-left: 0;
}
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/tag.php
New file
@@ -0,0 +1,30 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
            <h3 class="item-title"><?php _e('%a Games', esc_string($tag_name)) ?></h3>
            <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
            <div class="game-container">
                <div class="grid-layout grid-wrapper">
                    <?php foreach ( $games as $game ) { ?>
                    <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
                    <?php } ?>
                </div>
            </div>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($_GET['page'])){
                        $cur_page = esc_string($_GET['page']);
                    }
                    render_pagination($total_page, $cur_page, 8, 'tag', $_GET['slug']);
                    ?>
                </nav>
            </div>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/thumbnail.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/404.php
New file
@@ -0,0 +1,7 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container text-center">
        <img src="<?php echo DOMAIN . TEMPLATE_PATH . "/images/404.png" ?>">
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/archive.php
New file
@@ -0,0 +1,36 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
            <h3 class="item-title"><?php _e('%a Games', esc_string($archive_title)) ?></h3>
            <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
            <?php
            if($category->description != ''){
                echo '<p class="category-description">';
                echo "$category->description</p>";
            }
            ?>
            <div class="game-container">
                <div class="row">
                    <?php foreach ( $games as $game ) { ?>
                    <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
                    <?php } ?>
                </div>
            </div>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($_GET['page'])){
                        $cur_page = esc_int($_GET['page']);
                    }
                    render_pagination($total_page, $cur_page, 8, 'category', $_GET['slug']);
                    ?>
                </nav>
            </div>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/functions.php
New file
@@ -0,0 +1,222 @@
<?php
function list_categories(){
    $categories = fetch_all_categories();
    echo '<ul class="links list-categories">';
    foreach ($categories as $item) {
        echo '<a href="'. get_permalink('category', $item->slug) .'"><li>'. esc_string($item->name) .'</li></a>';
    }
    echo '</ul>';
}
function list_games($type, $amount, $count = false){
    echo '<div class="row">';
    $data = fetch_games_by_type($type, $amount, 0, $count);
    $games = $data['results'];
    foreach ( $games as $game ) { ?>
    <div class="col-4 list-tile">
        <a href="<?php echo get_permalink('game', $game->slug) ?>">
            <div class="list-game">
                <div class="list-thumbnail"><img src="<?php echo get_small_thumb($game) ?>" class="small-thumb" alt="<?php echo esc_string($game->title) ?>"></div>
                <div class="list-content">
                    <div class="list-title"><?php echo esc_string($game->title); ?></div>
                </div>
            </div>
        </a>
    </div>
    <?php }
    echo '</div>';
}
function list_games_by_category($cat, $amount){
    // Deprecated, not used anymore
    echo '<div class="row">';
    $data = get_game_list_category($cat, $amount);
    $games = $data['results'];
    foreach ( $games as $game ) { ?>
        <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
    <?php }
    echo '</div>';
}
function list_games_by_categories($cat, $amount){
    // Deprecated, not used anymore
    echo '<div class="row">';
    $data = get_game_list_categories($cat, $amount);
    $games = $data['results'];
    foreach ( $games as $game ) { ?>
        <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
    <?php }
    echo '</div>';
}
function show_user_profile_header(){
    global $login_user;
    if($login_user){
    ?>
    <div class="user-avatar">
        <img src="<?php echo get_user_avatar() ?>">
    </div>
    <ul class="user-links hidden">
        <li>
            <strong>
                <?php echo $login_user->username ?>
            </strong>
            <div class="label-xp"><?php echo $login_user->xp ?>xp</div>
        </li>
        <hr>
        <a href="<?php echo get_permalink('user', $login_user->username) ?>">
            <li><?php _e('My Profile') ?></li>
        </a>
        <a href="<?php echo get_permalink('user', $login_user->username, array('edit' => 'edit')) ?>">
            <li><?php _e('Edit Profile') ?></li>
        </a>
        <hr>
        <a href="<?php echo DOMAIN ?>admin.php?action=logout">
            <li class="text-danger"><?php _e('Log Out') ?></li>
        </a>
    </ul>
    <?php
    }
}
register_sidebar(array(
    'name' => 'Head',
    'id' => 'head',
    'description' => 'HTML element before &#x3C;/head&#x3E;',
));
register_sidebar(array(
    'name' => 'Sidebar 1',
    'id' => 'sidebar-1',
    'description' => 'Right sidebar',
));
register_sidebar(array(
    'name' => 'Footer 1',
    'id' => 'footer-1',
    'description' => 'Footer 1',
));
register_sidebar(array(
    'name' => 'Footer 2',
    'id' => 'footer-2',
    'description' => 'Footer 2',
));
register_sidebar(array(
    'name' => 'Footer 3',
    'id' => 'footer-3',
    'description' => 'Footer 3',
));
register_sidebar(array(
    'name' => 'Top Content',
    'id' => 'top-content',
    'description' => 'Above main content element. Recommended for Ad banner placement.',
));
register_sidebar(array(
    'name' => 'Bottom Content',
    'id' => 'bottom-content',
    'description' => 'Under main content element. Recommended for Ad banner placement.',
));
register_sidebar(array(
    'name' => 'Homepage Bottom',
    'id' => 'homepage-bottom',
    'description' => 'Bottom content on homepage. Can be used to show site description or explaining about your site.',
));
register_sidebar(array(
    'name' => 'Footer Copyright',
    'id' => 'footer-copyright',
    'description' => 'Copyright section.',
));
class widget_game_list extends Widget {
    function __construct() {
         $this->name = 'Game List';
         $this->id_base = 'game-list';
         $this->description = 'Show game list ( Grid ). Is recommedned to put this on sidebar.';
    }
    public function widget( $instance, $args = array() ){
        $label = isset($instance['label']) ? $instance['label'] : '';
        $class = isset($instance['class']) ? $instance['class'] : 'widget';
        $type = isset($instance['type']) ? $instance['type'] : 'new';
        $amount = isset($instance['amount']) ? $instance['amount'] : 9;
        echo '<div class="'.$class.'">';
        if($label != ''){
            $icon = 'fa-plus';
            if($type != 'new'){
                $icon = 'fa-gamepad';
            }
            echo '<h4 class="widget-title"><i class="fa '.$icon.'" aria-hidden="true"></i>'.$label.'</h4>';
        }
        list_games($type, (int)$amount);
        echo '</div>';
    }
    public function form( $instance = array() ){
        if(!isset( $instance['label'] )){
            $instance['label'] = '';
        }
        if(!isset( $instance['type'] )){
            $instance['type'] = 'new';
        }
        if(!isset( $instance['amount'] )){
            $instance['amount'] = 9;
        }
        if(!isset( $instance['class'] )){
            $instance['class'] = 'widget';
        }
        ?>
        <div class="form-group">
            <label><?php _e('Widget label/title (optional)') ?>:</label>
            <input type="text" class="form-control" name="label" placeholder="NEW GAMES" value="<?php echo $instance['label'] ?>">
        </div>
        <div class="form-group">
            <label><?php _e('Sort game list by') ?>:</label>
            <select class="form-control" name="type">
                <?php
                $opts = array(
                    'new' => 'New',
                    'popular' => 'Popular',
                    'random' => 'Random',
                    'likes' => 'Likes',
                    'trending' => 'Trending'
                );
                foreach ($opts as $key => $value) {
                    $selected = '';
                    if($key == $instance['type']){
                        $selected = 'selected';
                    }
                    echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
                }
                ?>
            </select>
        </div>
        <div class="form-group">
            <label><?php _e('Amount') ?>:</label>
            <input type="number" class="form-control" name="amount" placeholder="9" min="1" value="<?php echo $instance['amount'] ?>">
        </div>
        <div class="form-group">
            <label><?php _e('Div class (Optional)') ?>:</label>
            <input type="text" class="form-control" name="class" placeholder="widget" value="<?php echo $instance['class'] ?>">
        </div>
        <?php
    }
}
register_widget( 'widget_game_list' );
if(file_exists(ABSPATH . TEMPLATE_PATH . '/includes/custom.php')){
    include(ABSPATH . TEMPLATE_PATH . '/includes/custom.php');
}
?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/game.php
New file
@@ -0,0 +1,123 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
        <div class="row">
            <div class="col-md-9 game-content">
                <div class="game-iframe-container">
                    <iframe class="game-iframe" id="game-area" src="<?php echo get_game_url($game); ?>" frameborder="0" allowfullscreen></iframe>
                </div>
                <div class="single-info-container">
                    <div class="header-left">
                        <h1 class="single-title"><?php echo htmlspecialchars( $game->title )?></h1>
                        <p><?php _e('Played %a times.', esc_int($game->views)) ?></p>
                    </div>
                    <div class="header-right">
                        <div class="stats-vote">
                            <?php
                                $vote_percentage = '- ';
                                if($game->upvote+$game->downvote > 0){
                                    $vote_percentage = floor(($game->upvote/($game->upvote+$game->downvote))*100);
                                }
                            ?>
                            <div class="txt-stats"><b class="text-success"><?php echo $vote_percentage ?>%</b> (<?php echo $game->upvote ?>/<?php echo $game->upvote+$game->downvote ?>)</div>
                            <?php if($login_user){
                                $favorited_class = '';
                                if(is_favorited_game($game->id)){
                                    $favorited_class = 'color-red';
                                }
                                ?>
                            <i class="icon-vote fa fa-heart <?php echo $favorited_class ?>" id="favorite" data-id="<?php echo $game->id ?>"></i>
                            <?php } ?>
                            <i class="icon-vote fa fa-thumbs-up" id="upvote" data-id="<?php echo $game->id ?>"></i>
                            <i class="icon-vote fa fa-thumbs-down" id="downvote" data-id="<?php echo $game->id ?>"></i>
                            <div class="vote-status"></div>
                        </div>
                    </div>
                    <div class="action-btn">
                        <div class="single-icon"><i class="fa fa-external-link-square" aria-hidden="true"></i><a href="<?php echo get_permalink('full', $game->slug); ?>" target="_blank"><?php _e('Open in new window') ?></a></div>
                        <div class="single-icon"><i class="fa fa-expand" aria-hidden="true"></i><a href="#" onclick="open_fullscreen()"><?php _e('Fullscreen') ?></a></div>
                        <?php
                        if(defined('GAME_REPORTS')){
                            ?><div class="single-icon"><i class="fa fa-bug" aria-hidden="true"></i><a href="#" id="report-game"><?php _e('Report') ?></a></div>
                            <?php
                        }
                        ?>
                        <div class="social-share"><a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
                            <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/facebook.png' ?>" alt="share" class="social-icon">
                        </a></div>
                        <div class="social-share"><a href="https://twitter.com/intent/tweet?url=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
                            <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/twitter.png' ?>" alt="share" class="social-icon">
                        </a></div>
                    </div>
                </div>
                <b><?php _e('Description') ?>:</b>
                <div class="single-description">
                    <?php echo nl2br( $game->description )?>
                </div>
                <br>
                <b><?php _e('Instructions') ?>:</b>
                <div class="single-instructions">
                    <?php echo nl2br( $game->instructions )?>
                </div>
                <br>
                <?php if(can_show_leaderboard()) { ?>
                <div class="single-leaderboard">
                    <div id="content-leaderboard" class="table-responsive" data-id="<?php echo $game->id ?>"></div>
                </div>
                <?php } ?>
                <br>
                <b><?php _e('Categories') ?>:</b>
                <p class="cat-list">
                    <?php if ( $game->category ) {
                        $categories = $game->getCategoryList();
                        foreach ($categories as $cat) {
                            $category = Category::getById($cat['id']);
                            ?>
                    <a href="<?php echo get_permalink('category', $category->slug) ?>" class="cat-link"><?php echo esc_string($category->name) ?></a>
                    <?php
                        }
                        } ?>
                </p>
                <?php
                $tag_string = $game->get_tags();
                if($tag_string != ''){
                    echo '<b>'._t('Tags').':</b>';
                    echo '<div class="game-tag-list">';
                    $tags = explode(',', $tag_string);
                    foreach ($tags as $tag_name) {
                        echo '<a href="'. get_permalink('tag', $tag_name) .'" class="tag-item">';
                        echo esc_string($tag_name);
                        echo '</a>';
                    }
                    echo '</div>';
                }
                ?>
                <?php if(get_setting_value('comments')){
                    echo '<div class="mt-4"></div>';
                    echo '<b>'._t('Comments').':</b>';
                    render_game_comments($game->id);
                } ?>
            </div>
            <div class="col-md-3">
                <?php include  TEMPLATE_PATH . "/parts/sidebar.php" ?>
            </div>
        </div>
    </div>
    <?php widget_aside('bottom-content') ?>
    </div>
    <div class="bottom-container">
        <h3 class="item-title"><i class="fa fa-thumbs-up" aria-hidden="true"></i><?php _e('SIMILAR GAMES') ?></h3>
        <div class="row">
            <?php
            $data = fetch_similar_games($game, 12);
            $games = $data['results'];
            foreach ( $games as $game ) {
                include  TEMPLATE_PATH . "/includes/grid.php";
            }
            ?>
        </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/home.php
New file
@@ -0,0 +1,56 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <h3 class="item-title"><i class="fa fa-plus" aria-hidden="true"></i><?php _e('NEW GAMES') ?></h3>
        <div class="row" id="section-new-games">
            <?php
            $games = fetch_games_by_type('new', 12, 0, false)['results'];
            foreach ( $games as $game ) { ?>
                <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
            <?php } ?>
        </div>
        <!-- Load more games -->
        <div class="load-more-games-wrapper">
            <!-- Template -->
            <div class="item-append-template" style="display: none;">
                <div class="col-md-2 col-sm-3 col-4 item-grid">
                    <a href="<?php echo get_permalink('game') ?>{{slug}}">
                    <div class="list-game">
                        <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="{{thumbnail}}" class="small-thumb lazyload" alt="{{title}}"></div>
                        <div class="list-content">
                            <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-{{rating}}.png' ?>" alt="rating"></div>
                            <div class="list-title">{{title}}</div>
                        </div>
                    </div>
                    </a>
                </div>
            </div>
            <!-- The button -->
            <div class="btn btn-primary btn-load-more-games">
                <?php _e('Load more games') ?> <i class="fa fa-chevron-down" aria-hidden="true"></i>
            </div>
        </div>
        <h3 class="item-title"><i class="fa fa-certificate" aria-hidden="true"></i><?php _e('POPULAR GAMES') ?></h3>
        <div class="row">
            <?php
            $games = fetch_games_by_type('popular', 12, 0, false)['results'];
            foreach ( $games as $game ) { ?>
                <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
            <?php } ?>
        </div>
        <h3 class="item-title"><i class="fa fa-gamepad" aria-hidden="true"></i><?php _e('YOU MAY LIKE') ?></h3>
        <div class="row">
            <?php
            $games = fetch_games_by_type('random', 12, 0, false)['results'];
            foreach ( $games as $game ) { ?>
                <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
            <?php } ?>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
    <div class="mb-4 mt-4 hp-bottom-container">
        <?php widget_aside('homepage-bottom') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/404.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/facebook.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-0.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-1.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-2.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-3.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-4.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-5.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder1.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder2.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder3.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/twitter.png
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/custom.php
New file
@@ -0,0 +1,11 @@
<?php
/*
Used for custom Widgets and custom Widget placements
This file will not be overwritten by the updater
*/
?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/footer.php
New file
@@ -0,0 +1,52 @@
    <footer class="footer text-center">
        <div class="container">
            <div class="row">
                <div class="col-lg-4 mb-5 mb-lg-0">
                    <?php widget_aside('footer-1') ?>
                </div>
                <div class="col-lg-4 mb-5 mb-lg-0">
                    <?php widget_aside('footer-2') ?>
                </div>
                <div class="col-lg-4">
                    <?php widget_aside('footer-3') ?>
                </div>
            </div>
        </div>
    </footer>
    <div class="copyright py-4 text-center text-white">
        <div class="container">
            <?php
            if(isset($stored_widgets['footer-copyright'])){
                widget_aside('footer-copyright');
            } else {
                echo SITE_TITLE . ' Â© '.date('Y').'. All rights reserved.';
            }
            ?>
            <span class="dsb-panel">
            <?php
                // if(is_login() && USER_ADMIN ){
                //     echo '<a href="'.DOMAIN.'admin.php">Admin Dashboard</a>';
                // } else {
                //     echo 'V-'.VERSION;
                // }
                echo '<a href="'.DOMAIN.'page/privacy-policy">Privacy Policy</a>';
                ?>
                <?php
                echo '|';
                ?>
                <?php
                echo '<a href="'.DOMAIN.'page/contact-us">Contact Us</a>';
                ?>
            </span>
        </div>
    </div>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/jquery-3.6.2.min.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/lazysizes.min.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN ?>js/comment-system.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/script.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/custom.js"></script>
    <script type="text/javascript" src="<?php echo DOMAIN ?>js/stats.js"></script>
    <?php load_plugin_footers() ?>
  </body>
</html>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/grid.php
New file
@@ -0,0 +1,11 @@
<div class="col-md-2 col-sm-3 col-4 item-grid">
    <a href="<?php echo get_permalink('game', $game->slug) ?>">
    <div class="list-game">
        <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="<?php echo get_small_thumb($game) ?>" class="small-thumb lazyload" alt="<?php echo esc_string($game->title) ?>"></div>
        <div class="list-content">
            <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-'.get_rating('5', $game).'.png' ?>" alt="rating"></div>
            <div class="list-title"><?php echo esc_string($game->title); ?></div>
        </div>
    </div>
    </a>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/header.php
New file
@@ -0,0 +1,55 @@
<!DOCTYPE html>
<html <?php the_html_attrs() ?>>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <title><?php echo get_page_title() ?></title>
        <meta name="description" content="<?php echo substr(esc_string($meta_description), 0, 160) ?>">
        <?php the_canonical_link() ?>
        <?php
            if(isset($game)){ //Game page
                ?>
                <meta name="twitter:card" content="summary_large_image" />
                <meta name="twitter:title" content="<?php echo htmlspecialchars( $page_title )?>" />
                <meta name="twitter:description" content="<?php echo substr(esc_string($meta_description), 0, 200) ?>" />
                <?php
                if(isset($game->thumb_1)){
                    $thumb = $game->thumb_1;
                    if(substr($thumb, 0, 1) == '/'){
                        $thumb = DOMAIN . substr($thumb, 1);
                    }
                    echo('<meta name="twitter:image:src" content="'.$thumb.'">');
                    echo('<meta property="og:image" content="'.$thumb.'">');
                }
            }
        ?>
        <?php load_plugin_headers() ?>
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/bootstrap.min.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/jquery-comments.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/user.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/style.css" />
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/custom.css" />
        <!-- Font Awesome icons (free version)-->
        <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
        <!-- Google fonts-->
        <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
        <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css" />
        <?php widget_aside('head') ?>
    </head>
    <body id="page-top">
        <!-- Navigation-->
        <nav class="navbar navbar-expand-lg navbar-dark top-nav" id="mainNav">
            <div class="container">
                <button id="toggler" class="navbar-toggler navbar-toggler-left collapsed" type="button" data-toggle="collapse" data-target="#navb" aria-expanded="false">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <a class="navbar-brand js-scroll-trigger" href="<?php echo DOMAIN ?>"><img src="<?php echo DOMAIN .SITE_LOGO ?>" class="site-logo" alt="site-logo"></a>
                <?php include  TEMPLATE_PATH . "/parts/navigation-top.php" ?>
                <?php show_user_profile_header() ?>
            </div>
        </nav>
        <div class="nav-categories">
            <div class="container">
                <?php include  TEMPLATE_PATH . "/parts/navigation-categories.php" ?>
            </div>
        </div>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/info.json
New file
@@ -0,0 +1,11 @@
{
    "name": "Default",
    "version": "1.1.7",
    "author": "CloudArcade",
    "description": "Default Theme",
    "website": "https://cloudarcade.net",
    "release_date": "30/08/2023",
    "changelog": "Implement load more games, implement new comment system, better search, fix bugs.",
    "type":"theme",
    "target_version": "1.6.5"
}
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/bootstrap.min.js
New file
@@ -0,0 +1,7 @@
/*!
  * Bootstrap v4.5.2 (https://getbootstrap.com/)
  * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(){return(s=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function r(t){var n=this,i=!1;return e(this).one(a.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||a.triggerTransitionEnd(n)}),t),this}var a={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&a.isElement(s)?"element":null===(l=s)||"undefined"==typeof l?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?a.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};a.jQueryDetection(),e.fn.emulateTransitionEnd=r,e.event.special[a.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var l="alert",c=e.fn[l],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=a.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=a.getTransitionDurationFromElement(t);e(t).one(a.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[l]=h._jQueryInterface,e.fn[l].Constructor=h,e.fn[l].noConflict=function(){return e.fn[l]=c,h._jQueryInterface};var u=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("LABEL"!==i.tagName||o&&"checkbox"!==o.type)&&d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var s=0,r=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;s<r;s++){var a=t[s];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=u,d._jQueryInterface};var f="carousel",g=".bs.carousel",m=e.fn[f],p={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},v={TOUCH:"touch",PEN:"pen"},b=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(a.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(g),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s({},p,t),a.typeCheckConfig(f,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,l=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(l),h=n||l&&this._getItemByDirection(t,l),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&l&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:c,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),a.reflow(h),e(l).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=a.getTransitionDurationFromElement(l);e(l).one(a.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(l).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(l).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s({},p,e(this).data());"object"==typeof n&&(o=s({},o,n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=a.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s({},e(o).data(),e(this).data()),l=this.getAttribute("data-slide-to");l&&(r.interval=!1),t._jQueryInterface.call(e(o),r),l&&e(o).data("bs.carousel").to(l),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return p}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",b._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);b._jQueryInterface.call(o,o.data())}})),e.fn[f]=b._jQueryInterface,e.fn[f].Constructor=b,e.fn[f].noConflict=function(){return e.fn[f]=m,b._jQueryInterface};var y="collapse",E=e.fn[y],w={toggle:!0,parent:""},T={toggle:"boolean",parent:"(string|element)"},C=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var s=n[i],r=a.getSelectorFromElement(s),l=[].slice.call(document.querySelectorAll(r)).filter((function(e){return e===t}));null!==r&&l.length>0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(r[0].toUpperCase()+r.slice(1)),c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[r]=this._element[l]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",a.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var r=this._triggerArray[s],l=a.getSelectorFromElement(r);if(null!==l)e([].slice.call(document.querySelectorAll(l))).hasClass("show")||e(r).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s({},w,t)).toggle=Boolean(t.toggle),a.typeCheckConfig(y,t,T),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;a.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return e(s).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=a.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s({},w,i.data(),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return w}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=a.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();C._jQueryInterface.call(t,i)}))})),e.fn[y]=C._jQueryInterface,e.fn[y].Constructor=C,e.fn[y].noConflict=function(){return e.fn[y]=E,C._jQueryInterface};var S="dropdown",k=e.fn[S],D=new RegExp("38|40|27"),N={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},A={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},I=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var i=t.prototype;return i.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},i.show=function(i){if(void 0===i&&(i=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var o={relatedTarget:this._element},s=e.Event("show.bs.dropdown",o),r=t._getParentFromElement(this._element);if(e(r).trigger(s),!s.isDefaultPrevented()){if(!this._inNavbar&&i){if("undefined"==typeof n)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var l=this._element;"parent"===this._config.reference?l=r:a.isElement(this._config.reference)&&(l=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(l=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new n(l,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",o))}}},i.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},i.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},i.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},i._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},i._getConfig=function(t){return t=s({},this.constructor.Default,e(this._element).data(),t),a.typeCheckConfig(S,t,this.constructor.DefaultType),t},i._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},i._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},i._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s({},t,this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o<s;o++){var r=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(r).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(r,n.target))){var h=e.Event("hide.bs.dropdown",l);e(r).trigger(h),h.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(r).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=a.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!D.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var s=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==s.length){var r=s.indexOf(n.target);38===n.which&&r>0&&r--,40===n.which&&r<s.length-1&&r++,r<0&&(r=0),s[r].focus()}}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return N}},{key:"DefaultType",get:function(){return A}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',I._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",I._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",I._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),I._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[S]=I._jQueryInterface,e.fn[S].Constructor=I,e.fn[S].noConflict=function(){return e.fn[S]=k,I._jQueryInterface};var O=e.fn.modal,j={backdrop:!0,keyboard:!0,focus:!0,show:!0},x={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},P=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var s=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(s)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s({},j,t),a.typeCheckConfig("modal",t,x),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;var i=this._element.scrollHeight>document.documentElement.clientHeight;i||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=a.getTransitionDurationFromElement(this._dialog);e(this._element).off(a.TRANSITION_END),e(this._element).one(a.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),i||e(t._element).one(a.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&a.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var l=a.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(a.TRANSITION_END,r).emulateTransitionEnd(l)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&a.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,s=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(s)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,s=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(s)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,s=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(s)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s({},j,e(this).data(),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return j}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=a.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s({},e(n).data(),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var l=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||l.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));P._jQueryInterface.call(e(n),r,this)})),e.fn.modal=P._jQueryInterface,e.fn.modal.Constructor=P,e.fn.modal.noConflict=function(){return e.fn.modal=O,P._jQueryInterface};var R=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],L={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},q=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,F=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Q(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),s=[].slice.call(i.body.querySelectorAll("*")),r=function(t,n){var i=s[t],r=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[r]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===R.indexOf(n)||Boolean(t.nodeValue.match(q)||t.nodeValue.match(F));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,s=i.length;o<s;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=s.length;a<l;a++)r(a);return i.body.innerHTML}var B="tooltip",H=e.fn[B],U=new RegExp("(^|\\s)bs-tooltip\\S+","g"),M=["sanitize","whiteList","sanitizeFn"],W={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},V={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},z={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:L,popperConfig:null},K={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},X=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=a.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),l=a.getUID(this.constructor.NAME);r.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(r).addClass("fade");var c="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(c);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=a.getTransitionDurationFromElement(this.tip);e(this.tip).one(a.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=a.getTransitionDurationFromElement(i);e(i).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Q(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:a.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return V[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==M.indexOf(t)&&delete n[t]})),"number"==typeof(t=s({},this.constructor.Default,n,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a.typeCheckConfig(B,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(U);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return z}},{key:"NAME",get:function(){return B}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return K}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return W}}]),t}();e.fn[B]=X._jQueryInterface,e.fn[B].Constructor=X,e.fn[B].noConflict=function(){return e.fn[B]=H,X._jQueryInterface};var Y="popover",$=e.fn[Y],J=new RegExp("(^|\\s)bs-popover\\S+","g"),G=s({},X.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Z=s({},X.DefaultType,{content:"(string|element|function)"}),tt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},et=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(J);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return G}},{key:"NAME",get:function(){return Y}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return tt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Z}}]),s}(X);e.fn[Y]=et._jQueryInterface,e.fn[Y].Constructor=et,e.fn[Y].noConflict=function(){return e.fn[Y]=$,et._jQueryInterface};var nt="scrollspy",it=e.fn[nt],ot={offset:10,method:"auto",target:""},st={offset:"number",method:"string",target:"(string|element)"},rt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=a.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s({},ot,"object"==typeof t&&t?t:{})).target&&a.isElement(t.target)){var n=e(t.target).attr("id");n||(n=a.getUID(nt),e(t.target).attr("id",n)),t.target="#"+n}return a.typeCheckConfig(nt,t,st),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return ot}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);rt._jQueryInterface.call(i,i.data())}})),e.fn[nt]=rt._jQueryInterface,e.fn[nt].Constructor=rt,e.fn[nt].noConflict=function(){return e.fn[nt]=it,rt._jQueryInterface};var at=e.fn.tab,lt=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],s=a.getSelectorFromElement(this._element);if(o){var r="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var l=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(l),e(this._element).trigger(c),!c.isDefaultPrevented()&&!l.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),l=function(){return o._transitionComplete(t,s,i)};if(s&&r){var c=a.getTransitionDurationFromElement(s);e(s).removeClass("show").one(a.TRANSITION_END,l).emulateTransitionEnd(c)}else l()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),a.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),lt._jQueryInterface.call(e(this),"show")})),e.fn.tab=lt._jQueryInterface,e.fn.tab.Constructor=lt,e.fn.tab.noConflict=function(){return e.fn.tab=at,lt._jQueryInterface};var ct=e.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},ut={animation:!0,autohide:!0,delay:500},dt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),a.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s({},ut,e(this._element).data(),"object"==typeof t&&t?t:{}),a.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},n._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return ut}}]),t}();e.fn.toast=dt._jQueryInterface,e.fn.toast.Constructor=dt,e.fn.toast.noConflict=function(){return e.fn.toast=ct,dt._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=b,t.Collapse=C,t.Dropdown=I,t.Modal=P,t.Popover=et,t.Scrollspy=rt,t.Tab=lt,t.Toast=dt,t.Tooltip=X,t.Util=a,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=bootstrap.min.js.map
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/custom.js
New file
@@ -0,0 +1,7 @@
/*
Custom script
This file will not be overwritten by the updater
*/
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/jquery-3.3.1.min.js
New file
@@ -0,0 +1,2 @@
/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/jquery-3.6.2.min.js
New file
@@ -0,0 +1,2 @@
/*! jQuery v3.6.2 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.2",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector("+c+")"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E});
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/lazysizes.min.js
New file
@@ -0,0 +1,3 @@
/*! lazysizes - v5.3.0 */
!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{});
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/script.js
New file
@@ -0,0 +1,326 @@
"use strict";
if ($('#tpl-comment-section').length) {
    const gameId = $('#tpl-comment-section').attr('data-id');
    const commentSystem = new CommentSystem(gameId);
}
$(function() {
    const formSearch = document.querySelector("form.search-bar");
    if (formSearch) {
        formSearch.addEventListener("submit", function(event) {
            event.preventDefault();
            const input = formSearch.querySelector("input[name='slug']");
            const sanitizedValue = input.value.replace(/ /g, "-");
            input.value = sanitizedValue;
            if (input.value.length >= 2) {
                formSearch.submit();
            }
        });
    }
    // Load more games
    let last_offset = 0;
    let load_amount = 0;
    const newGamesContainer = $('#section-new-games');
    if (newGamesContainer.length) {
        load_amount = newGamesContainer.children().length;
        last_offset = newGamesContainer.children().length;
        if (load_amount < 12) {
            $('.btn-load-more-games').remove();
        } else {
            $('.btn-load-more-games').click(() => {
                fetchMoreGames(load_amount, 'new');
            });
        }
    }
    async function fetchMoreGames(amount, sort_by) {
        try {
            const response = await $.ajax({
                url: "/includes/fetch.php",
                type: 'POST',
                dataType: 'json',
                data: {amount: amount, offset: last_offset, sort_by: sort_by},
            });
            appendFetchedGames(response);
        } catch (error) {
            console.log(error);
        }
    }
    function appendFetchedGames(data) {
        last_offset += data.length;
        const templateHTML = $('.item-append-template').html();  // Get the inner HTML of the template
        data.forEach((item) => {
            let rating = 0;
            item['upvote'] = Number(item['upvote']);
            item['downvote'] = Number(item['downvote']);
            let totalRevs = item['upvote']+item['downvote'];
            if(totalRevs > 0){
                rating = (Math.round((item['upvote']/(item['upvote']+item['downvote'])) * 5));
            }
            // Clone the HTML template
            let clonedHTML = templateHTML;
            // Replace placeholders
            console.log(item['title'])
            clonedHTML = clonedHTML.replace(/{{slug}}/g, item['slug']);
            clonedHTML = clonedHTML.replace(/{{thumbnail}}/g, item['thumb_2']);
            clonedHTML = clonedHTML.replace(/{{title}}/g, item['title']);
            clonedHTML = clonedHTML.replace(/{{rating}}/g, rating);
            // Convert the HTML string to a jQuery object
            const clonedElement = $(clonedHTML);
            // Further modifications if necessary, for example, replacing the rating image src
            // Append the new element to newGamesContainer
            newGamesContainer.append(clonedElement);
        });
        if (data.length < load_amount) {
            $('.btn-load-more-games').remove();
        }
    }
    // End
    var $nav = $('nav.greedy');
    var $btn = $('nav.greedy button');
    var $vlinks = $('nav.greedy .links');
    var $hlinks = $('nav.greedy .hidden-links');
    var numOfItems = 0;
    var totalSpace = 0;
    var breakWidths = [];
    // Get initial state
    $vlinks.children().outerWidth(function(i, w) {
        totalSpace += w;
        numOfItems += 1;
        breakWidths.push(totalSpace);
    });
    var availableSpace, numOfVisibleItems, requiredSpace;
    function check() {
        // Get instant state
        availableSpace = $vlinks.width() - 10;
        numOfVisibleItems = $vlinks.children().length;
        requiredSpace = breakWidths[numOfVisibleItems - 1];
        // There is not enought space
        if (requiredSpace > availableSpace) {
            $vlinks.children().last().prependTo($hlinks);
            numOfVisibleItems -= 1;
            check();
            // There is more than enough space
        } else if (availableSpace > breakWidths[numOfVisibleItems]) {
            $hlinks.children().first().appendTo($vlinks);
            numOfVisibleItems += 1;
        }
        // Update the button accordingly
        $btn.attr("count", numOfItems - numOfVisibleItems);
        if (numOfVisibleItems === numOfItems) {
            $btn.addClass('hidden');
        } else $btn.removeClass('hidden');
    }
    // Window listeners
    $(window).resize(function() {
        check();
    });
    $btn.on('click', function() {
        $hlinks.toggleClass('hidden');
    });
    check();
});
function open_fullscreen() {
    let game = document.getElementById("game-area");
    if (game.requestFullscreen) {
        game.requestFullscreen();
    } else if (game.mozRequestFullScreen) { /* Firefox */
        game.mozRequestFullScreen();
    } else if (game.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
        game.webkitRequestFullscreen();
    } else if (game.msRequestFullscreen) { /* IE/Edge */
        game.msRequestFullscreen();
    }
};
var can_resize = false;
if($('iframe#game-area').length){
    can_resize = true;
    resize_game_iframe();
    load_leaderboard({type: 'top', amount: 10});
}
function resize_game_iframe(){
    if(can_resize){
        let iframe = $("iframe.game-iframe");
        let size = {
            width: Number(iframe.attr('width')),
            height: Number(iframe.attr('height')),
        }
        let ratio = (size.height/size.width)*100;
        let win_ratio = (window.innerHeight/window.innerWidth)*100;
        if(win_ratio <= 110){
            if(ratio > 80){
                ratio = 80;
            }
        } else if(win_ratio >= 130){
            if(ratio < 100){
                ratio = 100;
            }
        }
        //console.log(ratio);
        //console.log(win_ratio);
        $('.game-iframe-container').css('padding-top', ratio+'%');
    }
}
function load_leaderboard(conf){
    if($('#content-leaderboard').length){
        let g_id = $('#content-leaderboard').data('id');
        $.ajax({
            url: '/includes/api.php',
            type: 'POST',
            dataType: 'json',
            data: {'action': 'get_scoreboard', 'game-id': g_id, 'conf': JSON.stringify(conf)},
            complete: function (data) {
                if(data.responseText){
                    show_leaderboard(JSON.parse(data.responseText));
                }
            }
        });
    }
}
function show_leaderboard(data){
    let html = '<table class="table"><thead class="thead-dark"><tr><th scope="col">#</th><th scope="col">Username</th><th scope="col">Score</th><th scope="col">Date</th></tr></thead><tbody>';
    let index = 1;
    data.forEach((item)=>{
        html += '<tr><th scope="row">'+index+'</th><td>'+item.username+'</td><td>'+item.score+'</td><td>'+item.created_date.substr(0, 10)+'</td></tr>';
        index++;
    });
    html += '</tbody></table>';
    $('#content-leaderboard').html(html);
}
(function(){
    $("#navb").on('show.bs.collapse', function(){
        $('.user-avatar').hide();
    });
    $("#navb").on('hidden.bs.collapse', function(){
        $('.user-avatar').show();
    });
    resize_game_iframe();
    $(window).resize(function() {
        resize_game_iframe();
    });
    $('.stats-vote #favorite').on('click', function() {
        let data_id = $(this).attr('data-id');
        let btn = $(this);
        $.ajax({
            url: '/includes/vote.php',
            type: 'POST',
            dataType: 'json',
            data: {'favorite': true, 'action': 'favorite', 'id': data_id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                btn.addClass('active');
                btn.addClass('disabled');
            }
        });
    });
    $('.stats-vote #upvote').on('click', function() {
        let data_id = $(this).attr('data-id');
        $.ajax({
            url: '/includes/vote.php',
            type: 'POST',
            dataType: 'json',
            data: {'vote': true, 'action': 'upvote', 'id': data_id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                $('.icon-vote').hide();
                let elem = $('.vote-status');
                elem.addClass('text-success');
                elem.append('Liked!');
            }
        });
    });
    $('.stats-vote #downvote').on('click', function() {
        let data_id = $(this).attr('data-id');
        $.ajax({
            url: '/includes/vote.php',
            type: 'POST',
            dataType: 'json',
            data: {'vote': true, 'action': 'downvote', 'id': data_id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                $('.icon-vote').hide();
                let elem = $('.vote-status');
                elem.addClass('text-danger');
                elem.append('Disliked!');
            }
        });
    });
    $('.user-avatar').on('click', ()=>{
        let element = $('.user-links');
        if (element.is(":hidden")) {
            element.removeClass('hidden');
        } else element.addClass('hidden');
    });
    $('#btn_prev').on('click', function() {
        $('.profile-gamelist ul').animate({
            scrollLeft: '-=150'
        }, 300, 'swing');
    });
    $('#btn_next').on('click', function() {
        $('.profile-gamelist ul').animate({
            scrollLeft: '+=150'
        }, 300, 'swing');
    });
    $('#f_prev').on('click', function() {
        $('.favorite-gamelist ul').animate({
            scrollLeft: '-=150'
        }, 300, 'swing');
    });
    $('#f_next').on('click', function() {
        $('.favorite-gamelist ul').animate({
            scrollLeft: '+=150'
        }, 300, 'swing');
    });
    $('.delete-comment').on('click', function() {
        let id = $(this).attr('data-id');
        $.ajax({
            url: '/includes/comment.php',
            type: 'POST',
            dataType: 'json',
            data: {'delete': true, 'id': id},
            success: function (data) {
                //console.log(data.responseText);
            },
            error: function (data) {
                //console.log(data.responseText);
            },
            complete: function (data) {
                console.log(data.responseText);
                if(data.responseText === 'deleted'){
                    $('.id-'+id).remove();
                }
            }
        }, this);
    });
})();
CloudArcade/cloudarcade/cloudarcade/content/themes/default/page.php
New file
@@ -0,0 +1,17 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
    <div class="row">
        <div class="col-md-9">
                <h1 class="singlepage-title"><?php echo htmlspecialchars( $page->title )?></h1>
                <div class="page-content">
                    <?php echo nl2br($page->content) ?>
                </div>
        </div>
        <div class="col-md-3">
            <?php include  TEMPLATE_PATH . "/parts/sidebar.php" ?>
        </div>
    </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/navigation-categories.php
New file
@@ -0,0 +1,5 @@
<nav class='greedy'>
    <?php list_categories() ?>
    <button><?php _e('MORE') ?></button>
      <ul class='hidden-links hidden'></ul>
</nav>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/navigation-top.php
New file
@@ -0,0 +1,29 @@
<div class="navbar-collapse collapse justify-content-end" id="navb">
    <ul class="navbar-nav ml-auto text-uppercase">
        <?php render_nav_menu('top_nav', array(
            'no_ul'    => true,
            'li_class' => 'nav-item',
            'a_class' => 'nav-link',
        )); ?>
        <li class="nav-item">
            <?php
            if(is_null($login_user)){
                if(get_setting_value('show_login')){
                    echo('<a class="nav-link" href="'.get_permalink('login').'">'._t('Login').'</a>');
                }
            }
            ?>
        </li>
    </ul>
    <form class="form-inline my-2 my-lg-0 search-bar" action="/index.php">
        <div class="input-group">
            <input type="hidden" name="viewpage" value="search" />
            <input type="text" class="form-control rounded-left search" placeholder="<?php _e('Search game') ?>" name="slug" minlength="2" required />
            <div class="input-group-append">
                <button type="submit" class="btn btn-secondary" type="button">
                    <i class="fa fa-search"></i>
                </button>
            </div>
        </div>
    </form>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/sidebar.php
New file
@@ -0,0 +1,3 @@
<div class="sidebar">
    <?php widget_aside('sidebar-1') ?>
</div>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/post-list.php
New file
@@ -0,0 +1,65 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="post-container">
        <div class="content-wrapper">
            <h3 class="page-title"><?php _e('LATEST POSTS') ?></h3>
            <section class="blog-list">
            <?php
                $cur_page = 1;
                if(isset($url_params[1])){
                    $_GET['page'] = $url_params[1];
                    if(!is_numeric($_GET['page'])){
                        $_GET['page'] = 1;
                    }
                }
                if(isset($_GET['page'])){
                    $cur_page = htmlspecialchars($_GET['page']);
                    if(!is_numeric($cur_page)){
                        $cur_page = 1;
                    }
                }
                $items_per_page = get_setting_value('post_results_per_page');
                $data = Post::getList($items_per_page, 'created_date DESC', $items_per_page*($cur_page-1));
                $total_posts = $data['totalRows'];
                $total_page = $data['totalPages'];
                $posts = $data['results'];
                foreach($posts as $post){
                    ?>
                        <div class="post-item">
                            <div class="post-media">
                                <div class="post-thumb">
                                    <img src="<?php echo ($post->thumbnail_url) ? $post->thumbnail_url : DOMAIN . 'images/post-no-thumb.png'  ?>" alt="<?php echo $post->title ?>">
                                </div>
                                <div class="post-body">
                                    <h3 class="post-title">
                                        <a href="<?php echo get_permalink('post', $post->slug) ?>"><?php echo $post->title ?></a>
                                    </h3>
                                    <div class="post-meta">
                                        <span class="date">Published on <?php echo gmdate("j M Y", $post->created_date) ?></span>
                                    </div>
                                    <div class="post-intro">
                                        <?php echo mb_strimwidth(strip_tags($post->content), 0, 250, "...") ?>
                                    </div>
                                    <a class="more-link" href="<?php echo get_permalink('post', $post->slug) ?>">Read more â†’</a>
                                </div>
                            </div>
                        </div>
                    <?php
                }
            ?>
            </section>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($_GET['page'])){
                        $cur_page = esc_string($_GET['page']);
                    }
                    render_pagination($total_page, $cur_page, 8, 'post', '');
                    ?>
                </nav>
            </div>
        </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/post.php
New file
@@ -0,0 +1,20 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
    <div class="row">
        <div class="col-md-9">
                <h1 class="singlepage-title"><?php echo htmlspecialchars( $post->title )?></h1>
                <div class="post-meta">
                    Published on <?php echo gmdate("j M Y", $post->created_date) ?>
                </div>
                <div class="page-content">
                    <?php echo nl2br($post->content) ?>
                </div>
        </div>
        <div class="col-md-3">
            <?php include  TEMPLATE_PATH . "/parts/sidebar.php" ?>
        </div>
    </div>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/search.php
New file
@@ -0,0 +1,30 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
            <h3 class="item-title"><?php _e('%a Games', htmlspecialchars($archive_title)) ?></h3>
            <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
            <div class="game-container">
                <div class="row">
                    <?php foreach ( $games as $game ) { ?>
                    <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
                    <?php } ?>
                </div>
            </div>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($url_params[2])){
                        $cur_page = (int)$url_params[2];
                    }
                    render_pagination($total_page, $cur_page, 8, 'search', $_GET['slug']);
                    ?>
                </nav>
            </div>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/bootstrap.min.css
New file
@@ -0,0 +1,6 @@
/*!
 * Bootstrap v4.5.2 (https://getbootstrap.com/)
 * Copyright 2011-2020 The Bootstrap Authors
 * Copyright 2011-2020 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.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-lg-auto,.col-md,.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-md-auto,.col-sm,.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-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{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}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.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-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{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 #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/custom.css
New file
@@ -0,0 +1,9 @@
/*
Custom style
You can override the default class or style here
This file will not be overwritten by the updater
*/
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/jquery-comments.css
New file
@@ -0,0 +1,794 @@
/*jquery-comments.js 1.5.0
(c) 2017 Joona Tykkyläinen, Viima Solutions Oy
jquery-comments may be freely distributed under the MIT license.
For all details and documentation:
http://viima.github.io/jquery-comments/*/
.jquery-comments * {
    box-sizing: border-box;
    text-shadow: none;
}
.jquery-comments a[href]:not(.tag) {
    color: #2793e6;
    text-decoration: none;
}
.jquery-comments a[href]:not(.tag):hover {
    text-decoration: underline;
}
.jquery-comments .textarea, .jquery-comments input, .jquery-comments button {
    -webkit-appearance: none;
    -moz-appearance: none;
    -ms-appearance: none;
    appearance: none;
    vertical-align: top;
    border-radius: 0;
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    background: rgba(0, 0, 0, 0);
}
.jquery-comments button {
    vertical-align: inherit;
}
.jquery-comments .tag {
    color: inherit;
    font-size: 0.9em;
    line-height: 1.2em;
    background: #ddd;
    border: 1px solid #ccc;
    padding: 0.05em 0.4em;
    cursor: pointer;
    font-weight: normal;
    border-radius: 1em;
    transition: all 0.2s linear;
    white-space: nowrap;
    display: inline-block;
    text-decoration: none;
}
.jquery-comments .attachments .tag {
    white-space: normal;
    word-break: break-all;
    padding: 0.05em 0.5em;
    line-height: 1.3em;
    margin-top: 0.3em;
    margin-right: 0.5em;
}
.jquery-comments .attachments .tag > i:first-child {
    margin-right: 0.4em;
}
.jquery-comments .attachments .tag .delete {
    display: inline;
    font-size: 14px;
    color: #888;
    position: relative;
    padding: 2px;
    padding-right: 4px;
    right: -4px;
}
.jquery-comments .attachments .tag:hover .delete {
    color: black;
}
.jquery-comments .tag:hover {
    text-decoration: none;
}
.jquery-comments .tag:not(.deletable):hover {
    background-color: #d8edf8;
    border-color: #2793e6;
}
.jquery-comments [contentEditable=true]:empty:not(:focus):before{
    content:attr(data-placeholder);
    color: #CCC;
    position: inherit;
    pointer-events: none;
}
.jquery-comments i.fa {
    width: 1em;
    height: 1em;
    background-size: cover;
    text-align: center;
}
.jquery-comments i.fa.image:before {
    content: "";
}
.jquery-comments .spinner {
    font-size: 2em;
    text-align: center;
    padding: 0.5em;
    margin: 0;
    color: #666;
}
.jquery-comments .spinner.inline {
    font-size: inherit;
    padding: 0;
    color: #fff;
}
.jquery-comments ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
.jquery-comments .profile-picture {
    float: left;
    width: 3.6rem;
    height: 3.6rem;
    max-width: 50px;
    max-height: 50px;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center center;
}
.jquery-comments i.profile-picture {
    font-size: 3.4em;
    text-align: center;
}
.jquery-comments .profile-picture.round {
    border-radius: 50%;
}
.jquery-comments .commenting-field.main{
    margin-bottom: 0.75em;
}
.jquery-comments .commenting-field.main .profile-picture {
    margin-bottom: 1rem;
}
.jquery-comments .textarea-wrapper {
    overflow: hidden;
    padding-left: 15px;
    position: relative;
}
.jquery-comments .textarea-wrapper:before {
    content: " ";
    position: absolute;
    border: 5px solid #D5D5D5;
    left: 5px;
    top: 0;
    width: 10px;
    height: 10px;
    box-sizing: border-box;
    border-bottom-color: rgba(0, 0, 0, 0);
    border-left-color: rgba(0, 0, 0, 0);
}
.jquery-comments .textarea-wrapper:after {
    content: " ";
    position: absolute;
    border: 7px solid #FFF;
    left: 7px;
    top: 1px;
    width: 10px;
    height: 10px;
    box-sizing: border-box;
    border-bottom-color: rgba(0, 0, 0, 0);
    border-left-color: rgba(0, 0, 0, 0);
}
.jquery-comments .textarea-wrapper .inline-button {
    cursor: pointer;
    right: 0;
    z-index: 10;
    position: absolute;
    border: .5em solid rgba(0,0,0,0);
    box-sizing: content-box;
    font-size: inherit;
    overflow: hidden;
    opacity: 0.5;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
.jquery-comments .textarea-wrapper .inline-button:hover {
    opacity: 1;
}
.jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .inline-button {
    margin-right: 15px;    /* Because of scrollbar */
}
.jquery-comments .textarea-wrapper .inline-button i {
    font-size: 1.2em;
}
.jquery-comments .textarea-wrapper .upload input {
    cursor: pointer;
    position: absolute;
    top: 0;
    right: 0;
    min-width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
}
.jquery-comments .textarea-wrapper .close {
    width: 1em;
    height: 1em;
}
.jquery-comments .textarea-wrapper .textarea {
    margin: 0;
    outline: 0;
    overflow-y: auto;
    overflow-x: hidden;
    cursor: text;
    border: 1px solid #CCC;;
    background: #FFF;
    font-size: 1em;
    line-height: 1.45em;
    padding: .25em .8em;
    padding-right: 2em;
}
.jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .textarea {
    padding-right: calc(2em + 15px);    /* Because of scrollbar */
}
.jquery-comments .textarea-wrapper .control-row > .attachments {
    padding-top: .3em;
}
.jquery-comments .textarea-wrapper .control-row > span {
    float: right;
    line-height: 1.6em;
    margin-top: .4em;
    border: 1px solid rgba(0, 0, 0, 0);
    color: #FFF;
    padding: 0 1em;
    font-size: 1em;
    opacity: .5;
}
.jquery-comments .textarea-wrapper .control-row > span:not(:first-child) {
    margin-right: .5em;
}
.jquery-comments .textarea-wrapper .control-row > span.enabled {
    opacity: 1;
    cursor: pointer;
}
.jquery-comments .textarea-wrapper .control-row > span:not(.enabled) {
    pointer-events: none;
}
.jquery-comments .textarea-wrapper .control-row > span.enabled:hover {
    opacity: .9;
}
.jquery-comments .textarea-wrapper .control-row > span.upload {
    position: relative;
    overflow: hidden;
    background-color: #999;
}
.jquery-comments ul.navigation {
    clear: both;
    color: #999;
    border-bottom: 2px solid #CCC;
    line-height: 2em;
    font-size: 1em;
    margin-bottom: 0.5em;
}
.jquery-comments ul.navigation .navigation-wrapper {
    position: relative;
}
.jquery-comments ul.navigation li {
    display: inline-block;
    position: relative;
    padding: 0 1em;
    cursor: pointer;
    text-align: center;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
.jquery-comments ul.navigation li.active,
.jquery-comments ul.navigation li:hover {
    color: #000;
}
.jquery-comments ul.navigation li.active:after {
    content: " ";
    display: block;
    right: 0;
    height: 2px;
    background: #000;
    position: absolute;
    bottom: -2px;
    left: 0;
}
.jquery-comments ul.navigation li[data-sort-key="attachments"] {
    float: right;
}
.jquery-comments ul.navigation li[data-sort-key="attachments"] i {
    margin-right: 0.25em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive {
    display: none;
}
@media screen and (max-width: 600px) {
    .jquery-comments ul.navigation .navigation-wrapper {
        display: none;
    }
    .jquery-comments ul.navigation .navigation-wrapper.responsive {
        display: inline;
    }
}
.jquery-comments.responsive ul.navigation .navigation-wrapper {
    display: none;
}
.jquery-comments.responsive ul.navigation .navigation-wrapper.responsive {
    display: inline;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title {
    padding: 0 1.5em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title header:after {
    display: inline-block;
    content: "";
    border-left: 0.3em solid rgba(0, 0, 0, 0) !important;
    border-right: 0.3em solid rgba(0, 0, 0, 0) !important;
    border-top: 0.4em solid #CCC;
    margin-left: 0.5em;
    position: relative;
    top: -0.1em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title.active header:after,
.jquery-comments ul.navigation .navigation-wrapper.responsive li.title:hover header:after {
    border-top-color: #000;
}
.jquery-comments ul.dropdown {
    display: none;
    position: absolute;
    background: #FFF;
    z-index: 99;
    line-height: 1.2em;
    border: 1px solid #CCC;
    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
    -ms-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
}
.jquery-comments ul.dropdown.autocomplete {
    margin-top: 0.25em;
}
.jquery-comments ul.dropdown li {
    display: block;
    white-space: nowrap;
    clear: both;
    padding: 0.6em;
    font-weight: normal;
    cursor: pointer;
}
.jquery-comments ul.dropdown li.active {
    background: #EEE;
}
.jquery-comments ul.dropdown li a {
    display: block;
    text-decoration: none;
    color: inherit;
}
.jquery-comments ul.dropdown li .profile-picture {
    float: left;
    width: 2.4em;
    height: 2.4em;
    margin-right: 0.5em;
}
.jquery-comments ul.dropdown li .details {
    display: inline-block;
}
.jquery-comments ul.dropdown li .name {
    font-weight: bold;
}
.jquery-comments ul.dropdown li .details.no-email {
    line-height: 2.4em;
}
.jquery-comments ul.dropdown li .email {
    color: #999;
    font-size: 0.95em;
    margin-top: 0.1em;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown {
    left: 0;
    width: 100%;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li {
    color: #000;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li.active {
    color: #FFF;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:hover:not(.active) {
    background: #F5F5F5;
}
.jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:after {
    display: none;
}
.jquery-comments .no-data {
    display: none;
    margin: 1em;
    text-align: center;
    font-size: 1.5em;
    color: #CCC;
}
.jquery-comments ul.main:empty ~ .no-comments {
    display: inherit;
}
.jquery-comments ul#attachment-list:empty ~ .no-attachments {
    display: inherit;
}
.jquery-comments ul.main li.comment {
    clear: both;
}
.jquery-comments ul.main li.comment .comment-wrapper,
.jquery-comments ul.main li.toggle-all,
.jquery-comments ul.main li.comment .commenting-field {
    padding: .5em;
}
.jquery-comments ul.main li.comment .comment-wrapper {
    overflow: hidden;
}
.jquery-comments ul.main > li.comment:first-child > .comment-wrapper {
    border-top: none;
}
.jquery-comments ul.main li.comment .comment-wrapper > .profile-picture {
    margin-right: 1rem;
}
.jquery-comments ul.main li.comment time {
    float: right;
    line-height: 1.4em;
    margin-left: .5em;
    font-size: 0.8em;
    color: #666;
}
.jquery-comments ul.main li.comment .comment-header {
    line-height: 1.4em;
    word-break: break-word;
}
.jquery-comments ul.main li.comment .comment-header > * {
    margin-right: .5rem;
}
.jquery-comments ul.main li.comment .comment-header .name {
    font-weight: bold;
}
.jquery-comments ul.main li.comment .comment-header .reply-to {
    color: #999;
    font-size: .8em;
    font-weight: normal;
    vertical-align: top;
}
.jquery-comments ul.main li.comment .comment-header .reply-to i {
    margin-right: .25rem;
}
.jquery-comments ul.main li.comment .comment-header .new {
    background: #2793e6;
    font-size: 0.8em;
    padding: 0.2em 0.6em;
    color: #fff;
    font-weight: normal;
    border-radius: 1em;
    vertical-align: bottom;
    word-break: normal;
}
.jquery-comments ul.main li.comment .wrapper{
    line-height: 1.4em;
    overflow: hidden;
}
.jquery-comments.mobile ul.main li.comment .child-comments li.comment .wrapper{
    overflow: visible;
}
/* Content */
.jquery-comments ul.main li.comment .wrapper .content {
    white-space: pre-line;
    word-break: break-word;
}
.jquery-comments ul.main li.comment .wrapper .content time.edited {
    float: inherit;
    margin: 0;
    font-size: .9em;
    font-style: italic;
    color: #999;
}
.jquery-comments ul.main li.comment .wrapper .content time.edited:before {
    content: " - ";
}
/* Attachments */
.jquery-comments ul.main li.comment .wrapper .attachments .tags:not(:empty) {
    margin-bottom: 0.5em;
}
.jquery-comments ul.main li.comment .wrapper .attachments .previews .preview {
    display: inline-block;
    margin-top: .25em;
    margin-right: .25em;
}
.jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > * {
    max-width: 100%;
    max-height: 200px;
    width: auto;
    height: auto;
}
.jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > *:focus {
    outline: none;
}
/* Actions */
.jquery-comments.mobile ul.main li.comment .actions {
    font-size: 1em;
}
.jquery-comments ul.main li.comment .actions > * {
    color: #999;
    font-weight: bold;
}
.jquery-comments ul.main li.comment .actions .action {
    display: inline-block;
    cursor: pointer;
    margin-left: 1em;
    margin-right: 1em;
    line-height: 1.5em;
    font-size: 0.9em;
}
.jquery-comments ul.main li.comment .actions .action:first-child {
    margin-left: 0;
}
.jquery-comments ul.main li.comment .actions .action.upvote {
    cursor: inherit;
}
.jquery-comments ul.main li.comment .actions .action.upvote .upvote-count {
    margin-right: .5em;
}
.jquery-comments ul.main li.comment .actions .action.upvote .upvote-count:empty {
    display: none;
}
.jquery-comments ul.main li.comment .actions .action.upvote i {
    cursor: pointer;
}
.jquery-comments ul.main li.comment .actions .action:not(.upvote):hover,
.jquery-comments ul.main li.comment .actions .action.upvote:not(.highlight-font) i:hover {
    color: #666;
}
.jquery-comments ul.main li.comment .actions .action.delete {
    opacity: 0.5;
    pointer-events: none;
}
.jquery-comments ul.main li.comment .actions .action.delete.enabled {
    opacity: 1;
    pointer-events: auto;
}
.jquery-comments ul#attachment-list li.comment .actions .action:not(.delete) {
    display: none;
}
.jquery-comments ul#attachment-list li.comment .actions .action.delete {
    margin: 0;
}
.jquery-comments ul#attachment-list li.comment .actions .separator {
    display: none;
}
/* Child comments */
.jquery-comments ul.main li.comment .child-comments > *:before { /* Margin for second level content */
    content: "";
    height: 1px;
    float: left;
    width: calc(3.6em + .5em);    /* Profile picture width plus margin */
    max-width: calc(50px + .5em);    /* Profile picture max width plus margin */
}
.jquery-comments ul.main li.comment .child-comments .profile-picture {
    width: 2.4rem;
    height: 2.4rem;
}
.jquery-comments ul.main li.comment .child-comments i.profile-picture {
    font-size: 2.4em;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all {
    padding-top: 0;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child {
    vertical-align: middle;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child:hover {
    cursor: pointer;
    text-decoration: underline;
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all .caret {
    display: inline-block;
    vertical-align: middle;
    width: 0;
    height: 0;
    margin-left: .5em;
    border: .3em solid;
    margin-top: .35em;
    border-left-color: rgba(0, 0, 0, 0);
    border-bottom-color: rgba(0, 0, 0, 0);
    border-right-color: rgba(0, 0, 0, 0);
}
.jquery-comments ul.main li.comment .child-comments li.toggle-all .caret.up {
    border-top-color: rgba(0, 0, 0, 0);
    border-bottom-color: inherit;
    margin-top: -.2em;
}
.jquery-comments ul.main li.comment .child-comments .togglable-reply {
    display: none;
}
.jquery-comments ul.main li.comment .child-comments .visible {
    display: inherit;
}
.jquery-comments ul.main li.comment.hidden {
    display: none;
}
/* Editing comment */
.jquery-comments ul.main li.comment.edit > .comment-wrapper > *:not(.commenting-field) {
    display: none;
}
.jquery-comments ul.main li.comment.edit > .comment-wrapper .commenting-field {
    padding-left: 0 !important;
    padding-right: 0 !important;
}
/* Drag & drop attachments */
.jquery-comments.drag-ongoing {
    overflow-y: hidden !important;
}
.jquery-comments .droppable-overlay {
    display: table;
    position: fixed;
    z-index: 99;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.3)
}
.jquery-comments .droppable-overlay .droppable-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}
.jquery-comments .droppable-overlay .droppable-container .droppable {
    background: #FFF;
    color: #CCC;
    padding: 6em;
}
.jquery-comments .droppable-overlay .droppable-container .droppable.drag-over {
    color: #999;
}
.jquery-comments .droppable-overlay .droppable-container .droppable i {
    margin-bottom: 5px;
}
/* Read-only mode */
.jquery-comments.read-only .commenting-field {
    display: none;
}
.jquery-comments.read-only .actions {
    display: none;
}
.comments-container {
    padding: 10px;
    border: 1px solid #dcdfe3;
    margin-top: 50px;
}
.comments-container #comments {
    margin: 15px 0;
}
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/style.css
New file
@@ -0,0 +1,773 @@
body {
  margin: 0;
  font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  color: #2c3e50;
  text-align: left;
}
*,
 ::before,
 ::after {
  box-sizing: border-box;
}
a {
  color: #1abc9c;
  text-decoration: none;
  background-color: transparent;
}
a:hover {
  color: #117964;
  text-decoration: underline;
}
#mainNav {
  padding: 0;
  transition: padding-top 0.3s, padding-bottom 0.3s;
  font-weight: 700;
  background-color: #2c3e50;
}
.nav-link:hover {
  background-color: #4e6984;
}
.text-uppercase {
  text-transform: uppercase !important;
}
.fixed-top {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  z-index: 1030;
}
.navbar-expand-lg {
  flex-flow: row nowrap;
  justify-content: flex-start;
}
.navbar {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  padding: 0.5rem 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
#mainNav .navbar-brand {
  font-size: 1.75em;
  transition: font-size 0.3s;
}
#mainNav .navbar-brand {
  color: #fff;
}
.navbar-brand {
  display: inline-block;
  padding-top: 0.3125rem;
  padding-bottom: 0.3125rem;
  margin-right: 1rem;
  font-size: 1.25rem;
  line-height: inherit;
  white-space: nowrap;
}
#mainNav .navbar-nav li.nav-item a.nav-link {
  color: #fff;
}
.text-white {
  color: #fff !important;
}
.bg-primary {
  background-color: #1abc9c !important;
}
article,
aside,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section {
  display: block;
}
.copyright {
  background-color: #1a252f;
}
.text-center {
  text-align: center !important;
}
.footer {
  padding-top: 3rem;
  padding-bottom: 3rem;
  background-color: #2c3e50;
  color: #fff;
}
img.small-thumb {
  width: 100%;
}
.list-content {
  padding: 0px;
}
.list-game {
  margin-bottom: 20px;
  box-shadow: 0px 1px 6px 0px rgba(50, 50, 50, 0.25);
  border-radius: 5px;
  padding: 5px;
}
.list-title {
  overflow: hidden;
  margin: .35714em;
  color: #434343;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: center;
}
.game-container {
  margin: 30px 0;
}
.list-category {
  position: absolute;
  bottom: 5px;
}
.single-title {
  margin-top: 20px;
  padding-bottom: 10px;
  font-weight: bold;
}
h1.single-title {
    font-size: 1.75rem;
}
.single-info-container {
  padding-bottom: 5px;
  border-bottom: 1px solid #ccc;
  margin-bottom: 20px;
}
.single-icon {
  background-color: #eee;
  margin-right: 10px;
  padding: 8px 16px;
  border-radius: 15px;
  display: inline-block;
  margin-bottom: 10px;
}
.social-share {
  position: relative;
  top: -2px;
  margin-right: 10px;
  display: inline-block;
  margin-bottom: 10px;
}
.social-icon {
  width: 38px;
  height: 38px;
}
.single-icon a {
  color: #2c3e50;
}
.sidebar {
  display: block;
}
.sidebar .list-tile {
  padding-left: 3px;
  padding-right: 3px;
}
.sidebar .list-game {
  margin-bottom: 8px;
}
.page-title {
  font-weight: bold;
  margin-top: 20px;
}
h1.singlepage-title {
    font-size: 1.75rem;
}
.singlepage-title {
  padding-bottom: 10px;
  font-weight: bold;
}
.page-content,
.game-content {
  margin-bottom: 30px;
}
.site-logo {
  padding: 5px;
}
.nav-categories {
  box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
  padding: 5px;
  white-space: nowrap;
}
h3.item-title {
  font-weight: bold;
  padding-bottom: 10px;
  font-size: 1.3rem;
  border-bottom: 1px solid #ccc;
  margin-bottom: 20px;
  margin-top: 20px;
}
.item-title i,
.single-icon i,
h4 i {
  margin-right: 9px;
}
.item-grid {
  padding-right: 10px;
  padding-left: 10px;
}
ul.list-categories {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
.list-categories li {
  float: left;
  display: block;
  text-align: center;
  padding: 8px 16px;
  text-decoration: none;
  border-radius: 15px;
  border: 1px solid #ccc;
  margin: 8px;
  color: #2c3e50;
}
.list-categories li:hover {
  background-color: #899fb5;
  color: #fff;
  border: 1px solid #899fb5;
}
nav.greedy {
  position: relative;
  display: flex;
  align-items: center;
}
nav.greedy button {
  padding: 6px 16px;
  text-decoration: none;
  border-radius: 15px;
  border: 1px solid #ccc;
  margin: 0;
  color: #2c3e50;
}
nav.greedy button.hidden {
  transition: none;
  border-right: 0.5rem solid #b6b6b6;
  width: 0;
  padding: 0;
  overflow: hidden;
  display: none;
}
nav.greedy button::after {
  content: attr(count);
  display: inline-flex;
  width: 30px;
  height: 30px;
  align-items: center;
  justify-content: center;
  background: #4cb9fb;
  color: #f2f2f2;
  border-radius: 50%;
  font-size: 14px;
  line-height: 14px;
  margin-left: 1rem;
  margin-right: calc(-1rem + -8px);
}
ul.links {
  display: flex;
  flex: 1;
  overflow: hidden;
}
ul.links li {
  flex: none;
}
ul.hidden-links {
  position: absolute;
  background: #fff;
  right: 0;
  top: 100%;
  z-index: 1;
  text-align: left;
  list-style: none;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid rgba(0, 0, 0, .15);
  border-radius: .25rem;
  padding-left: 0;
  box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
}
ul.hidden-links li {
  padding-right: 2rem;
}
ul.hidden-links a {
  color: #2c3e50;
}
ul.hidden-links.hidden {
  display: none;
}
ul.hidden-links li {
  padding: 1rem;
  min-width: 220px;
}
ul.hidden-links li:hover {
  background-color: #eee;
}
.cat-list {
  margin-top: 20px;
}
.cat-link {
  padding: 8px 16px;
  background-color: #eee;
  margin-right: 10px;
  color: #2c3e50;
  border-radius: 15px;
}
h4.widget-title {
  font-weight: bold;
  padding-bottom: 10px;
  font-size: 26px;
  border-bottom: 1px solid #ccc;
  margin-bottom: 20px;
  font-size: 1.3rem;
}
.sidebar .row {
  margin-right: 0;
  margin-left: 0;
}
.sidebar .widget {
  margin-bottom: 20px;
}
.bottom-container {
  margin: 30px 0;
}
.banner-ads {
  text-align: center;
  margin: 10px 0;
}
img {
  max-width: 100%;
}
.content-wrapper {
  margin-top: 30px;
}
.pagination-wrapper {
  margin-bottom: 30px;
}
.game-iframe-container {
  position: relative;
  overflow: hidden;
  height: 600px;
  display: block;
}
.game-iframe {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  width: 100%;
  height: 100%;
}
.nav-item {
  margin: 0 5px;
}
.search-bar {
  margin-left: 10px;
}
@media (max-width: 992px) {
  #navb {
    margin: 15px 0;
  }
  .nav-item {
    margin: 0 10px;
  }
  a.nav-link {
    padding-left: 10px!important;
  }
}
.stats-vote {
  text-align: right;
  margin-top: 20px;
}
.stats-vote i {
  font-size: 30px;
  padding: 6px;
}
.stats-vote i:hover {
  color: #1abc9c;
  cursor: pointer;
}
.header-left {
  display: inline-block;
}
.header-right {
  display: inline-block;
  float: right;
  margin-left: 30px;
}
.vote-status {
  font-size: 18px;
  font-weight: bold;
}
/* Post list */
.post-item {
  margin-bottom: 3rem !important;
}
.post-media {
  display: flex;
  align-items: flex-start;
}
.blog-list .post-thumb {
  width: 120px;
  height: 120px;
}
.post-thumb {
  display: flex;
  margin-right: 1rem;
}
.post-thumb img {
  object-fit: cover;
  object-position: center;
  width: 100%;
  height: 100%;
}
.post-title {
  margin-bottom: .25rem;
  font-weight: bold;
  font-size: 1.5rem;
}
.post-title a {
  color: #2c3e50;
}
.post-meta .date {
  color: #8f8f8f;
  font-size: 0.8125rem;
}
.post-meta {
  color: #8f8f8f;
}
.blog-list {
  margin-top: 30px;
}
@media (max-width: 576px) {
  .blog-list .post-thumb {
    display: none;
  }
}
/* End post */
.dropdown-menu {
    position: absolute;
    background: #fff;
        background-clip: border-box;
    right: 0;
    top: 100%;
    z-index: 2;
    text-align: left;
    list-style: none;
    font-weight: normal;
    background-clip: padding-box;
    border: 1px solid rgba(0, 0, 0, .15);
    border-radius: .25rem;
    padding-left: 0;
    box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
    margin-top: 10px;
}
.dropdown-icon {
  margin-left: 10px;
}
.nav-item {
  position: relative;
}
.nav-item-child {
    padding: 0.6rem 1rem;
    color: #2c3e50;
}
.nav-link-child {
    color: #2c3e50;
}
.nav-item-child:hover {
    background-color: #cddbe8;
}
.category-description {
  background-color: #f4f4f4;
  padding: 10px 15px;
}
.game-tag-list {
  display: flex;
  flex-wrap: wrap;
  margin-top: 8px;
}
.tag-item {
  padding: 4px 14px;
  background: #eee;
  color: #2c3e50;
  margin-right: 8px;
  margin-top: 8px;
  border-radius: 8px;
}
.load-more-games-wrapper {
  text-align: center;
  margin-top: 20px;
  margin-bottom: 40px;
}
/* Comments */
.comment-user-avatar {
  position: absolute;
  width: 50px;
  height: 50px;
}
.comment-user-avatar img {
  border-radius: 50%;
}
.comment-avatar {
  float: left;
  width: 50px;
  height: 50px;
}
.comment-avatar img {
  border-radius: 50%;
}
.comment-input {
  margin-left: 65px;
}
.comment-btn-post {
  text-align: right;
}
.comment-p {
  margin-top: 23px;
}
.comment-p .comment-date {
  float: right;
  color: #666;
  font-size: 0.8em;
}
.comment-username {
  font-weight: bold;
}
.comment-details {
  margin-left: 65px;
}
.comment-text {
  white-space: pre-line;
}
.color-red {
  color: #bb4d4d;
}
i.disabled {
  opacity: 0.5;
  pointer-events: none;
}
/* NEW COMMENT SYSTEM */
#tpl-comment-section {
  margin-top: 30px;
  margin-bottom: 20px;
}
#comment-form {
  display: flex;
  margin-bottom: 30px;
  border-bottom: 1px solid #E2E2E2;
}
.comment-profile-avatar {
  margin-right: 20px;
}
.comment-profile-avatar img {
  border-radius: 50%;
  float: left;
  width: 3.6rem;
  height: 3.6rem;
  max-width: 50px;
  max-height: 50px;
}
.comment-form-wrapper {
  background: #fff;
  margin-bottom: 30px;
  box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
  border: 1px solid #E2E2E2;
  border-radius: 12px;
  padding: 15px;
  width: 100%;
}
.comment-form-wrapper textarea {
  padding: 0;
  border: 0;
}
.post-comment-btn-wrapper {
  float: right;
  margin-top: 15px;
}
textarea#comment-input {
  height: 100px;
}
.user-comment-wrapper {
  display: flex;
}
.tpl-user-comment {
  border-bottom: 1px solid #E2E2E2;
  margin-bottom: 30px;
}
.tpl-comment-children .tpl-user-comment:last-child {
  border-bottom: none;
}
img.tpl-user-comment-avatar {
  border-radius: 50%;
  float: left;
  width: 3.6rem;
  height: 3.6rem;
  max-width: 50px;
  max-height: 50px;
  margin-right: 20px;
}
.tpl-comment-children img.tpl-user-comment-avatar {
  max-width: 40px;
  max-height: 40px;
}
.tpl-comment-author {
  font-weight: bold;
}
.tpl-user-comment .comment-content {
  margin-bottom: 20px;
  width: 100%;
}
.tpl-comment-timestamp {
  margin-top: 3px;
  font-size: 15px;
  color: #797979;
}
.tpl-comment-text {
  margin-top: 13px;
  white-space: unset;
}
.comment-actions {
  margin-top: 15px;
}
.comment-action-right {
  float: right;
}
.comment-action-left {
  float: left;
}
.tpl-comment-children {
  display: block;
  margin-left: 70px;
}
.tpl-reply-form {
  display: flex;
}
.comment-reply-wrapper {
  margin-left: 70px;
  background: #fff;
  margin-bottom: 30px;
  box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
  border: 1px solid #E2E2E2;
  border-radius: 12px;
  padding: 15px;
  width: 100%;
}
.comment-reply-wrapper textarea {
  padding: 0;
  border: 0;
}
.reply-action-buttons {
  float: right;
  margin-top: 15px;
}
.tpl-btn-cancel-reply {
  color: #797979;
}
#tpl-btn-load-more-comments {
  color: #797979;
}
.comment-require-login-wrapper {
  display: flex;
  margin-bottom: 40px;
}
.comment-require-login-wrapper .comment-alert {
  padding: 10px;
  background-color: #EDEDED;
  text-align: center;
  width: 100%;
  border-radius: 8px;
}
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/user.css
New file
@@ -0,0 +1,169 @@
.user-avatar img {
    width: 40px;
}
.user-avatar {
    margin-left: 20px;
    border-radius: 50%;
    overflow: hidden;
    cursor: pointer;
}
ul.user-links {
    position: absolute;
    background: #fff;
    right: 0;
    top: 100%;
    z-index: 2;
    text-align: left;
    list-style: none;
    font-weight: normal;
    background-clip: padding-box;
    border: 1px solid rgba(0, 0, 0, .15);
    border-radius: .25rem;
    padding-left: 0;
    box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
}
ul.user-links li {
    padding: 1rem;
    min-width: 220px;
    color: #2c3e50;
}
ul.user-links.hidden {
    display: none;
}
.user-links hr {
    margin: 0;
}
#mainNav .container {
    position: relative;
    padding: 0 10px;
}
.section {
    background-color: #fff;
    border-radius: 10px;
    padding: 15px;
    margin-bottom: 30px;
    box-shadow: 2px 2px 5px 0 rgba(0,0,0,0.05);
}
.section-title {
    font-size: 1.3rem;
}
.page-title {
    margin-top: 5px;
    margin-bottom: 20px;
}
.profile-username {
    font-size: 20px;
    font-weight: bold;
    margin-top: 20px;
}
.user-page {
    background-color: #f6f8fb;
}
.user-page .single-title {
    margin-top: 0;
    margin-bottom: 10px;
    padding-top: 25px;
    font-size: 1.5rem;
}
.user-page .section-title {
    font-weight: bold;
    margin-bottom: 15px;
}
.profile-bio {
    margin-top: 10px;
}
.profile-join {
    color: #d6793a;
    font-style: italic;
}
.progress-bar {
    background-color: #19bae0;
}
.level-badge {
    float: left;
    margin-right: 10px;
}
.profile-game-item {
    max-width: 80px;
    border-radius: 10px;
    overflow: hidden;
    margin-right: 15px;
}
.profile-gamelist-horizontal {
    position: relative;
}
.profile-gamelist-horizontal ul {
    overflow: hidden;
    white-space: nowrap;
    display: block;
    list-style: none;
    padding: 0;
    margin-bottom: 0;
}
.profile-gamelist-horizontal li {
    display: inline-block;
    text-align: center;
}
.profile-comment-item {
    position: relative;
    border: 1px solid #dcdfe3;
    padding: 15px;
    border-radius: 10px;
    margin-top: 20px;
}
.comment-date {
    font-style: italic;
}
.btn-left {
    position: absolute;
    left: 0;
    background-color: #fff;
    border-radius: 50%;
    top: 14px;
    margin: 5px;
    box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
    z-index: 1;
}
.btn-right {
    position: absolute;
    right: 0;
    background-color: #fff;
    border-radius: 50%;
    top: 14px;
    margin: 5px;
    box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
    z-index: 1;
}
.label-xp {
    color: #d6793a;
    font-style: italic;
}
.delete-comment {
    position: absolute;
    right: 10px;
    bottom: 10px;
    cursor: pointer;
}
.input-hidden {
  position: absolute;
  left: -9999px;
}
input[type=radio]:checked + label>img {
  border: 1px solid #fff;
  box-shadow: 0 0 0 3px #14ca14;
}
.avatar-chooser .col-3 {
    padding-right: 5px;
    padding-left: 5px;
}
.avatar-chooser {
    margin-right: 0;
    margin-left: 0;
}
CloudArcade/cloudarcade/cloudarcade/content/themes/default/tag.php
New file
@@ -0,0 +1,30 @@
<?php include  TEMPLATE_PATH . "/includes/header.php" ?>
<div class="container">
    <div class="game-container">
        <?php widget_aside('top-content') ?>
        <div class="content-wrapper">
            <h3 class="item-title"><?php _e('%a Games', esc_string($tag_name)) ?></h3>
            <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
            <div class="game-container">
                <div class="row">
                    <?php foreach ( $games as $game ) { ?>
                    <?php include  TEMPLATE_PATH . "/includes/grid.php" ?>
                    <?php } ?>
                </div>
            </div>
            <div class="pagination-wrapper">
                <nav aria-label="Page navigation example">
                    <?php
                    $cur_page = 1;
                    if(isset($_GET['page'])){
                        $cur_page = esc_string($_GET['page']);
                    }
                    render_pagination($total_page, $cur_page, 8, 'tag', $_GET['slug']);
                    ?>
                </nav>
            </div>
        </div>
        <?php widget_aside('bottom-content') ?>
    </div>
</div>
<?php include  TEMPLATE_PATH . "/includes/footer.php" ?>
CloudArcade/cloudarcade/cloudarcade/content/themes/default/thumbnail.png
CloudArcade/cloudarcade/cloudarcade/content/themes/theme-functions.php
New file
@@ -0,0 +1,889 @@
<?php
/**
 * Do not modify this file or code!
 *
 * File: theme-functions.php
 *
 * This script is used to define a collection of functions that are specifically designed
 * for theme related functionality. This can include things like rendering HTML components,
 * handling pagination, or setting up multilingual support.
 *
 * The functions defined in this file are designed to be used in various parts of the theme
 * templates or plugins, offering a way to abstract common functionality and promote reusability.
 *
 * Please note that this file may be updated frequently during CMS updates.
 * It is recommended NOT to modify this file directly, as your changes may be
 * overwritten during an update.
 */
// Global array to store all the hooks
$hooks = [];
// Global array to store all the filters
$filters = [];
// Global array to store all the shortcodes
$shortcodes = [];
function add_to_hook($hook_name, $callback) {
    // Function to add callbacks to hooks
    // Usage : add_to_hook('head', 'your_function_name') or add_to_hook('head', function() { echo 'test';});
    global $hooks;
    if (!isset($hooks[$hook_name])) {
        $hooks[$hook_name] = [];
    }
    $hooks[$hook_name][] = $callback;
}
function run_hook($hook_name) {
    // Function to execute the hooks
    global $hooks;
    if (isset($hooks[$hook_name])) {
        foreach ($hooks[$hook_name] as $callback) {
            call_user_func($callback);
        }
    }
}
function the_head($position) {
    // Run hooks based on the position parameter
    // Executed inside head tag
    global $base_taxonomy;
    if ($position === 'top') {
        if($base_taxonomy === '404'){
            // Page 404
            // Add noindex meta
            add_to_hook('head_top', function() {
                echo '<meta name="robots" content="noindex">'.PHP_EOL;
            });
        } else {
            if(get_setting_value('lang_code_in_url') && PRETTY_URL){ // Activate multilingual
                add_to_hook('head_top', function() {
                    // Add alternate link tag
                    global $lang_code;
                    $language_ids = [];
                    if(get_setting_value('allow_slug_translation')){
                        // Skip this, prevent potential bug
                        return;
                    }
                    if (isset($_SESSION['language_ids'])) {
                        $language_ids = $_SESSION['language_ids']; // Cached
                    } else {
                        if (file_exists(ABSPATH . 'locales/public/')) {
                            $files = scandir(ABSPATH . 'locales/public/');
                            foreach ($files as $file) {
                                if (pathinfo($file, PATHINFO_EXTENSION) === 'json') {
                                    $file_name_without_extension = pathinfo($file, PATHINFO_FILENAME);
                                    if (strlen($file_name_without_extension) >= 1 && strlen($file_name_without_extension) <= 3) {
                                        $language_ids[] = $file_name_without_extension;
                                    }
                                }
                            }
                            $_SESSION['language_ids'] = $language_ids;
                        } else if (file_exists(ABSPATH . TEMPLATE_PATH . '/locales/')) { // Backward compatibility
                            $files = scandir(ABSPATH . TEMPLATE_PATH . '/locales/');
                            foreach ($files as $file) {
                                if (pathinfo($file, PATHINFO_EXTENSION) === 'json') {
                                    $file_name_without_extension = pathinfo($file, PATHINFO_FILENAME);
                                    if (strlen($file_name_without_extension) >= 1 && strlen($file_name_without_extension) <= 3) {
                                        $language_ids[] = $file_name_without_extension;
                                    }
                                }
                            }
                            $_SESSION['language_ids'] = $language_ids;
                        }
                    }
                    if(get_setting_value('disable_en_language') && count($language_ids) > 0){
                        //
                    } else {
                        if (!in_array('en', $language_ids)) {
                            $language_ids[] = 'en';
                        }
                    }
                    if (!isset($_SESSION['language_ids'])) {
                        $_SESSION['language_ids'] = $language_ids; // Cached
                    }
                    foreach ($language_ids as $lang_id) {
                        $alternate_url = DOMAIN . $lang_id . substr($_SERVER['REQUEST_URI'], strlen($lang_code)+1);
                        echo '<link rel="alternate" hreflang="'.$lang_id.'" href="'.$alternate_url.'">'.PHP_EOL;
                    }
                });
            }
        }
        run_hook('head_top');
    } elseif ($position === 'bottom') {
        run_hook('head_bottom');
    }
}
function add_filter($tag, $function_to_add) {
    global $filters;
    /*
    Sample usage:
    .
    add_filter('filter_meta_description', function($desc) {
        return "Modified: " . $desc;
    });
    */
    if (!isset($filters[$tag])) {
        $filters[$tag] = [];
    }
    $filters[$tag][] = $function_to_add;
}
add_filter('meta_description', function($data) {
    global $base_taxonomy;
    if($base_taxonomy === 'game'){ // Is single game page
        global $game;
        if($game){
            $value = $game->getExtraField('meta_description');
            if($value){ // Have meta_description value
                return $value;
            }
        }
    } else if($base_taxonomy === 'post'){
        global $post;
        if($post){
            $value = $post->getExtraField('meta_description');
            if($value){ // Have meta_description value
                return $value;
            }
        }
    }
    return $data;
});
function apply_filters($tag, $value) {
    global $filters;
    /*
    Sample usage:
    .
    $meta_description = apply_filters('filter_meta_description', $meta_description);
    */
    if (!isset($filters[$tag])) {
        return $value;
    }
    foreach ($filters[$tag] as $func) {
        $value = call_user_func($func, $value);
    }
    return $value;
}
function add_shortcode($tag, $callback) {
    // Add a new shortcode
    /*
    Sample usage:
    .
    add_shortcode('bold', function($content) {
        return '<strong>' . $content . '</strong>';
    });
    .
    add_shortcode('italic', function($content, $atts = []) {
        return '<em>' . $content . '</em>';
    });
    */
    global $shortcodes;
    $shortcodes[$tag] = $callback;
}
function run_shortcode($text) {
    global $shortcodes;
    foreach ($shortcodes as $tag => $callback) {
        if (is_callable($callback)) {
            // Match both self-closing and enclosing shortcodes
            $text = preg_replace_callback(
                "/\[$tag(.*?)(\/)?\](?:(.*?)\[\/$tag\])?/s",
                function($matches) use ($callback) {
                    $params = [];
                    if (preg_match_all('/\s*([\w-]+)="([^"]*)"/', $matches[1], $attr)) {
                        $params = array_combine($attr[1], $attr[2]);
                    }
                    return call_user_func($callback, $matches[3] ?? '', $params);
                },
                $text
            );
        }
    }
    return $text;
}
function render_pagination($total_page, $cur_page = 1, $display_limit = 8, $pageType = 'category', $slug = '', $htmlOptions = []) {
    $defaults = [
        'container' => 'ul',
        'container_class' => 'pagination justify-content-center',
        'item' => 'li',
        'item_class' => 'page-item',
        'link' => 'a',
        'link_class' => 'page-link',
        'disabled_class' => 'disabled'
    ];
    $htmlOptions = array_merge($defaults, $htmlOptions);
    $paginationHTML = "<{$htmlOptions['container']} class=\"{$htmlOptions['container_class']}\">";
    if($total_page) {
        $start = max(0, $cur_page - ceil($display_limit / 2));
        $end = min($start + $display_limit, $total_page);
        if ($start > 0) {
            $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']}\"><{$htmlOptions['link']} class=\"{$htmlOptions['link_class']}\" href=\"". get_permalink($pageType, $slug) ."\">1</{$htmlOptions['link']}></{$htmlOptions['item']}>";
            $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']} {$htmlOptions['disabled_class']}\"><span class=\"{$htmlOptions['link_class']}\">...</span></{$htmlOptions['item']}>";
        }
        for ($i = $start; $i < $end; $i++) {
            $disabled = $cur_page == ($i + 1) ? $htmlOptions['disabled_class'] : '';
            $page_number = $i + 1;
            $page_url = $page_number > 1 ? get_permalink($pageType, $slug, array('page' => $page_number)) : get_permalink($pageType, $slug);
            $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']} {$disabled}\"><{$htmlOptions['link']} class=\"{$htmlOptions['link_class']}\" href=\"{$page_url}\">". ($page_number) ."</{$htmlOptions['link']}></{$htmlOptions['item']}>";
        }
        if ($end < $total_page) {
            $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']} {$htmlOptions['disabled_class']}\"><span class=\"{$htmlOptions['link_class']}\">...</span></{$htmlOptions['item']}>";
            $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']}\"><{$htmlOptions['link']} class=\"{$htmlOptions['link_class']}\" href=\"". get_permalink($pageType, $slug, array('page' => $total_page)) ."\">{$total_page}</{$htmlOptions['link']}></{$htmlOptions['item']}>";
        }
    }
    $paginationHTML .= "</{$htmlOptions['container']}>";
    echo $paginationHTML;
}
function the_html_attrs() {
    /*
    * This function is used to print HTML attributes inside the <html> tag for multilingual support
    * and Right-to-Left (RTL) language handling. It considers the language code (ISO 639-1) for
    * setting the "lang" attribute and also checks if the language is RTL to set the "dir" attribute.
    */
    global $lang_code;
    // List of RTL language codes.
    $rtl_langs = ['ar', 'fa', 'ur', 'he', 'iw', 'yi', 'ku', 'ps', 'sd', 'ug', 'dv'];
    // Check if current language is RTL.
    $dir = in_array($lang_code, $rtl_langs) ? 'rtl' : 'ltr';
    if(get_setting_value('disable_rtl')){
        $dir = 'ltr';
    }
    // Print the lang and dir attributes.
    echo "lang=\"{$lang_code}\" dir=\"{$dir}\"";
}
function the_canonical_link() {
    // Check if the custom override function exists
    if (function_exists('the_custom_canonical_link')) {
        the_custom_canonical_link();
        return;
    }
    $canonical_url = get_canonical_url();
    echo "<link rel=\"canonical\" href=\"{$canonical_url}\" />".PHP_EOL;
}
function get_canonical_url(){
    global $url_params;
    global $base_taxonomy;
    $allowed_taxonomy = ['homepage', 'game', 'category', 'search', 'post', 'page', 'tag'];
    if($base_taxonomy != 'homepage' && $base_taxonomy != 'post'){
        if(!PRETTY_URL || count($url_params) <= 1 || count($url_params) > 2) return;
    }
    if(!in_array($base_taxonomy, $allowed_taxonomy)){
        return;
    }
    $canonical_url;
    if($base_taxonomy == 'homepage'){
        $canonical_url = DOMAIN;
        if(get_setting_value('lang_code_in_url')){
            global $lang_code;
            $canonical_url .= $lang_code;
        }
        if(get_setting_value('trailing_slash') && substr($canonical_url, -1) != '/'){
            $canonical_url .= '/';
        }
    } else if($base_taxonomy == 'post'){
        $canonical_url = get_permalink($url_params[0]);
    } else {
        if(get_setting_value('allow_slug_translation')){
            if($base_taxonomy == 'category' || $base_taxonomy == 'tag'){
                if(_t('slug:'.$url_params[1]) != 'slug:'.$url_params[1]){
                    $url_params[1] = _t('slug:'.$url_params[1]);
                }
            }
        }
        $canonical_url = get_permalink($url_params[0], $url_params[1]);
    }
    return $canonical_url;
}
function fetch_games_by_type($type, $amount=12, $page=0, $count=true){
    // Fetches a list of games based on different criteria: 'new', 'random', 'popular', 'likes', and 'trending'.
    $data = [];
    if ($type == 'trending') {
        $conn = open_connection();
        $date = new \DateTime('now');
        $date->sub(new DateInterval('P7D'));
        $sql = "SELECT * FROM trends WHERE created >= '{$date->format('Y-m-d')}'";
        $st = $conn->prepare($sql);
        $st->execute();
        $row = $st->fetchAll(PDO::FETCH_ASSOC);
        $list = array();
        if(count($row)){
            foreach ($row as $item) {
                if(isset($list[$item['slug']])){
                    $list[$item['slug']] += (int)$item['views'];
                } else {
                    $list[$item['slug']] = (int)$item['views'];
                }
            }
            arsort($list);
            $i = 0;
            foreach ($list as $slug => $views) {
                if($i < $amount){
                    $game = Game::getBySlug($slug);
                    if($game){
                        $data[] = $game;
                    }
                }
                $i++;
            }
        }
        return (array(
            "results" => $data,
            "totalRows" => count($list),
            "totalPages" => 1
        ));
    } else {
        switch($type) {
            case 'new':
                $order_by = 'id DESC';
                break;
            case 'random':
                $order_by = 'RAND()';
                break;
            case 'popular':
                $order_by = 'views DESC';
                break;
            case 'likes':
                $order_by = 'upvote DESC';
                break;
            default:
                throw new InvalidArgumentException('Invalid type provided');
        }
        return Game::getList($amount, $order_by, $page, $count);
    }
}
function fetch_collection($name, $amount = 12){
    // Fetches a game collection based on a specified name.
    $data = Collection::getListByCollection( $name, $amount );
    return $data;
}
function fetch_games_by_category($cat_name, $amount, $page = 0) {
    // Fetches a list of games from a specific category.
    $cat_id = Category::getIdByName($cat_name);
    $data = Category::getListByCategory($cat_id, $amount, $page);
    return $data;
}
function fetch_games_by_tag($tag_name, $amount, $offset = 0, $count = false) {
    // Fetches a list of games from a specific tag.
    $data = Game::getListByTag($tag_name, $amount, 'id DESC', $offset, $count);
    return $data;
}
function fetch_similar_games($game, $amount, $page = 0, $random = true) {
    // This function is used to get the list of similar games based on current $game categories
    // Mostly used for single-game page "Similar Games" section
    // $category_list = $game->getCategoryList(); // Excluding hidden categories
    // $ids = array_map(function($category) {
    //     return $category['id'];
    // }, $category_list);
    // $data = Category::getListByCategories($ids, $amount, $page, $random);
    // return $data;
    return $game->getSimilarGames($amount);
}
function fetch_all_categories($show_hidden_category = false, $show_empty_category = false){
    // Get the list of all categories
    $data = Category::getList();
    $results = $data['results'];
    foreach ($results as $key => $category) {
        if(!$show_hidden_category && $category->priority < 0){
            unset($results[$key]);
            continue;
        }
        if(!$show_empty_category && Category::getCategoryCount($category->id) == 0){
            unset($results[$key]);
            continue;
        }
    }
    return $results;
}
function get_page_title($title_template = 'default'){
    // Check if the custom override function exists
    if (function_exists('get_custom_page_title')) {
        $custom_title = get_custom_page_title();
        if($custom_title != 'default'){
            return htmlspecialchars($custom_title);
        }
    }
    global $base_taxonomy;
    $content_title = null;
    switch($base_taxonomy){
        case 'game':
            global $game;
            $content_title = $game->title;
            break;
        case 'full':
            global $game;
            $content_title = $game->title;
            break;
        case 'splash':
            global $game;
            $content_title = $game->title;
            break;
        case 'category':
            global $category;
            $content_title = _t($category->name);
            break;
        case 'tag':
            global $tag_name;
            $content_title = _t($tag_name);
            break;
        case 'user':
            global $url_params;
            $content_title = $url_params[1];
            break;
        case 'page':
            global $page;
            $content_title = $page->title;
            break;
        case 'post':
            global $post;
            if(isset($post)){
                $content_title = $post->title;
            } else {
                $content_title = _t('Posts');
            }
            break;
        case '404':
            $content_title = '404';
            break;
        case 'search':
            $content_title = _t('Search %a Games', $_GET['slug']);
            break;
        default:
            global $page_title;
            if(isset($page_title)){
                $content_title = $page_title;
            } else {
                $content_title = get_site_info('title');
            }
    }
    if($title_template == 'default'){
        if($base_taxonomy == 'user'){
            return htmlspecialchars($content_title);
        } else {
            return htmlspecialchars($content_title . ' | ' . get_site_info('description'));
        }
    } else {
        $title_template = str_replace('{content_title}', $content_title, $title_template);
        $title_template = str_replace('{site_description}', get_site_info('description'), $title_template);
        $title_template = str_replace('{site_title}', get_site_info('title'), $title_template);
        return htmlspecialchars($title_template);
    }
}
function get_current_user_data(){
    // Get current logged-in visitor data or info
    // return null if visitor is not logged-in user
    if(is_login()){
        global $login_user;
        return $login_user;
    } else {
        return null;
    }
}
function get_theme_header(){
    global $page_title;
    global $meta_description;
    global $login_user;
    if(file_exists(TEMPLATE_PATH . '/header.php')){
        include TEMPLATE_PATH . '/header.php';
    } else if(file_exists(TEMPLATE_PATH . '/includes/header.php')){
        include TEMPLATE_PATH . '/includes/header.php';
    }
}
function get_theme_sidebar(){
    global $page_title;
    global $meta_description;
    global $login_user;
    if(file_exists(TEMPLATE_PATH . '/sidebar.php')){
        include TEMPLATE_PATH . '/sidebar.php';
    } else if(file_exists(TEMPLATE_PATH . '/includes/sidebar.php')){
        include TEMPLATE_PATH . '/includes/sidebar.php';
    } else if(file_exists(TEMPLATE_PATH . '/parts/sidebar.php')){
        include TEMPLATE_PATH . '/parts/sidebar.php';
    }
}
function get_theme_footer(){
    global $page_title;
    global $meta_description;
    global $login_user;
    if(file_exists(TEMPLATE_PATH . '/footer.php')){
        include TEMPLATE_PATH . '/footer.php';
    } else if(file_exists(TEMPLATE_PATH . '/includes/footer.php')){
        include TEMPLATE_PATH . '/includes/footer.php';
    }
}
function can_show_leaderboard(){
    // Check if current $game can show leaderboard or not by checking game source
    // return true if current game is self-upload/hosted
    global $game;
    if(isset($game)){
        if($game->source == 'self'){
            return true;
        }
    }
    return false;
}
function render_game_comments($game_id){
    if(get_setting_value('comments')){
        if (function_exists('custom_render_game_comments')) {
            custom_render_game_comments($game_id);
            return;
        } else {
            ?>
            <div id="tpl-comment-section" data-id="<?php echo esc_int($game_id) ?>">
                <?php if(is_login()){ ?>
                <div id="comment-form">
                    <div class="comment-profile-avatar">
                        <img src="<?php echo get_user_avatar() ?>">
                    </div>
                    <div class="comment-form-wrapper" id="tpl-comment-form">
                        <div class="tpl-alert-tooshort" style="display: none;"><?php _e('Your comment is too short. Please enter at least {{min}} characters.') ?></div>
                        <textarea class="form-control tpl-comment-input" rows="3" placeholder="Enter your comment here..."></textarea>
                        <div class="post-comment-btn-wrapper">
                            <button class="btn btn-primary tpl-post-comment-btn btn-sm"><?php _e('Post comment') ?></button>
                        </div>
                    </div>
                </div>
                <?php } else { ?>
                    <div class="comment-require-login-wrapper">
                        <div class="comment-profile-avatar">
                            <img src="<?php echo DOMAIN . 'images/default_profile.png' ?>">
                        </div>
                        <div class="comment-alert">
                            <?php _e('You must log in to write a comment.') ?>
                        </div>
                    </div>
                <?php } ?>
                <div id="tpl-comment-list">
                </div>
                <!-- Comment template -->
                <div id="tpl-comment-template" style="display:none;">
                    <!-- User comment template -->
                    <div class="tpl-user-comment" data-id="{{comment_id}}">
                        <div class="user-comment-wrapper">
                            <div class="user-comment-avatar">
                                <img class="tpl-user-comment-avatar" src="{{profile_picture_url}}" alt="User Avatar">
                            </div>
                            <div class="comment-content">
                                <div class="tpl-comment-author">{{fullname}}</div>
                                <div class="tpl-comment-timestamp">{{created}}</div>
                                <div class="tpl-comment-text">{{content}}</div>
                                <div class="comment-actions">
                                    <div class="comment-action-left">
                                        <div class="reply-wrapper">
                                            <a href="#" onclick="return false;" class="tpl-btn-show-replies" data-id="{{comment_id}}"><i class="fa fa-comment-o" aria-hidden="true"></i> <?php _e('Show replies') ?></a>
                                            <a href="#" onclick="return false;" class="tpl-btn-hide-replies" data-id="{{comment_id}}"><i class="fa fa-comment-o" aria-hidden="true"></i> <?php _e('Hide replies') ?></a>
                                        </div>
                                    </div>
                                    <?php if(is_login()){ ?>
                                    <div class="comment-action-right">
                                        <a href="#" class="tpl-comment-reply" data-id="{{comment_id}}">
                                            <i class="fa fa-reply" aria-hidden="true"></i> Reply
                                        </a>
                                    </div>
                                    <?php } ?>
                                </div>
                            </div>
                        </div>
                        <div class="tpl-reply-form-wrapper"></div>
                        <div class="tpl-comment-children"></div>
                    </div>
                    <!-- Reply form template -->
                    <div class="tpl-reply-form">
                        <div class="comment-reply-wrapper">
                            <textarea class="form-control tpl-reply-input" placeholder="Your reply..."></textarea>
                            <div class="reply-action-buttons">
                                <button class="btn btn-sm tpl-btn-cancel-reply" data-id="{{comment_id}}"><?php _e('Cancel') ?></button>
                                <button class="btn btn-primary btn-sm tpl-btn-send-reply" data-id="{{comment_id}}"><?php _e('Reply') ?></button>
                            </div>
                        </div>
                    </div>
                </div>
                <div id="tpl-btn-load-more-comments" class="btn" style="display: none;"><?php _e('Load more comments') ?> <i class="fa fa-chevron-down" aria-hidden="true"></i></div>
            </div>
            <?php
        }
    }
}
function get_site_info($type){
    if($type == 'title'){
        if(_t('_site_title') !== '_site_title'){ // Have a translation
            return _t('_site_title');
        } else {
            return SITE_TITLE;
        }
    } else if($type == 'description'){
        if(_t('_site_description') !== '_site_description'){ // Have a translation
            return _t('_site_description');
        } else {
            return SITE_DESCRIPTION;
        }
    } else if($type == 'meta_description'){
        if(_t('_meta_description') !== '_meta_description'){ // Have a translation
            return _t('_meta_description');
        } else {
            return META_DESCRIPTION;
        }
    }
}
function fetch_all_tags($sort = 'random', $limit = 100){
    // $sort = name, usage, random
    return get_tags($sort, $limit);
}
function is_home(){
    global $base_taxonomy;
    if($base_taxonomy == 'homepage'){
        return true;
    }
    return false;
}
function is_game(){
    global $base_taxonomy;
    if($base_taxonomy == 'game'){
        global $game;
        if(isset($game)){
            return true;
        }
    }
    return false;
}
function is_search(){
    global $base_taxonomy;
    if($base_taxonomy == 'search'){
        return true;
    }
    return false;
}
function is_category(){
    global $base_taxonomy;
    if($base_taxonomy == 'category'){
        return true;
    }
    return false;
}
function is_page(){
    global $base_taxonomy;
    if($base_taxonomy == 'page'){
        global $page;
        if(isset($page)){
            return true;
        }
    }
    return false;
}
function is_post(){
    global $base_taxonomy;
    if($base_taxonomy == 'post'){
        global $post;
        if(isset($post)){
            return true;
        }
    }
    return false;
}
function is_tag(){
    global $base_taxonomy;
    if($base_taxonomy == 'tag'){
        global $tag;
        if(isset($tag)){
            return true;
        }
    }
    return false;
}
function home_url( $path = '' ){
    return rtrim(DOMAIN, '/') . $path;
}
function render_nav_menu($name = 'top_nav', $args = array()){
    $defaults = array(
        'container'            => '',
        'container_id'        => '',
        'container_class'    => '',
        'no_ul'                => false,
        'ul_id'                => '',
        'ul_class'            => '',
        'li_id'                => '',
        'li_class'            => 'nav-item',
        'li_class_parent'    => 'dropdown',
        'a_class'            => 'nav-link',
        'a_class_parent'    => 'dropdown-toggle',
        'after_parent'        => '',
        'children'            => array(),
    );
    $args = merge_args( $args, $defaults );
    $array_menu = nav_menu_array($name);
    if(count($array_menu)){
        if($args['container'] != ''){
            echo '<'.$args['container'];
            echo !empty($args['container_id']) ? ' id="'.$args['container_id'].'"' : '';
            echo !empty($args['container_class']) ? ' class="'.$args['container_class'].'"' : '';
            echo '>';
        }
        if(!$args['no_ul']){
            echo '<ul';
            echo !empty($args['ul_id']) ? ' id="'.$args['ul_id'].'"' : '';
            echo !empty($args['ul_class']) ? ' class="'.$args['ul_class'].'"' : '';
            echo '>';
        }
        foreach($array_menu as $menu){
            $parent_class = '';
            if(isset($menu['children'])){
                $parent_class = !empty($args['li_class_parent']) ? $args['li_class_parent'] : '';
            }
            echo '<li';
            echo !empty($args['li_id']) ? ' id="'.$args['li_id'].'"' : '';
            echo !empty($args['li_class']) ? ' class="'.$args['li_class'].' '.$parent_class.'"' : '';
            echo '>';
            if(isset($menu['children'])){
                $menu['url'] = '#';
            }
            $a_class_parent = '';
            if(isset($menu['children'])){
                $a_class_parent = $args['a_class_parent'];
                $menu['url'] = '#';
            }
            echo '<a class="'.$args['a_class'].' '.$a_class_parent.'" href="'.$menu['url'].'"';
            if(isset($menu['children'])){
                echo ' data-bs-toggle="dropdown"';
            }
            echo '>';
            echo _t($menu['label']);
            if(isset($menu['children'])){
                echo $args['after_parent'];
            }
            echo '</a>';
            if(isset($menu['children'])){
                render_nav_children($menu['children'], $args['children']);
            }
            echo '</li>';
        }
        if(!$args['no_ul']){
            echo '</ul>';
        }
        if($args['container'] != ''){
            echo '</'.$args['container'].'>';
        }
    }
}
function render_nav_children($array_menu, $args){
    $defaults = array(
        'no_ul'             => false,
        'ul_id'             => '',
        'ul_class'          => 'dropdown-menu',
        'li_id'             => '',
        'li_class'          => 'nav-item-child',
        'li_class_parent'    => 'dropdown-submenu',
        'a_class'           => 'nav-link-child',
        'a_class_parent'    => 'dropdown-toggle',
        'submenu_ul_class'  => 'submenu dropdown-menu' // class for sub-menu <ul>
    );
    $args = merge_args($args, $defaults);
    if (count($array_menu)) {
        if (!$args['no_ul']) {
            echo '<ul role="menu" ';
            echo !empty($args['ul_id']) ? ' id="' . $args['ul_id'] . '"' : '';
            echo !empty($args['ul_class']) ? ' class="' . $args['ul_class'] . '"' : '';
            echo '>';
        }
        foreach ($array_menu as $menu) {
            $is_parent = false;
            if(!empty($menu['children'])){
                $is_parent =  true;
            }
            echo '<li';
            echo !empty($args['li_id']) ? ' id="' . $args['li_id'] . '"' : '';
            echo !empty($args['li_class']) ? ' class="' . $args['li_class'] . ' ' . ($is_parent ? $args['li_class_parent'] : '') . '"' : '';
            echo '>';
            $a_class_parent = '';
            if ($is_parent) {
                // Is parent
                $menu['url'] = '#';
                $a_class_parent = $args['a_class_parent'];
            }
            echo '<a class="' . $args['a_class'] . ' ' . $a_class_parent.'" href="' . $menu['url'] . '">';
            echo _t($menu['label']);
            echo '</a>';
            if ($is_parent) {
                // Recursive call to render children
                $child_args = $args;
                $child_args['ul_class'] = $args['submenu_ul_class']; // Change class for sub-menu
                render_nav_children($menu['children'], $child_args);
            }
            echo '</li>';
        }
        if (!$args['no_ul']) {
            echo '</ul>';
        }
    }
}
function get_content_title_translation($content_type, $content_id, $original_title){
    // This function can only be used if "lang code in url" is activated
    // This function is used to translate content title, especialy games in content loop or list.
    // This function is marked as slow-execution script that may can slow down your site load
    // Reason why it slow : each call do database iteration to fetch the translated title
    global $lang_url_enabled;
    global $language_file_exist;
    global $lang_code;
    if(PRETTY_URL && $lang_url_enabled && $language_file_exist){
        if($lang_code != 'en'){
            $translated_title = get_content_translation($content_type, $content_id, $lang_code, 'title');
            if($translated_title){
                return esc_string($translated_title);
            }
        }
    }
    return esc_string($original_title);
}
function get_slug_translation($slug){
    $translated_slug = _t('slug:'.$slug);
    if($translated_slug == 'slug:'.$slug){
        // No translation, return original
        return $slug;
    } else {
        return $translated_slug;
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/db/settings.json
New file
@@ -0,0 +1,306 @@
[
    {
        "name": "site_title",
        "type": "text",
        "category": "general",
        "label": "Site title",
        "tooltip": "",
        "value": "Cloud Arcade"
    },
    {
        "name": "site_description",
        "type": "text",
        "category": "general",
        "label": "Site description",
        "tooltip": "",
        "value": "Play HTML5 Games"
    },
    {
        "name": "meta_description",
        "type": "text",
        "category": "general",
        "label": "Meta description",
        "tooltip": "",
        "value": "Play HTML5 Games for Free"
    },
    {
        "name": "site_logo",
        "type": "url",
        "category": "general",
        "label": "Site logo",
        "tooltip": "",
        "value": "images\/cloudarcade-logo.png"
    },
    {
        "name": "language",
        "type": "text",
        "category": "general",
        "label": "Language",
        "tooltip": "",
        "value": "en"
    },
    {
        "name": "purchase_code",
        "type": "text",
        "category": "general",
        "label": "Purchase code",
        "tooltip": "",
        "value": ""
    },
    {
        "name": "theme_name",
        "type": "text",
        "category": "",
        "label": "Theme name",
        "tooltip": "",
        "value": "default"
    },
    {
        "name": "import_thumb",
        "type": "bool",
        "category": "advanced",
        "label": "Save\/import thumbnails",
        "tooltip": "Save game thumbnails from fetch and remote games to local server. images also compressed and can reduce file size up to 80%. Page will be loaded more quickly.",
        "value": 0
    },
    {
        "name": "small_thumb",
        "type": "bool",
        "category": "advanced",
        "label": "Small thumbnails",
        "tooltip": "Generate small thumbnail (160x160 px) from thumb_2. Can be used to replace thumb_2 for faster page load, since thumb_2 have 512px size. *Require active import thumbnails.",
        "value": 0
    },
    {
        "name": "webp_thumbnail",
        "type": "bool",
        "category": "advanced",
        "label": "WEBP thumbnails",
        "tooltip": "Webp is a next gen image format for web. Reduce file size up to 80% compared to regular PNG or JPG and also SEO friendly. *Require active import thumbnails.",
        "value": 0
    },
    {
        "name": "custom_slug",
        "type": "bool",
        "category": "advanced",
        "label": "Custom slug",
        "tooltip": "Let you set the slug of games, posts and pages url manually.",
        "value": 0
    },
    {
        "name": "pretty_url",
        "type": "bool",
        "category": "advanced",
        "label": "Pretty url",
        "tooltip": "(Recommended) SEO Friendly URL. If you're using Nginx, you need to update Rewrite Rules before activating Pretty URL.",
        "value": 1
    },
    {
        "name": "unicode_slug",
        "type": "bool",
        "category": "advanced",
        "label": "Unicode slug",
        "tooltip": "Use non-latin characters (Arabic, Russian, Chinese.etc) for slug or url. There's no guarantee it will work flawlessly without any compatibility issues.",
        "value": 0
    },
    {
        "name": "use_https",
        "type": "bool",
        "category": "advanced",
        "label": "Use HTTPS",
        "tooltip": "If your site running over https, active this.",
        "value": 0
    },
    {
        "name": "use_www",
        "type": "bool",
        "category": "advanced",
        "label": "Use WWW",
        "tooltip": "Use WWW url, all permalink will be www.your-domain.com",
        "value": 0
    },
    {
        "name": "auto_sitemap",
        "type": "bool",
        "category": "advanced",
        "label": "Auto sitemap",
        "tooltip": "Automatically update sitemap after add or remove content.",
        "value": 0
    },
    {
        "name": "comments",
        "type": "bool",
        "category": "user",
        "label": "Comments",
        "tooltip": "Allow user to post a comment",
        "value": 1
    },
    {
        "name": "upload_avatar",
        "type": "bool",
        "category": "user",
        "label": "Upload avatar",
        "tooltip": "Allow registered user to upload their avatar",
        "value": 0
    },
    {
        "name": "user_register",
        "type": "bool",
        "category": "user",
        "label": "User\/player registration",
        "tooltip": "",
        "value": 1
    },
    {
        "name": "custom_path",
        "type": "textarea",
        "category": "",
        "label": "Custom path",
        "tooltip": "",
        "value": ""
    },
    {
        "name": "show_login",
        "type": "bool",
        "category": "user",
        "label": "Show login",
        "tooltip": "Show login link in the theme navigation menu",
        "value": 1
    },
    {
        "name": "moderate_comment",
        "type": "bool",
        "category": "user",
        "label": "Moderate comment",
        "tooltip": "All user comments must be approved before availabe for public",
        "value": 0
    },
    {
        "name": "captcha",
        "type": "bool",
        "category": "user",
        "label": "CAPTCHA",
        "tooltip": "Show CAPTCHA on registration page.",
        "value": 1
    },
    {
        "name": "require_email",
        "type": "bool",
        "category": "user",
        "label": "Require Email for Registration",
        "tooltip": "Users need to fill out the email form for registration.",
        "value": 0
    },
    {
        "name": "splash",
        "type": "bool",
        "category": "other",
        "label": "Splash Screen (Self uploaded)",
        "tooltip": "Show splash screen before game loaded. Only work for uploaded games.",
        "value": 0
    },
    {
        "name": "show_ad_on_splash",
        "type": "bool",
        "category": "other",
        "label": "Show Ad On Splash",
        "tooltip": "",
        "value": 0
    },
    {
        "name": "trailing_slash",
        "type": "bool",
        "category": "other",
        "label": "Trailing slash",
        "tooltip": "A trailing slash is a forward slash (\/) at the end of a URL. If activated, your url will be domain.com\/game\/title\/",
        "value": 0
    },
    {
        "name": "lang_code_in_url",
        "type": "bool",
        "category": "other",
        "label": "Language code in URL",
        "tooltip": "When activated, your URL will contain a language ID, such as domain.com\/en\/game\/title for English or domain.com\/fr\/game\/title for French. This can be utilized for multilingual sites.",
        "value": 0
    },
    {
        "name": "purify_page",
        "type": "bool",
        "category": "other",
        "label": "Sanitize HTML on Pages",
        "tooltip": "Allows you to use all HTML tags in page content without HTML filtering.",
        "value": 1
    },
    {
        "name": "disable_rtl",
        "type": "bool",
        "category": "other",
        "label": "Disable RTL",
        "tooltip": "If your site layout breaks after switching to an RTL (Right to Left) language, activate this option to switch it back to LTR.",
        "value": 0
    },
    {
        "name": "allow_splash_on_remote_games",
        "type": "bool",
        "category": "other",
        "label": "Allow splash screen on remote games",
        "tooltip": "Display splash screen for remotely added games.",
        "value": 0
    },
    {
        "name": "disable_en_language",
        "type": "bool",
        "category": "other",
        "label": "Disable English language",
        "tooltip": "If you are using a multilingual URL and don't want to use the English language, activate this option.",
        "value": 0
    },
    {
        "name": "hide_pc_on_mobile",
        "type": "bool",
        "category": "other",
        "label": "Hide PC Games on Mobile",
        "tooltip": "PC games will not be shown or loaded on mobile devices.",
        "value": 0
    },
    {
        "name": "search_results_per_page",
        "type": "number",
        "category": "listings",
        "label": "Search",
        "tooltip": "",
        "value": 36
    },
    {
        "name": "category_results_per_page",
        "type": "number",
        "category": "listings",
        "label": "Category",
        "tooltip": "",
        "value": 36
    },
    {
        "name": "post_results_per_page",
        "type": "number",
        "category": "listings",
        "label": "Posts",
        "tooltip": "",
        "value": 10
    },
    {
        "name": "disable_iconv",
        "type": "bool",
        "category": "other",
        "label": "Disable iconv()",
        "tooltip": "If you get iconv() related error when add games, check this.",
        "value": 0
    },
    {
        "name": "allow_slug_translation",
        "type": "bool",
        "category": "other",
        "label": "Allow Slug Translation",
        "tooltip": "Allow localization or translation for category and tag slug.",
        "value": 0
    }
]
CloudArcade/cloudarcade/cloudarcade/db/tables.sql
New file
@@ -0,0 +1,295 @@
DROP TABLE IF EXISTS users;
CREATE TABLE users
  (
    id       SMALLINT UNSIGNED NOT NULL auto_increment,
    username VARCHAR(255) NOT NULL,
    password TEXT NOT NULL,
    role     VARCHAR(255) NOT NULL,
    join_date DATE NULL DEFAULT NULL,
    birth_date DATE NULL DEFAULT NULL,
    gender varchar(15) NULL DEFAULT NULL,
    data text NULL DEFAULT NULL,
    email varchar(40) NULL DEFAULT NULL,
    bio varchar(180) NULL DEFAULT NULL,
    xp varchar(180) NULL DEFAULT 0,
    avatar varchar(180) NULL DEFAULT 0,
    PRIMARY KEY (id)
  );
DROP TABLE IF EXISTS loginlogs;
CREATE TABLE loginlogs (
    id SMALLINT UNSIGNED NOT NULL auto_increment,
    IpAddress varbinary(16) NOT NULL,
    TryTime bigint(20) NOT NULL,
    PRIMARY KEY (id)
);
DROP TABLE IF EXISTS login_history;
CREATE TABLE login_history (
    id SMALLINT UNSIGNED NOT NULL auto_increment,
    ip varbinary(16) NOT NULL,
    data MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    PRIMARY KEY (id)
);
DROP TABLE IF EXISTS categories;
CREATE TABLE categories
  (
     id          SMALLINT UNSIGNED NOT NULL auto_increment,
     name        VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     slug     VARCHAR(30) NOT NULL,
     description  MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     meta_description  MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     fields  TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     priority smallint(6) NOT NULL DEFAULT '0',
     PRIMARY KEY (id)
  );
DROP TABLE IF EXISTS cat_links;
CREATE TABLE cat_links
  (
     id         SMALLINT UNSIGNED NOT NULL auto_increment,
     gameid     SMALLINT UNSIGNED NOT NULL,
     categoryid SMALLINT UNSIGNED NOT NULL,
     PRIMARY KEY (id)
  );
DROP TABLE IF EXISTS pages;
CREATE TABLE pages
  (
     id          SMALLINT UNSIGNED NOT NULL auto_increment,
     createddate DATE NOT NULL,
     title       VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     slug        VARCHAR(255) NOT NULL,
     content     MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     nl2br         tinyint(4) NOT NULL DEFAULT '1',
     fields  TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     PRIMARY KEY (id)
  );
DROP TABLE IF EXISTS posts;
CREATE TABLE posts
  (
     id          SMALLINT UNSIGNED NOT NULL auto_increment,
     created_date DATE NOT NULL,
     title       VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     slug        VARCHAR(255) NOT NULL,
     thumbnail_url   VARCHAR(255) NOT NULL,
     content     MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     fields  TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     PRIMARY KEY (id)
  );
DROP TABLE IF EXISTS games;
CREATE TABLE games
(
     id           SMALLINT UNSIGNED NOT NULL auto_increment,
     createddate  DATE NOT NULL,
     title        VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     description  MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     instructions MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     category     TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     source       TEXT NOT NULL,
     thumb_1      VARCHAR(255) NOT NULL,
     thumb_2      VARCHAR(255) NOT NULL,
     thumb_small  VARCHAR(255) NOT NULL,
     url          TEXT NOT NULL,
     width        TEXT NOT NULL,
     height       TEXT NOT NULL,
     tags         TEXT NOT NULL,
     views        INT NOT NULL,
     upvote       INT NOT NULL,
     downvote     INT NOT NULL,
     slug     VARCHAR(255) NOT NULL,
     data MEDIUMTEXT NULL DEFAULT NULL,
     is_mobile TINYINT(1) NOT NULL DEFAULT '1',
     last_modified DATETIME NULL DEFAULT NULL,
     fields  TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
     published tinyint(1) NOT NULL DEFAULT '1',
     PRIMARY KEY (id)
);
DROP TABLE IF EXISTS votelogs;
CREATE TABLE votelogs
(
    id           SMALLINT UNSIGNED NOT NULL auto_increment,
    game_id     SMALLINT UNSIGNED NOT NULL,
    ip         varbinary(16) NOT NULL,
    action          TEXT NOT NULL,
    PRIMARY KEY (id)
);
DROP TABLE IF EXISTS favorites;
CREATE TABLE favorites
(
    id           SMALLINT UNSIGNED NOT NULL auto_increment,
    game_id     SMALLINT UNSIGNED NOT NULL,
    user_id     SMALLINT UNSIGNED NOT NULL,
    PRIMARY KEY (id)
);
DROP TABLE IF EXISTS collections;
CREATE TABLE collections
  (
     id          SMALLINT UNSIGNED NOT NULL auto_increment,
     name        VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     data  MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
     PRIMARY KEY (id)
  );
DROP TABLE IF EXISTS comments;
CREATE TABLE comments (
 id int(10) unsigned NOT NULL AUTO_INCREMENT,
 game_id int(10) NOT NULL,
 parent_id int(10) unsigned DEFAULT NULL,
 comment varchar(400) NOT NULL,
 sender_id int(40) NOT NULL,
 sender_username varchar(20) NOT NULL,
 created_date DATETIME NULL DEFAULT NULL,
 approved tinyint(4) NOT NULL DEFAULT '1',
    PRIMARY KEY (id)
);
DROP TABLE IF EXISTS scores;
CREATE TABLE scores
  (
     id          SMALLINT UNSIGNED NOT NULL auto_increment,
     created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     game_id int(40) NOT NULL,
     user_id int(40) NOT NULL,
     score INT(6) UNSIGNED NOT NULL DEFAULT '0',
     PRIMARY KEY (id)
  );
CREATE TABLE IF NOT EXISTS statistics (
 id int(11) unsigned NOT NULL AUTO_INCREMENT,
 created_date date DEFAULT NULL,
 page_views varchar(255) DEFAULT NULL,
 unique_visitor varchar(255) DEFAULT NULL,
 data mediumtext DEFAULT NULL,
 PRIMARY KEY (id)
);
DROP TABLE IF EXISTS stats_ip_address;
CREATE TABLE stats_ip_address (
 id int(11) unsigned NOT NULL AUTO_INCREMENT,
 ip_address varchar(255) DEFAULT NULL,
 created_date date DEFAULT NULL,
 PRIMARY KEY (id)
);
DROP TABLE IF EXISTS sessions;
CREATE TABLE sessions (
  token varchar(400) NOT NULL,
  data text NOT NULL
);
DROP TABLE IF EXISTS prefs;
CREATE TABLE prefs (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  value text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (id)
);
DROP TABLE IF EXISTS menus;
CREATE TABLE menus (
  id int(11) unsigned NOT NULL AUTO_INCREMENT,
  label varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  url varchar(512) CHARACTER SET utf8 DEFAULT NULL,
  parent_id int(11) DEFAULT NULL,
  name varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
);
DROP TABLE IF EXISTS trends;
CREATE TABLE trends (
  id int(11) NOT NULL AUTO_INCREMENT,
  game_id int(11) DEFAULT NULL,
  views int(11) NOT NULL,
  created date NOT NULL,
  slug varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (id)
);
DROP TABLE IF EXISTS tags;
CREATE TABLE tags (
  id smallint(11) unsigned NOT NULL AUTO_INCREMENT,
  name varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  usage_count int(11) NOT NULL DEFAULT '0',
  extra_fields varchar(6000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (id)
);
DROP TABLE IF EXISTS tag_links;
CREATE TABLE tag_links (
  game_id smallint(11) unsigned NOT NULL,
  tag_id smallint(11) unsigned NOT NULL,
  PRIMARY KEY (game_id,tag_id)
);
DROP TABLE IF EXISTS settings;
CREATE TABLE settings (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  type VARCHAR(255) NOT NULL,
  category VARCHAR(255) NOT NULL,
  label MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  tooltip MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  description MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
  value MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
);
DROP TABLE IF EXISTS translations;
CREATE TABLE translations
(
    id           INT UNSIGNED NOT NULL AUTO_INCREMENT,
    content_type VARCHAR(50) NOT NULL,  -- e.g., 'game', 'post', 'category'
    content_id   INT UNSIGNED NOT NULL, -- corresponds to the relevant table but not a foreign key
    language     VARCHAR(5) NOT NULL,   -- e.g., 'en', 'fr', etc.
    field        VARCHAR(50) NOT NULL,  -- e.g., 'title', 'description', 'content'
    translation  MEDIUMTEXT NOT NULL,
    PRIMARY KEY (id),
    INDEX idx_translations (content_type, content_id, language, field) -- An index for faster lookups
);
DROP TABLE IF EXISTS extra_fields;
CREATE TABLE extra_fields
(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    content_type VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    field_key VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    title VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    type VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    placeholder VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    default_value VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    meta TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    PRIMARY KEY (id)
);
CloudArcade/cloudarcade/cloudarcade/favicon.ico
CloudArcade/cloudarcade/cloudarcade/images/ad-300.png
CloudArcade/cloudarcade/cloudarcade/images/ad-728.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/1.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/10.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/11.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/12.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/13.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/14.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/15.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/16.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/17.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/18.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/19.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/2.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/20.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/3.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/4.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/5.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/6.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/7.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/8.png
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/9.png
CloudArcade/cloudarcade/cloudarcade/images/cloudarcade-logo.png
CloudArcade/cloudarcade/cloudarcade/images/default_profile.png
CloudArcade/cloudarcade/cloudarcade/images/login-logo.png
CloudArcade/cloudarcade/cloudarcade/images/logo-horizontal.png
CloudArcade/cloudarcade/cloudarcade/images/logo-vertical.png
CloudArcade/cloudarcade/cloudarcade/images/post-no-thumb.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-1.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-2.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-3.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-4.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-5.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-6.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-7.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-8.png
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-9.png
CloudArcade/cloudarcade/cloudarcade/images/theme-no-thumb.png
CloudArcade/cloudarcade/cloudarcade/includes/api.php
New file
@@ -0,0 +1,264 @@
<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
require( '../config.php' );
require( '../init.php' );
if(isset($_POST['action'])){
    $score = null;
    if($_POST['action'] === 'submit'){
        if($login_user){ //Only logged in user
            $user_id = $login_user->id;
            if(isset($_POST['value']) && isset($_POST['ref'])){
                $score = $_POST['value'];
                $score = base64_decode($score);
                $score = $score*1.33;
                if (strpos($score, '.')) {
                    //invalid
                } else {
                    $game = Game::getBySlug($_POST['ref']);
                    if($game){
                        $game_id = $game->id;
                        $conn = open_connection();
                        $sql = 'SELECT score FROM scores WHERE user_id = :user_id AND game_id = :game_id LIMIT 1';
                        $st = $conn->prepare($sql);
                        $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
                        $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
                        $st->execute();
                        $row = $st->fetch();
                        if($row){ //Update existing data
                            if($row['score'] < $score){
                                $sql = 'UPDATE scores SET score = :score WHERE user_id = :user_id AND game_id = :game_id LIMIT 1';
                                $st = $conn->prepare($sql);
                                $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
                                $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
                                $st->bindValue(":score", $score, PDO::PARAM_INT);
                                $st->execute();
                            }
                        } else {
                            $sql = 'INSERT INTO scores (game_id, user_id, score) VALUES ( :game_id, :user_id, :score)';
                            $st = $conn->prepare($sql);
                            $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
                            $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
                            $st->bindValue(":score", $score, PDO::PARAM_INT);
                            $st->execute();
                        }
                        //
                        $login_user->xp += 10;
                        $login_user->update_xp();
                        //
                        echo 'ok';
                    }
                }
            } else {
                die('x');
            }
        }
    } elseif ($_POST['action'] === 'get_current_user'){
        if($login_user){
            $user = array();
            $user['username'] = $login_user->username;
            $user['id'] = $login_user->id;
            $user['gender'] = $login_user->gender;
            $user['join_date'] = $login_user->join_date;
            $user['birth_date'] = $login_user->birth_date;
            echo json_encode($user);
        }
    } elseif ($_POST['action'] === 'get_user_score'){
        //Get current user score
        if($login_user){
            $user_id = $login_user->id;
            $game = Game::getBySlug($_POST['ref']);
            if(!$game){
                die();
            }
            $game_id = $game->id;
            $sql = "SELECT score FROM scores WHERE user_id = :user_id AND game_id = :game_id LIMIT 1";
            $conn = open_connection();
            $st = $conn->prepare($sql);
            $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
            $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
            $st->execute();
            $res = $st->fetch();
            if($res){
                echo $res['score'];
            } else {
                echo 0;
            }
        }
    } elseif ($_POST['action'] === 'get_score_rank'){
        //Get current user score rank
        if($login_user){
            $user_id = $login_user->id;
            $game = Game::getBySlug($_POST['ref']);
            if(!$game){
                die();
            }
            $game_id = $game->id;
            $sql = "SELECT * FROM scores WHERE game_id = :game_id ORDER by score DESC LIMIT 5000";
            $conn = open_connection();
            $st = $conn->prepare($sql);
            $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
            $st->execute();
            $row = $st->fetchAll(PDO::FETCH_ASSOC);
            if(count($row)){
                $i = 0;
                foreach ($row as $item) {
                    $i++;
                    if($item['user_id'] == $user_id){
                        echo $i;
                        return;
                    }
                }
            }
            echo 0;
        }
    } elseif ($_POST['action'] === 'get_scoreboard'){
        if(isset($_POST['conf'])){
            $config = json_decode($_POST['conf'], true);
            $type = $config['type'];
            $amount = 10;
            if(isset($config['amount'])){
                $amount = $config['amount'];
            }
            $sql = null;
            $game = null;
            $game_id = null;
            if(isset($_POST['ref'])){
                //Old method
                $game = Game::getBySlug($_POST['ref']);
                if($game){
                    $game_id = $game->id;
                }
            } elseif(isset($_POST['game-id'])){
                //New preferred method
                $game_id = (int)$_POST['game-id'];
            }
            if(!$game_id){
                die();
            }
            if($type === 'top-all'){
                $sql = "SELECT * FROM scores ORDER by score DESC, created_date ASC LIMIT ".$amount;
            } elseif($type === 'top-all-day'){
                $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER by score DESC LIMIT ".$amount;
            } elseif($type === 'top-all-week'){
                $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER by score DESC LIMIT ".$amount;
            } elseif($type === 'top-all-month'){
                $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER by score DESC LIMIT ".$amount;
            } elseif($type === 'top'){
                $sql = "SELECT * FROM scores WHERE game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
            } elseif($type === 'top-day'){
                $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 DAY) AND game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
            } elseif($type === 'top-week'){
                $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 WEEK) AND game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
            } elseif($type === 'top-month'){
                $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) AND game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
            }
            if($sql){
                $conn = open_connection();
                $st = $conn->prepare($sql);
                $st->execute();
                //
                $row = $st->fetchAll(PDO::FETCH_ASSOC);
                $list = [];
                foreach($row as $item){
                    $item['game_title'] = Game::getById($item['game_id'])->title;
                    $item['username'] = User::getById($item['user_id'])->username;
                    array_push($list, $item);
                }
                echo json_encode($list);
            }
        }
    } elseif ($_POST['action'] === 'load_ad'){
        if(isset($_POST['value'])){
            $tags = get_pref('ads-manager');
            if($tags){
                $tags = json_decode($tags, true);
                $selected = null;
                foreach ($tags as $tag => $item) {
                    if(strtolower($_POST['value']) == strtolower($tag)){
                        $selected = $item;
                        $selected['type'] = strtolower($tag);
                        break;
                    }
                }
                if(!$selected){
                    foreach ($tags as $tag => $item) {
                        if($item['default']){
                            $selected = $item;
                            $selected['type'] = strtolower($tag);
                            break;
                        }
                    }
                }
                if($selected['type'] == 'banner'){
                    if($selected['selected'] == 'random'){
                        if(isset($selected['data']) && $selected['data']){
                            $picked_banner = $selected['data'][rand(0, count($selected['data'])-1)];
                            $selected['value'] = $picked_banner['image'];
                            $selected['url'] = $picked_banner['url'];
                            $selected['name'] = $picked_banner['name'];
                            //Add show stats
                            $ad_stats = get_pref('ads-manager-stats');
                            if($ad_stats){
                                $ad_stats = json_decode($ad_stats, true);
                            } else {
                                $ad_stats = array();
                            }
                            if(!isset($ad_stats[$picked_banner['name']])){
                                $ad_stats[$picked_banner['name']] = array();
                                $ad_stats[$picked_banner['name']]['views'] = 0;
                                $ad_stats[$picked_banner['name']]['clicks'] = 0;
                            }
                            $ad_stats[$picked_banner['name']]['views']++;
                            update_option('ads-manager-stats', json_encode($ad_stats));
                            //End
                        }
                    }
                    $selected['delay'] = 5;
                }
                echo json_encode($selected);
            } else {
                echo '{"error": "Ads Manager plugin not installed."}';
            }
        }
    } elseif ($_POST['action'] === 'ad_clicked'){
        if(isset($_POST['value'])){
            //Add click stats
            $name = $_POST['value'];
            $ad_stats = get_pref('ads-manager-stats');
            if($ad_stats){
                $ad_stats = json_decode($ad_stats, true);
            } else {
                $ad_stats = array();
            }
            if(!isset($ad_stats[$name])){
                $ad_stats[$name] = array();
                $ad_stats[$name]['views'] = 0;
                $ad_stats[$name]['clicks'] = 0;
            }
            $ad_stats[$name]['clicks']++;
            update_option('ads-manager-stats', json_encode($ad_stats));
            //End
        }
    } elseif ($_POST['action'] === 'get_ad_config'){
        if(get_pref_bool('ads-manager-active')){
            $result = array(
                'status'    => 'active',
                'h5_client_id'    => get_pref('ads-manager-h5-clientID')
            );
            echo json_encode($result);
        } else {
            $result = array(
                'status'    => 'inactive',
                'h5_client_id'    => ''
            );
            echo json_encode($result);
        }
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/banned-username.json
New file
@@ -0,0 +1 @@
["admin","login","demo","administrator","super","default"]
CloudArcade/cloudarcade/cloudarcade/includes/banned-words-comment.json
New file
@@ -0,0 +1 @@
["just_sample","another_sample"]
CloudArcade/cloudarcade/cloudarcade/includes/banned-words.json
New file
@@ -0,0 +1 @@
["just_sample","another_sample"]
CloudArcade/cloudarcade/cloudarcade/includes/captcha.php
New file
@@ -0,0 +1,31 @@
<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
function get_random_string($length = 5) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
$str = get_random_string();
$_SESSION['captcha'] = $str;
header("Content-type: image/png");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$img_handle = ImageCreate(80, 35) or die("X");
$back_color = ImageColorAllocate($img_handle, 102, 102, 153);
$txt_color = ImageColorAllocate($img_handle, 255, 255, 255);
ImageString($img_handle, 30, 15, 10, $str, $txt_color);
Imagepng($img_handle);
?>
CloudArcade/cloudarcade/cloudarcade/includes/comment.php
New file
@@ -0,0 +1,175 @@
<?php
require('../config.php');
require('../init.php');
if(get_setting_value('comments')){
    if(isset($_POST['send']) && $login_user){
        // Deprecated since v165
        // Replaced with new Comment system
        // Still kept for compatibility with the old commenting system
        $conn = open_connection();
        if(isset($_POST['source']) && $_POST['source'] == 'jquery-comments'){
            if(!$_POST['parent']){
                $_POST['parent'] = null;
            }
            $_POST['content'] = trim_string(comment_filtering($_POST['content']));
            $approved = 1;
            if(get_setting_value('moderate_comment') && $login_user->role != 'admin'){
                // Moderate comment is activated
                $approved = 0;
            }
            $sql = 'INSERT INTO comments (parent_id, game_id, comment, sender_id, sender_username, created_date, approved) VALUES (:parent_id, :game_id, :comment, :sender_id, :sender_username, :created_date, :approved)';
            $st = $conn->prepare($sql);
            $st->bindValue(":parent_id", $_POST['parent'], PDO::PARAM_INT);
            $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
            $st->bindValue(":comment", $_POST['content'], PDO::PARAM_STR);
            $st->bindValue(":sender_id", $login_user->id, PDO::PARAM_INT);
            $st->bindValue(":sender_username", $login_user->username, PDO::PARAM_STR);
            $st->bindValue(":created_date", date('Y-m-d H:i:s'), PDO::PARAM_STR);
            $st->bindValue(":approved", $approved, PDO::PARAM_INT);
            $st->execute();
            $login_user->add_xp(20);
            echo('success');
        }
    }
    if(isset($_POST['load']) && isset($_POST['game_id'])){
        // Deprecated since v165
        // Replaced with new Comment system
        // Still kept for compatibility with the old commenting system
        $conn = open_connection();
        $sql = 'SELECT * FROM comments WHERE game_id = :game_id AND approved = 1 ORDER BY id asc, parent_id asc LIMIT 50';
        $st = $conn->prepare($sql);
        $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetchAll(PDO::FETCH_ASSOC);
        $list = array();
        foreach ($row as $item) {
            $item['avatar'] = get_user_avatar($item['sender_username']);
            $list[] = $item;
        }
        echo json_encode((array)$list);
    }
    // New comment system
    if(isset($_POST['send_comment']) && $login_user){
        if(strlen($_POST['content']) < 2){
            echo('too short');
            return;
        }
        $conn = open_connection();
        $parent_id = isset($_POST['parent']) && $_POST['parent'] !== '' ? (int)$_POST['parent'] : null;
        $_POST['content'] = trim_string(comment_filtering($_POST['content']));
        $approved = 1;
        if(get_setting_value('moderate_comment') && $login_user->role != 'admin'){
            // Moderate comment is activated
            $approved = 0;
        }
        $sql = 'INSERT INTO comments (parent_id, game_id, comment, sender_id, sender_username, created_date, approved) VALUES (:parent_id, :game_id, :comment, :sender_id, :sender_username, :created_date, :approved)';
        $st = $conn->prepare($sql);
        if ($parent_id === null) {
            $st->bindValue(":parent_id", $parent_id, PDO::PARAM_NULL);
        } else {
            $st->bindValue(":parent_id", $parent_id, PDO::PARAM_INT);
        }
        $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
        $st->bindValue(":comment", $_POST['content'], PDO::PARAM_STR);
        $st->bindValue(":sender_id", $login_user->id, PDO::PARAM_INT);
        $st->bindValue(":sender_username", $login_user->username, PDO::PARAM_STR);
        $st->bindValue(":created_date", date('Y-m-d H:i:s'), PDO::PARAM_STR);
        $st->bindValue(":approved", $approved, PDO::PARAM_INT);
        $st->execute();
        $login_user->add_xp(20);
        echo('success');
    } elseif(isset($_POST['load_root_comments']) && isset($_POST['game_id']) && isset($_POST['amount'])) {
        $conn = open_connection();
        $offset = isset($_POST['offset']) ? (int)$_POST['offset'] : 0;
        $limit = (int)$_POST['amount'];
        if($limit > 30){
            $limit = 30;
        }
        $sql = 'SELECT c.*, COUNT(r.id) as reply_count
                FROM comments c
                LEFT JOIN comments r ON c.id = r.parent_id
                WHERE c.game_id = :game_id AND (c.parent_id IS NULL OR c.parent_id = 0) AND c.approved = 1
                GROUP BY c.id
                ORDER BY c.id DESC LIMIT '.$limit.' OFFSET :offset';
        $st = $conn->prepare($sql);
        $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
        $st->bindValue(":offset", $offset, PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetchAll(PDO::FETCH_ASSOC);
        $list = [];
        foreach ($row as $item) {
            $item['avatar'] = get_user_avatar($item['sender_username']);
            $item['has_replies'] = $item['reply_count'] > 0;
            $item['server_date'] = date('Y-m-d H:i:s');
            unset($item['reply_count']); // remove the reply_count as it's not needed anymore
            $list[] = $item;
        }
        echo json_encode((array)$list);
    } elseif(isset($_POST['load_replies']) && isset($_POST['parent_id']) && isset($_POST['amount'])) {
        $conn = open_connection();
        $limit = (int)$_POST['amount'];
        if($limit > 30){
            $limit = 30;
        }
        $sql = 'SELECT * FROM comments WHERE parent_id = :parent_id AND approved = 1 ORDER BY id DESC LIMIT '.$limit;
        $st = $conn->prepare($sql);
        $st->bindValue(":parent_id", $_POST['parent_id'], PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetchAll(PDO::FETCH_ASSOC);
        $list = [];
        foreach ($row as $item) {
            $item['avatar'] = get_user_avatar($item['sender_username']);
            $item['server_date'] = date('Y-m-d H:i:s');
            $list[] = $item;
        }
        echo json_encode((array)$list);
    }
}
if(isset($_POST['delete']) && $login_user){
    $conn = open_connection();
    if( USER_ADMIN && !ADMIN_DEMO){
        $sql = 'DELETE FROM comments WHERE id = :id LIMIT 1';
        $st = $conn->prepare($sql);
        $st->bindValue(":id", $_POST['id'], PDO::PARAM_INT);
        $st->execute();
    } else {
        $sql = 'DELETE FROM comments WHERE sender_id = :sender_id AND id = :id LIMIT 1';
        $st = $conn->prepare($sql);
        $st->bindValue(":sender_id", $login_user->id, PDO::PARAM_INT);
        $st->bindValue(":id", $_POST['id'], PDO::PARAM_INT);
        $st->execute();
    }
    echo 'deleted';
}
if(isset($_POST['approve']) && $login_user && USER_ADMIN){
    $conn = open_connection();
    $sql = 'UPDATE comments SET approved = 1 WHERE id = :id LIMIT 1';
    $st = $conn->prepare($sql);
    $st->bindValue(":id", $_POST['id'], PDO::PARAM_INT);
    $st->execute();
    echo 'ok';
}
function comment_filtering($comment){
    if(file_exists(ABSPATH.'includes/banned-words-comment.json')){
        $words = json_decode(file_get_contents(ABSPATH.'includes/banned-words-comment.json'), true);
        $comment = str_ireplace($words, '***', $comment);
    }
    return $comment;
}
function trim_string($str) {
    if (strlen($str) > 400) {
        return substr($str, 0, 397) . '...';
    }
    return $str;
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/commons.php
New file
@@ -0,0 +1,1205 @@
<?php
defined('ABSPATH') or die('abcd commons');
function get_all_categories(){
    // Excluding hidden categories
    $data = Category::getList();
    $results = $data['results'];
    foreach ($results as $key => $category) {
        if($category->priority < 0){
            unset($results[$key]);
        }
    }
    return $results;
}
function get_user($username){
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = 'SELECT * FROM users WHERE username = :username';
    $st = $conn->prepare( $sql );
    $st->bindValue( ":username", $username, PDO::PARAM_STR );
    $st->execute();
    $row = $st->fetch();
    $conn = null;
    if ( $row ) return $row;
    return false;
}
function is_login(){
    if(isset( $_SESSION['username'] )){
        return true;
    } else {
        return false;
    }
}
function show_logout(){
    // Not used
    if(is_login()){
        echo '<a href="'.DOMAIN.'admin.php?action=logout"> Log out </a>';
    }
}
function get_permalink($type, $slug = '', $arrs = []){
    /*
    Usage:
    - get_permalink('game', 'super-mario');
    - get_permalink('category', 'action', ['page' => 1]);
    - get_permalink('user', 'admin', ['action' => 'edit', 'page' => 2]);
    */
    $custom_type = get_custom_path($type);
    $params = '';
    $lang_id = '';
    $end_slash = '';
    if(count($arrs)){
        foreach ($arrs as $key => $value) {
            if( PRETTY_URL ){
                $params .= '/'.$value;
            } else {
                $params .= '&'.$key.'='.$value;
            }
        }
        if($slug == ''){
            $params = substr($params, 1);
        }
    }
    if(PRETTY_URL && $slug){
        // Add slash in the end of url
        if (strpos($params, '.') !== false) { //true
            //
        } else { //false
            if(get_setting_value('trailing_slash')){
                if(substr($slug.$params, -1) != '/'){
                    $end_slash = '/';
                }
            }
        }
        if(get_setting_value('lang_code_in_url')){
            global $lang_code;
            if(isset($lang_code)){
                $lang_id = $lang_code.'/';
            }
        }
    }
    if($type == 'game' && $slug === ''){
        // Fix bug for get link without slug, include lang code
        if($lang_id === '' && get_setting_value('lang_code_in_url')){
            global $lang_code;
            if(isset($lang_code)){
                $lang_id = $lang_code.'/';
            }
        }
    }
    if($type == 'game'){
        if( PRETTY_URL ){
            return DOMAIN . $lang_id.$custom_type.'/' . $slug . $end_slash;
        } else {
            return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
        }
    } else if($type == 'archive'){
        if( PRETTY_URL ){
            return DOMAIN . $lang_id.$custom_type.'/' . $slug . $end_slash;
        } else {
            return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
        }
    } else if($type == 'search'){
        if( PRETTY_URL ){
            return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
        } else {
            return DOMAIN . 'index.php?viewpage='.$custom_type.'&key=' . $slug . $params;
        }
    } else if($type == 'category'){
        $slug = strtolower($slug);
        if(get_setting_value('allow_slug_translation') && function_exists('get_slug_translation')){
            $slug = get_slug_translation(strtolower($slug));
        }
        if( PRETTY_URL ){
            return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
        } else {
            return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
        }
    } else if($type == 'tag'){
        $slug = strtolower($slug);
        if(get_setting_value('allow_slug_translation') && function_exists('get_slug_translation')){
            $slug = get_slug_translation(strtolower($slug));
        }
        if( PRETTY_URL ){
            return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
        } else {
            return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
        }
    } else if($type == 'page'){
        if( PRETTY_URL ){
            return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
        } else {
            return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
        }
    } else {
        if( PRETTY_URL ){
            if(!$slug){
                $slug = '';
            }
            return DOMAIN . $lang_id . $custom_type .'/' . $slug . $params . $end_slash;
        } else {
            if(!$slug){
                $slug = '';
            } else {
                $slug = '&slug='.$slug;
            }
            return DOMAIN . 'index.php?viewpage=' . $custom_type . $slug . $params;
        }
    }
}
function get_small_thumb($game){
    $thumb = (isset($game->thumb_small) && $game->thumb_small != '' ? esc_url($game->thumb_small) : esc_url($game->thumb_2));
    if(substr($thumb, 0, 1) == '/'){
        $thumb = DOMAIN . substr($thumb, 1);
    }
    return $thumb;
}
function get_game_url($game){
    $url = esc_url($game->url);
    if(substr($url, 0, 7) == '/games/'){
        if(get_setting_value('splash')){
            $url = get_permalink('splash', $game->slug);
            return $url;
        } else {
            $url = DOMAIN . substr($url, 1);
        }
    } elseif($game->source == 'gamedistribution'){
        //GameDistributon new url
        $url .= '?gd_sdk_referrer_url='.get_permalink('game', $game->slug);
    } elseif($game->source == 'remote'){
        if(get_setting_value('splash') && get_setting_value('allow_splash_on_remote_games')){
            $url = get_permalink('splash', $game->slug);
        }
    }
    return $url;
}
function commas_to_array($str){
    return preg_split("/\,/", $str);
}
function html_purify($html_content){
    require_once ABSPATH.'vendor/HTMLPurifier/HTMLPurifier.auto.php';
    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $clean_html = $purifier->purify($html_content);
    return $clean_html;
}
function esc_string($str){
    if($str == '') return $str;
    return strip_tags($str);
}
function esc_int($int){
    return (int)preg_replace('/[^0-9]/', '', $int);
}
function esc_url($str){
    return $str;
    // Pass it for now, previously using filter_var($str, FILTER_SANITIZE_URL) that are now deprecated.
}
function esc_slug($str){
    if($str == '') return $str;
    if(UNICODE_SLUG){
        return esc_unicode_slug($str);
    } else {
        // Allow unicode letters without UNICODE SLUG
        return strtolower(preg_replace('/[^\p{L}0-9_-]/u', '-', $str));
    }
}
function esc_unicode_slug($str){
    // Not actually used anymore, esc_slug() already allowing unicode letters
    return preg_replace('/[^\p{L}0-9_-]/u', '-', $str);
}
function imgResize($path, $rs_width=160, $rs_height=160, $slug = '') {
    // deprecated since v.1.7.1
    // use admin-functions.php generate_small_thumbnail() instead of call this function directly
    // this function is used to generate small thumbnail
    $x = getimagesize($path);
    $width  = $x['0'];
    $height = $x['1'];
    switch ($x['mime']) {
      case "image/gif":
         $img = imagecreatefromgif($path);
         break;
      case "image/jpg":
      case "image/jpeg":
         $img = imagecreatefromjpeg($path);
         break;
      case "image/png":
         $img = imagecreatefrompng($path);
         break;
    }
    $img_base = imagecreatetruecolor($rs_width, $rs_height);
    if($x['mime'] == "image/png"){
        imageAlphaBlending($img_base, false);
        imageSaveAlpha($img_base, true);
    }
    imagecopyresampled($img_base, $img, 0, 0, 0, 0, $rs_width, $rs_height, $width, $height);
    $path_info = pathinfo($path);
    $output = $path_info['dirname'].'/'.$slug.'_small.'.$path_info['extension'];
    switch ($path_info['extension']) {
      case "gif":
         imagegif($img_base, $output);
         break;
    case "jpg":
    case "jpeg":
         imagejpeg($img_base, $output, 100); // No compression
         break;
      case "png":
         imagepng($img_base, $output, 6); // No compression
         break;
    }
}
function imgCopy($path, $new_file, $rs_width=160, $rs_height=160) {
    $x = getimagesize($path);
    $width  = $x['0'];
    $height = $x['1'];
    switch ($x['mime']) {
      case "image/gif":
         $img = imagecreatefromgif($path);
         break;
      case "image/jpg":
      case "image/jpeg":
         $img = imagecreatefromjpeg($path);
         break;
      case "image/png":
         $img = imagecreatefrompng($path);
         break;
    }
    $img_base = imagecreatetruecolor($rs_width, $rs_height);
    if($x['mime'] == "image/png"){
        imageAlphaBlending($img_base, false);
        imageSaveAlpha($img_base, true);
    }
    imagecopyresampled($img_base, $img, 0, 0, 0, 0, $rs_width, $rs_height, $width, $height);
    $path_info = pathinfo($path);
    $output = $new_file;
    switch ($path_info['extension']) {
      case "gif":
         imagegif($img_base, $output);
         break;
    case "jpg":
    case "jpeg":
         imagejpeg($img_base, $output);
         break;
      case "png":
         imagepng($img_base, $output);
         break;
    }
}
function image_to_webp($file_path, $quality = 100, $new_file = null, $destroy_original_file = false){
    $img = null;
    $_img = getimagesize($file_path);
    $img_format;
    if(!$_img) return;
    switch ($_img['mime']) {
        case "image/jpg":
        case "image/jpeg":
            $img = imagecreatefromjpeg($file_path);
            $img_format = 'jpg';
            break;
        case "image/png":
            $img = imagecreatefrompng($file_path);
            $img_format = 'png';
            break;
        case "image/gif":
            $img = imagecreatefromgif($file_path);
            $img_format = 'gif';
            break;
    }
    if(!$img_format){
        return false;
    }
    $file_extension = pathinfo($file_path, PATHINFO_EXTENSION);
    if(!$new_file){
        $new_file = str_replace('.'.$file_extension, '.webp', $file_path);
    }
    if($img_format == 'png' || $img_format == 'gif'){
        imagepalettetotruecolor($img);
        imagealphablending($img, true);
        imagesavealpha($img, true);
    }
    imagewebp($img, $new_file, -1); // No compression
    imagedestroy($img);
    if($destroy_original_file){
        unlink($file_path);
    }
}
function webp_to_image($file_path, $quality = 100, $new_format = 'jpg', $destroy_original_file = false){
    if($new_format != 'jpg' && $new_format != 'png'){
        echo 'File format must be jpg or png';
        return;
    }
    if(pathinfo($file_path, PATHINFO_EXTENSION) != 'webp'){
        echo 'File to convert must be .webp';
        return;
    }
    $img = imagecreatefromwebp($file_path);
    if($new_format == 'png'){
        imagepng($img, str_replace('.webp', '.'.$new_format, $file_path));
    } elseif($new_format == 'jpg'){
        imagejpeg($img, str_replace('.webp', '.'.$new_format, $file_path));
    }
    if(!$img){
        return;
    }
    imagedestroy($img);
    if($destroy_original_file){
        unlink($file_path);
    }
}
function webp_resize($file_path, $new_file = null, $newwidth = 160, $newheight = 160, $quality = 95){
    // Deprecated since v.1.7.1, replaced with generate_small_thumbnail() admin-functions.php
    // Used for small thumb
    $file_extension = pathinfo($file_path, PATHINFO_EXTENSION);
    if($file_extension != 'webp'){
        return;
    }
    if(!$new_file){
        $new_file = $file_path;
    }
    $_img = getimagesize($file_path);
    $width  = $_img['0'];
    $height = $_img['1'];
    $img = imagecreatefromwebp($file_path);
    $new_img = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresized($new_img, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    //output
    imagewebp($new_img, $new_file, -1); // No compression
}
function check_purchase_code(){
    return get_setting_value('purchase_code') == '' ? null : get_setting_value('purchase_code');
}
function get_admin_warning(){
    $results = [];
    if(!check_purchase_code() && !ADMIN_DEMO){
        array_push($results, 'Please provide your <b>Item Purchase code</b>. You can submit or update your Purchase code on site settings.');
    }
    if(URL_PROTOCOL == 'http://'){
        if(is_https()){
            array_push($results, 'You\'re using HTTPS but current config use HTTP, you can switch to HTTPS in Settings -> Advanced.');
        }
    }
    if(!check_writeable()){
        array_push($results, 'CloudArcade don\'t have permissions to modify files, uploaded files can\'t be saved and can\'t do backup or update. Change all folders and files CHMOD to 777 to fix this.');
    }
    if(!class_exists('ZipArchive')){
        array_push($results, '"ZipArchive" extension is missing or disabled. Can\'t do backup or update.');
    }
    if(!function_exists('curl_init')) {
        array_push($results, '"The cURL extension is missing or disabled. Please activate it in php.ini."');
    }
    if( (int)phpversion() < 7){
        array_push($results, 'You\'re using PHP v-'.phpversion().', CloudArcade is requires PHP v-7.xx');
    }
    return $results;
}
function is_https() {
    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
        return true;
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
        return true;
    } else {
        return false;
    }
}
function check_writeable(){
    if (is_writable('../config.php') && is_writable('../site-settings.php') && is_writable('../admin/upload.php')) {
        return true;
    } else {
        return false;
    }
}
function get_cur_url(){
    if(SUB_FOLDER && SUB_FOLDER != ''){
        return DOMAIN . substr(str_replace(SUB_FOLDER, '', $_SERVER['REQUEST_URI']), 1);
    } else {
        return DOMAIN . substr($_SERVER['REQUEST_URI'], 1);
    }
}
function get_rating($type, $game){
    if($type == '5'){
        if($game->upvote+$game->downvote > 0){
            return round(($game->upvote/($game->upvote+$game->downvote))*5);
        } else {
            return 0;
        }
    } else if($type == '5-decimal'){
        if($game->upvote+$game->downvote > 0){
            return number_format(($game->upvote/($game->upvote+$game->downvote))*5, 1);
        } else {
            return 0;
        }
    }
}
function is_user_admin($username){
    $conn = open_connection();
    $sql = "SELECT * FROM users WHERE username = :username";
    $st = $conn->prepare($sql);
    $st->bindValue(":username", $username, PDO::PARAM_STR);
    $st->execute();
    $row = $st->fetch();
    if ($row) {
        if($row['role'] === 'admin'){
            return true;
        }
    }
    return false;
}
function scan_folder($path){
    $array = [];
    $dirs = scandir( ABSPATH . $path);
    $dirs = array_diff($dirs, array('.', '..'));
    foreach ($dirs as $dir) {
        if(is_dir( ABSPATH . $path . $dir)){
            if($dir != '.' || $dir != '..'){
                array_push($array, $dir);
            }
        }
    }
    return $array;
}
function scan_files($path){
    $directory = new \RecursiveDirectoryIterator(ABSPATH.$path);
    $iterator = new \RecursiveIteratorIterator($directory);
    $files = array();
    foreach ($iterator as $info) {
        if (is_file($info->getPathname())) {
            $files[] = str_replace(ABSPATH, '', $info->getPathname());
        }
    }
    return $files;
}
function delete_files($target) {
    if(is_dir($target)){
        $files = glob( $target . '*', GLOB_MARK );
        foreach( $files as $file ){
            delete_files( $file );
        }
        if(is_dir($target)){
            rmdir( $target );
        }
    } elseif(is_file($target)) {
        unlink( $target );
    }
}
function do_backup($root_path, $backup_type = 'part'){
    // Deprecated since v1.6.9, replaced with backup_cms()
    // Backup directory and file name
    if (extension_loaded('zip') && is_login() && USER_ADMIN && !ADMIN_DEMO) {
        $backup_dir = $root_path.'/admin/backups';
        if (!file_exists($backup_dir)) {
            mkdir($backup_dir, 0755, true);
        }
        $backup_file = $_SESSION['username'].'-cloudarcade-backup-'.$backup_type.'-'.VERSION.'-'.time().'-'.generate_random_strings().'.zip';
        // Exclusions (file and directory names to exclude from backup)
        $ignore_extensions = ['zip', 'rar', '7z'];
        $exclusions = array('cloudarcade', 'private', 'cache', 'temp', 'thumbs', 'vendor', 'games', 'files', 'backups');
        if($backup_type == 'full'){
            $exclusions = array('cloudarcade', 'private', 'cache', 'temp', 'backups');
        }
        add_to_zip( $root_path, ABSPATH . 'admin/backups/'.$backup_file, $exclusions, $ignore_extensions );
    }
}
function add_to_zip($source, $destination, $ignore_folder = [], $ignore_extensions = []) {
    // Deprecated since v1.6.9, replaced with zip_files_recursive()
    if (extension_loaded('zip') && is_login()) {
        if (file_exists($source)) {
            $zip = new ZipArchive();
            if ($zip->open($destination, ZIPARCHIVE::CREATE)) {
                $max_size = 20 * 1024 * 1024; // 20 MB
                if (is_dir($source)) {
                    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
                    foreach ($files as $file) {
                        $ignored = false;
                        foreach ($ignore_folder as $ignore) {
                            if (stripos($file, $ignore) !== false) {
                                $ignored = true;
                                break;
                            }
                        }
                        if ($ignored) {
                            continue;
                        }
                        $relativePath = str_replace('\\', '/', str_replace($source . DIRECTORY_SEPARATOR, '', $file));
                        if (is_dir($file)) {
                            if (count(glob("$file/*")) > 0) { //If folder not empty
                                $zip->addEmptyDir($relativePath . '/');
                            }
                        } else if (is_file($file)) {
                            // Ignore files larger than 20 MB
                            if (filesize($file) > $max_size) {
                                continue;
                            }
                            // Ignore archive files
                            $ext = pathinfo($file, PATHINFO_EXTENSION);
                            if (in_array($ext, $ignore_extensions)) {
                                continue;
                            }
                            $zip->addFromString($relativePath, file_get_contents($file));
                        }
                    }
                } else if (is_file($source)) {
                    // Ignore files larger than 20 MB
                    if (filesize($source) > $max_size) {
                        return false;
                    }
                    // Ignore archive files
                    $ext = pathinfo($source, PATHINFO_EXTENSION);
                    if (in_array($ext, $ignore_extensions)) {
                        return false;
                    }
                    $zip->addFromString(basename($source), file_get_contents($source));
                }
            }
            return $zip->close();
        }
    }
    return false;
}
function generate_random_strings($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
function getIpAddr() {
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
        $ipAddr = $_SERVER["HTTP_CF_CONNECTING_IP"];
    } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ipAddr = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipAddr = strtok($_SERVER['HTTP_X_FORWARDED_FOR'], ',');
    } else {
        $ipAddr = $_SERVER['REMOTE_ADDR'];
    }
    if(strlen($ipAddr) > 16){
        $ipAddr = '0.0.0.0';
    }
    return $ipAddr;
}
function get_user_avatar($username = null){
    global $login_user;
    $user;
    if(!$username){
        if($login_user){
            $username = $login_user->username;
            $user = $login_user;
        }
    } else {
        $cur_user = User::getByUsername($username);
        if($cur_user){
            $user = $cur_user;
        }
    }
    if($user){
        if(file_exists(ABSPATH.'images/avatar/'.$username.'.png')){
            return DOMAIN.'images/avatar/'.$username.'.png';
        } elseif($user->avatar){
            return DOMAIN.'images/avatar/default/'.$user->avatar.'.png';
        }
    }
    return DOMAIN.'images/default_profile.png';
}
$lang_data = [];
function load_language($type){
    global $lang_data;
    global $language_file_exist;
    $file = '';
    if($type === 'index'){
        $lang = get_setting_value('language');
        if(isset($_GET['lang'])){
            // Set dynamic language
            if(strlen($_GET['lang']) <= 3){
                setcookie('lang', $_GET['lang'], strtotime('+3 months'), '/');
                $lang = $_GET['lang'];
            }
        }
        if(isset($_COOKIE['lang']) && !isset($_GET['lang'])){
            // Load saved dynamic language
            $lang = $_COOKIE['lang'];
        }
        $file = ABSPATH.'locales/public/'.$lang.'.json';
        if(!file_exists($file)){
            $file = TEMPLATE_PATH.'/locales/'.$lang.'.json'; // Old path, backward compatibility
        }
        if(!file_exists($file)){
            if(isset($_COOKIE['lang']) && !isset($_GET['lang'])){
                // Language selected is not exist anymore, the remove cookie data
                // To avoid developer confusion
                setcookie('lang', '', time() - 3600, '/');
            }
        }
    } elseif($type === 'admin'){
        $file = ABSPATH.'locales/admin/'.get_setting_value('language').'.json';
        if(!file_exists($file)){
            $file = ABSPATH.'locales/'.get_setting_value('language').'.json';
        }
    }
    if(file_exists($file)){
        $lang_data = json_decode(file_get_contents($file), true);
    }
}
function translate($str, $val1 = null, $val2 = null){
    global $lang_data;
    $translated = $str;
    if(isset($lang_data[$str])){
        $translated = $lang_data[$str];
    }
    if(!is_null($val1)){
        $translated = str_replace('%a', $val1, $translated);
    }
    if(!is_null($val2)){
        $translated = str_replace('%b', $val2, $translated);
    }
    return $translated;
}
function _t($str, $val1 = null, $val2 = null){
    return translate($str, $val1, $val2);
}
function _e($str, $val1 = null, $val2 = null){
    echo translate($str, $val1, $val2);
}
function get_translation_key($translated_str) {
    global $lang_data;
    // Instead of get value by a key, this function return a key by value
    foreach ($lang_data as $key => $value) {
        if ($value === $translated_str) {
            return $key;
        }
    }
    return null; // Return null if no matching key is found
}
function get_base_taxonomy($page_name){
    // Get original base
    $custom_path_data = get_setting_value('custom_path');
    if(!empty($custom_path_data)){
        if(isset($custom_path_data[$page_name])){
            return $custom_path_data[$page_name];
        }
    }
    return $page_name;
}
function get_custom_path($base_name){
    // Changed in v1.6.2
    // Replacing convert_to_custom_path()
    $custom_path_data = get_setting_value('custom_path');
    if (!empty($custom_path_data)) {
        $custom_name = array_search($base_name, $custom_path_data);
        if($custom_name){
            return $custom_name;
        }
    }
    return $base_name;
}
function convert_to_custom_path($page_name){
    // Deprecated since v1.6.2
    global $options;
    if(isset($options['custom_path']) && $options['custom_path']){
        $custom_name = array_search($page_name, $options['custom_path']);
        if($custom_name){
            return $custom_name;
        }
    }
    return $page_name;
}
function str_encrypt($str, $key){
    $cipher = "AES-128-CTR";
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = '1234567891011121';
    return openssl_encrypt($str, $cipher, $key, $options=0, $iv);
}
function str_decrypt($str, $key){
    $cipher = "AES-128-CTR";
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = '1234567891011121';
    return openssl_decrypt($str, $cipher, $key, $options=0, $iv);
}
function show_alert($message, $type, $btn = true){
    if($type === 'error'){
        $type = 'danger';
    }
    echo '<div class="alert alert-'.$type.' alert-dismissible fade show" role="alert">'._t($message);
    if($btn){
        echo '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>';
    }
    echo '</div>';
}
function get_option($name){
    // Deprecated since v1.5.7, use get_pref() instead
    global $conn;
    $sql = "SELECT * FROM prefs WHERE name = :name";
    $st = $conn->prepare($sql);
    $st->bindValue(':name', $name, PDO::PARAM_STR);
    $st->execute();
    $row = $st->fetch();
    if($row){
        return $row['value'];
    } else {
        return null;
    }
}
function update_option($name, $value){
    // Deprecated since v1.5.7, use set_pref() instead
    global $conn;
    $sql = "SELECT id FROM prefs WHERE name = :name";
    $st = $conn->prepare($sql);
    $st->bindValue(':name', $name, PDO::PARAM_STR);
    $st->execute();
    $row = $st->fetch();
    if($row){
        $sql = "UPDATE prefs SET value = :value WHERE name = :name";
        $st = $conn->prepare($sql);
        $st->bindValue(':value', $value, PDO::PARAM_STR);
        $st->bindValue(':name', $name, PDO::PARAM_STR);
        $st->execute();
    } else {
        $sql = "INSERT INTO prefs (name, value) VALUES (:name, :value)";
        $st = $conn->prepare($sql);
        $st->bindValue(':value', $value, PDO::PARAM_STR);
        $st->bindValue(':name', $name, PDO::PARAM_STR);
        $st->execute();
    }
}
function get_pref($name){
    // Alternative for get_option()
    // Reason: better naming
    global $conn;
    $sql = "SELECT * FROM prefs WHERE name = :name";
    $st = $conn->prepare($sql);
    $st->bindValue(':name', $name, PDO::PARAM_STR);
    $st->execute();
    $row = $st->fetch();
    if($row){
        return $row['value'];
    } else {
        // Return null if key doesnt exist
        return null;
    }
}
function get_pref_bool($name){
    // Return boolean value
    // Only for "true" or "false" value
    $value = get_pref($name);
    if(is_null($value)){
        // The key is not exist
        return false;
    } else {
        if($value == 'true'){
            return true;
        } else {
            return false;
        }
    }
}
function set_pref($name, $value){
    // Alternative for update_option()
    // Reason: better naming
    global $conn;
    $sql = "SELECT id FROM prefs WHERE name = :name";
    $st = $conn->prepare($sql);
    $st->bindValue(':name', $name, PDO::PARAM_STR);
    $st->execute();
    $row = $st->fetch();
    if($row){
        $sql = "UPDATE prefs SET value = :value WHERE name = :name";
        $st = $conn->prepare($sql);
        $st->bindValue(':value', $value, PDO::PARAM_STR);
        $st->bindValue(':name', $name, PDO::PARAM_STR);
        $st->execute();
    } else {
        $sql = "INSERT INTO prefs (name, value) VALUES (:name, :value)";
        $st = $conn->prepare($sql);
        $st->bindValue(':value', $value, PDO::PARAM_STR);
        $st->bindValue(':name', $name, PDO::PARAM_STR);
        $st->execute();
    }
}
function remove_pref($name){
    global $conn;
    $sql = "DELETE FROM prefs WHERE name = :name LIMIT 1";
    $st = $conn->prepare($sql);
    $st->bindValue(':name', $name, PDO::PARAM_STR);
    $st->execute();
}
function register_sidebar( $args = array() ){
    global $registered_sidebars;
    $i = count( $registered_sidebars ) + 1;
    $id_is_empty = empty( $args['id'] );
    $defaults = array(
        'name'           => 'Sidebar X',
        'id'             => "sidebar-$i",
        'description'    => '',
    );
    $sidebar = merge_args($args, $defaults);
    $registered_sidebars[ $sidebar['id'] ] = $sidebar;
    return $sidebar['id'];
}
function merge_args($args, $defaults = array()){
    foreach ($args as $key => $value) {
        $defaults[$key] = $value;
    }
    return $defaults;
}
function widget_aside($name, $args = array()){
    global $stored_widgets;
    global $registered_sidebars;
    if(isset($registered_sidebars[$name])){
        if(isset($stored_widgets[$name])){
            $list = $stored_widgets[$name];
            if(count($list)){
                foreach ($list as $item) {
                    $key = $item['widget'];
                    $widget;
                    if(widget_exists($item['widget'])){
                        $widget = get_widget( $item['widget'], $item );
                    } else {
                        continue;
                    }
                    $widget->widget( $item );
                }
            }
        }
    }
}
function nav_get_children($name, $parent_id = 0){
    global $conn;
    $items = [];
    $sql = "SELECT * FROM menus WHERE parent_id = :parent_id AND name = :name ORDER BY id ASC";
    $st = $conn->prepare($sql);
    $st->bindValue(":parent_id", $parent_id, PDO::PARAM_INT);
    $st->bindValue(":name", $name, PDO::PARAM_STR);
    $st->execute();
    $result = $st->fetchAll(PDO::FETCH_ASSOC);
    if (count($result)) {
        foreach ($result as $row) {
            $child = nav_get_children($name, $row['id']);
            if($child){
                $row['children'] = $child;
            }
            $items[] = $row;
        }
    } else {
        $items = [];
    }
    return $items;
}
function nav_menu_array($name = 'top_nav'){
    return nav_get_children($name, 0);
}
function get_template_path(){
    return DOMAIN . TEMPLATE_PATH;
}
function get_category_icon($slug, $array = []){
    foreach ($array as $key => $item) {
        foreach ($item as $child) {
            if($child == $slug){
                return $key;
            }
        }
    }
    return 'other';
}
function is_favorited_game($game_id){
    // Check if a game is favorited by current user
    global $login_user;
    global $conn;
    if($login_user){
        $conn = open_connection();
        $sql = "SELECT * FROM favorites WHERE user_id = :user_id AND game_id = :game_id LIMIT 1";
        $st = $conn->prepare($sql);
        $st->bindValue(":user_id", $login_user->id, PDO::PARAM_INT);
        $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
        $st->execute();
        $row = $st->fetch(PDO::FETCH_ASSOC);
        if($row){
            return true;
        } else {
            return false;
        }
    }
    return null;
}
function format_number_abbreviated($number) {
    if($number >= 1000){
        return substr($number, 0, -3).'k';
    }
    return $number;
}
function get_tags($sort = 'random', $limit = 20){
    global $conn;
    $_sort;
    if($sort == 'name'){
        $_sort = 'tags.name ASC';
    } else if($sort == 'usage'){
        $_sort = 'tags.usage_count DESC';
    } else {
        $_sort = 'RAND()';
    }
    $_limit = (int)$limit;
    $conn = open_connection();
    $sql = 'SELECT name FROM tags
    ORDER BY '.$_sort.'
    LIMIT '.$_limit;
    $st = $conn->prepare($sql);
    $st->execute();
    $tag_names = $st->fetchAll(PDO::FETCH_COLUMN);
    return $tag_names;
}
function get_tag_usage($name){
    global $conn;
    $conn = open_connection();
    $sql = 'SELECT usage_count FROM tags
    WHERE name = :name LIMIT 1';
    $st = $conn->prepare($sql);
    $st->bindValue(':name', $name, PDO::PARAM_STR);
    $st->execute();
    $count = $st->fetch(PDO::FETCH_ASSOC);
    return $count['usage_count'];
}
function get_tag_extra_field($tag, $key) {
    $json = null;
    if (is_object($tag) && isset($tag->extra_fields)) {
        $json = $tag->extra_fields;
    } elseif (is_array($tag) && isset($tag['extra_fields'])) {
        $json = $tag['extra_fields'];
    }
    if ($json !== null) {
        $fields = json_decode($json, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            return null;
        }
        if (isset($fields[$key]) && $fields[$key] !== '') {
            return $fields[$key];
        }
    }
    return null;
}
function get_setting_value($name){
    if(isset(SETTINGS[$name])){
        return SETTINGS[$name]['value'];
    }
    throw new Exception("Key does not exist = ".$name);
}
function get_setting($name){
    if(isset(SETTINGS[$name])){
        return SETTINGS[$name];
    }
    throw new Exception("Key does not exist = ".$name);
}
function is_valid_json($json) {
    json_decode($json);
    return (json_last_error() === JSON_ERROR_NONE);
}
function get_csrf_token() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}
function verify_csrf_token() {
    if (!isset($_POST['csrf_token']) || !isset($_SESSION['csrf_token'])) {
        return false;
    }
    $isValid = hash_equals($_SESSION['csrf_token'], $_POST['csrf_token']);
    // Regenerate the token
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    return $isValid;
}
function get_content_translation($content_type, $content_id, $language, $field = 'all') {
    // Sample usage : get_content_translation('game', 1, 'en', 'title');
    $conn = open_connection();
    if ($field === 'all') {
        $sql = "SELECT field, translation FROM translations WHERE content_type = :content_type AND content_id = :content_id AND language = :language";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
        $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
        $stmt->bindParam(':language', $language, PDO::PARAM_STR);
    } else {
        $sql = "SELECT translation FROM translations WHERE content_type = :content_type AND content_id = :content_id AND language = :language AND field = :field";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
        $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
        $stmt->bindParam(':language', $language, PDO::PARAM_STR);
        $stmt->bindParam(':field', $field, PDO::PARAM_STR);
    }
    $stmt->execute();
    if ($field === 'all') {
        $translations = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); // This will fetch the results in key-value pairs ['title' => 'Translation of title', 'description' => 'Translation of description']
        return $translations;
    } else {
        $translation = $stmt->fetchColumn();
        return $translation === false ? null : $translation; // Will return null if no result found
    }
}
function has_content_translation($content_type, $content_id, $language = null, $specific_field = 'all') {
    $conn = open_connection();
    $sql = "SELECT 1 FROM translations WHERE content_type = :content_type AND content_id = :content_id";
    if ($language !== null) {
        $sql .= " AND language = :language";
    }
    if ($specific_field !== 'all') {
        $sql .= " AND field = :field";
    }
    $sql .= " LIMIT 1";  // Added LIMIT 1 for better performance
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
    $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
    if ($language !== null) {
        $stmt->bindParam(':language', $language, PDO::PARAM_STR);
    }
    if ($specific_field !== 'all') {
        $stmt->bindParam(':field', $specific_field, PDO::PARAM_STR);
    }
    $stmt->execute();
    return $stmt->fetchColumn() !== false;
}
function get_current_user_hash(){
    // Only current logged in user that can get their password (hashed)
    // used in user.php
    global $login_user;
    if(is_login() && isset($login_user)){
        $user = get_user($login_user->username);
        if($user){
            return $user['password'];
        }
    }
    return null;
}
function is_mobile_device(){
    // Used to check current visitor is using mobile device or not. return boolean.
    // $_SESSION used for caching, no need to call the library multiple times
    if(isset($_SESSION['_is_mobile_device'])){
        return $_SESSION['_is_mobile_device'];
    } else {
        require_once ABSPATH.'vendor/MobileDetect/MobileDetect.php';
        $detect = new \Detection\MobileDetect;
        $_SESSION['_is_mobile_device'] = $detect->isMobile();
        return $_SESSION['_is_mobile_device'];
    }
}
function has_admin_access(){
    if(is_login() && USER_ADMIN && !ADMIN_DEMO){
        return true;
    } else {
        return false;
    }
}
function is_cached_query_allowed(){
    if(defined('SKIP_QUERY_CACHE')){
        return false;
    }
    return true;
}
function get_cached_query($query_key){
    global $caching_system;
    if(!is_null($caching_system)){
        if($caching_system instanceof Memcached || $caching_system instanceof Memcache){
            $data = $caching_system->get($query_key);
            if($data !== false){
                if(get_pref_bool('query-cache_debug')){
                    echo '<div style="position: relative; z-index: 1000;"><div style="background: red; color: #fff; position: absolute;">Cached: '.ucfirst(get_pref('query-cache_active')).'</div></div>';
                }
                return $data;
            } else {
                return null;
            }
        } else if($caching_system instanceof Redis){
            if($caching_system->exists($query_key)){
                if(get_pref_bool('query-cache_debug')){
                    echo '<div style="position: relative; z-index: 1000;"><div style="background: red; color: #fff; position: absolute;">Cached: '.ucfirst(get_pref('query-cache_active')).'</div></div>';
                }
                return $caching_system->get($query_key);
            } else {
                return null;
            }
        }
    }
    return null;
}
function set_cached_query($query_key, $json_data){
    if(!is_string($json_data)){
        $json_data = json_encode($json_data);
    }
    global $caching_system;
    $expire_time = 7200; // seconds
    if(!is_null($caching_system)){
        if($caching_system instanceof Memcached || $caching_system instanceof Memcache){
            $exists = $caching_system->get('exists_'.$query_key);
            if(!$exists) {
                if($caching_system instanceof Memcached){
                    $caching_system->set($query_key, $json_data, $expire_time);
                    $caching_system->set('exists_'.$query_key, true, $expire_time);
                } else {
                    $caching_system->set($query_key, $json_data, 0, $expire_time);
                    $caching_system->set('exists_'.$query_key, true, 0, $expire_time);
                }
            }
        } else if($caching_system instanceof Redis){
            if(!$caching_system->exists($query_key)){
                $caching_system->set($query_key, $json_data, ['ex' => $expire_time]);
            }
        }
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/cron.php
New file
@@ -0,0 +1,414 @@
<?php
if(!defined('CRON')){
    die('p');
}
$data = get_pref('cron-job');
define("LIMIT", 3);
$game_count = 0;
$log_txt = "";
if(!is_null($data)){
    $data = json_decode($data, true);
    if(isset($data['auto-post'])){
        $task_date = $data['auto-post']['date'];
        $cur_date = date("Y-m-d H:i:s");
        if($cur_date >= $task_date){
            $datetime1 = date_create($cur_date);
            $datetime2 = date_create($task_date);
            $interval = date_diff($datetime1, $datetime2);
            $diff = $interval->format('%d');
            if($diff < 4){
                $new_task_date = date('Y-m-d H:i:s', strtotime('+8 hours', strtotime(date('Y-m-d H:i:s'))));
                $data['auto-post']['date'] = $new_task_date;
                update_option('cron-job', json_encode($data));
                auto_add_games($data);
            } else { //More than 4 days inactive
                echo 'remove';
                unset($data['auto-post']);
                update_option('cron-job', json_encode($data));
            }
        } else {
            if(!defined('CRON')){
                echo 'on the way';
            }
        }
    } else {
        //Inactive
    }
}
function auto_add_games($data){
    if(!ADMIN_DEMO){
        add_to_log();
        $data['auto-post']['last-status'] = 'null';
        $url = 'https://api.cloudarcade.net/fetch-auto.php?action=fetch&code='. check_purchase_code();
        $url .= '&data='.json_encode($data['auto-post']['list']);
        $url .= '&ref='.DOMAIN.'&v='.VERSION;
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        $curl = curl_exec($ch);
        curl_close($ch);
        $game_data = json_decode($curl, true);
        if(isset($game_data['error'])){
            add_to_log('Failed auto add games: '.$curl);
        } else if($game_data){
            foreach ($game_data as $a => $b) {
                foreach ($b as $item) {
                    $item['tags'] = '';
                    x_add_game2($item);
                }
            }
        } else {
            add_to_log('Failed auto add games. Null');
        }
        write_log();
    }
}
function x_add_game2($data){
    $_POST = $data;
    // Copied from request.php add_game()
    $ref = '';
    if(isset($_POST['ref'])) $ref = $_POST['ref'];
    $_POST['description'] = html_purify($_POST['description']);
    $_POST['instructions'] = html_purify($_POST['instructions']);
    if($_POST['source'] == 'self' || $_POST['source'] == 'remote'){
        if(!isset($_POST['published'])){
            $_POST['published'] = false;
        }
    }
    if(!isset($_POST['is_mobile'])){
        $_POST['is_mobile'] = false;
    }
    $redirect = 0;
    if(isset($_POST['redirect'])){
        $redirect = $_POST['redirect'];
    }
    if(isset($_POST['slug'])){
        $slug = esc_slug($_POST['slug']);
    } else {
        $slug = esc_slug(strtolower(str_replace(' ', '-', $_POST["title"])));
    }
    $slug = preg_replace('/-{2,}/', '-', $slug);
    $slug = trim($slug, '-');
    $_POST['slug'] = $slug;
    if(is_array($_POST['category'])){
        // Array category is not allowed
        // Convert to string
        $cats = '';
        $i = 0;
        $total = count($_POST['category']);
        foreach ($_POST['category'] as $key) {
            $cats = $cats.$key;
            if($i < $total-1){
                $cats = $cats.',';
            }
            $i++;
        }
        $_POST['category'] = $cats;
    }
    if($_POST['category'] == '' || $_POST['category'] == ' '){
        $_POST['category'] = 'Other';
    }
    // Begin category filter
    if(file_exists(ABSPATH."content/plugins/category-filter")){
        // Plugin exist
        $cats = '';
        $categories = commas_to_array($_POST['category']);
        $i = 0;
        $total = count($categories);
        foreach ($categories as $key) {
            $cats = $cats.category_name_filtering($key);
            if($i < $total-1){
                $cats = $cats.',';
            }
            $i++;
        }
        $_POST['category'] = $cats;
    }
    $game = new Game;
    $check=$game->getBySlug($slug);
    $status='failed';
    if(is_null($check)){
        if($ref != 'upload'){
            // Come from fetch games
            if(IMPORT_THUMB){
                // Check if webp is activated
                $use_webp = get_setting_value('webp_thumbnail');
                import_thumbnail($_POST['thumb_2'], $slug, 2);
                $name = basename($_POST['thumb_2']);
                $extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
                $_POST['thumb_2'] = '/thumbs/'.$slug.'_2.'.$extension;
                if($use_webp){
                    $file_extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
                    $_POST['thumb_2'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_2']);
                }
                //
                import_thumbnail($_POST['thumb_1'], $slug, 1);
                $name = basename($_POST['thumb_1']);
                $extension = pathinfo($_POST['thumb_1'], PATHINFO_EXTENSION);
                $_POST['thumb_1'] = '/thumbs/'.$slug.'_1.'.$extension;
                if($use_webp){
                    $file_extension = pathinfo($_POST['thumb_1'], PATHINFO_EXTENSION);
                    $_POST['thumb_1'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_1']);
                }
                if( SMALL_THUMB ){
                    $output = pathinfo($_POST['thumb_2']);
                    $_POST['thumb_small'] = '/thumbs/'.$slug.'_small.'.$output['extension'];
                    if($use_webp){
                        $file_extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
                        $_POST['thumb_small'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_small']);
                        generate_small_thumbnail($_POST['thumb_2'], $slug);
                    } else {
                        generate_small_thumbnail($_POST['thumb_2'], $slug);
                    }
                }
            }
        }
        $game->storeFormValues( $_POST );
        $game->insert();
        $status='added';
        //
        $cats = commas_to_array($_POST['category']);
        if(is_array($cats)){ //Add new category if not exist
            $length = count($cats);
            for($i = 0; $i < $length; $i++){
                $_POST['name'] = $cats[$i];
                $category = new Category;
                $exist = $category->isCategoryExist($_POST['name']);
                if($exist){
                  //
                } else {
                    unset($_POST['slug']);
                    $_POST['description'] = '';
                    $category->storeFormValues( $_POST );
                    $category->insert();
                }
                $category->addToCategory($game->id, $category->id);
            }
        }
    }
    else{
        $status='exist';
    }
    $keys =['title', 'slug', 'description', 'instructions', 'width', 'height', 'category', 'thumb_1', 'thumb_2', 'url', 'tags'];
    if($status != 'added'){
        if($_POST['source'] == 'self' || $_POST['source'] == 'remote'){
            // Store current fields
            foreach ($keys as $item) {
                $_SESSION[$item] = (isset($_POST[$item])) ? $_POST[$item] : null;
            }
        }
    } else {
        // Successfully added
        // Clear last fields
        if(isset($_SESSION['title'])){
            foreach ($keys as $item) {
                if(isset($_SESSION[$item])){
                    unset($_SESSION[$item]);
                }
            }
        }
        add_to_log('Game added - '.$_POST['source'].' - '.$slug);
    }
    if($status == 'exist'){
        add_to_log('Game alredy exist - '.$_POST['source'].' - '.$slug);
        $status='exist';
    }
}
function category_name_filtering($category_name){
    // Specific function for "Category Filter" plugin
    if(true){
        $json = get_pref("category-filter");
        if($json){
            $data = json_decode($json, true);
            foreach ($data as $key => $value) {
                if($key == $category_name){
                    return $value;
                }
            }
        }
    }
    return $category_name;
}
function generate_small_thumbnail($path, $slug){
    // copied from admin-functions.php
    $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
    if(!file_exists($parent_dir.$path)){
        echo 'error 910: img file not found!';
        return;
    }
    // $use_webp = get_setting_value('webp_thumbnail');
    $path_info = pathinfo($path);
    $root_folder = explode ("/", $path);
    $output = "thumbs/" . $slug . "_small." . $path_info['extension'];
    if($path_info['extension'] == 'webp'){
        // WEBP thumbnail
        $file_extension = pathinfo($path, PATHINFO_EXTENSION);
        $output = str_replace('.'.$file_extension, '.webp', $output);
        $_img = getimagesize($parent_dir.$path);
        $width  = $_img['0'];
        $height = $_img['1'];
        $img = imagecreatefromwebp($parent_dir.$path);
        $new_img = imagecreatetruecolor(160, 160);
        imagecopyresized($new_img, $img, 0, 0, 0, 0, 160, 160, $width, $height);
        //output
        imagewebp($new_img, $parent_dir.$output, -1); // No compression
    } else {
        // PNG, JPG, GIF
        $x = getimagesize($parent_dir.$path);
        $width  = $x['0'];
        $height = $x['1'];
        switch ($x['mime']) {
          case "image/gif":
             $img = imagecreatefromgif($parent_dir.$path);
             break;
          case "image/jpg":
          case "image/jpeg":
             $img = imagecreatefromjpeg($parent_dir.$path);
             break;
          case "image/png":
             $img = imagecreatefrompng($parent_dir.$path);
             break;
        }
        $img_base = imagecreatetruecolor(160, 160);
        if($x['mime'] == "image/png"){
            imageAlphaBlending($img_base, false);
            imageSaveAlpha($img_base, true);
        }
        imagecopyresampled($img_base, $img, 0, 0, 0, 0, 160, 160, $width, $height);
        $path_info = pathinfo($parent_dir.$path);
        switch ($path_info['extension']) {
          case "gif":
             imagegif($img_base, $parent_dir.$output); // No compression
             break;
        case "jpg":
        case "jpeg":
             imagejpeg($img_base, $parent_dir.$output, 100); // No compression
             break;
          case "png":
             imagepng($img_base, $parent_dir.$output, 6); // Balance compression
             break;
        }
        imagedestroy($img);
        imagedestroy($img_base);
    }
}
function import_thumbnail($url, $game_slug, $index = null){
    // copied from admin-functions.php
    $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
    if($url) {
        if (!file_exists($parent_dir.'thumbs')) {
            mkdir($parent_dir.'thumbs', 0777, true);
        }
        $extension = pathinfo($url, PATHINFO_EXTENSION);
        $identifier = '';
        if(!is_null($index)){
            $identifier = '_'.$index;
        }
        $new = $parent_dir.'thumbs/'.$game_slug.$identifier.'.'.$extension;
        if( get_setting_value('webp_thumbnail') ){
            // Using WEBP format
            $file_extension = pathinfo($url, PATHINFO_EXTENSION);
            $new = str_replace('.'.$file_extension, '.webp', $new);
            // Create a cURL resource
            $ch = curl_init();
            // Set cURL options for retrieving the remote image file
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
            // Retrieve the remote image and save it to a local file
            $remoteImage = curl_exec($ch);
            if($remoteImage !== false){
                $localFile = fopen($new, 'w');
                if($localFile){
                    fwrite($localFile, $remoteImage);
                    fclose($localFile);
                } else {
                    echo 'Could not create local file';
                }
            } else {
                echo 'Could not download remote image';
            }
            // Close the cURL resource
            curl_close($ch);
            image_to_webp($new, 100, $new);
        } else {
            // Using JPG/PNG/GIF format
            save_remote_thumbnail($url, $new);
        }
    }
}
function save_remote_thumbnail($source, $destination, $quality = 100) {
    // copied from admin-functions.php
    $ch = curl_init();
    // Set cURL options for retrieving the remote image file
    curl_setopt($ch, CURLOPT_URL, $source);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
    // Retrieve the remote image and create an image resource from it
    $remoteImage = curl_exec($ch);
    if($remoteImage !== false){
        $image = imagecreatefromstring($remoteImage);
        if($image !== false){
            $info = getimagesizefromstring($remoteImage);
            if ($info['mime'] == 'image/png'){
                imageAlphaBlending($image, true);
                imageSaveAlpha($image, true);
                imagepng($image, $destination, 6);
            } else if($info['mime'] == 'image/jpg' || $info['mime'] == 'image/jpeg') {
                imagejpeg($image, $destination, 100); // No compression
            } else if($info['mime'] == 'image/gif') {
                imagegif($image, $destination);
            }
            imagedestroy($image);
        } else {
            echo 'Could not create image resource';
        }
    } else {
        echo 'Could not download remote image';
    }
    // Close the cURL resource
    curl_close($ch);
}
function add_to_log($msg = ""){
    global $log_txt;
    if($msg == ""){
        $log_txt .= "---- Executed - ".date('Y-m-d H:i:s');
    } else {
        $log_txt .= $msg;
    }
    $log_txt .= PHP_EOL;
}
function write_log(){
    global $log_txt;
    if($log_txt != ""){
        $path = ABSPATH . PLUGIN_PATH . '/auto-publish';
        if(file_exists($path . '/log.txt')){
            $filesizeKB = filesize($path . '/log.txt') / 1024;
            if($filesizeKB >= 50){
                file_put_contents($path . '/log_prev.txt', file_get_contents($path . '/log.txt'));
                unlink($path . '/log.txt');
            }
        }
        if(file_exists($path)){
            $full_log = "";
            if(file_exists($path . '/log.txt')){
                $full_log = file_get_contents($path . '/log.txt');
            }
            $full_log = $log_txt.$full_log;
            file_put_contents($path . '/log.txt', $full_log);
        }
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/fetch.php
New file
@@ -0,0 +1,47 @@
<?php
require( '../config.php' );
require( '../init.php' );
$content_type = 'game';
if(isset($_POST['type'])){
    $content_type = $_POST['type'];
}
if($content_type == 'game'){
    if(isset($_POST['category_id'])){
        $cat_id = (int)$_POST['category_id'];
        $amount = isset($_POST['amount']) ? (int)$_POST['amount'] : 10;
        $offset = isset($_POST['offset']) ? (int)$_POST['offset'] : 0;
        $data = Category::getListByCategory( $cat_id, $amount, $offset );
        if($data){
            echo json_encode($data['results']);
        } else {
            echo '[]';
        }
    } else {
        if(isset($_POST['sort_by'])){
            $sort = $_POST['sort_by'];
            $amount = isset($_POST['amount']) ? (int)$_POST['amount'] : 10;
            $offset = isset($_POST['offset']) ? (int)$_POST['offset'] : 0;
            $result = [];
            if($sort == 'new'){
                $data = Game::getList( $amount, 'id DESC', $offset );
                $result = $data['results'];
            } elseif($sort == 'random'){
                $data = Game::getList( $amount, 'RAND()', $offset );
                $result = $data['results'];
            } elseif($sort == 'popular'){
                $data = Game::getList( $amount, 'views DESC', $offset );
                $result = $data['results'];
            } elseif($sort == 'likes'){
                $data = Game::getList( $amount, 'upvote DESC', $offset );
                $result = $data['results'];
            }
            echo json_encode($result);
        }
    }
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/game_list.php
New file
@@ -0,0 +1,81 @@
<?php
// Deprecated since v1.6.4 replaced with theme-functions.php
// However, this script maybe still used in admin area
function get_game_list($type, $amount=12, $page=0, $count=true){
    if($type == 'new'){
        $data = Game::getList( $amount, 'id DESC', $page, $count );
        return $data;
    } elseif($type == 'random'){
        $data = Game::getList( $amount, 'RAND()', $page, $count );
        return $data;
    } elseif($type == 'popular'){
        $data = Game::getList( $amount, 'views DESC', $page, $count );
        return $data;
    } elseif($type == 'likes'){
        $data = Game::getList( $amount, 'upvote DESC', $page, $count );
        return $data;
    } elseif($type == 'trending'){
        // Last 7 days trending
        $data = [];
        $conn = open_connection();
        $date = new \DateTime('now');
        // Get last 7 days
        $date->sub(new DateInterval('P7D'));
        $sql = "SELECT * FROM trends WHERE created >= '{$date->format('Y-m-d')}'";
        $st = $conn->prepare($sql);
        $st->execute();
        $row = $st->fetchAll(PDO::FETCH_ASSOC);
        $list = array();
        if(count($row)){
            foreach ($row as $item) {
                if(isset($list[$item['slug']])){
                    $list[$item['slug']] += (int)$item['views'];
                } else {
                    $list[$item['slug']] = (int)$item['views'];
                }
            }
            arsort($list);
            $i = 0;
            foreach ($list as $slug => $views) {
                if($i < $amount){
                    $game = Game::getBySlug($slug);
                    if($game){
                        $data[] = $game;
                    }
                }
                $i++;
            }
        }
        return (array(
            "results" => $data,
            "totalRows" => count($list),
            "totalPages" => 1
        ));
    }
}
function get_collection($name, $amount = 12){
    $data = Collection::getListByCollection( $name, $amount );
    return $data;
}
function get_game_list_category($cat_name, $amount, $page=0){
    $cat_id = Category::getIdByName( $cat_name );
    $data = Category::getListByCategory( $cat_id, $amount, $page );
    return $data;
}
function get_game_list_category_id($cat_id, $amount, $page=0){
    $data = Category::getListByCategory( $cat_id, $amount, $page );
    return $data;
}
function get_game_list_categories($arr, $amount, $page=0, $random = true){
    $ids = array();
    foreach ($arr as $cat_name) {
        $cat_id = Category::getIdByName( $cat_name );
        array_push($ids, $cat_id);
    }
    $data = Category::getListByCategories( $ids, $amount, $page, $random );
    return $data;
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/index.php
CloudArcade/cloudarcade/cloudarcade/includes/load-class.php
New file
@@ -0,0 +1,10 @@
<?php
require_once( ABSPATH . CLASS_PATH . "/Page.php" );
require_once( ABSPATH . CLASS_PATH . "/Category.php" );
require_once( ABSPATH . CLASS_PATH . "/Game.php" );
require_once( ABSPATH . CLASS_PATH . "/User.php" );
require_once( ABSPATH . CLASS_PATH . "/Auth.php" );
require_once( ABSPATH . CLASS_PATH . "/Widget.php" );
?>
CloudArcade/cloudarcade/cloudarcade/includes/load-settings.php
New file
@@ -0,0 +1,115 @@
<?php
define( "ADMIN_DEMO", false );
require( 'sub-folder.php' );
define('SETTINGS', fetch_settings_data()); // SETTINGS is a replacement for $options
function fetch_settings_data(){
    if(defined('SETTINGS')){
        return SETTINGS;
    } else {
        $conn = open_connection();
        $sql = "SELECT * FROM settings";
        $st = $conn->prepare($sql);
        $st->execute();
        $rows = $st->fetchAll(PDO::FETCH_ASSOC);
        $assoc_array = []; // Convert to associative array
        foreach ($rows as $item) {
            if($item['name'] == 'custom_path'){
                if($item['value'] != ''){
                    $item['value'] = json_decode($item['value'], true);
                } else {
                    $item['value'] = [];
                }
            }
            if($item['type'] == 'bool' || $item['type'] == 'number'){
                $item['value'] = (int)$item['value'];
            }
            $assoc_array[$item['name']] = $item;
        }
        return $assoc_array;
    }
}
$options = [];
foreach (SETTINGS as $key => $value) {
    // Compatibility mode
    // $options is dropped, but many themes still depend on it
    if($value['type'] == 'bool'){
        $str_bool = 'false';
        if($value['value']){
            $str_bool = 'true';
        }
        $options[$key] = $str_bool;
    } else {
        $options[$key] = $value['value'];
    }
}
unset($options['purchase_code']);
if(ADMIN_DEMO){
    // Allow dynamic theme
    $theme = 'arcade-one';
    if(isset($_GET['theme'])){
        $filtered_theme_dir = preg_replace('/[^a-zA-Z0-9_-]/', '', $_GET['theme']);
        $json_path = ABSPATH . 'content/themes/' . $filtered_theme_dir . '/info.json';
        if(file_exists( $json_path )){
            $theme = $_GET['theme'];
            $_SESSION['theme'] = $_GET['theme'];
        }
    } elseif(isset($_SESSION['theme'])){
        $theme = $_SESSION['theme'];
    }
    $options['theme_name'] = $theme;
}
$www = '';
if(defined('IS_VISITOR_PAGE') && SETTINGS['use_www']['value']){
    // www only work in visitor page and will be ignored in the admin panel
    // this will prevent admin panel error (false configuration from user)
    if(substr($_SERVER['SERVER_NAME'], 0, 4) != 'www.'){
        $www = 'www.';
    }
}
define( "PRETTY_URL", SETTINGS['pretty_url']['value'] );
$url_protocol = 'http://';
if(SETTINGS['use_https']['value']){
    $url_protocol = 'https://';
}
define( "URL_PROTOCOL", $url_protocol );
define( "DOMAIN", URL_PROTOCOL . $www . $_SERVER['SERVER_NAME'] . get_domain_port() . '/' . SUB_FOLDER );
define( "SITE_DOMAIN", $_SERVER['SERVER_NAME'] );
// if($options['custom_path']){
//     $options['custom_path'] = json_decode($options['custom_path'], true);
// }
function get_domain_port(){
    //Used for localhost with port
    $port = $_SERVER['SERVER_PORT'];
    if($port && $port === '8080'){
        return ':'.$port;
    } else {
        return '';
    }
}
function load_site_settings(){
    // Deprecated since v1.6.2
    $conn = open_connection();
    $sql = "SELECT * FROM options";
    $st = $conn->prepare($sql);
    $st->execute();
    $row = $st->fetchAll();
    $opt = array();
    foreach ($row as $item) {
        $opt[$item['name']] = $item['value'];
    }
    return $opt;
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-404.php
New file
@@ -0,0 +1,12 @@
<?php
$base_taxonomy = '404';
require_once( TEMPLATE_PATH . '/functions.php' );
$page_title = '404 - '._t('Page not found').' | '.SITE_TITLE;
$meta_description = _t('Page not found');
require( TEMPLATE_PATH . '/404.php' );
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-archive.php
New file
@@ -0,0 +1,5 @@
<?php
require_once( ABSPATH . 'includes/page-category.php' );
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-category.php
New file
@@ -0,0 +1,85 @@
<?php
require_once( TEMPLATE_PATH . '/functions.php' );
if(PRETTY_URL){
    if(count($url_params) > 3 || count($url_params) < 2){
        // Category page only contains 3 parameter max,
        // If more than that or less than 2, the url is not valid
        // Show 404 screen
        require( ABSPATH . 'includes/page-404.php' );
        return;
    }
    if(isset($url_params[2]) && !is_numeric($url_params[2])){
        // Page number should be a number
        // Show 404 screen
        require( ABSPATH . 'includes/page-404.php' );
        return;
    }
}
$cur_page = 1;
if(isset($url_params[2])){
    $_GET['page'] = $url_params[2];
    if(!is_numeric($_GET['page'])){
        $_GET['page'] = 1;
    }
}
if(isset($_GET['page'])){
    $cur_page = htmlspecialchars($_GET['page']);
    if(!is_numeric($cur_page)){
        $cur_page = 1;
    }
}
if(get_setting_value('allow_slug_translation')){
    $_original_slug = get_translation_key($_GET['slug']);
    if($_original_slug && substr($_original_slug, 0, 5) == 'slug:'){
        // The slug have a translation
        $_GET['slug'] = str_replace('slug:', '', $_original_slug); // The slug variable is modified
    }
}
$category = Category::getBySlug($_GET['slug']);
if($category){
    if($lang_code != 'en'){
        // If use translation (localization)
        // Begin translate the content if has translation
        $translated_fields = get_content_translation('category', $category->id, $lang_code, 'all');
        if(!is_null($translated_fields)){
            $category->name = isset($translated_fields['name']) ? $translated_fields['name'] : $category->name;
            $category->description = isset($translated_fields['description']) ? $translated_fields['description'] : $category->description;
            $category->meta_description = isset($translated_fields['meta_description']) ? $translated_fields['meta_description'] : $category->meta_description;
        }
    }
    $items_per_page = get_setting_value('category_results_per_page');
    $data = get_game_list_category_id($category->id, $items_per_page, $items_per_page*($cur_page-1));
    $games = $data['results'];
    $total_games = $data['totalRows'];
    $total_page = $data['totalPages'];
    if($cur_page > $total_page){
        // Page number is more than actual maximum page
        require( ABSPATH . 'includes/page-404.php' );
        return;
    }
    if(isset($category->meta_description) && $category->meta_description != ''){
        $meta_description = $category->meta_description;
    } else {
        $meta_description = _t('Play %a Games', $category->name).' | '.SITE_DESCRIPTION;
    }
    $archive_title = _t($category->name);
    $page_title = _t('%a Games', $category->name).' | '.SITE_DESCRIPTION;
    if(file_exists(TEMPLATE_PATH . '/category.php')){
        // category.php is preferred over archive.php
        require( TEMPLATE_PATH . '/category.php' );
    } else {
        // For backward compatibility
        require( TEMPLATE_PATH . '/archive.php' );
    }
} else {
    require( ABSPATH . 'includes/page-404.php' );
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-full.php
New file
@@ -0,0 +1,76 @@
<?php
//New window page for gameplay
require_once( TEMPLATE_PATH . '/functions.php' );
if ( !isset($_GET['slug']) || !$_GET['slug'] ) {
    require( ABSPATH . 'includes/page-404.php' );
    return;
}
$_GET['slug'] = htmlspecialchars($_GET['slug']);
$game = Game::getBySlug( $_GET['slug'] );
if($game){
    if($game->source == 'self' && get_setting_value('splash')){
        require( ABSPATH . 'includes/page-splash.php' );
        return;
    }
    $page_title = $game->title;
    $meta_description = str_replace(array('"', "'"), "", strip_tags($game->description));
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title><?php echo $page_title ?></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
        <meta name="description" content="<?php echo $meta_description ?>">
        <meta name="robots" content="noindex">
        <style type="text/css">
            body {
                color: #eee;
                line-height: 1.43;
                position: inherit;
                margin: 0;
                padding: 0;
                background-color: #000;
                overflow: hidden;
                height: 100%;
            }
            #game-content {
                position: absolute;
                top: 0;
                left: 0;
                width: 0;
                height: 0;
                overflow: hidden;
                max-width: 100%;
                max-height: 100%;
                min-width: 100%;
                min-height: 100%;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <?php
        $url = esc_url($game->url);
        if($game->source == 'gamedistribution'){
            //GameDistributon new url
            $url .= '?gd_sdk_referrer_url='.get_permalink('full', $game->slug);
        }
        ?>
        <iframe id="game-content" frameborder="0" allow="autoplay" allowfullscreen="" seamless="" scrolling="no" src="<?php echo $url ?>"></iframe>
    </body>
    </html>
    <?php
} else {
    require( ABSPATH . 'includes/page-404.php' );
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-game.php
New file
@@ -0,0 +1,52 @@
<?php
require_once( TEMPLATE_PATH . '/functions.php' );
// if ( !isset($_GET['slug']) || !$_GET['slug'] ) {
//     require( ABSPATH . 'includes/page-homepage.php' );
//     return;
// }
if(count($url_params) != 2){
    // The number of parameter is not match
    require( ABSPATH . 'includes/page-404.php' );
    return;
}
$_GET['slug'] = htmlspecialchars($_GET['slug']);
Game::update_views( $_GET['slug'] );
$game = Game::getBySlug( $_GET['slug'] );
if($game && !$game->published){
    // This game is drafted
    if(is_login() && USER_ADMIN){
        // Show message for admin user
        echo '<div class="alert alert-warning alert-draft" style="z-index: 1000;">The game has not been published yet and is currently in draft mode.</div>';
    } else {
        $game = null;
        // Show 404 page for visitor
    }
}
if($game){
    if($lang_code != 'en'){
        // If use translation (localization)
        // Begin translate the content if has translation
        $translated_fields = get_content_translation('game', $game->id, $lang_code, 'all');
        if(!is_null($translated_fields)){
            $game->title = isset($translated_fields['title']) ? $translated_fields['title'] : $game->title;
            $game->description = isset($translated_fields['description']) ? $translated_fields['description'] : $game->description;
            $game->instructions = isset($translated_fields['instructions']) ? $translated_fields['instructions'] : $game->instructions;
        }
    }
    $page_title = $game->title . ' | '.SITE_DESCRIPTION;
    $meta_description = str_replace(array('"', "'"), "", strip_tags($game->description));
    require( TEMPLATE_PATH . '/game.php' );
} else {
    require( ABSPATH . 'includes/page-404.php' );
}
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-homepage.php
New file
@@ -0,0 +1,10 @@
<?php
require_once( TEMPLATE_PATH . '/functions.php' );
$page_title = get_site_info('title');
$meta_description = get_site_info('meta_description');
require( TEMPLATE_PATH . '/home.php' );
?>
CloudArcade/cloudarcade/cloudarcade/includes/page-login.php
New file
@@ -0,0 +1,248 @@
<?php
if(is_login()){
    $user_data = get_user($_POST['username']);
    if($user_data['role'] === 'admin'){
        header('Location: '.DOMAIN.'admin/dashboard.php');
        return;
    } else {
        header('Location: '.get_permalink('user', $_SESSION['username']));
        return;
    }
}
if (!isset($url_params)) {
    // $url_params is undefined, which means that page-login.php is being loaded from admin.php instead of index.php.
    // $url_params is handled in index.php.
    $url_params = ['login'];
}
$errors = array();
if (defined('GOOGLE_LOGIN')){
    if(isset($_POST['credential'])){
        $payload = json_decode(base64_decode(str_replace('_', '/', str_replace('-','+',explode('.', $_POST['credential'])[1]))), true);
        if(isset($payload['sub'])){
            $username = str_replace(' ', '-', $payload['name']);
            $user_data = get_user($username);
            if(!$user_data){
                //User not exist
                //Register new user
                $user = new User;
                $_POST['username'] = $username;
                $_POST['password'] = password_hash($payload['sub'], PASSWORD_DEFAULT);
                $_POST['email'] = $payload['email'];
                $_POST['birth_date'] = date('Y-m-d');
                $_POST['gender'] = 'unset';
                $user->storeFormValues($_POST);
                $user->insert();
            }
            //
            $_POST['username'] = $username;
            $_POST['password'] = $payload['sub'];
            $_POST['login'] = true;
            $_POST['remember'] = true;
        }
    }
}
if ( isset( $_POST['login'] ) ) {
    $user_data = get_user($_POST['username']);
    if($user_data){
        if(password_verify($_POST['password'], $user_data['password'])){
            $_SESSION['username'] = $_POST['username'];
            if(isset($_POST['remember'])){
                CA_Auth::insert(str_encrypt($_SESSION['username'], 'f'));
            }
            if($user_data['role'] === 'admin'){
                header('Location: '.DOMAIN.'admin/dashboard.php');
                update_login_history('success');
                return;
            } else {
                header('Location: '.get_permalink('user', $_SESSION['username']));
                return;
            }
        }
    }
    $errors[] = _t('Incorrect username or password.');
}
if (isset($_POST['login'])) {
    $timer            = time() - 30;
    $ip_address      = getIpAddr();
    // Getting total count of hits on the basis of IP
    $conn = open_connection();
    $sql = "SELECT count(*) FROM loginlogs WHERE TryTime > :timer and IpAddress = :ip_address";
    $st = $conn->prepare($sql);
    $st->bindValue(":timer", $timer, PDO::PARAM_INT);
    $st->bindValue(":ip_address", $ip_address, PDO::PARAM_STR);
    $st->execute();
    $totalRows = $st->fetchColumn();
    $total_count     = $totalRows;
    if ($total_count == 10) {
        $errors[] = _t('To many failed login attempts. Please login after 30 sec.');
    } else {
        $total_count++;
        $rem_attm = 10 - $total_count;
        if ($rem_attm == 0) {
            $errors[] = _t('To many failed login attempts. Please login after 30 sec.');
        } else {
            $errors[] = _t('%a attempts remaining.', $rem_attm);
        }
        $try_time = time();;
        $sql = "INSERT INTO loginlogs(IpAddress,TryTime) VALUES(:ip_address, :try_time)";
        $st = $conn->prepare($sql);
        $st->bindValue(":ip_address", $ip_address, PDO::PARAM_STR);
        $st->bindValue(":try_time", $try_time, PDO::PARAM_INT);
        $st->execute();
    }
}
function update_login_history($status = 'null'){
    $ip_address = getIpAddr();
    $data = array(
        'username' => $_POST['username'],
        'password' => '***',
        'date' => date("Y-m-d H:i:s"),
        'status' => $status,
        'agent' => 'null',
        'country' => 'null',
        'city' => 'null',
    );
    if($_SERVER['HTTP_USER_AGENT']){
        $data['agent'] = $_SERVER['HTTP_USER_AGENT'];
    }
    $conn = open_connection();
    $sql = "INSERT INTO login_history(ip, data) VALUES(:ip_address, :data)";
    $st = $conn->prepare($sql);
    $st->bindValue(":ip_address", $ip_address, PDO::PARAM_STR);
    $st->bindValue(":data", json_encode($data), PDO::PARAM_STR);
    $st->execute();
    $sql = "SELECT * FROM login_history";
    $st = $conn->prepare($sql);
    $st->execute();
    $count = $st->rowCount();
    if($count > 100){
        $sql = "DELETE FROM login_history ORDER BY id ASC LIMIT 10";
        $st = $conn->prepare($sql);
        $st->execute();
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title><?php _e('Login') ?> | <?php echo SITE_TITLE ?></title>
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="robots" content="noindex">
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN ?>/vendor/bootstrap5/css/bootstrap.min.css" />
        <!-- Font Awesome icons (free version)-->
        <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous" defer>
        <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN ?>admin/style/admin.css">
        <?php
        if(file_exists( ABSPATH . TEMPLATE_PATH . '/css/style.css')){
            echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/css/style.css">';
        } elseif(file_exists( ABSPATH . TEMPLATE_PATH . '/style/style.css')){
            echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/style/style.css">';
        }
        if(file_exists( ABSPATH . TEMPLATE_PATH . '/css/custom.css')){
            echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/css/custom.css">';
        } elseif(file_exists( ABSPATH . TEMPLATE_PATH . '/style/custom.css')){
            echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/style/custom.css">';
        }
        if(defined('GOOGLE_LOGIN')){
            echo '<script src="https://accounts.google.com/gsi/client" async defer></script>';
        }
        ?>
    </head>
    <body class="login-body">
        <div class="login-container">
            <div class="login-form">
                <div class="container">
                    <div class="login-logo text-center">
                        <img src="<?php echo DOMAIN ?>images/login-logo.png">
                    </div>
                    <?php
                    if(count($url_params) == 1) {
                    ?>
                        <form method="POST" enctype="multipart/form-data">
                            <?php
                            if(count($errors) > 0){
                                foreach ($errors as $msg) {
                                    show_alert($msg, 'warning');
                                }
                            }
                            if(isset($_SESSION['message'])){
                                // Come from registration
                                show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
                                unset($_SESSION['message']);
                            }
                            ?>
                            <input type="hidden" name="login" value="true" />
                            <div class="mb-3">
                                <input type="text" id="username" name="username" placeholder="<?php _e('Username') ?>" class="form-control" value="" required>
                            </div>
                            <div class="mb-3">
                                <input type="password" id="password" name="password" autocomplete="new-password" placeholder="<?php _e('Password') ?>" class="form-control" value="" required>
                            </div>
                            <div class="form-check">
                                <input type="checkbox" class="form-check-input" name="remember" id="remember-me" checked>
                                <label class="form-check-label" for="remember-me"><?php _e('Remember me') ?></label>
                            </div>
                            <br>
                            <div class="text-center">
                                <button type="submit" class="btn btn-info btn-block"><?php _e('Login') ?></button>
                            </div>
                            <?php if(defined('GOOGLE_LOGIN')){
                                render_google_login_btn();
                            } ?>
                            <div class="login-links mt-3">
                            <?php if(get_setting_value('user_register')){ ?>
                                <div class="text-center link-register"><?php _e('Or') ?> <a href="<?php echo get_permalink('register') ?>"><?php _e('Register') ?></a></div>
                            <?php } ?>
                            <?php if(get_plugin_info('mailer') && get_plugin_info('forgot-password') && get_pref_bool('forgot-password-enabled')){ ?>
                                <div class="text-center link-forgot-password"><a href="<?php echo get_permalink('login', 'forgot') ?>"><?php _e('Forgot password?') ?></a></div>
                            <?php } ?>
                            </div>
                            <div class="text-center mt-3"><a href="<?php echo DOMAIN ?>">< <?php _e('Back to Home') ?></a></div>
                        </form>
                    <?php
                    } else if(count($url_params) == 2 && $url_params[1] == 'forgot') {
                        if(get_plugin_info('mailer') && get_plugin_info('forgot-password') && get_pref_bool('forgot-password-enabled')){
                            if(!isset($_POST['action'])){
                            ?>
                            <form method="post" enctype="multipart/form-data">
                                <input type="hidden" name="action" value="forgot-password">
                                <div class="mb-3">
                                    <input type="email" class="form-control" name="email" value="" placeholder="Your email" required>
                                </div>
                                <div class="text-center">
                                    <button class="btn btn-primary btn-sm"><?php _e('Request a new password') ?></button>
                                </div>
                            </form>
                            <?php
                            } else {
                                if(isset($_POST['email'])){
                                    require_once get_plugin_info('forgot-password')['path'] . '/fp_req.php';
                                    fp_req_password($_POST['email']);
                                    show_alert('New password sent to your mail.', 'success');
                                }
                            }
                            ?>
                            <div class="text-center mt-3"><a href="<?php echo get_permalink('login') ?>">< <?php _e('Back to Login') ?></a></div>
                            <?php
                        }
                    }
                    ?>
                </div>
            </div>
        </div>
        <script type="text/javascript" src="<?php echo DOMAIN ?>js/jquery-3.6.2.min.js"></script>
        <script type="text/javascript" src="<?php echo DOMAIN ?>/vendor/bootstrap5/js/bootstrap.min.js"></script>
    </body>
</html>
Diff truncated after the above file
CloudArcade/cloudarcade/cloudarcade/includes/page-page.php CloudArcade/cloudarcade/cloudarcade/includes/page-post.php CloudArcade/cloudarcade/cloudarcade/includes/page-register.php CloudArcade/cloudarcade/cloudarcade/includes/page-search.php CloudArcade/cloudarcade/cloudarcade/includes/page-splash.php CloudArcade/cloudarcade/cloudarcade/includes/page-tag.php CloudArcade/cloudarcade/cloudarcade/includes/page-user-edit.php CloudArcade/cloudarcade/cloudarcade/includes/page-user-profile.php CloudArcade/cloudarcade/cloudarcade/includes/page-user.php CloudArcade/cloudarcade/cloudarcade/includes/plugin.php CloudArcade/cloudarcade/cloudarcade/includes/rank.json CloudArcade/cloudarcade/cloudarcade/includes/sessions.php CloudArcade/cloudarcade/cloudarcade/includes/statistics.php CloudArcade/cloudarcade/cloudarcade/includes/sub-folder.php CloudArcade/cloudarcade/cloudarcade/includes/user.php CloudArcade/cloudarcade/cloudarcade/includes/version.php CloudArcade/cloudarcade/cloudarcade/includes/vote.php CloudArcade/cloudarcade/cloudarcade/includes/widgets.php CloudArcade/cloudarcade/cloudarcade/index.php CloudArcade/cloudarcade/cloudarcade/init.php CloudArcade/cloudarcade/cloudarcade/install.php CloudArcade/cloudarcade/cloudarcade/js/ads.js CloudArcade/cloudarcade/cloudarcade/js/api.js CloudArcade/cloudarcade/cloudarcade/js/chart/Chart.min.js CloudArcade/cloudarcade/cloudarcade/js/chart/stats.js CloudArcade/cloudarcade/cloudarcade/js/chart/utils.js CloudArcade/cloudarcade/cloudarcade/js/comment-system.js CloudArcade/cloudarcade/cloudarcade/js/jquery-3.6.2.min.js CloudArcade/cloudarcade/cloudarcade/js/jquery-comments.min.js CloudArcade/cloudarcade/cloudarcade/js/jquery-ui.min.js CloudArcade/cloudarcade/cloudarcade/js/jquery.nestable.js CloudArcade/cloudarcade/cloudarcade/js/menu.js CloudArcade/cloudarcade/cloudarcade/js/script.js CloudArcade/cloudarcade/cloudarcade/js/stats.js CloudArcade/cloudarcade/cloudarcade/site-settings.php CloudArcade/cloudarcade/cloudarcade/sitemap.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.auto.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload-legacy.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.composer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.func.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.includes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.kses.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.path.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.safe-includes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Arborize.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrCollections.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Background.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Border.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Color.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Composite.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Font.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Ident.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Length.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Multiple.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Number.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Percentage.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/URI.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Clone.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Enum.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Bool.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Class.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Color.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ContentEditable.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ID.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Length.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Pixels.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Integer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Lang.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Switch.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Text.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Host.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv4.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv6.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Background.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BdoDir.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BgColor.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BoolToCSS.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Border.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgRequired.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgSpace.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Input.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Lang.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Length.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Name.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/NameSync.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Nofollow.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeEmbed.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeObject.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeParam.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ScriptRequired.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetBlank.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoopener.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoreferrer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Textarea.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTypes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrValidator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Bootstrap.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/CSSDefinition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Chameleon.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Custom.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Empty.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/List.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Optional.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Required.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/StrictBlockquote.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Table.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Config.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Exception.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Validator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedClasses.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedFrameTargets.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRel.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRev.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ClassUseCDATA.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultImageAlt.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImage.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImageAlt.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultTextDir.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.EnableID.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ForbiddenClasses.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ID.HTML5.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklist.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklistRegexp.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefix.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefixLocal.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.AutoParagraph.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.Predicate.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowDuplicates.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyRemoveScript.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LegacyEntityDecoder.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Forms.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoopener.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoreferrer.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/info.ini CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ContentSets.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Context.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Definition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Memory.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Null.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/CSS/4.13.0,4114918a13a428a8482a8a449792a5a8747582b5,1.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.13.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.15.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/README CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.13.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.15.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCacheFactory.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Doctype.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DoctypeRegistry.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ElementDef.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Encoder.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup/entities.ser CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityParser.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorCollector.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorStruct.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Exception.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/YouTube.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Generator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLDefinition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Bdo.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/CommonAttributes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Edit.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Forms.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Hypertext.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Iframe.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Image.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Legacy.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/List.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Name.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Nofollow.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Object.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Presentation.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Proprietary.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Ruby.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeEmbed.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeObject.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeScripting.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Scripting.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/StyleAttribute.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tables.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Target.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetBlank.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoopener.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoreferrer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Text.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Name.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Proprietary.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Strict.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTML.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModuleManager.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/IDAccumulator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/AutoParagraph.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/DisplayLinkURI.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/Linkify.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/PurifierLinkify.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveEmpty.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/SafeObject.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language/messages/en.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/LanguageFactory.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Length.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DOMLex.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DirectLex.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/PH5P.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Comment.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Element.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Text.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PercentEncoder.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/CSSDefinition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.css CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.js CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/HTMLDefinition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyList.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyListIterator.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Queue.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Composite.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Core.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/FixNesting.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/MakeWellFormed.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/RemoveForeignElements.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/ValidateAttributes.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHash.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHashParser.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Font.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Simple.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Comment.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Empty.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/End.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Start.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Tag.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Text.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TokenFactory.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URI.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIDefinition.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternal.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternalResources.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableResources.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/HostBlacklist.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/MakeAbsolute.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/Munge.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/SafeIframe.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIParser.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/data.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/file.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/ftp.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/http.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/https.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/mailto.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/news.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/nntp.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/tel.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URISchemeRegistry.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/UnitConverter.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Flexible.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Native.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParserException.php CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Zipper.php CloudArcade/cloudarcade/cloudarcade/vendor/MobileDetect/MobileDetect.php CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css.map CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.bundle.min.js CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js.map CloudArcade/cloudarcade/read-me.txt CloudArcade/cloudarcade/unpack.php CloudArcade/documentation/documentation.html CloudArcade/documentation/setup.html